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


 
	SUBROUTINE ACJDN(AR,AI,N,BR,BI,M,L,JS) 
	DIMENSION AR(N,N),AI(N,N),BR(N,M),BI(N,M),JS(N) 
	DOUBLE PRECISION AR,AI,BR,BI,D,P,Q,S 
	L=1 
	DO 100 K=1,N 
	  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 
	  DO 35 J=1,M 
	    P=BR(K,J) 
	    BR(K,J)=BR(IS,J) 
	    BR(IS,J)=P 
	    P=BI(K,J) 
	    BI(K,J)=BI(IS,J) 
	    BI(IS,J)=P 
35	  CONTINUE 
	  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 
	  DO 65 J=1,M 
	    P=BR(K,J)*AR(K,K) 
	    Q=-BI(K,J)*AI(K,K) 
	    S=(AR(K,K)-AI(K,K))*(BR(K,J)+BI(K,J)) 
	    BR(K,J)=(P-Q)/D 
	    BI(K,J)=(S-P-Q)/D 
65	  CONTINUE 
	  DO 90 I=1,N 
	    IF (I.NE.K) THEN 
	      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 
	      DO 85 J=1,M 
	        P=AR(I,K)*BR(K,J) 
	        Q=AI(I,K)*BI(K,J) 
	        S=(AR(I,K)+AI(I,K))*(BR(K,J)+BI(K,J)) 
	        BR(I,J)=BR(I,J)-P+Q 
	        BI(I,J)=BI(I,J)-S+P+Q 
85	      CONTINUE 
	    END IF 
90	  CONTINUE 
100	CONTINUE 
	DO 110 K=N,1,-1 
	DO 110 J=1,M 
	  P=BR(K,J) 
	  BR(K,J)=BR(JS(K),J) 
	  BR(JS(K),J)=P 
	  P=BI(K,J) 
	  BI(K,J)=BI(JS(K),J) 
	  BI(JS(K),J)=P 
110	CONTINUE 
	RETURN 
	END