Table des matières

Équation de Schrödinger à deux dimensions

1. Introduction

Ce document expose une méthode numérique pour la résolution de l'équation de Schrodinger à deux dimensions, dans le cadre d'un problème de diffusion d'un paquet d'onde par un potentiel, ou de diffraction par un obstacle (diffraction par des fentes).

Pour le même problème à une dimension, voir Équation de Schrödinger à une dimension.

2. Équation de Schrödinger

On considère l'équation de Schrödinger dépendante du temps pour une fonction d'onde ψ(x,y,t) :

iψt=-22m(2ψx2+2ψy2)+V(x,y)ψ(1)

On s'intéresse au mouvement d'une particule dans un potentiel, limité par le domaine rectangulaire [0,Lx]x[0,Ly]. Sur les bords de ce domaine, la fonction d'onde est nulle. La condition de normalisation s'écrit :

0Lx0Lyψψ*dxdy=1(2)

La fonction d'onde initiale ψ(x,y,0) est connue, et prendra la forme d'un paquet d'onde localisé dans le domaine.

L'objectif est de résoudre numériquement l'équation par la méthode des différences finies, en suivant une méthode similaire à celle exposée dans Équation de diffusion à deux dimensions. L'équation de Schrödinger est en effet analogue à l'équation de diffusion en raison de la dérivée première par rapport au temps. Elle a des solutions sous forme d'onde progressives en raison du coefficient imaginaire i .

Soit V0 l'échelle du potentiel. La fonction V(x,y) utilisée sera sans dimensions. On introduit l'échelle de temps :

τ=V0(3)

et l'échelle de longueur :

λ=2mV0(4)

En utilisant un temps et des coordonnées (x,y) réduits par ces deux échelles, on obtient l'équation :

iψt=-2ψx2-2ψy2+V(x,y)ψ(5)

On utilise l'opérateur hamiltonien :

H=-2x2-2y2+V(x,y)(6)

3. Méthode numérique

3.a. Discrétisation

Les nœuds du maillage sont définis par :

xj=jΔx(7)ym=mΔy(8)

L'indice j varie de 0 à Nx-1, l'indice m de 0 à Ny-1.

Les valeurs sont recherchées aux instants définis par :

tn=nΔt(9)

n est un entier positif ou nul. On pose :

ψj,mn=ψ(jΔx,mΔy,nΔt)(10)Vj,m=V(jΔx,mΔy)(11)

Dans cette notation, l'exposant sert donc à représenter le temps.

La discrétisation des dérivées secondes par la méthode des différences finies nous amène à définir un opérateur hamiltonien :

Hψj,mn=-ψj+1,mn-2ψj,mn+ψj-1,mn(Δx)2-ψj,m+1n-2ψj,mn+ψj,m-1n(Δy)2+Vj,mψj,mn(12)

Comme il est expliqué dans Équation de Schrödinger à une dimension, un schéma numérique qui conserve la condition de normalisation s'écrit :

(1+i12ΔtH)ψj,mn+1=(1-i12ΔtH)ψj,mn(13)

Le schéma numérique obtenu est implicite.

3.b. Schéma numérique à directions alternées

Il s'agit de modifier le schéma implicite (13) pour obtenir un schéma implicite dans la direction x, alterné avec un schéma implicite dans la direction y, comme exposé dans Équation de diffusion à deux dimensions.

Le schéma implicite à directions alternées consiste à décomposer le pas de temps (n,n+1) en deux sous-pas. Pour le premier, on écrit un schéma implicite pour la dérivée par rapport à x mais explicite pour la dérivée par rapport à y. Pour le second, on écrit un schéma implicite pour la dérivée par rapport à y mais explicite pour la dérivée par rapport à x. On choisit de prendre en compte le potentiel seulement dans le second demi-pas.

Pour alléger les notations, on définit les opérateurs de dérivation suivants :

Dxψj,mn=ψj+1,mn-2ψj,mn+ψj-1,mn(Δx)2(14)Dyψj,mn=ψj,m+1n-2ψj,mn+ψj,m-1n(Δy)2(15)

On a bien sûr :

H=-Dx-Dy+Vj,m(16)

Le premier demi-pas s'écrit :

(1-iΔt2Dx+iΔt212Vj,m)ψj,mn+12=(1+iΔt2Dy-iΔt212Vj,m)ψj,mn(17)

Le second demi-pas s'écrit :

(1-iΔt2Dy+iΔt212Vj,m)ψj,mn+1=(1+iΔt2Dx-iΔt212Vj,m)ψj,mn+12(18)

Pour simplifier, on pose Δx=Δy et on définit :

α=2(Δx)2Δt(19)

Le premier demi-pas s'écrit :

ψj,mn+12-iα(ψj+1,mn+12-2ψj,mn+12+ψj-1,mn+12)+iα(Δx)212Vj,mψj,mn+12=ψj,mn+iα(ψj,m+1n-2ψj,mn+ψj,m-1n)-iα(Δx)212Vj,mψj,mn(20)

Le second demi-pas s'écrit :

ψj,mn+1-iα(ψj,m+1n+1-2ψj,mn+1+ψj,m-1n+1)+iα(Δx)212Vj,mψj,mn+1=ψj,mn+12+iα(ψj+1,mn+12-2ψj,mn+12+ψj-1,mn+12)-iα(Δx)212Vj,mψj,mn+12(21)

