Telechargé par abed ali

TD 9 - Equation de Schrödinger dans un milieu périodique (2008-2009)

publicité
Université Pierre et Marie Curie, Paris VI
Licence de physique
ENS Cachan
Physique fondamentale, PHYTEM
—
PHYSIQUE NUMÉRIQUE
TD no 9
Équation de Schrödinger dans un milieu périodique
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’impureté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.
I— Rappels et préliminaires théoriques pour une particule soumise à un potentiel périodique.
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
L’équation de Schrödinger s’écrit :
!
h̄2 2
∇ + V (x) ψ(x) = E ψ(x)
−
2m
La même équation peut s’écrire aussi en x + a :
!
h̄2 2
∇ + V (x + a) ψ(x + a) = E ψ(x + a)
−
2m
1
Soit, typiquement, rechercher les valeurs propres d’une matrice 106 × 106 .
Voir par exemple le polycopié.
3
Voir par exemple : J. M. Ziman, Theory of Solids Cambridge (1965), p. 15 et suiv.
2
1
(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
)a
i(k+ 2π
a
ψk+ 2π (x + a) = e
a
ψk+ 2π (x) = eika ψk+ 2π (x)
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 :
ψk (x + a) = eik(x+a) uk (x + a) = eika eikx uk (x) = eika ψk (x)
ce qui est la propriété voulue.
h̄2
= 1, l’équation de Schrödinger (1) et en utilisant
2m
l’équation de Bloch (2), on obtient sans difficulté l’équation différentielle :
En choisissant un système d’unités tel que
−u′′k (x) − 2ik u′k (x) + k2 uk (x) + V (x) uk (x) = Ek uk (x),
π π
∀k ∈ [− , ]
a a
(3)
qui doit être résolue pour toutes les valeurs de k dans la première zone de Brillouin.
Il est aisé de réaliser qu’une méthode de différences finies, comme dans le TD5, peut être une
approche pour traiter ce problème : on obtiendra de nouveau un problème de valeurs propres pour
chaque valeur du vecteur d’onde k dans la première zone de Brillouin4 . L’avantage par rapport à ce
qui avait été fait alors est que, grâce à la périodicité, on n’est plus gêné par la taille finie de l’intervalle
pour x : une maille, i.e. x ∈ [0, a], suffit. En revanche, le passage à trois dimensions risque fort de
poser les mêmes problèmes qu’avant !
2- Résolution dans l’espace réciproque.
4
Voir l’Annexe II
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 :
V (x) =
Z
+∞
iqx
V̂ (q) e
et
dq
ψ(x) =
−∞
Z
+∞
ψ̂(q) eiqx dq
−∞
Si l’on injecte ces expressions dans l’équation de Schrödinger, cela donne :
−
d2
dx2
Z
+∞
ψ̂(q) eiqx dq +
−∞
Z
+∞
′′
V̂ (q ′′ ) eiq x dq ′′ ×
−∞
Z
+∞
′
ψ̂(q ′ ) eiq x dq ′ = E
−∞
Z
+∞
ψ̂(q) eiqx dq
−∞
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
+∞
2
iqx
q ψ̂(q) e
dq +
Z
+∞ Z +∞
′
V̂ (q − q ) ψ̂(q ) dq
−∞
−∞
−∞
′
′
iqx
e
dq = E
Z
+∞
ψ̂(q) eiqx dq
(4)
−∞
Si on trouve des solutions ψ̂(q) et E telles que
q 2 ψ̂(q) +
Z
+∞
V̂ (q − q ′ ) ψ̂(q ′ ) dq ′ = E ψ̂(q),
∀q
(5)
−∞
elles seront également solution de l’équation (4).
Ce résultat appelle une première remarque : il n’est guère étonnant d’obtenir un produit de convolution dans l’espace réciproque, là où l’on avait un produit simple dans l’espace direct, ce n’est que
l’illustration d’un théorème bien connu. La deuxième remarque qui s’impose est que ce produit de
convolution est a priori plutôt génant pour un calcul numérique puisqu’il introduit un calcul d’intégral
supplémentaire qu’il faudra refaire pour chaque valeur de q ; imaginons cependant que V (x) = sin κx,
alors sa transformée de Fourier devient une somme de deux fonctions de Dirac : V̂ (q) = δ(q−κ)+δ(q+κ)
et le produit de convolution se réduit à peu de chose ! Ainsi, quand le potentiel peut être décrit par une
série de Fourier comportant un petit nombre de termes, sa transformée de Fourier devient la somme
d’un petit nombre de fonctions δ et l’équation (5) peut être une méthode moins mauvaise qu’il n’y
paraı̂ssait de prime abord pour résoudre le problème ; elle se reécrit :
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 :
X
′
ψk (x) = eikx
χℓ′ ,k eiκℓ x
ℓ′
soit :
ψ̂k (q) =
Z X
′
χℓ′ ,k ei(k+ℓ κ+q)x dx =
ℓ′
X
χℓ′ ,k δ(k + ℓ′ κ + q)
ℓ′
ainsi, q ne peut prendre que des valeurs discrètes −k − ℓ′ κ. L’équation (6) devient alors :
(ℓκ + k)2 χℓ,k +
X
V̂ [(ℓ′ − ℓ)κ] χℓ′ ,k = Ek χℓ,k
(7)
ℓ′
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
− 2
dx
X
ikx
e
X
!
cℓ,k ϕℓ,k (x) + V (x) eikx
ℓ
2
cℓ,k k ϕℓ,k (x) −
ℓ
X
cℓ,k ϕℓ,k (x) = Ek eikx
ϕ′′ℓ,k (x)
cℓ,k ϕℓ,k (x),
∀x
ℓ
ℓ
2ik ϕ′ℓ,k (x) −
X
+ V (x) ϕℓ,k (x)
= Ek
X
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
ϕ∗ℓ′ ,k (x)
(
X
2
cℓ,k k ϕℓ,k (x) −
ℓ
=
Z
(
ϕ∗ℓ′ ,k (x) Ek
Posons :
Sℓ′ ,ℓ =
Z
ϕ∗ℓ′ ,k (x)ϕℓ,k (x) dx,
X
−
ϕ′′ℓ,k (x)
+ V (x) ϕℓ,k (x)
)
dx
)
cℓ,k ϕℓ,k (x) dx
ℓ
=
Z
ϕ∗ℓ′ ,k (x)ϕ′ℓ,k (x) dx,
Wℓ′ ,ℓ =
Z
ϕ∗ℓ′ ,k (x)V (x)ϕℓ,k (x) dx
Sℓ′ ′ ,ℓ
et
2ik ϕ′ℓ,k (x)
Sℓ′′′ ,ℓ
=
Z
ϕ∗ℓ′ ,k (x)ϕ′′ℓ,k (x) dx,
où l’on a temporairement omis l’indice k. Posons encore :
Hℓ′ ,ℓ = k2 Sℓ′ ,ℓ − 2ik Sℓ′ ′ ,ℓ − Sℓ′′′ ,ℓ + Wℓ′ ,ℓ
on obtient :
X
Hℓ′ ,ℓ cℓ,k = Ek
ℓ
soit, en notations matricielles :
X
Sℓ′ ,ℓ cℓ,k
ℓ
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
~ est appelé un vecteur du réseau direct. Si le référentiel que l’on utilise a son origine sur
direct et R
~ 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π
jouait un rôle particulier ; à trois dimension, il est remplacé par
On a vu dans le A–1 que κ =
a
un triplet de vecteurs :
~b1 = 2π ~a2 ∧ ~a3 ,
|~a1~a2~a3 |
~b2 = 2π ~a3 ∧ ~a1 ,
|~a1~a2~a3 |
~b3 = 2π ~a1 ∧ ~a2
|~a1~a2~a3 |
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
~ai · ~bj = 2πδij ,
∀ i, j
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
~ = 2π(n1 p1 + n2 p2 + n3 p3 ) = 2πn,
R
~ ~
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
Mailles du réseau réciproque
Première zone de Brillouin
Fig. 2 – Première zone de Brillouin dans un réseau à deux dimensions.
~ 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 :
~ ~ + (k2 + V )u~ = Eu~
−∇2 u~k − 2i~k · ∇u
k
k
k
(9)
Autant dire que la résolution directe par « force brute » de cette équation risque de devenir assez
rapidement impossible. . .
C– Résolution dans l’espace réciproque.
L’équation (7) devient :
~ + ~k)2 χ ~ ~ +
(K
K,k
X
~ ′ − K)
~ χ ~ ′ ~ = E~ χ ~ ~
V̂ (K
k K,k
K ,k
(10)
~′
K
avec :
~
X
ψ~k (x) = eik·~r
~
iK·~
r
χK,
~ ~k e
~
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)
~

