SUBROUTINE SLVDJI(IOPT,B,R,NEQ,IHALFB,NDIM,MDIM) C C ASYMMETRIC BAND MATRIX EQUATION SOLVER C DOCTORED TO IGNORE ZEROS IN LU DECOMP. STEP C C IOPT=1 TRIANGULARIZES THE BAND MATRIX B C IOPT=2 SOLVES FOR RIGHT SIDE R, SOLUTION RETURNS IN R C IOPT=3 Performs IOPT = 1 THEN IOPT = 2 before returning C C MODIFICATIONS - DOUBLE PRECISION ON ALL REAL VARIABLES C - REVERSE ROW COLUMN ORDERING - I.E. J,I C implicit double precision (a-h,o-z) DIMENSION B(MDIM,NDIM),R(NDIM) NRS=NEQ-1 IHBP=IHALFB+1 IF (IOPT.EQ.2) GO TO 30 C C TRIANGULARIZE MATRIX A USING DOOLITTLE METHOD C DO 10 K=1,NRS PIVOT=B(IHBP,K) PD = 1./PIVOT C MULTIPLY IS FASTER THAN DIVIDE KK=K+1 KC=IHBP DO 21 I=KK,NEQ KC=KC-1 IF(KC.LE.0) GO TO 10 C=-B(KC,I)*PD IF (C.EQ.0.0) GO TO 21 B(KC,I)=C KI=KC+1 LIM=KC+IHALFB DO 20 J=KI,LIM JC=IHBP+J-KC 20 B(J,I)=B(J,I)+C*B(JC,K) 21 CONTINUE 10 CONTINUE IF(IOPT.EQ.1)GO TO 100 C C MODIFY LOAD VECTOR R C 30 NN=NEQ+1 IBAND=2*IHALFB+1 DO 40 I=2,NEQ JC=IHBP-I+1 JI=1 IF (JC.LE.0) GO TO 50 GO TO 60 50 JC=1 JI=I-IHBP+1 60 SUM=0.0 DO 70 J=JC,IHALFB SUM=SUM+B(J,I)*R(JI) 70 JI=JI+1 40 R(I)=R(I)+SUM C C BACK SOLUTION C R(NEQ)=R(NEQ)/B(IHBP,NEQ) DO 80 IBACK=2,NEQ I=NN-IBACK JP=I KR=IHBP+1 MR=MIN0(IBAND,IHALFB+IBACK) SUM=0.0 DO 90 J=KR,MR JP=JP+1 90 SUM=SUM+B(J,I)*R(JP) 80 R(I)=(R(I)-SUM)/B(IHBP,I) 100 RETURN END