Chacune de ces deux étapes consiste à résoudre un système tridiagonal, ce qui se fait par élimination directe en utilisant l'algorithme décrit dans équation de diffusion à une dimension.

On écrira les deux systèmes à résoudre sous la forme générale suivante :

Aj,mψj-1,mn+1/2+Bj,mψj,mn+1/2+Cj,mψj+1,mn+1/2=Dj,mψj,m-1n+Ej,mψj,mn+Fj,mψj,m+1n+Gj,m(22)A'j,mψj,m-1n+1+B'j,mψj,mn+1+C'j,mψj,m+1n+1=D'j,mψj-1,mn+1/2+E'j,mψj,mn+1/2+F'j,mψj+1,mn+1/2+G'j,m(23)

Pour un point non situé sur un bord, les coefficients sont :

Aj,m=A'j,m=1(24)Bj,m=B'j,m=iα-2-(Δx)212Vj,m(25)Cj,m=C'j,m=1(26)Dj,m=D'j,m=-1(27)Ej,m=E'j,m=iα+2+(Δx)212Vj,m(28)Fj,m=F'j,m=-1(29)Gj,m=G'j,m=0(30)

Sur les bords du domaine, ou sur tout point où une valeur nulle est attribuée à la fonction d'onde, on a :

Bj,m=B'j,m=1(31)

et tous les autres coefficients dont nuls.

3.c. Algorithme

La maillage est constitué de matrices à Nx colonnes et Ny lignes. La définition des pas de temps et d'espace, des conditions limites et des sources permet de construire les matrices A,B,C,D,E,F,G,A',B',C',D',E',F',G'.

Il faut aussi construire les matrices β,γ pour la résolution des systèmes sur les lignes, et les matrices β',γ' pour la résolution des systèmes sur les colonnes. Pour chaque ligne j, la récurrence à appliquer pour i variant de 1 à Nx :

β1,m=B1,m(32)γ1,m=C1,mβ1,m(33)βj,m=Bj,m-Aj,mγi-1,m(34)γj,m=Cj,mβj,m(35)

Pour chaque colonne i, la récurrence à appliquer pour j variant de 1 à Ny :

β'j,1=B'j,1(36)γ'j,1=C'j,1β'j,1(37)β'j,m=B'j,m-A'j,mγ'j,m-1(38)γ'j,m=C'j,mβ'j,m(39)

Pour chaque pas de temps n, on doit effectuer une résolution tridiagonale pour chaque ligne, puis pour chaque colonne.

Pour chaque ligne j on commence par calculer la suite suivante pour i variant de 1 à Nx:

x1=1β1,m(D1,mψ1,m-1n+E1,mψ1,mn+F1,mψ1,m+1n+G1,m)(40)xi=1βj,m(Dj,mψj,m-1n+Ej,mψj,mn+Fj,mψj,m+1n+Gj,m-Aj,mxi-1)(41)

Pour la même ligne j, on calcule les nouvelles valeurs à l'instant n+1/2 par récurrence, en faisant varier de i de Nx à 1 :

ψNx,mn+12=xNx(42)ψj,mn+12=xi-γj,mψi+1,mn+12(43)

Les valeurs à l'instant n+1/2 sont stockées dans la matrice ψ. On procède alors au parcours des colonnes. Pour chaque colonne i, on calcule la suite suivante pour j variant de 1 à Ny :

x1=1β'j,1(D'j,1ψi-1,1n+1/2+E'j,1ψj,1n+1/2+F'j,1ψi+1,1n+1/2+G'j,1)(44)xi=1β'j,m(D'j,mψi-1,mn+1/2+E'j,mψj,mn+1/2+F'j,mψi+1,mn+1/2+G'j,m-A'j,mxi-1)(45)

puis pour j variant de Ny à 1 :

ψj,Nyn=xNy(46)ψj,mn=xi-γ'j,mψj,m+1n(47)

Lorsqu'on traite les lignes, il faut écrire dans une seconde matrice ψ, pour ne pas écraser les valeurs de l'instant n. Il en est de même lorsqu'on traite les colonnes.

Le nombre de matrices utilisées est 20. Pour un maillage 1024x1024 en flottants 32 bits, la mémoire utilisée est de 80 méga-octets.

Les lignes peuvent être parcourues en parallèle (idem pour les colonnes). On peut donc avec profit utiliser un processeur graphique pour faire ces calculs (via l'API CUDA ou OpenCL). Pour le traitement des lignes, chaque unité de calcul traite une ligne. Les opérations effectuées sur les différentes lignes sont rigoureusement identiques, ce qui est le cas idéal pour une implémentation sur GPU. Bien entendu, toutes les matrices doivent être transférées sur la mémoire de la carte graphique avant le calcul.

On remarque que le traitement des bords (qui doit être identique au traitement des autres points) nécessite un accès à des éléments de ψ hors domaine. Pour résoudre ce problème, on utilise des matrices avec des rangées fictives sur les bords. Le nombre d'éléments dans chaque direction est une puissance de 2 (plus efficace pour l'implémentation GPU). La figure suivante montre un exemple pour Nx=23 et Ny=23 (les points sont les nœuds de la grille).

matrice.svgFigure pleine page

Sur cet exemple, les matrices sont 10x10 mais le maillage effectif est 8x8.

Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.