PROGRAM D17R2
C	Driver for routine ADI
	IMPLICIT REAL*8(A-H,O-Z)
	PARAMETER(JMAX=11,PI=3.1415926)
	DIMENSION A(JMAX,JMAX),B(JMAX,JMAX),C(JMAX,JMAX),D(JMAX,JMAX),
     *		E(JMAX,JMAX),F(JMAX,JMAX),G(JMAX,JMAX),U(JMAX,JMAX)
	DO 12 I=1,JMAX
		DO 11 J=1,JMAX
			A(I,J)=-1.0
			B(I,J)=2.0
			C(I,J)=-1.0
			D(I,J)=-1.0
			E(I,J)=2.0
			F(I,J)=-1.0
			G(I,J)=0.0
			U(I,J)=0.0
11		CONTINUE
12	CONTINUE
	MID=JMAX/2+1
	G(MID,MID)=2.0
	ALPHA=2.0*(1.0-COS(PI/JMAX))
	BETA=2.0*(1.0-COS((JMAX-1)*PI/JMAX))
	ALIM=LOG(4.0*JMAX/PI)
	K=0
1	K=K+1
	IF (2**K .LT. ALIM) GOTO 1
	EPS=1.0E-4
	CALL ADI(A,B,C,D,E,F,G,U,JMAX,K,ALPHA,BETA,EPS)
	WRITE(*, '(1X,A)') 'ADI Solution:'
	DO 13 I=1,JMAX
		WRITE(*,'(1X,11F7.2)') (U(I,J),J=1,JMAX)
13	CONTINUE
	WRITE(*,'(/1X,A)') 'Test that solution satisfies Difference Eqns:'
	DO 15 I=2,JMAX-1
		DO 14 J=2,JMAX-1
			G(I,J)=-4.0*U(I,J)+U(I+1,J)
     *				+U(I-1,J)+U(I,J-1)+U(I,J+1)
14		CONTINUE
		WRITE(*,'(8X,9F7.2)') (G(I,J),J=2,JMAX-1)
15	CONTINUE
	END

	SUBROUTINE TRIDAG(A,B,C,R,U,N)
C	This is a double precision version for use with ADI
	IMPLICIT REAL*8(A-H,O-Z)
	PARAMETER (NMAX=100)
	DIMENSION GAM(NMAX),A(N),B(N),C(N),R(N),U(N)
	IF(B(1).EQ.0.)PAUSE
	BET=B(1)
	U(1)=R(1)/BET
	DO 11 J=2,N
		GAM(J)=C(J-1)/BET
		BET=B(J)-A(J)*GAM(J)
		IF(BET.EQ.0.)PAUSE
		U(J)=(R(J)-A(J)*U(J-1))/BET
11	CONTINUE
	DO 12 J=N-1,1,-1
		U(J)=U(J)-GAM(J+1)*U(J+1)
12	CONTINUE
	RETURN
	END