real,allocatable:: tv(:,:),tu(:,:) real,allocatable::ex(:,:),ey(:,:),e(:,:) integer,allocatable::rt(:,:) open(20,file='potential.dat') open(30,file='electr.dat') !read *,nt nt=100000 n1=500 n2=500 allocate (tv(n1,n2),tu(n1,n2)) allocate (ex(n1,n2),ey(n1,n2),e(n1,n2),rt(n1,n2)) tv=0. tu=0. rho=0. rt=0 tv(50:450,300:320)=+1. tv(50:450,180:200)=-1. tu(50:450,300:320)=+1. tu(50:450,180:200)=-1. rt(50:450,300:320)=1 rt(50:450,180:200)=1 !****************************************** do k=1,nt emax=-1.e+20 do i=2,n1-1 do j=2,n2-1 if(rt(i,j).eq.0)then add=0.05*(tv(i+1,j)+tv(i-1,j)-4.*tv(i,j)+tv(i,j+1)+tv(i,j-1)) tu(i,j)=tv(i,j)+add else tu(i,j)=tv(i,j) endif if (abs(add).gt.emax) then emax=add endif enddo enddo if (emax.lt.1.e-5.and.k.gt.100) then print *,emax,k goto 200 endif tv=tu enddo !******************************************* 200 continue do i=2,n2-1 do j=2,n1-1 ex(i,j)=tu(i+1,j)-tu(i-1,j) ey(i,j)=tu(i,j+1)-tu(i,j-1) e(i,j)=sqrt(ex(i,j)**2+ey(i,j)**2) enddo enddo 100 format (500 e15.6) write (20,100) tu write (30,100) e stop end