PROGRAM CAVITY
IMPLICIT NONE
!difinition of variables

INTEGER::I,J,K,IMAX,JMAX !Integers
REAL*8,ALLOCATABLE::SAYN(:,:),SAYO(:,:),TAVO(:,:),TAVN(:,:) !Dynamic arrayes
REAL*8::DX,W,L,NU,X,Y,UU,ERROR !Reals

ERROR=1
NU=1

PRINT*,'ENTER DX'
READ*,DX
PRINT*,'ENTER X'
READ*,X
PRINT*,'ENTER Y'
READ*,Y
PRINT*,'ENTER U'
READ*,UU
IMAX=X/DX+1
JMAX=Y/DX+1
W=2

ALLOCATE(SAYN(IMAX,JMAX),SAYO(IMAX,JMAX),TAVO(IMAX,JMAX),TAVN(IMAX,JMAX))

! Initial condition
CALL INCOND(SAYN,SAYO,TAVO,TAVN,IMAX,JMAX,DX,UU)


! Do over nodes
K=1
DO WHILE (ERROR>.001)
	
	!Main subroutine
	CALL  FSAY(SAYO,SAYN,TAVO,IMAX,JMAX,DX)
    
	!Error calculation
	ERROR=MAXVAL(ABS(TAVN-TAVO))
	SAYO=SAYO+W*(SAYN-SAYO)	
    TAVO=TAVO+W*(TAVN-TAVO)
	
	IF(mod(k,1000)==0)then
	  PRINT*,K,ERROR
	endif
	
	K=K+1
END DO

!Printing in a file name: cav1.txt
OPEN(11,FILE='CAV1.txt')
 WRITE(11,*)  'VARIABLES = X  Y  SAY '
  WRITE(11,*)   'ZONE     I =' , IMAX ,'J=',JMAX
  DO J=1,JMAX
    DO I=1,IMAX
        	WRITE(11,*)  DX*(I-1) ,  DX*(J-1), SAYO(I,J)
	END DO
  END DO			 

END PROGRAM CAVITY
!!!!!!!!!!!!!!!!!!!@@@@@@@@!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!SUBROUTINS!!!!!!!!!!!!!!!!!!!!!

SUBROUTINE INCOND(SAYN,SAYO,TAVO,TAVN,IMAX,JMAX,DX,UU)
INTEGER::I,J,IMAX,JMAX
REAL*8::SAYO,SAYN,TAVO,TAVN,S,UU
REAL*8::DX
DIMENSION SAYN(IMAX,JMAX),SAYO(IMAX,JMAX),TAVO(IMAX,JMAX),TAVN(IMAX,JMAX)
DO J=1,JMAX
      SAYO(1,J)=0	
	  TAVO(1,J)=0
      SAYO(IMAX,J)=0	
	  TAVO(IMAX,J)=0
END DO	

DO I=1,IMAX
      SAYO(I,1)=0
	  TAVO(I,1)=0
      SAYO(I,JMAX)=0
	  TAVO(I,JMAX)=-2*UU/DX
END DO

	
DO J=2,JMAX-1
	DO I=2,IMAX-1
		SAYO(I,J)=0
		TAVO(I,J)=-J/JMAX*2*UU/DX
	END DO
END DO 
SAYN=SAYO	
TAVN=TAVO

	  
RETURN
END SUBROUTINE INCOND
	  !!!!!!!!!!!!!!!@@@@@@@@@@@!!!!!!!!!!!!!!!!
SUBROUTINE FSAY(SAYO,SAYN,TAVO,IMAX,JMAX,DX)

INTEGER I,J,IMAX,JMAX
REAL*8 :: SAYO,SAYN,TAVO,TH,FH,DX
DIMENSION SAYO(IMAX,JMAX),SAYN(IMAX,JMAX),TAVO(IMAX,JMAX)
TH=1/3D0
FH=1/4D0
DO J=2,JMAX-1
	DO I=2,IMAX-1
		SAYN(I,J)=FH*(SAYO(I-1,J)+SAYO(I+1,J)+SAYO(I,J-1)+&
		&SAYO(I,J+1)+DX**2*TAVO(I,J))
	END DO
END DO

RETURN
END SUBROUTINE FSAY
	   !!!!!!!!!!!!!@@@@@@@@@@!!!!!!!!!!!!	  

