Poisson equation
by Reinaldo Baretti Machín
www.oocities.org/serienumerica
c FORTRAN CODE
c POISSON equation in TWO DIMENSIONS ,see Burden &
c Fairies p 575 Chap 11 , Schaum Numerical Analysis Chapter 29
c f(x,y) is the source or density/ phi(x,y) is the exact solution
c Del**2 (Phi(x,y)) =4
dimension u(0:100,0:100), u1(0:100,0:100),delta(0:100,0:100)
f(x,y)=4.
phi(x,y)=x**2 + y**2
uleft(x1,y)=phi(x1,y)
ubot(x,y1)=phi(x,y1)
uright(x2,y)=phi(x2,y)
utop(x,y2)=phi(x,y2)
x1=0.
x2=1.
y1=0.
y2=1.
ny=4
nx=4
dx=(x2-x1)/float(nx)
dy=(y2-y1)/float(ny)
ainv=1./(2./dx**2+2./dy**2)
niter=20
c boundary conditions are imposed
do 10 i=0,nx
x=dx*float(i)
u(i,0)=ubot(x,y1)
u1(i,0)= ubot(x,y1)
u(i,ny)=utop(x,y2)
u1(i,ny)=utop(x,y2)
10 continue
do 15 j=0,ny
y=dy*float(j)
u(0,j)=uleft(x1,y)
u1(0,j)=uleft(x1,y)
u(nx,j)=uright(x2,y)
u1(nx,j)= uright(x2,y)
15 continue
c initial solution for u is taken as some average
do 20 i=1,nx-1
do 20 j=1,ny-1
x=dx*float(i)
y=dy*float(j)
u(i,j)=.25*( uleft(x1,y)+ uright(x2,y)+ ubot(x,y2)+
$ utop(x,y2))
20 continue
c iteration procedure is used for the midpoint u1 (x,y)
do 100 iter=1,niter
do 30 i=1,nx-1
do 30 j=1,ny-1
x=dx*float(i)
y=dy*float(j)
u1(i,j)=-f(x,y)+(1./dx**2)*(u(i+1,j)+u(i-1,j))+(1./dy**2)*
$ (u(i,j+1) +u(i,j-1))
u1(i,j)=ainv*u1(i,j)
30 continue
c introduce tolerance criteria here e.g. abs (u1(i,j)-u(i,j)).le.1.0e-3
c u(i,j) is redefined
do 40 i=1,nx-1
do 40 j=1,ny-1
u(i,j)=u1(i,j)
40 continue
c print 120,u(nx/2,ny/2),phi(x2/2.,y2/2.)
if(iter.eq.niter)then
c prints results for interior points
do 50 j=1,ny-1
do 50 i=1,nx-1
x=dx*float(i)
y=dy*float(j)
print 110,x,y,u(i,j),phi(x,y)
c print*,' '
50 continue
endif
100 continue
110 format('x,y,u,phi=',4(2x,e11.4))
120 format('u(nx/2,ny/2),phi(x2/2./y2/2.)=',2(4x,e10.3))
stop
end
RUN
x,y,u,phi= 0.2500E+00 0.2500E+00 0.1253E+00 0.1250E+00
x,y,u,phi= 0.5000E+00 0.2500E+00 0.3130E+00 0.3125E+00
x,y,u,phi= 0.7500E+00 0.2500E+00 0.6253E+00 0.6250E+00
x,y,u,phi= 0.2500E+00 0.5000E+00 0.3130E+00 0.3125E+00
x,y,u,phi= 0.5000E+00 0.5000E+00 0.5007E+00 0.5000E+00
x,y,u,phi= 0.7500E+00 0.5000E+00 0.8130E+00 0.8125E+00
x,y,u,phi= 0.2500E+00 0.7500E+00 0.6253E+00 0.6250E+00
x,y,u,phi= 0.5000E+00 0.7500E+00 0.8130E+00 0.8125E+00
x,y,u,phi= 0.7500E+00 0.7500E+00 0.1125E+01 0.1125E+01