Peaceman ADI method for two-dimensional harmonic oscillator

Please don't post Bullet support questions here, use the above forums instead.
Post Reply
Sijo
Posts: 1
Joined: Tue May 01, 2012 6:43 pm

Peaceman ADI method for two-dimensional harmonic oscillator

Post by Sijo »

Dear friends,
I have written a matlab code to solve the two-dimensional schrodinger equation in a 2D Harmonic potential.
But the program gives diverging result.
Can anybody help me to find out the bug in the program. I am attaching the Matlab program.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all
clear all
m=200;
n=m;
T=50;
dt=0.2;
hbar=1;
me=1;
xstart=-2;
xend=2;
ystart=-2;
yend=2;
dx=(xend-xstart)/(m-1);
dy=(xend-xstart)/(m-1);
x=(xstart:dx:xend);
y=(ystart:dy:yend);
%%%%%%%Two-Dimensional_Potential%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[xx,yy]=meshgrid(x,y);
Vxy=2*(xx.^2+yy.^2);
%figure,surf(Vxy)
%shading flat
%%%%%%%%%%%%%%%%%%initial wave packet%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
vecini=0.01*exp(-xx.*xx-yy.*yy);
vec=vecini;
%figure,surf(vecini)
%shading flat
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Dx=sparse(n-1,n-1);
Dy=sparse(n-1,n-1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rx=hbar*dt/(4*me*dx*dx);
ry=hbar*dt/(4*me*dy*dy);
cv=dt/(2*hbar);
%%%%%%%%%%%%%%%%%%%Tridiagonal Matrices%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Dx=diag(rx*ones(1,n))+diag((i-2*rx)*ones(1,n-1),-1)+diag(rx*ones(1,n-1),1);
Dy=diag(ry*ones(1,n))+diag((i-2*ry)*ones(1,n-1),-1)+diag(ry*ones(1,n-1),1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
vec(1,:)=0; %Dritchlet boundary conditions
vec(n,:)=0;
vec(:,1)=0;
vec(:,n)=0;
for tt=1:T
%starting peaceman ADI method%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%Y-direction derivative%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j = 2:length(x)-1
g(1)=0;%Dritchlet boundary conditions
g(n)=0;
for k = 2:length(y)-1
g(k)=(i+2*ry)*vec(j,k)-ry*vec(j,k+1)-ry*vec(j,k-1)+dt/2*Vxy(j,k)*vec(j,k);
end
vecn(:,j)=Dx\g';
end
vecn(:,1)=zeros(n,1);
vecn(:,n)=zeros(n,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%X-direction derivative%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k = 2:length(y)-1
g(1)=0;
g(n)=0;
for j = 2:length(x)-1
g(j)=(i+2*rx)*vecn(k,j)-rx*vecn(k,j+1)-rx*vecn(k,j-1)+dt/2*Vxy(k,j)*vecn(k,j);
end
vecn2(:,k-1)=Dy\g';
end
vecn2(:,1)=zeros(n,1);
vecn2(:,n)=zeros(n,1);
vec=vecn2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
surf(x,y,abs(vec.*conj(vec)))
shading flat
F(tt)=getframe()
end
movie(F)
figure,surf(x,y,Vxy),shading flat,title('2D harmonic potential')
figure,surf(x,y,vecini),shading flat,title('initial gaussian wavepacket')
Post Reply