* * $Id: esolve.F,v 1.1.1.1 1996/04/01 15:02:18 mclareni Exp $ * * $Log: esolve.F,v $ * Revision 1.1.1.1 1996/04/01 15:02:18 mclareni * Mathlib gen * * #include "gen/pilot.h" SUBROUTINE ESOLVE(M1,N,AD,BD,CD,DELTAY,IBCX,ALFAS,BETAS,ALFAN, +BETAN,POT,IKIND) COMMON/FW1/W1(774)/FW2/W2(100) DIMENSION POT(M1,N) DATA PI/3.141592653589793/ M=M1-1 COEFY=2.*DELTAY IF(BETAS.EQ.0.) GOTO 50 IBCYS=2 COEF1S=COEFY/BETAS COEF2S=ALFAS*COEF1S GOTO 53 50 IBCYS=1 DIV=1./ALFAS DO 51 I=1,M1 51 W1(2*M1+I)=DIV*W1(2*M1+I) 53 IF(BETAN.EQ.0.) GOTO 54 IBCYN=2 COEF1N=COEFY/BETAN COEF2N=ALFAN*COEF1N GOTO 56 54 IBCYN=1 DIV=1./ALFAN DO 55 I=1,M1 55 W1(3*M1+I)=DIV*W1(3*M1+I) 56 CONTINUE XM=M NA=N-1 NAA=N-2 JUMP=1 PIOVM=PI/XM IF(IBCX.EQ.1) PIOVM=2.*PIOVM IF(IBCX.EQ.4) PIOVM=.5*PIOVM DUM1=.5*BD XNORTH=AD+DUM1 XSOUTH=AD-DUM1 CENT=2.*(1.+AD)-CD GOTO(100,200,300),IKIND C C THIS PART OF THE SUBROUTINE IS USED C WHEN IKIND=1 THAT IS IN THE ELLIPTIC CASE C AND SOLVES THE THREE-POINT RECURRENCE C FORMULA THROUGH GAUSS ELIMINATION C 100 GOTO(110,120,130,135),IBCX 110 IMIN=1 IMAX=M/2+1 GOTO 140 120 IMIN=1 IMAX=M1 GOTO 140 130 IMIN=2 IMAX=M GOTO 140 135 IMIN=2 IMAX=M1 JUMP=2 140 AA=1. IOUT=0 ISUB=0 141 DO 1 I=IMIN,IMAX,JUMP XI=I-1-ISUB H=2.*COS(PIOVM*XI) FCENT=CENT-AA*H DEN=1./FCENT GOTO(111,112),IBCYS 111 W2(2)=DEN*XNORTH W2(N+2)=DEN*(XSOUTH*W1(2*M1+I)-POT(I,2)) JMIN=3 JMAX=NAA GOTO 113 112 DEN=1./(FCENT-XSOUTH*COEF2S) W2(1)=DEN*(XSOUTH+XNORTH) W2(N+1)=-DEN*(POT(I,1)+XSOUTH*COEF1S*W1(2*M1+I)) JMIN=2 JMAX=NA 113 DO 2 J=JMIN,NA DEN=1./(FCENT-XSOUTH*W2(J-1)) W2(J)=DEN*XNORTH 2 W2(N+J)=DEN*(XSOUTH*W2(NA+J)-POT(I,J)) GOTO(121,122),IBCYN 121 POT(I,N)=W1(3*M1+I) GOTO 123 122 IF(IBCX.EQ.4) GOTO 126 IF(IBCYS.EQ.2.AND.IBCX.NE.3) GOTO 124 GOTO 126 124 IF(I.EQ.1) GOTO 125 126 DEN=1./(FCENT-W2(NA)*(XSOUTH+XNORTH)+XNORTH*COEF2N) POT(I,N)=DEN*(-POT(I,N)+XNORTH*COEF1N*W1(3*M1+I) ++W2(N+NA)*(XSOUTH+XNORTH)) GOTO 123 125 POT(1,N)=0. 123 POT(I,1)=W1(2*M1+I) DO 3 J=1,JMAX K=N-J 3 POT(I,K)=W2(K)*POT(I,K+1)+W2(N+K) 1 CONTINUE IOUT=IOUT+1 IF(IOUT.EQ.2) RETURN IF(IBCX.NE.1) GOTO 143 IMIN=IMAX+1 IMAX=M AA=-1. GOTO 141 143 IF(IBCX.NE.4) RETURN ISUB=ISUB+1 IMIN=3 AA=-1. GOTO 141 C C C THIS PART OF THE SUBROUTINE IS USED C WHEN IKIND=2 THAT IS IN THE PARABOLIC CASE C AND SOLVES THE TWO-POINT RECURRENCE C FORMULA STEP BY STEP C C 200 GOTO(210,220,230,235),IBCX 210 IMIN=1 IMAX=M/2+1 GOTO 240 220 IMIN=1 IMAX=M1 GOTO 240 230 IMIN=2 IMAX=M GOTO 240 235 IMIN=2 IMAX=M1 JUMP=2 240 AA=1. IOUT=0 ISUB=0 DUM2=2.*BD DUMUP=-2.+DUM2+CD DUMLO=-2.-DUM2+CD 241 DO 11 I=IMIN,IMAX,JUMP XI=I-1-ISUB H=2.*COS(PIOVM*XI) XNORTH=DUMUP+AA*H XSOUTH=DUMLO+AA*H DEN2=1./XNORTH DO 12 J=2,N 12 W2(J)=POT(I,J-1)+POT(I,J) GOTO(201,202),IBCYS 201 POT(I,1)=W1(2*M1+I) GOTO 203 202 IF(IBCX.EQ.3.OR.IBCX.EQ.4) GOTO 226 C*UL 224 IF(I.EQ.1) GOTO 225 IF(I.EQ.1) GOTO 225 226 DEN1=1./(XNORTH+XSOUTH*(1.+.5*COEF2S)) POT(I,1)=DEN1*(POT(I,1)+.5*XSOUTH*COEF1S*W1(2*M1+I)) GOTO 203 225 POT(1,1)=0. 203 DO 13 J=2,N 13 POT(I,J)=DEN2*(W2(J)-XSOUTH*POT(I,J-1)) 11 CONTINUE IOUT=IOUT+1 IF(IOUT.EQ.2) GOTO 242 IF(IBCX.NE.1) GOTO 243 IMIN=IMAX+1 IMAX=M AA=-1. GOTO 241 243 IF(IBCX.NE.4) GOTO 242 ISUB=ISUB+1 IMIN=3 AA=-1. GOTO 241 242 RETURN C C C THIS PART OF THE SUBROUTINE IS USED C WHEN IKIND=3 THAT IS IN THE HYPERBOLIC CASE C AND SOLVES THE THREE-POINT RECURRENCE C FORMULA STEP BY STEP C C 300 GOTO(310,320,330,335),IBCX 310 IMIN=1 IMAX=M/2+1 GOTO 340 320 IMIN=1 IMAX=M1 GOTO 340 330 IMIN=2 IMAX=M GOTO 340 335 IMIN=2 IMAX=M1 JUMP=2 340 AA=1. IOUT=0 ISUB=0 DEN1=1./(XSOUTH+XNORTH) DEN2=1./XNORTH 341 DO 7 I=IMIN,IMAX,JUMP XI=I-1-ISUB H=2.*COS(PIOVM*XI) FCENT=CENT-AA*H DO 8 J=1,N 8 W2(J)=POT(I,J) POT(I,1)=W1(2*M1+I) POT(I,2)=DEN1*(W2(1)+XSOUTH*COEFY*W1(3*M1+I)+FCENT*W1(2*M1+I)) DO 9 J=3,N 9 POT(I,J)=DEN2*(W2(J-1)-XSOUTH*POT(I,J-2)+FCENT*POT(I,J-1)) 7 CONTINUE IOUT=IOUT+1 IF(IOUT.EQ.2) GOTO 342 IF(IBCX.NE.1) GOTO 343 IMIN=IMAX+1 IMAX=M AA=-1. GOTO 341 343 IF(IBCX.NE.4) GOTO 342 ISUB=ISUB+1 IMIN=3 AA=-1. GOTO 341 342 CONTINUE RETURN END