SUBROUTINE GMADD(A,B,R,N,M) INCLUDE 'VKLUGPRM.FTN' REAL*8 A,B,R DIMENSION A(1),B(1),R(1) C NM=N*M DO 10 I=1,N DO 10 J=1,M IJ=(I-1)*RRW+J 10 R(IJ)=A(IJ)+B(IJ) RETURN END SUBROUTINE GMPRD(A,B,R,N,M,L) INCLUDE 'VKLUGPRM.FTN' REAL*8 A,B,R DIMENSION A(1),B(1),R(1) C SPECIAL MATRIX MULTIPLY WITHIN SPREADSHEET MATRIX DO 10 K=1,L DO 10 J=1,M NL=(J-1)*RRW+K R(NL)=0. DO 10 I=1,N NM=(J-1)*RRW+I ML=(I-1)*RRW+K R(NL)=R(NL)+A(NM)*B(ML) 10 CONTINUE RETURN END SUBROUTINE GMSUB(A,B,R,N,M) INCLUDE 'VKLUGPRM.FTN' REAL*8 A,B,R DIMENSION A(1),B(1),R(1) C NM=N*M DO 10 I=1,N DO 10 J=1,M IJ=(I-1)*RRW+J 10 R(IJ)=A(IJ)-B(IJ) RETURN END C SUBROUTINE GMTRA(A,R,N,M) C INCLUDE 'VKLUGPRM.FTN' C REAL*8 A,R C DIMENSION A(1),R(1) C IR=0 C DO 10 I=1,N C IJ=I-N C DO 10 J=1,M C IJ=IJ+N C IR=IR+1 C 10 R(IR)=A(IJ) C RETURN C END SUBROUTINE GTPRD(A,B,R,N,M,L) INCLUDE 'VKLUGPRM.FTN' REAL*8 A,B,R DIMENSION A(1),B(1),R(1) C SPECIAL MATRIX MULTIPLY WITHIN SPREADSHEET MATRIX DO 10 K=1,L DO 10 J=1,M NL=(J-1)*RRW+K R(NL)=0. DO 10 I=1,N C INVERT ROW/COLUMN USE FOR MATRIX A NM=(I-1)*RRW+J ML=(I-1)*RRW+K R(NL)=R(NL)+A(NM)*B(ML) 10 CONTINUE RETURN END C SUBROUTINE MINV(A,N,D,L,M) C INCLUDE 'VKLUGPRM.FTN' C REAL*8 A,D,L,M C REAL*8 BIGA C DIMENSION A(1),L(1),M(1) C D=1.0 C NK=-N C DO 80 K=1,N C NK=NK+N C L(K)=K C M(K)=K C KK=NK+K C BIGA=A(KK) C DO 20 J=K,N C IZ=N*(J-1) C DO 20 I=K,N C IJ=IZ+I C 10 IF( ABS(BIGA)- ABS(A(IJ))) 15,20,20 C 15 BIGA=A(IJ) C L(K)=I C M(K)=J C 20 CONTINUE C J=L(K) C IF(J-K) 35,35,25 C 25 KI=K-N C DO 30 I=1,N C KI=KI+N C HOLD=-A(KI) C JI=KI-K+J C A(KI)=A(JI) C 30 A(JI) =HOLD C 35 I=M(K) C IF(I-K) 45,45,38 C 38 JP=N*(I-1) C DO 40 J=1,N C JK=NK+J C JI=JP+J C HOLD=-A(JK) C A(JK)=A(JI) C 40 A(JI) =HOLD C 45 IF(BIGA) 48,46,48 C 46 D=0.0 C RETURN C 48 DO 55 I=1,N C IF(I-K) 50,55,50 C 50 IK=NK+I C A(IK)=A(IK)/(-BIGA) C 55 CONTINUE C DO 65 I=1,N C IK=NK+I C HOLD=A(IK) C IJ=I-N C DO 65 J=1,N C IJ=IJ+N C IF(I-K) 60,65,60 C 60 IF(J-K) 62,65,62 C 62 KJ=IJ-I+K C A(IJ)=HOLD*A(KJ)+A(IJ) C 65 CONTINUE C KJ=K-N C DO 75 J=1,N C KJ=KJ+N C IF(J-K) 70,75,70 C 70 A(KJ)=A(KJ)/BIGA C 75 CONTINUE C D=D*BIGA C A(KK)=1.0/BIGA C 80 CONTINUE C K=N C 100 K=(K-1) C IF(K) 150,150,105 C 105 I=L(K) C IF(I-K) 120,120,108 C 108 JQ=N*(K-1) C JR=N*(I-1) C DO 110 J=1,N C JK=JQ+J C HOLD=A(JK) C JI=JR+J C A(JK)=-A(JI) C 110 A(JI) =HOLD C 120 J=M(K) C IF(J-K) 100,100,125 C 125 KI=K-N C DO 130 I=1,N C KI=KI+N C HOLD=A(KI) C JI=KI-K+J C A(KI)=-A(JI) C 130 A(JI) =HOLD C GO TO 100 C 150 RETURN C END