TD 9 - Equation de Schrödinger Dans Un Milieu Périodique (2008-2009)
TD 9 - Equation de Schrödinger Dans Un Milieu Périodique (2008-2009)
TD 9 - Equation de Schrödinger Dans Un Milieu Périodique (2008-2009)
—
PHYSIQUE NUMÉRIQUE
TD no 9
Les rappels qui suivent peuvent lus dans un premier temps « en diagonale », en sautant le détail
de démonstrations. On reprendra ensuite plus précisément ce dont on aura besoin. . . au besoin !
Lors du TD5, on a vu que l’application de méthodes numériques « brutes » permettait de résoudre
l’équation de Schrödinger à une particule et à une dimension sans difficulté majeure, mais que la
généralisation de ce genre de procédure à d’autres systèmes (par exemple, tri-dimensionnels) se heurtait
presqu’immédiatement au « mur du temps de calcul1 » : les ordinateurs n’ont pas une puissance infinie
et la durée moyenne de la vie humaine est très finie ! On vous a, alors, esquissé d’autres méthodes plus
ou moins approchées telles que Hartree-Fock ou la théorie de la fonctionnelle densité2 .
Le but du présent exercice est d’explorer quelques solutions dans le cas d’un système périodique
comme, par exemple, un électron dans un matériau cristallin. Un solide réel n’est bien sûr jamais
un monocristal parfaitement périodique et infini, mais, en général, 1o l’agitation thermique est de
petite amplitude par rapport aux distances interatomiques, 2o si l’échantillon comporte peu d’impu-
retés, celles-ci le perturbent fort peu et enfin, 3o même si le solide est constitué de microcristaux
très petits, d’environ quelques µm de dimensions latérales par exemple, on a, dans chaque direction,
plusieurs milliers d’atomes : l’approximation de l’échantillon infini est donc loin d’être désastreuse.
L’hypothèse de périodicité permet d’introduire un arsenal théorique très puissant ce qui explique sa
quasi-omniprésence en physique de la matière condensée.
A– Un milieu uni-dimensionnel.
Pour introduire (ou rappeler) les notions et notations nécessaires dans un cadre pas trop lourdement
formel, nous étudierons d’abord un milieu à une dimension, pour généraliser ensuite.
1- Le théorème de Bloch3 .
Si le milieu est périodique de période a, le potentiel d’interaction de la particule considérée -mettons,
un électron- avec le milieu est également périodique
V (x + a) = V (x), ∀x
1
mais en appliquant la périodicité à V , on obtient :
!
h̄2 2
− ∇ + V (x) ψ(x + a) = E ψ(x + a)
2m
autrement dit ψ(x + a) est aussi une solution en x du même problème aux valeurs propres ; la seule
façon d’y parvenir est que :
ψ(x + a) = λψ(x)
avec |λ|2 = 1 à cause de la normalisation de la fonction d’onde, soit : λ = eiα , α ∈ IR. On peut poser :
α = ka ce qui définit k, soit finalement :
ψk (x + a) = eika ψk (x)
où l’indice k indique qu’il s’agit d’une solution pour k. Ainsi, pour toute fonction d’onde solution de
l’équation de Schrödinger, il existe un nombre k tel que la translation par le paramètre de maille a
est équivalente à une multiplication par le facteur de phase eika : c’est ce qu’on appelle le théorème
de Bloch.
On peut appliquer ce théorème à la fonction d’onde ψk+ 2π :
a
i(k+ 2π )a
ψk+ 2π (x + a) = e a ψk+ 2π (x) = eika ψk+ 2π (x)
a a a
c’est-à-dire que la solution ψk+ 2π est définie par le même facteur de phase que ψk , c’est donc la même,
a
2π π π
il y a périodicité de période κ = en k : on peut se restreindre à des solutions pour k ∈ [− , ].
a a a
C’est la première zone de Brillouin. L’espace des k est l’espace réciproque.
Une autre façon d’écrire le théorème de Bloch est de remarquer que la fonction d’onde ψk (x) peut
s’écrire comme le produit d’un terme de phase eikx et d’une fonction périodique uk (x) dont la période
est celle du milieu :
ψk (x) = eikx uk (x) (2)
de telle façon que :
2
Oublions un instant la périodicité du système : dans tous les cas, à la fois le potentiel et la fonction
d’onde peuvent s’écrire comme une transformée de Fourier :
Z +∞ Z +∞
iqx
V (x) = V̂ (q) e dq et ψ(x) = ψ̂(q) eiqx dq
−∞ −∞
d2 +∞ +∞ +∞ +∞
Z Z Z Z
′′ ′
− ψ̂(q) eiqx dq + V̂ (q ′′ ) eiq x dq ′′ × ψ̂(q ′ ) eiq x dq ′ = E ψ̂(q) eiqx dq
dx2 −∞ −∞ −∞ −∞
En effectuant la dérivation sous la première intégrale et en posant dans les deux intégrales suivantes
q = q ′ + q ′′ pour éliminer q ′′ , on obtient :
Z +∞ Z +∞ Z +∞ Z +∞
2 iqx iqx
q ψ̂(q) e dq + ′
V̂ (q − q ) ψ̂(q ) dq ′ ′
e dq = E ψ̂(q) eiqx dq (4)
−∞ −∞ −∞ −∞
q 2 ψ̂(q) +
X
V̂ (q − ℓκ) ψ̂(ℓκ) = E ψ̂(q), ∀q (6)
ℓ
En reprenant le théorème de Bloch et en écrivant les termes périodiques uk (x) comme des séries de
Fourier, on obtient :
′
ψk (x) = eikx χℓ′ ,k eiκℓ x
X
ℓ′
soit : Z X
′ X
ψ̂k (q) = χℓ′ ,k ei(k+ℓ κ+q)x dx = χℓ′ ,k δ(k + ℓ′ κ + q)
ℓ′ ℓ′
ainsi, q ne peut prendre que des valeurs discrètes −k − ℓ′ κ. L’équation (6) devient alors :
Si le nombre de valeurs que peuvent prendre ℓ et ℓ′ est petit, la matrice dont on doit chercher les
valeurs propres est elle-même de taille réduite et le problème aisé. Au contraire, si le potentiel est très
« carré » ou comporte des pics très pointus, alors il faudra faire des développements de Fourier jusqu’à
des ordres élevés et on aura perdu le bénéfice de ce beau travail. . .
3- Bases de fonctions « adaptées ».
3
Écrire le potentiel périodique V (x) et la fonction d’onde comme des séries de Fourier a le mérite
de la rigueur ; toutefois, si ces séries doivent être tronquées à un ordre faible, cette belle rigueur n’est
plus qu’apparente : cela revient en effet à faire une approximation. . . parfois parfaitement abusive !
Le développement d’une fonction périodique en série de Fourier n’est pas le seul possible, on peut
choisir des fonctions autres que les fonctions trigonométriques : à l’intérieur de la maille, on peut
choisir d’exprimer la fonction d’onde ψk (x) comme une somme de gaussiennes ou d’exponentielles,
voire autre chose encore, ou une combinaison de fonctions diverses et considérer que ce développement
se répète de maille en maille. Le but est évidemment que le nombre de termes dans le développement
reste aussi réduit que possible en conservant bien sûr une description aussi bonne que possible. Ce
sont alors les coefficients du développement qui deviennent les inconnues du problème ; en utilisant le
théorème de Bloch, on écrit donc :
ψk (x) ≃ eikx
X
cℓ,k ϕℓ,k (x)
ℓ
où les fonctions ϕℓ,k sont supposées connues, ainsi que, bien sûr, leurs dérivées premières et secondes.
Ce développement est valide dans l’intervalle x ∈ [0, a] et se répète dans les autres mailles ; on cherche
les coefficients cℓ,k et l’énergie associée. On applique alors une fois de plus l’équation de Schrödinger,
de sorte que :
!
d2 ikx
cℓ,k ϕℓ,k (x) + V (x) eikx cℓ,k ϕℓ,k (x) = Ek eikx
X X X
− 2 e cℓ,k ϕℓ,k (x), ∀x
dx ℓ ℓ ℓ
2
X X
cℓ,k k ϕℓ,k (x) − 2ik ϕ′ℓ,k (x) − ϕ′′ℓ,k (x) + V (x) ϕℓ,k (x) = Ek cℓ,k ϕℓ,k (x), ∀x
ℓ ℓ
Pour se débarrasser de la dépendance en x, on peut multiplier par ϕ∗ℓ′ ,k (x) et intégrer sur x :
Z ( )
2
X
ϕ∗ℓ′ ,k (x) cℓ,k k ϕℓ,k (x) − 2ik ϕ′ℓ,k (x) − ϕ′′ℓ,k (x) + V (x) ϕℓ,k (x) dx
ℓ
Z ( )
X
= ϕ∗ℓ′ ,k (x) Ek cℓ,k ϕℓ,k (x) dx
ℓ
Posons :
Z Z Z
Sℓ′ ,ℓ = ϕ∗ℓ′ ,k (x)ϕℓ,k (x) dx, Sℓ′ ′ ,ℓ = ϕ∗ℓ′ ,k (x)ϕ′ℓ,k (x) dx, Sℓ′′′ ,ℓ = ϕ∗ℓ′ ,k (x)ϕ′′ℓ,k (x) dx,
Z
et Wℓ′ ,ℓ = ϕ∗ℓ′ ,k (x)V (x)ϕℓ,k (x) dx
on obtient : X X
Hℓ′ ,ℓ cℓ,k = Ek Sℓ′ ,ℓ cℓ,k
ℓ ℓ
soit, en notations matricielles :
Hk · Ck = Ek Sk · Ck
un problème aux valeurs propres généralisé : les matrices Hk et Sk sont connues, et l’on cherche Ek
et Ck pour toutes les valeurs de k dans la première zone de Brillouin.
Ces notations sont, certes, assez lourdes, mais, si le choix des fonctions de base est bien adapté,
celles-ci sont relativement peu nombreuses et l’ordre de nos matrices reste raisonnable : on a donc bon
4
espoir, non pas de franchir, mais au moins de contourner le mur du temps de calcul mentionné au
début.
Reste maintenant à reprendre tout ceci à trois dimensions. . .
B– À trois dimensions.
1- Réseau direct, réseau réciproque et théorème de Bloch.
a3
a2
a1
Fig. 1 – Une maille du réseau direct et les trois vecteurs qui la définissent.
Une maille devient maintenant un volume défini par trois vecteurs ~a1 , ~a2 et ~a3 (fig. 1). La disposition
des atomes à l’intérieur de la maille est le motif qui se répète de maille en maille. Les coordonnées ~r
d’un point de l’espace direct par rapport à un référentiel quelconque sont la somme des coordonnées
~ de l’origine de la maille dans laquelle il se trouve et de ses coordonnées ρ
R ~ dans cette maille :
~ +ρ
~r = R ~
L’ensemble des origines des mailles forme un système régulier de points que l’on appelle le réseau
direct et R~ est appelé un vecteur du réseau direct. Si le référentiel que l’on utilise a son origine sur
~ est toujours la somme d’un nombre entiers de fois les trois vecteurs
l’origine d’une maille, le vecteur R
de base :
~ = n1~a1 + n2~a2 + n3~a3 ,
R n1 , n2 , n3 ∈ ZZ
2π
On a vu dans le A–1 que κ = jouait un rôle particulier ; à trois dimension, il est remplacé par
a
un triplet de vecteurs :
où |~a1~a2~a3 | désigne le produit mixte ~a1 · (~a2 ∧ ~a3 ) i.e. le volume de la maille. Il est aisé de réaliser que
De même que dans l’espace direct on avait construit le réseau direct, on peut maintenant construire
le réseau réciproque comme l’ensemble des extrémités des vecteurs du réseau réciproque (ou nœuds
du réseau réciproque) :
~ = p1~b1 + p2~b2 + p3~b3 ,
K p1 , p2 , p3 ∈ ZZ (8)
~ joue le même rôle que ℓκ précédemment.
Ce vecteur K
Le produit scalaire d’un vecteur du réseau direct par un vecteur du réseau réciproque donne :
~ ·K
R ~ = 2π(n1 p1 + n2 p2 + n3 p3 ) = 2πn, n ∈ ZZ
~ ~
un nombre entier de fois 2π, soit : eiK·R = 1.
La première zone de Brillouin est définie comme l’ensemble des points de l’espace réciproque qui
sont plus proches de l’origine que de n’importe quel autre point du réseau réciproque (fig. 2). Un
5
Vecteur du réseau réciproque
Noeuds du réseau réciproque
Vecteur de la 1ere zone de Brillouin
Vecteur quelconque
~ du
vecteur ~q de l’espace réciproque peut être de la sorte exprimé comme la somme d’un vecteur K
réseau réciproque et d’un vecteur ~k de la première zone de Brillouin :
~ + ~k
~q = K
Dans ce cadre, le théorème de Bloch affirme, sans surprise, que la fonction d’onde ψ~k (~r) s’écrit comme
~
le produit d’un terme de phase eik·~r par une fonction u~k (~r) qui a la périodicité du réseau direct :
~
ψ~k (~r) = eik·~r u~k (~r)
~k étant un vecteur de la première zone de Brillouin. Il est facile de se convaincre que l’équation
différentielle (3) peut se reécrire :
−∇2 u~k − 2i~k · ∇u
~ ~ + (k2 + V )u~ = Eu~
k k k
(9)
Autant dire que la résolution directe par « force brute » de cette équation risque de devenir assez
rapidement impossible. . .
~
K
C’est un peu plus compliqué que précédemment car les vecteurs d’onde deviennent de vrais vecteurs,
mais c’est formellement très similaire. Il s’agit d’un problème aux valeurs propres du type
A~k X~k = E~k X~k
où .
..
. .. .. .. ..
. . . . . .
.. ..
X~k = χK,
~ ~k , A~k = . V̂ (K
~ ′ − K)
~ ~ + ~k)2 + V̂ (~0) V̂ (K
~ ′ − K)
~
(K .
..
.. .. .. .. ..
. . . . . .
6
La dimension des matrices concernées dépend du nombre de termes dans les développements en séries
de Fourier : si par exemple, on peut se contenter de cinq termes dans chaque direction, cela donne
125 termes en tout, c’est nettement mieux que 106 ! Si au contraire, on a besoin de 100 termes dans
chaque direction, on n’a rien gagné du tout. . .
7
e) Résolve le problème aux valeurs propres en utilisant le sous-programme zheev décrit dans
l’Annexe I (un exemple d’utilisation est donné dans l’Annexe II).
f) Écrive les valeurs du potentiel, de sa transformée de Fourier et les cinq premières valeurs
propres dans des fichiers afin de tracer les courbes en fonction de ~k à l’aide de gnuplot.
4- On vérifiera que pour V = 0, on retrouve la courbe de l’électron libre comme dans l’Annexe
II. Faire ensuite le calcul pour V0 = 100, ρ = 0.1 et n = 2, 3, 4. Tracer les courbes V (x, y, z) et
~ (on pourra superposer les courbes pour des z différents). Tracer également les cinq premières
V̂ (K)
valeurs propres en fonction de |~k|. Tracer finalement la valeur de la bande interdite ou gap entre la
troisième et la quatrième valeur propre (on pourra utiliser dans gnuplot des commandes du type
plot ’fichier’ using 1:($7-$6) pour indiquer que l’on veut tracer la différence entre les colonnes
7 et 6 du fichier en fonction de la première colonne). Commentez.
π
0 a
5- Modifer le programme pour faire varier ~k entre 0 et πa (c’est-à-dire dans la direction
0 0
x + y). Tracer de nouveau les valeurs propres pour n = 4. Qu’y a-t-il de nouveau ?
6- Faire une copie du programme que l’on modifiera pour explorer systématiquement le plan
(kx , ky ). On pourra lancer le programme dans une fenêtre et continuer à travailler à la suite du TP
dans une autre fenêtre.
0.1 −0.1
7- Placer dans la maille deux atomes en 0.1 et −0.1 . On prendra ρ = 0.05 et V0 = 500.
0.1 −0.1
Essayer avec n = 4 et n = 5 dans la direction kx . Que se passe-t-il ?
B– Densités électroniques.
Jusqu’à présent, on ne s’est préoccupés que des énergies propres. Sachant que la densité électronique
en un point s’écrit :
ρ~k (x, y, z) = ψ~k∗ (x, y, z)ψ~k (x, y, z) = u~∗k (x, y, z)u~k (x, y, z)
trouvez un moyen d’en tracer quelques unes. On sait que zhevv rend une matrice A telle que ak,k′ est
le k-iéme élément du k′ -ième vecteur propre. On pourra utiliser à cet effet le sous-programme zfftb
qui fonctionne exactement comme zfftf, mais fait la transformée de Fourier inverse. Pour commencer,
reprendre le réseau à un atome, avec n = 4, V0 = 100, ρ = 0.1 en suivant l’axe des kx .
Annexe I
Sous-programme de recherche de valeurs propres
Définition des paramètres de zheev telle que fournie par la documentation LAPACK :
8
COMPLEX*16 A( LDA, * ), WORK( * )
* ..
*
* Purpose
* =======
*
* ZHEEV computes all eigenvalues and, optionally, eigenvectors of a
* complex Hermitian matrix A.
*
* Arguments
* =========
*
* JOBZ (input) CHARACTER*1
* = ’N’: Compute eigenvalues only;
* = ’V’: Compute eigenvalues and eigenvectors.
*
* UPLO (input) CHARACTER*1
* = ’U’: Upper triangle of A is stored;
* = ’L’: Lower triangle of A is stored.
*
* N (input) INTEGER
* The order of the matrix A. N >= 0.
*
* A (input/output) COMPLEX*16 array, dimension (LDA, N)
* On entry, the Hermitian matrix A. If UPLO = ’U’, the
* leading N-by-N upper triangular part of A contains the
* upper triangular part of the matrix A. If UPLO = ’L’,
* the leading N-by-N lower triangular part of A contains
* the lower triangular part of the matrix A.
* On exit, if JOBZ = ’V’, then if INFO = 0, A contains the
* orthonormal eigenvectors of the matrix A.
* If JOBZ = ’N’, then on exit the lower triangle (if UPLO=’L’)
* or the upper triangle (if UPLO=’U’) of A, including the
* diagonal, is destroyed.
*
* LDA (input) INTEGER
* The leading dimension of the array A. LDA >= max(1,N).
*
* W (output) DOUBLE PRECISION array, dimension (N)
* If INFO = 0, the eigenvalues in ascending order.
*
* WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
* On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
*
* LWORK (input) INTEGER
* The length of the array WORK. LWORK >= max(1,2*N-1).
* For optimal efficiency, LWORK >= (NB+1)*N,
* where NB is the blocksize for ZHETRD returned by ILAENV.
*
* If LWORK = -1, then a workspace query is assumed; the routine
* only calculates the optimal size of the WORK array, returns
* this value as the first entry of the WORK array, and no error
* message related to LWORK is issued by XERBLA.
*
* RWORK (workspace) DOUBLE PRECISION array, dimension (max(1, 3*N-2))
*
9
* INFO (output) INTEGER
* = 0: successful exit
* < 0: if INFO = -i, the i-th argument had an illegal value
* > 0: if INFO = i, the algorithm failed to converge; i
* off-diagonal elements of an intermediate tridiagonal
* form did not converge to zero.
*
Annexe II
Résolution « brute » à une dimension
Ci-dessous, un programme qui résoud directement l’équation (3) par éléments finis : vous pourrez
aisément vérifier en le lisant qu’il en est bien ainsi.
program schrod
! solve Schrodinger’s equation for one electron in a 1-D periodic potential
! using Bloch’s theorem
implicit none
integer, parameter :: n=100 ! number of discretization points
integer, parameter :: nk=30 ! number of reciprocal space points
double precision, dimension(n) :: v, e ! potential & eigenvalues
double complex, dimension(n,n) :: h ! Hermitian Matrix
double precision :: k ! wave vector
double precision, parameter :: pi = acos(-1.d0) ! guess what...
double complex, parameter :: zi = (0.0d0,1.0d0) ! another of the kind
double precision, parameter :: dx = 1.d0/n ! stepsize
! useful junk
integer :: i, j, info
double precision, dimension(3*n-2) :: rwork
double complex, dimension(2*n-1) :: work
open(10,file=’schrod.val’) ; open(20,file=’schrod.vec’)
do j = 0, nk ! loop wave vectors
k = j*pi/nk
10
subroutine mk_pot(n, v)
implicit none
integer, intent(in) :: n
double precision, dimension(n), intent(out) :: v
integer :: i
!v = 0.d0 ! free electron
!v(1:n/2) = 0.d0 ; v(n/2+1:n) = 1.d1 ! step
do i = 1, n
v(i) = -20.d0*exp(-(dble(i-2*n/3)/(1.d-1*n))**2) &
-70.d0*exp(-(dble(i-n/3)/(5.d-2*n))**2)
enddo ! double well
La figure ci-desous donne les valeurs propres en fonction de k dans de la cas de l’électron libre
(potentiel uniformément nul) et dans le cas d’un potentiel en forme de marche. Dans le premier cas,
h̄2 k2
l’énergie de l’électron est simplement son énergie cinétique et le concept de zone de Brillouin n’a
2m
pas de sens : on obtient donc une parabole repliée sur elle-même parce que le programme « ne sait
pas » qu’il n’y a pas de zone de Brillouin. . .
Dans le cas de la marche, on voit apparaı̂tre une bande interdite (ou gap en bon franglais) en bord
de zone.
Free electron
Step
100
Free 1
Free 2
Free 3
Step 1
80 Step 2
Step 3
60
Energy
40
20
Gap
0
0 0.5 1 1.5 2 2.5 3
k
Les deux courbes ci-dessous montrent les densités |ψk (x)|2 = |uk (x)|2 (puisque eikx est de norme
unité) pour les deux premiers états du potentiel-marche : on constate que pour les énergies les plus
faibles (k ∼ 0, c’est-à-dire le centre de zone de Brillouin) la densité de présence est plus grande là
où le potentiel est le plus faible, mais lorsque la bande interdite est franchie en bord de zone, c’est le
contraire.
11
1 2
0.025 0.025
0.02 0.02
0.015 0.015
0.01 0.01
0.005 1 0.005 1
0.80.9
0.7 0.80.9
0.7
00 0.50.6 00 0.50.6
0.5 0.5
1 1.5 0.30.4
0.2
x 1 1.5 0.30.4
0.2
x
2 2
k 2.5 3 0 0.1 k 2.5 3 0 0.1
Le potentiel à double puits du programme a l’allure ci-dessous (à gauche) et les valeurs propres
correspondantes (à droite) :
80
0
1
70 2
3
−10 60
−20 50
40
−30
30
−40
20
−50 10
−60 0
−10
−70
−20
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.5 1 1.5 2 2.5 3
x k
Evidemment, l’électron est plutôt concentré dans le puits le plus profond quand l’énergie est basse
(on voit néanmoins une bosse secondaire correspondant au deuxième puits pour k = 0 sur la première
bande) et s’en dégage progressivement à mesure que l’énergie augmente.
12