www.pudn.com > Fortran.zip > ABAND.FOR, change:1994-06-12,size:1167b
SUBROUTINE ABAND(B,D,N,L,IL,M,IT) DIMENSION B(N,IL),D(N,M) DOUBLE PRECISION B,D,T IT=1 IF (IL.NE.2*L+1) THEN IT=-1 WRITE(*,20) RETURN END IF LS=L+1 DO 100 K=1,N-1 P=0.0 DO 10 I=K,LS IF (ABS(B(I,1)).GT.P) THEN P=ABS(B(I,1)) IS=I END IF 10 CONTINUE IF (P+1.0.EQ.1.0) THEN IT=0 WRITE(*,20) RETURN END IF 20 FORMAT(1X,'***FAIL***') DO 30 J=1,M T=D(K,J) D(K,J)=D(IS,J) D(IS,J)=T 30 CONTINUE DO 40 J=1,IL T=B(K,J) B(K,J)=B(IS,J) B(IS,J)=T 40 CONTINUE DO 50 J=1,M 50 D(K,J)=D(K,J)/B(K,1) DO 60 J=2,IL 60 B(K,J)=B(K,J)/B(K,1) DO 90 I=K+1,LS T=B(I,1) DO 70 J=1,M 70 D(I,J)=D(I,J)-T*D(K,J) DO 80 J=2,IL 80 B(I,J-1)=B(I,J)-T*B(K,J) B(I,IL)=0.0 90 CONTINUE IF (LS.NE.N) LS=LS+1 100 CONTINUE IF (ABS(B(N,1))+1.0.EQ.1.0) THEN IT=0 WRITE(*,20) RETURN END IF DO 110 J=1,M 110 D(N,J)=D(N,J)/B(N,1) JS=2 DO 150 I=N-1,1,-1 DO 120 K=1,M DO 120 J=2,JS 120 D(I,K)=D(I,K)-B(I,J)*D(I+J-1,K) IF (JS.NE.IL) JS=JS+1 150 CONTINUE RETURN END