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