www.pudn.com > Fortran.zip > KLMAN.FOR, change:1995-03-31,size:1855b


 
 
	SUBROUTINE KLMAN(N,M,K,F,Q,R,H,Y,X,P,G,L,E,IA,A,B,IS,JS) 
	DIMENSION F(N,N),Q(N,N),R(M,M),H(M,N),Y(K,M),X(K,N) 
	DIMENSION P(N,N),G(N,M),E(M,M),A(IA,IA),B(IA,IA) 
	DIMENSION IS(M),JS(M) 
	DOUBLE PRECISION F,Q,R,H,Y,X,P,G,E,A,B 
	DO 2 I=1,N 
	DO 2 J=1,N 
	  A(I,J)=0.0 
	  DO 1 KK=1,N 
1	  A(I,J)=A(I,J)+P(I,KK)*F(J,KK) 
2	CONTINUE 
	DO 4 I=1,N 
	DO 4 J=1,N 
	  P(I,J)=Q(I,J) 
	  DO 3 KK=1,N 
3	  P(I,J)=P(I,J)+F(I,KK)*A(KK,J) 
4	CONTINUE 
 
	DO 300 II=2,K 
	  DO 20 I=1,N 
	  DO 20 J=1,M 
	    A(I,J)=0.0 
	    DO 10 KK=1,N 
10	    A(I,J)=A(I,J)+P(I,KK)*H(J,KK) 
20	  CONTINUE 
	  DO 40 I=1,M 
	  DO 40 J=1,M 
	    E(I,J)=R(I,J) 
	    DO 30 KK=1,N 
30	    E(I,J)=E(I,J)+H(I,KK)*A(KK,J) 
40	  CONTINUE 
	  CALL BRINV(E,M,L,IS,JS) 
	  IF (L.EQ.0) RETURN 
	  DO 60 I=1,N 
	  DO 60 J=1,M 
	    G(I,J)=0.0 
	    DO 50 KK=1,M 
50	    G(I,J)=G(I,J)+A(I,KK)*E(J,KK) 
60	  CONTINUE 
	  DO 80 I=1,N 
	    X(II,I)=0.0 
	    DO 70 J=1,N 
70	    X(II,I)=X(II,I)+F(I,J)*X(II-1,J) 
80	  CONTINUE 
	  DO 100 I=1,M 
	    B(I,1)=Y(II,I) 
	    DO 90 J=1,N 
90	    B(I,1)=B(I,1)-H(I,J)*X(II,J) 
100	  CONTINUE 
	  DO 120 I=1,N 
	    DO 110 J=1,M 
110	    X(II,I)=X(II,I)+G(I,J)*B(J,1) 
120	  CONTINUE 
	  IF (II.LT.K) THEN 
	    DO 140 I=1,N 
	    DO 140 J=1,N 
	      A(I,J)=0.0 
	      DO 130 KK=1,M 
130	      A(I,J)=A(I,J)-G(I,KK)*H(KK,J) 
	      IF (I.EQ.J) A(I,J)=1.0+A(I,J) 
140	    CONTINUE 
 
	    DO 160 I=1,N 
	    DO 160 J=1,N 
	      B(I,J)=0.0 
	      DO 150 KK=1,N 
150	      B(I,J)=B(I,J)+A(I,KK)*P(KK,J) 
160	    CONTINUE 
	    DO 180 I=1,N 
	    DO 180 J=1,N 
	      A(I,J)=0.0 
	      DO 170 KK=1,N 
170	      A(I,J)=A(I,J)+B(I,KK)*F(J,KK) 
180	    CONTINUE 
	    DO 200 I=1,N 
	    DO 200 J=1,N 
	      P(I,J)=Q(I,J) 
	      DO 190 KK=1,N 
190	      P(I,J)=P(I,J)+F(I,KK)*A(J,KK) 
200	    CONTINUE 
	  END IF 
300	CONTINUE 
	L=1 
	RETURN 
	END