www.pudn.com > Fortran.zip > AGAUS.FOR, change:1994-06-11,size:1351b
SUBROUTINE AGAUS(A,B,N,X,L,JS) DIMENSION A(N,N),X(N),B(N),JS(N) DOUBLE PRECISION A,B,X,T L=1 DO 50 K=1,N-1 D=0.0 DO 210 I=K,N DO 210 J=K,N IF (ABS(A(I,J)).GT.D) THEN D=ABS(A(I,J)) JS(K)=J IS=I END IF 210 CONTINUE IF (D+1.0.EQ.1.0) THEN L=0 ELSE IF (JS(K).NE.K) THEN DO 220 I=1,N T=A(I,K) A(I,K)=A(I,JS(K)) A(I,JS(K))=T 220 CONTINUE END IF IF (IS.NE.K) THEN DO 230 J=K,N T=A(K,J) A(K,J)=A(IS,J) A(IS,J)=T 230 CONTINUE T=B(K) B(K)=B(IS) B(IS)=T END IF END IF IF (L.EQ.0) THEN WRITE(*,100) RETURN END IF DO 10 J=K+1,N A(K,J)=A(K,J)/A(K,K) 10 CONTINUE B(K)=B(K)/A(K,K) DO 30 I=K+1,N DO 20 J=K+1,N A(I,J)=A(I,J)-A(I,K)*A(K,J) 20 CONTINUE B(I)=B(I)-A(I,K)*B(K) 30 CONTINUE 50 CONTINUE IF (ABS(A(N,N))+1.0.EQ.1.0) THEN L=0 WRITE(*,100) RETURN END IF X(N)=B(N)/A(N,N) DO 70 I=N-1,1,-1 T=0.0 DO 60 J=I+1,N T=T+A(I,J)*X(J) 60 CONTINUE X(I)=B(I)-T 70 CONTINUE 100 FORMAT(1X,' FAIL ') JS(N)=N DO 150 K=N,1,-1 IF (JS(K).NE.K) THEN T=X(K) X(K)=X(JS(K)) X(JS(K))=T END IF 150 CONTINUE RETURN END