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