www.pudn.com > Fortran.zip > ACGAS.FOR, change:1994-06-12,size:2059b


 
	SUBROUTINE ACGAS(AR,AI,N,BR,BI,L,JS) 
	DIMENSION AR(N,N),AI(N,N),BR(N),BI(N),JS(N) 
	DOUBLE PRECISION AR,AI,BR,BI,D,P,Q,S 
	L=1 
	DO 100 K=1,N-1 
	  D=0.0 
	  DO 10 I=K,N 
	  DO 10 J=K,N 
	    P=AR(I,J)*AR(I,J)+AI(I,J)*AI(I,J) 
	    IF (P.GT.D) THEN 
	      D=P 
	      JS(K)=J 
	      IS=I 
	    END IF 
10	  CONTINUE 
	  W=D 
	  IF (W+1.0.EQ.1.0) THEN 
	    WRITE(*,20) 
	    L=0 
	    RETURN 
	  END IF 
20	  FORMAT(1X,'  ERR**FAIL  ') 
	  DO 30 J=K,N 
	    P=AR(K,J) 
	    AR(K,J)=AR(IS,J) 
	    AR(IS,J)=P 
	    P=AI(K,J) 
	    AI(K,J)=AI(IS,J) 
	    AI(IS,J)=P 
30	  CONTINUE 
	  P=BR(K) 
	  BR(K)=BR(IS) 
	  BR(IS)=P 
	  P=BI(K) 
	  BI(K)=BI(IS) 
	  BI(IS)=P 
	  DO 50 I=1,N 
	    P=AR(I,K) 
	    AR(I,K)=AR(I,JS(K)) 
	    AR(I,JS(K))=P 
	    P=AI(I,K) 
	    AI(I,K)=AI(I,JS(K)) 
	    AI(I,JS(K))=P 
50	  CONTINUE 
	  DO 60 J=K+1,N 
	    P=AR(K,J)*AR(K,K) 
	    Q=-AI(K,J)*AI(K,K) 
	    S=(AR(K,K)-AI(K,K))*(AR(K,J)+AI(K,J)) 
	    AR(K,J)=(P-Q)/D 
	    AI(K,J)=(S-P-Q)/D 
60	  CONTINUE 
	  P=BR(K)*AR(K,K) 
	  Q=-BI(K)*AI(K,K) 
	  S=(AR(K,K)-AI(K,K))*(BR(K)+BI(K)) 
	  BR(K)=(P-Q)/D 
	  BI(K)=(S-P-Q)/D 
	  DO 90 I=K+1,N 
	    DO 80 J=K+1,N 
	      P=AR(I,K)*AR(K,J) 
	      Q=AI(I,K)*AI(K,J) 
	      S=(AR(I,K)+AI(I,K))*(AR(K,J)+AI(K,J)) 
	      AR(I,J)=AR(I,J)-P+Q 
	      AI(I,J)=AI(I,J)-S+P+Q 
80	    CONTINUE 
	    P=AR(I,K)*BR(K) 
	    Q=AI(I,K)*BI(K) 
	    S=(AR(I,K)+AI(I,K))*(BR(K)+BI(K)) 
	    BR(I)=BR(I)-P+Q 
	    BI(I)=BI(I)-S+P+Q 
90	  CONTINUE 
100	CONTINUE 
	D=AR(N,N)*AR(N,N)+AI(N,N)*AI(N,N) 
	W=D 
	IF (W+1.0.EQ.1.0) THEN 
	  L=0 
	  WRITE(*,20) 
	  RETURN 
	END IF 
	P=AR(N,N)*BR(N) 
	Q=-AI(N,N)*BI(N) 
	S=(AR(N,N)-AI(N,N))*(BR(N)+BI(N)) 
	BR(N)=(P-Q)/D 
	BI(N)=(S-P-Q)/D 
	DO 200 I=N-1,1,-1 
	  DO 150 J=I+1,N 
	    P=AR(I,J)*BR(J) 
	    Q=AI(I,J)*BI(J) 
	    S=(AR(I,J)+AI(I,J))*(BR(J)+BI(J)) 
	    BR(I)=BR(I)-P+Q 
	    BI(I)=BI(I)-S+P+Q 
150	  CONTINUE 
200	CONTINUE 
	JS(N)=N 
	DO 110 K=N,1,-1 
	  P=BR(K) 
	  BR(K)=BR(JS(K)) 
	  BR(JS(K))=P 
	  P=BI(K) 
	  BI(K)=BI(JS(K)) 
	  BI(JS(K))=P 
110	CONTINUE 
	RETURN 
	END