..
.
..
.
6
..
.
..
.
..
.
..
~ + ~k)2 + V̂ (~0) V̂ (K
~ ′ − K)
~
(K
.
..
..
..
.
.
.





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. . .
II— Résolution pratique
A– Développement en série de Fourier
1- On prendra pour commencer un réseau carré tel que






a
0
0






~a1 =  0  , ~a2 =  a  , ~a1 =  0 
0
0
a
explicitez les trois vecteurs ~b1 , ~b2 , ~b3 .
2- On considèrera un réseau à un seul atome par maille et le potentiel d’interaction sera dans
un premier temps modélisé par une exponentielle décroissante :
V (~r) = −V0 e−
|~
r−~
r0 |
ρ
(11)
où V0 est la profondeur du potentiel, ~r0 la position de l’atome et ρ l’extension de la zone où il interagit
avec l’électron.
~ en fonction de trois entiers p1 , p2 et p3 variant
L’équation (8) donne l’expression du vecteur K
chacun entre −n et n : pour numéroter les lignes et colonnes de la matrice A~k (a priori étiquetées par
~ on prendra pour indice
le vecteur K),
p = p1 + n + 1 + (2n + 1)(p2 + n) + (2n + 1)2 (p3 + n)
~ K
~ ′ de cette matrice sera en fait Ap,p′ .
qui varie entre 1 et m = (2n + 1)3 . Ainsi l’élément K,
Estimez m pour n = 2, 3, 4, 5 . . . Sachant que l’on va chercher les valeurs propres de la matrice
A~k (qui est m × m) pour un assortiment de valeurs de ~k et compte tenu de votre expérience en la
matière (cf TD 5), peut-on espérer aller à des ordres très élevés dans les séries de Fourier ?
3- Écrire un programme qui
a) Calcule les vecteurs ~a1 , ~a2 , ~a3 pour un réseau cubique (on prendra a = 1), puis les vecteurs
de base du réseau réciproque ~b1 , ~b2 , ~b3 .
b) Produise un potentiel de la forme (11) à l’intérieur d’une maille (on placera l’atome au
centre de la maille et l’on prévoira d’entrer V0 et ρ au clavier) et en stocke les valeurs dans un tableau :
double complex, dimension(-n:n,-n:n,-n:n) :: v avec le pas de discrétisation approprié.
c) Calcule sa transformée de Fourier tri-dimensionnelle. On prendra garde à centrer celleci convenablement. On tiendra compte du fait que dans l’approximation de la discrétisation, il faut
écrire :
Z
X
. . . dx ∼
. . . δx
En double précision, on pourra utiliser les sous-programme de LINPACK, zffti et zfftf dont l’usage
est identique à celui de cffti et cfftf déjà utilisés (TD6).




