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