SUBROUTINE LEQU64 (AMAT,AINV,YVEC,NEQU,NINV,NERR)
C
C DESCRIPTION : SEE SUBROUTINE LINEQU
C
C-----------------------------------------------------------------------
C
REAL *8 AMAT(64,1),AINV(64,1),YVEC(64)
REAL *8 E,E1,E2,S
C S : SMALLEST MEANINGFUL POSITIVE NUMBER
DATA S /1.D-38/
INTEGER NEQU,NINV,NERR
INTEGER NTOT,NEQ1,M,L,K,K1
C
NERR = 0
NTOT = NEQU + 1
NEQ1 = NEQU - 1
DO 10 M=1,NEQU
10 AMAT(M,NEQU+2) = YVEC(M)
DO 30 M=1,NEQU
DO 30 L=1,M
30 AMAT(L,M+1) = AMAT(M,L)
K = 0
100 IF (K.GE.NINV) GO TO 200
K1 = K
K = K + 1
IF (DABS(AMAT(K,K+1)).LT.S) GO TO 900
E = 1.D0 / AMAT(K,K+1)
AINV(K,K) = E
M = 0
110 M = M + 1
IF (M.GE.K) GO TO 160
E1 = -AMAT(M,K+1) * E
AINV(K,M) = AINV(K,M) * E
E2 = -AINV(K,M)
DO 120 L=M,K1
120 AINV(L,M) = AINV(L,M) + E2 * AMAT(L,K+1)
IF (K.GT.NEQ1) GO TO 140
DO 130 L=K,NEQ1
AMAT(M,L+2) = AMAT(M,L+2) + E1 * AMAT(K,L+2)
130 AINV(L+1,M) = AINV(L+1,M) + E2 * AMAT(K,L+2)
140 AMAT(M,NEQU+2) = AMAT(M,NEQU+2) + E1 * AMAT(K,NEQU+2)
GO TO 110
160 IF (M.GE.NEQU) GO TO 180
M = M + 1
E1 = -AMAT(K,M+1) * E
AMAT(M,M+1) = AMAT(M,M+1) + E1 * AMAT(K,M+1)
AMAT(K,M+1) = -E1
AINV(M,K) = E1
DO 170 L=M,NEQU
170 AMAT(M,L+2) = AMAT(M,L+2) + E1 * AMAT(K,L+2)
GO TO 160
180 AMAT(K,M+2) = AMAT(K,M+2) * E
GO TO 100
200 IF (K.GE.NEQU) RETURN
K1 = K
K = K + 1
IF (DABS(AMAT(K,K+1)).LT.S) GO TO 900
E = 1.D0 / AMAT(K,K+1)
M = 0
210 IF (M.GE.NINV) GO TO 310
M = M + 1
E1 = -AMAT(M,K+1) * E
AINV(K,M) = AINV(K,M) * E
E2 = -AINV(K,M)
DO 220 L=M,K1
220 AINV(L,M) = AINV(L,M) + E2 * AMAT(L,K+1)
IF (K.GT.NEQ1) GO TO 240
DO 230 L=K,NEQ1
AMAT(M,L+2) = AMAT(M,L+2) + E1 * AMAT(K,L+2)
230 AINV(L+1,M) = AINV(L+1,M) + E2 * AMAT(K,L+2)
240 AMAT(M,NEQU+2) = AMAT(M,NEQU+2) + E1 * AMAT(K,NEQU+2)
GO TO 210
310 M = M + 1
IF (M.GE.K) GO TO 360
E1 = -AMAT(M,K+1) * E
DO 330 L=K,NEQU
330 AMAT(M,L+2) = AMAT(M,L+2) + E1 * AMAT(K,L+2)
GO TO 310
360 IF (M.GE.NEQU) GO TO 380
M = M + 1
E1 = -AMAT(K,M+1) * E
AMAT(M,M+1) = AMAT(M,M+1) + E1 * AMAT(K,M+1)
AMAT(K,M+1) = -E1
DO 370 L=M,NEQU
370 AMAT(M,L+2) = AMAT(M,L+2) + E1 * AMAT(K,L+2)
GO TO 360
380 AMAT(K,M+2) = AMAT(K,M+2) * E
GO TO 200
900 NERR = 1
RETURN
END
[KLOE]
[Offline Doc]
[TRK Files]
Generated with Light on Thu Apr 8 13:00:16 MET DST 1999
.
Mail comments and suggestions.