3
C ..................................................................
8
C TO SOLVE A SYSTEM OF SIMULTANEOUS LINEAR EQUATIONS WITH
9
C SYMMETRIC COEFFICIENT MATRIX UPPER TRIANGULAR PART OF WHICH
10
C IS ASSUMED TO BE STORED COLUMNWISE.
13
C CALL GELS(R,A,M,N,EPS,IER,AUX)
15
C DESCRIPTION OF PARAMETERS
16
C R - M BY N RIGHT HAND SIDE MATRIX. (DESTROYED)
17
C ON RETURN R CONTAINS THE SOLUTION OF THE EQUATIONS.
18
C A - UPPER TRIANGULAR PART OF THE SYMMETRIC
19
C M BY M COEFFICIENT MATRIX. (DESTROYED)
20
C M - THE NUMBER OF EQUATIONS IN THE SYSTEM.
21
C N - THE NUMBER OF RIGHT HAND SIDE VECTORS.
22
C EPS - AN INPUT CONSTANT WHICH IS USED AS RELATIVE
23
C TOLERANCE FOR TEST ON LOSS OF SIGNIFICANCE.
24
C IER - RESULTING ERROR PARAMETER CODED AS FOLLOWS
26
C IER=-1 - NO RESULT BECAUSE OF M LESS THAN 1 OR
27
C PIVOT ELEMENT AT ANY ELIMINATION STEP
29
C IER=K - WARNING DUE TO POSSIBLE LOSS OF SIGNIFI-
30
C CANCE INDICATED AT ELIMINATION STEP K+1,
31
C WHERE PIVOT ELEMENT WAS LESS THAN OR
32
C EQUAL TO THE INTERNAL TOLERANCE EPS TIMES
33
C ABSOLUTELY GREATEST MAIN DIAGONAL
34
C ELEMENT OF MATRIX A.
35
C AUX - AN AUXILIARY STORAGE ARRAY WITH DIMENSION M-1.
38
C UPPER TRIANGULAR PART OF MATRIX A IS ASSUMED TO BE STORED
39
C COLUMNWISE IN M*(M+1)/2 SUCCESSIVE STORAGE LOCATIONS, RIGHT
40
C HAND SIDE MATRIX R COLUMNWISE IN N*M SUCCESSIVE STORAGE
41
C LOCATIONS. ON RETURN SOLUTION MATRIX R IS STORED COLUMNWISE
43
C THE PROCEDURE GIVES RESULTS IF THE NUMBER OF EQUATIONS M IS
44
C GREATER THAN 0 AND PIVOT ELEMENTS AT ALL ELIMINATION STEPS
45
C ARE DIFFERENT FROM 0. HOWEVER WARNING IER=K - IF GIVEN -
46
C INDICATES POSSIBLE LOSS OF SIGNIFICANCE. IN CASE OF A WELL
47
C SCALED MATRIX A AND APPROPRIATE TOLERANCE EPS, IER=K MAY BE
48
C INTERPRETED THAT MATRIX A HAS THE RANK K. NO WARNING IS
50
C ERROR PARAMETER IER=-1 DOES NOT NECESSARILY MEAN THAT
51
C MATRIX A IS SINGULAR, AS ONLY MAIN DIAGONAL ELEMENTS
52
C ARE USED AS PIVOT ELEMENTS. POSSIBLY SUBROUTINE GELG (WHICH
53
C WORKS WITH TOTAL PIVOTING) WOULD BE ABLE TO FIND A SOLUTION.
55
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
59
C SOLUTION IS DONE BY MEANS OF GAUSS-ELIMINATION WITH
60
C PIVOTING IN MAIN DIAGONAL, IN ORDER TO PRESERVE
61
C SYMMETRY IN REMAINING COEFFICIENT MATRICES.
63
C ..................................................................
70
extern double fabs(double);
71
int gels( double [], double [], int, double, double [] );
75
gels( A, R, M, EPS, AUX )
81
int I = 0, J = 0, K, L, IER;
82
int II, LL, LLD, LR, LT, LST, LLST, LEND;
83
double tb, piv, tol, pivi;
91
/* SEARCH FOR GREATEST MAIN DIAGONAL ELEMENT */
93
/* Diagonal elements are at A(i,i) = 1, 3, 6, 10, ...
94
* A(i,j) = A( i(i-1)/2 + j )
113
C MAIN DIAGONAL ELEMENT A(I)=A(J,J) IS FIRST PIVOT ELEMENT.
114
C PIV CONTAINS THE ABSOLUTE VALUE OF A(I).
117
/* START ELIMINATION LOOP */
120
for( K=1; K<=M; K++ )
122
/* TEST ON USEFULNESS OF SYMMETRIC ALGORITHM */
135
/* PIVOT ROW REDUCTION AND ROW INTERCHANGE IN RIGHT HAND SIDE R */
142
/* IS ELIMINATION TERMINATED */
146
C ROW AND COLUMN INTERCHANGE AND PIVOT ROW REDUCTION IN MATRIX A.
147
C ELEMENTS OF PIVOT COLUMN ARE SAVED IN AUXILIARY VECTOR AUX.
149
LR = LST + (LT*(K+J-1))/2;
152
for( II=K; II<=LEND; II++ )
171
/* SAVE COLUMN INTERCHANGE INFORMATION */
173
/* ELEMENT REDUCTION AND SEARCH FOR NEXT PIVOT */
177
for( II=K; II<=LEND; II++ )
182
for( LLD=II; LLD<=LEND; LLD++ )
186
A[L-1] += pivi * A[LL-1];
199
R[LL-1] += pivi * R[LR-1];
202
/* END OF ELIMINATION LOOP */
204
/* BACK SUBSTITUTION AND BACK INTERCHANGE */
213
for( I=2; I<=M; I++ )
222
for( LT=II; LT<=LEND; LT++ )
226
tb -= A[K-1] * R[LL-1];