Poisson's equation by Reinaldo Baretti Machin - reibaretti2004@yahoo.com

URL www.oocities.org/reibaretti2004 www.oocities.org/serienumerica


c  Poisson equation del ^2 U = f(x,y)= x *exp(y) / solution is
c   u=  x *exp(y) see Numerical Analysis Burden & Faires Chapter 11
      dimension u(0:100,0:100),uiter(0:100,0:100)
      f(x,y)= x*exp(y)
      x1=0.
      x2=2.
      y1=0.
      y2=1.
      nx=5
      ny=nx
      dx=(x2-x1)/float(nx)
      dy=(y2-y1)/float(ny)
      iter=20
c boundary conditions are set (are given)
      do 10 j=0,ny
      y=dy*float(j)
      u(0,j)=0.
      u(nx,j)=x2*exp(y)
      uiter(0,j)=0.
      uiter(nx,j)=x2*exp(y)
10    continue
      do 20 i=0,nx
      x=dx*float(i)
      u(i,0)=x
      u(i,ny)=x*exp(y2)
      uiter(i,0)=x
      uiter(i,ny)=x*exp(y2)
20    continue
c intial values are given for interior points
      do 30 i=1,nx-1
      do 30 j=1,ny-1
      x=x1+dx*float(i)
      y=y1+dy*float(j)
      u(i,j)=.25*(u(i,0)+u(i,ny)+u(0,j)+u(nx,j))
30    continue
c start iterations
      denom=2./dx**2+2./dy**2
      do 40 it=1,iter
      do 50 i=1,nx-1
      do 50 j=1,ny-1
      x=x1+dx*float(i)
      y=y1+dy*float(j)
c**************corregir
      uiter(i,j)=(u(i+1,j)+u(i-1,j))/dx**2+ (u(i,j+1)+u(i,j-1))/dy**2
     & -f(x,y)
      uiter(i,j)=uiter(i,j)/denom
50    continue
c relabel uiter and u
      do 60 i=1,nx-1
      do 60 j=1,ny-1
      u(i,j)=uiter(i,j)
60    continue
40    continue
c print part
      do 70 j=1,ny,1
      do 70 i=1,nx,1
      x=dx*float(i)
      y=dy*float(j)
      print 100,x,y,u(i,j),f(x,y)
70    continue
100   format(1x,'x,y,u, uexact=',4(2x,e12.5))
      stop
      end

      RUN  with 20 iterations
       x,y,u, uexact=   0.40000E+00   0.20000E+00   0.48961E+00   0.48856E+00
 x,y,u, uexact=   0.80000E+00   0.20000E+00   0.97879E+00   0.97712E+00
 x,y,u, uexact=   0.12000E+01   0.20000E+00   0.14669E+01   0.14657E+01
 x,y,u, uexact=   0.16000E+01   0.20000E+00   0.19551E+01   0.19542E+01
 x,y,u, uexact=   0.20000E+01   0.20000E+00   0.24428E+01   0.24428E+01
 x,y,u, uexact=   0.40000E+00   0.40000E+00   0.59863E+00   0.59673E+00
 x,y,u, uexact=   0.80000E+00   0.40000E+00   0.11958E+01   0.11935E+01
 x,y,u, uexact=   0.12000E+01   0.40000E+00   0.17925E+01   0.17902E+01
 x,y,u, uexact=   0.16000E+01   0.40000E+00   0.23880E+01   0.23869E+01
 x,y,u, uexact=   0.20000E+01   0.40000E+00   0.29836E+01   0.29836E+01
 x,y,u, uexact=   0.40000E+00   0.60000E+00   0.73056E+00   0.72885E+00
 x,y,u, uexact=   0.80000E+00   0.60000E+00   0.14604E+01   0.14577E+01
 x,y,u, uexact=   0.12000E+01   0.60000E+00   0.21885E+01   0.21865E+01
 x,y,u, uexact=   0.16000E+01   0.60000E+00   0.29168E+01   0.29154E+01
 x,y,u, uexact=   0.20000E+01   0.60000E+00   0.36442E+01   0.36442E+01
 x,y,u, uexact=   0.40000E+00   0.80000E+00   0.89143E+00   0.89022E+00
 x,y,u, uexact=   0.80000E+00   0.80000E+00   0.17820E+01   0.17804E+01
 x,y,u, uexact=   0.12000E+01   0.80000E+00   0.26722E+01   0.26706E+01
 x,y,u, uexact=   0.16000E+01   0.80000E+00   0.35617E+01   0.35609E+01
 x,y,u, uexact=   0.20000E+01   0.80000E+00   0.44511E+01   0.44511E+01
 x,y,u, uexact=   0.40000E+00   0.10000E+01   0.10873E+01   0.10873E+01
 x,y,u, uexact=   0.80000E+00   0.10000E+01   0.21746E+01   0.21746E+01
 x,y,u, uexact=   0.12000E+01   0.10000E+01   0.32619E+01   0.32619E+01
 x,y,u, uexact=   0.16000E+01   0.10000E+01   0.43493E+01   0.43493E+01
 x,y,u, uexact=   0.20000E+01   0.10000E+01   0.54366E+01   0.54366E+01