Vous êtes sur la page 1sur 5

Université Pierre et Marie Curie, Paris VI ENS Cachan

Licence de physique PHYTEM

PHYSIQUE NUMÉRIQUE
TD 10
L’équation de Schrödinger dépendante du temps

La résolution de l’équation de Schrödinger indépendante du temps (Hψ = Eψ) donne les états
propres (énergie et fonction d’onde) d’un système quantique. Toutefois, un système quantique peut
évoluer au cours du temps, et au lieu de s’intéresser à ses états stationnaires, on peut vouloir décrire
cette évolution temporelle. Ainsi, l’équation de Schrödinger dépendante du temps s’écrit :

∂ψ
ih̄ = Hψ (1)
∂t
où, maintenant, la fonction d’onde ψ({~r}, {s}, t) dépend du temps en plus des autres variables du
problème, coordonnées spatiales, spins, etc.
On se limite ici à un problème unidimensionnel pour une particule de masse m soumise à un
potentiel V (x), donc l’équation (1) devient :

∂ψ(x, t) h̄2 ∂ 2 ψ(x, t)


ih̄ =− + V (x)ψ(x, t) (2)
∂t 2m ∂x2
Sont connus le potentiel V (x) et l’état initial ψ(x, t = 0) et l’on cherche à calculer ψ(x, t) pour t > 0.

I— Algorithme.
1– Discrétisation de la variable d’espace x : on écrit que x = ℓ δx , où ℓ est un nombre entier ∈ [1, n].
Montrer que l’équation (2) peut se réécrire à l’ordre le plus bas en δx :

∂Ψ(t)
ih̄ = HD Ψ(t) (3)
∂t
où Ψ(t) est un vecteur qui contient toutes les valeurs de ψ(x, t) :
 .. 
 . 
Ψ(t) =  ψ ℓ (t) , ψℓ (t) = ψ(ℓ δx , t), ℓ ∈ [1, n]
..
 
.

et, en posant Vℓ = V (ℓ δx ), HD est le Hamiltonien discrétisé :


 
.. ..
 . . 0 ... ... ... ... ... ... ... 0 
 .. .. .. 

 . . . 0 ... ... ... ... ... ... 0 

 
 
2 2 2
h̄ h̄ h̄
 

 0 ... 0 − 2mδ 2 mδx2
+ Vℓ−1 − 2mδ 2 0 ... ... ... 0 

x x
h̄2 h̄2 h̄2
 
HD =
 0 ... ... 0 − 2mδ 2 mδx2
+ Vℓ − 2mδ 2 0 ... ... 0 

x x
2 2 2
 h̄ h̄ h̄ 
 0 ... ... ... 0 − 2mδ 2 mδx2
+ Vℓ+1 − 2mδ 2 0 ... 0 
 x x 
 
 
.. .. ..
 
0 ... ... ... ... ... ... 0 . . .
 
 
.. ..
 
0 ... ... ... ... ... ... ... 0 . .

L’équation (3) est ainsi une équation matricielle.


2– Discrétisation du temps. Les méthodes de résolution d’équations différentielles sont nombreuses,
mais il se trouve qu’ici la méthode dite de ≪ Crank & Nicolson ≫ s’avère adaptée :

1
• on pose : Ψp = Ψ(p δt )
• un pas d’intégration par la méthode d’Euler donnerait :
δt
 
ih̄Ψp+1 = ih̄Ψp + HD Ψp δt soit : Ψp+1 = 1 − i HD Ψ p (4)

• On le sait, cette méthode est généralement peu précise, or on pourrait aussi faire la même chose,
en utilisant la dérivée calculée, non pas au début de l’intervalle, mais à la fin en t + δt (méthode
d’Euler implicite).

Euler explicite Euler implicite


L’équation (4) devient

δt
 
ih̄Ψp+1 = ih̄Ψp + HD Ψp+1 δt soit : 1 + i HD Ψp+1 = Ψp

où c’est la fonction d’onde p + 1 (en t + δt ) qui est prise pour la dérivée.
Comme HD est une matrice, il faut maintenant résoudre un système linéaire pour obtenir Ψp+1 .
• L’idée de la méthode de Crank et Nicolson est faire la moyenne des deux 1 .
Montrer que cela revient à écrire :
δt δt
   
