program laplace
      integer imax,jmax,im1,im2,jm1,jm2,it,itmax
!      parameter (imax=2001,jmax=2001)
      parameter (imax=501,jmax=501)
      parameter (im1=imax-1,im2=imax-2,jm1=jmax-1,jm2=jmax-2)
      parameter (itmax=100)
      real*8 u(imax,jmax),du(imax,jmax),umax,dumax,tol
!      parameter (umax=10.0,tol=1.0e-3)
      parameter (umax=10.0, tol=1.0e-2)
      real t(2), e

! Initialize
      do j=1,jmax
         do i=1,imax-1
            u(i,j)=0.0
            du(i,j)=0.0
         enddo
         u(imax,j)=umax
      enddo

      dumax = 1000.0
      it=1

      e = dtime(t)
      
! Main computation loop
      do while (dumax.ge.tol)
         dumax=0.0
         do j=2,jm1
            do i=2,im1
               du(i,j)=0.25*(u(i-1,j)+u(i+1,j)+u(i,j-1)+u(i,j+1))-u(i,j)
               dumax=max(dumax,abs(du(i,j)))
               u(i,j)=u(i,j)+du(i,j)
            enddo
         enddo
 !        write (1,*) it,dumax
         it=it+1
      enddo
      
      e = dtime(t)
      write (1,*) 'Time=',e
      write (1,*) it, dumax
      print *, 'Time = ', e
      print *, it, dumax 
      stop
      end