π
0

 a 

~
d) Construise la matrice A~k pour 11 valeurs de k comprises entre  0  et  0  (c’est0
0
à-dire du centre de la zone de Brillouin au bord de zone dans la direction x). On n’oubliera pas
d’appliquer les conditions aux limites périodiques.
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 :
SUBROUTINE ZHEEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, INFO )
*
*
*
*
*
*
*
*
-- LAPACK driver routine (version 3.1) -Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
November 2006
.. Scalar Arguments ..
CHARACTER
JOBZ, UPLO
INTEGER
INFO, LDA, LWORK, N
..
.. Array Arguments ..
DOUBLE PRECISION
RWORK( * ), W( * )
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
call mk_pot( n, v) ! make potential
open(20,file=’schrod.pot’)
do i = 1, n ; write(20,*) i*dx, v(i) ; enddo
close(20)
open(10,file=’schrod.val’) ; open(20,file=’schrod.vec’)
do j = 0, nk
! loop wave vectors
k = j*pi/nk
h = (0.d0,0.d0)
! initialize Hermitian matrix
do i = 1, n
; h(i,i) = 2.d0/dx**2 + k**2 + v(i) ; enddo ! diagonal
do i = 2, n
; h(i,i-1) = -1.d0/dx**2 +zi*k/dx
; enddo ! off-diagonal
do i = 1, n-1 ; h(i,i+1) = -1.d0/dx**2 -zi*k/dx
; enddo
h(n,1) = -1.d0/dx**2 -zi*k/dx ; h(1,n) = -1.d0/dx**2 +zi*k/dx ! per. boundary conds
!
Solve eigenproblem with Lapack subroutine for Hermitian matrices
call zheev(’V’,’U’,n, h, n, e, work, 2*n-1, rwork, info)
write(10,*) k, e(1:5) ! write 5 first eigenvalues i.e. energies
! write eigenvectors squared, i.e. eletronic density (5 first)
do i=1,n ; write(20,’(7g12.4)’) k,i*dx,real(h(i,1:5)*conjg(h(i,1:5))) ; enddo
write(20,*)
enddo
close(10) ; close(20)
end
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
end subroutine mk_pot
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
et le concept de zone de Brillouin n’a
l’énergie de l’électron est simplement son énergie cinétique
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
Step 2
Step 3
Energy
80
60
40
20
0
Gap
0
0.5
1
1.5
k
2
2.5
3
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
00
0.5
1
k
1.5
2
2.5
3
1
0.80.9
0.7
0.50.6
x
0.30.4
0.2
0 0.1
0.005
00
0.5
1
k
1.5
2
2.5
3
1
0.80.9
0.7
0.50.6
x
0.30.4
0.2
0 0.1
Le potentiel à double puits du programme a l’allure ci-dessous (à gauche) et les valeurs propres
correspondantes (à droite) :
80
−10
1
70 2
3
60
−20
50
0
40
−30
30
−40
20
−50
10
−60
0
−10
−70
0
0.1
0.2
0.3
0.4
0.5
x
0.6
0.7
0.8
0.9
1
−20
0
0.5
1
1.5
k
2
2.5
3
Les deux première bandes sont également montrées ci-dessous :
1
0.03
0.025
0.02
0.015
0.01
0.005
00
0.5
k
2
0.025
0.02
0.015
0.01
0.005
00
0.5
1
1.5
2
2.5
3
k
0.9 1
0.7 0.8
0.5 0.6
0.4
0.2 0.3
0 0.1
x
1
1.5
2
2.5
3
0.9 1
0.7 0.8
0.5 0.6
0.4
0.2 0.3
0 0.1
x
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
Téléchargement