1 + i HD Ψp+1 = 1 − i HD Ψp (5)
2h̄ 2h̄
où Ψp est connu, obtenu au cours du pas d’intégration précédent, et Ψp+1 est inconnu.
3– Le membre de droite de l’équation (5) est le produit d’une matrice par un vecteur, donc un
vecteur que l’on peut calculer ; le membre de gauche est lui aussi le produit d’une matrice par un
vecteur, mais ce vecteur est inconnu : il faut donc, à chaque pas de calcul, résoudre un système
linéaire :
AX = B (6)
Par identification avec l’équation (5), dire quels types d’objets mathématiques sont A, B et X. Donner
les expressions de A et B.

II— Mise en œuvre.


1– On définit un intervalle de travail [− a2 , a2 ], divisé en n segments égaux de longueur δx ; on
prendra a = 5 et n = 200. Dans un premier temps, on considèrera un potentiel V harmonique :
1
V (x) = mω 2 x2
2
1. un peu comme quand on prend, pour les intégrations numériques, la méthode des trapèzes comme moyenne des
méthodes des rectangles à droite et à gauche.

2
avec : m = 1, ω = 10.
Écrire une subroutine def_pot(x,v,n) qui remplisse deux tableaux real, dimension(n) :: x, v,
le premier contenant les valeurs de xℓ , le second celles de vℓ .
Appeler ce sous-programme par un programme principal qui fasse écrire ces valeurs dans un fichier
appelé 2 tds.pot. Tracer et imprimer la courbe correspondante à l’aide de gnuplot.
2– La condition initiale est donnée par une gaussienne légèrement excentrée par rapport à l’origine :
1. (x−x0 )2
ψ(x, t = 0) = √ e− 2σ2
σ 2π
où π = arccos(−1), x0 = 0.25 et σ = 0.2.
Comme précédemment, écrire une subroutine def_psi(x,psi,n) qui utilise le tableau x pour remplir
le tableau complex, dimension(n) :: psi.
Dans le programme principal, on fera écrire les valeurs de x et de P (x) = ψ ∗ (x)ψ(x) dans le fichier
tds.psi : tracer et imprimer la courbe de P (x) résultante.
3– Dans le programme principal normaliser numériquement la fonction d’onde initiale de façon
que : Z Z
P (x) dx = ψ ∗ (x, t = 0)ψ(x, t = 0) dx = 1.

Imprimer le programme obtenu.


4– Dans le programme principal, il faut une boucle sur le temps qui à chaque pas définisse le
système linéaire à résoudre à partir de l’équation (5), et calcule Ψp+1 (ou ψ(x, t + δt )) à partir de la
donnée de Ψp (ou ψ(x, t)).
La matrice A de l’équation (6) est complexe et tridiagonale, on peut utiliser, pour résoudre le
système linéaire, le sous-programme de la bibliothèque lapack :
subroutine cgtsv(n,m,c,d,e,b,n,info)
avec :
arguments de type fonction des arguments
cgtsv des arguments en entrée en sortie
n integer nombre de points de discrétisation inchangé
m integer nombre de colonnes de B (ici : m = 1) inchangé
c complex, dimension(n) éléments sous-diagonaux de A sans objet
d complex, dimension(n) éléments diagonaux de A sans objet
e complex, dimension(n) éléments sur-diagonaux de A sans objet
b complex, dimension(n) éléments de B éléments de X
info integer sans objet nul si succès
Tous les éléments nuls de la matrice A sont ignorés.
Introduire dans le programme principal une boucle sur le temps (on prendra δt = 0.001) qui :
– remplisse les tableaux c, d, e et b. On pourra utiliser les constantes suivantes (zi et idt doivent
être complexes.) :
! constantes utiles
hbar = 1. ! système d’unités
m = 1. ! masse
zi =(0.0,1.0) ! sqrt(-1.0)
hm = hbar*hbar/(m*delta_x*delta_x)
idt = zi*delta_t/(2*hbar)
– appelle le sous-programme cgtsv R R
– calcule et écrive dans un fichier tds.out la valeur de P (x, t) dx = ψ ∗ (x, t)ψ(x, t) dx afin de
vérifier que la normalisation reste conservée.
2. pour Time Dependent Schrödinger.

3
Pour la compilation, invoquer la bibliothèque lapack avec l’option : -llapack
Imprimer ce nouveau programme, tracer et imprimer la courbe de la normalisation en fonction du
temps, pour 1000 pas de temps.
5– Ajouter un calcul de l’énergie :
Z
E(t) = ψ ∗ (x, t) H ψ(x, t) dx

et vérifier qu’elle reste aussi constante (tracer et imprimer la courbe).

III— Évolution temporelle.


1– ≪ Trajectoire ≫ de la particule. On peut définir la ≪ position ≫ de la particule par le barycentre
de sa densité de probabilité de présence :
Z
hxi = ψ ∗ (x, t) x ψ(x, t) dx

Faire écrire cette quantité dans un fichier tds.traj. Tracer, imprimer et commenter 3 . On prendra
5000 pas de temps.
2– Ajouter au programme principal un calcul à chaque pas de temps de la densité de probabilité
de présence de la particule :
P (x, t) = ψ ∗ (x, t)ψ(x, t)
et faire écrire cette quantité dans un fichier tds.psi. Ce fichier doit avoir 3 colonnes contenant le
temps pour la première, la position x pour la seconde et P (x, t) pour la troisième. Tracer avec la
commande splot de gnuplot 4 .
3– Modifier le potentiel pour qu’il ait la forme d’un double puits :
2 !2
x

V (x) = ∆V −1
x1

Prendre x1 = 1 et ∆V = 10.
Garder la gaussienne de départ en modifiant le décalage : x0 = 1. au lieu de 0.25. On fera 50000
pas d’intégration, mais on n’écrira P (x, t) que tous les cinq pas.
Vérifier que la normalisation et l’énergie restent stables. Tracer hxi en fonction du temps, puis
P (x, t). Commenter.
4– Faire quelques essais pour ∆V croissant, par exemple : 1, 5, 10, 20. Commenter les courbes
obtenues.

IV— Une animation (pour le plaisir)


Il s’agit ici de faire une animation fin d’observer l’évolution au cours du temps de la fonction d’onde
Ψ(x, t) ou de la densité de probabilité de présence. Pour cela, il y a plusieurs méthodes possibles ; le
plus simple est sans doute de créer un fichier de commandes pour gnuplot, appelé par exemple
tds_1D_anim.plt :

! tds_1D_anim # lancer le programme tds_1D_anim


p [][0:2] ’tds_anim.psi’ u 1:($2**2+$3**2) # tracer psi**2(x)
pause mouse key # maintenir la touche <RETURN> enfoncee pour poursuivre
if ( MOUSE_KEY != 9 ) reread # sortir si <TAB>
3. Le théorême d’Ehrenfest dit en substance que le barycentre de la densité de probabilité de présence suit une
trajectoire classique.
4. On pourra aussi utiliser la commande set pm3d map pour obtenir des niveaux de couleur.

4
La commande gnuplot tds_1D_anim.plt lancera donc gnuplot dans une boucle (à cause de la com-
mande reread) dans laquelle il appellera le programme tds_1D_anim puis tracera la somme des carrés
des deuxième et troisième colonnes du fichier tds_anim.psi en fonction de la première. Tant que l’on
maintiendra la touche return enfoncée cette opératon se répétera ; si on la lâche, cela s’interrompera
mais redémarrera dès qu’on l’enfonce à nouveau. Pour sortir, taper tab.
Reste à créer le programme tds_1D_anim.f90 : il suffit de modifier assez légèrement le programme
de simulation initial. Là encore, il y a plusieurs façons de procéder. L’idée est de limiter le nombre
de pas d’intégration temporelle à par exemple une vingtaine, mais l’état initial sera lu dans le fichier
tds_anim.psi et l’état final écrit dans le même fichier. Ainsi, à chaque tour de la boucle de gnuplot,
on tracera une version actualisée de la fonction d’onde. Toutefois, si le fichier n’existe pas (utiliser la
commande inquire(file=’tds_anim.psi’,exist=ok) où ok est une variable logique qui prend la
valeur .TRUE. si le fichier existe et .FALSE. sinon) au premier pas de calcul, il faut créer une fonction
d’onde comme précédemment.
Ensuite faire quelques essais pour ajuster les paramètres de façon à ce que l’animation se déroule
à une vitesse agréable. . .

Vous aimerez peut-être aussi