annotate libcruft/odepack/solsy.f @ 1645:44ed237bdc1e

[project @ 1995-12-14 08:32:49 by jwe]
author jwe
date Thu, 14 Dec 1995 08:33:32 +0000
parents 395bb6d6c096
children d53c33d93440
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1644
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
1 SUBROUTINE SOLSY (WM, IWM, X, TEM)
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
2 CLLL. OPTIMIZE
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
3 INTEGER IWM
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
4 INTEGER IOWND, IOWNS,
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
5 1 ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, METH, MITER,
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
6 2 MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
7 INTEGER I, MEBAND, ML, MU
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
8 DOUBLE PRECISION WM, X, TEM
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
9 DOUBLE PRECISION ROWNS,
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
10 1 CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
11 DOUBLE PRECISION DI, HL0, PHL0, R
1645
44ed237bdc1e [project @ 1995-12-14 08:32:49 by jwe]
jwe
parents: 1644
diff changeset
12 DIMENSION WM(*), IWM(*), X(*), TEM(*)
1644
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
13 COMMON /LS0001/ ROWNS(209),
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
14 2 CCMAX, EL0, H, HMIN, HMXI, HU, RC, TN, UROUND,
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
15 3 IOWND(14), IOWNS(6),
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
16 4 ICF, IERPJ, IERSL, JCUR, JSTART, KFLAG, L, METH, MITER,
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
17 5 MAXORD, MAXCOR, MSBP, MXNCF, N, NQ, NST, NFE, NJE, NQU
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
18 C-----------------------------------------------------------------------
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
19 C THIS ROUTINE MANAGES THE SOLUTION OF THE LINEAR SYSTEM ARISING FROM
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
20 C A CHORD ITERATION. IT IS CALLED IF MITER .NE. 0.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
21 C IF MITER IS 1 OR 2, IT CALLS DGESL TO ACCOMPLISH THIS.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
22 C IF MITER = 3 IT UPDATES THE COEFFICIENT H*EL0 IN THE DIAGONAL
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
23 C MATRIX, AND THEN COMPUTES THE SOLUTION.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
24 C IF MITER IS 4 OR 5, IT CALLS DGBSL.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
25 C COMMUNICATION WITH SOLSY USES THE FOLLOWING VARIABLES..
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
26 C WM = REAL WORK SPACE CONTAINING THE INVERSE DIAGONAL MATRIX IF
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
27 C MITER = 3 AND THE LU DECOMPOSITION OF THE MATRIX OTHERWISE.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
28 C STORAGE OF MATRIX ELEMENTS STARTS AT WM(3).
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
29 C WM ALSO CONTAINS THE FOLLOWING MATRIX-RELATED DATA..
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
30 C WM(1) = SQRT(UROUND) (NOT USED HERE),
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
31 C WM(2) = HL0, THE PREVIOUS VALUE OF H*EL0, USED IF MITER = 3.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
32 C IWM = INTEGER WORK SPACE CONTAINING PIVOT INFORMATION, STARTING AT
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
33 C IWM(21), IF MITER IS 1, 2, 4, OR 5. IWM ALSO CONTAINS BAND
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
34 C PARAMETERS ML = IWM(1) AND MU = IWM(2) IF MITER IS 4 OR 5.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
35 C X = THE RIGHT-HAND SIDE VECTOR ON INPUT, AND THE SOLUTION VECTOR
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
36 C ON OUTPUT, OF LENGTH N.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
37 C TEM = VECTOR OF WORK SPACE OF LENGTH N, NOT USED IN THIS VERSION.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
38 C IERSL = OUTPUT FLAG (IN COMMON). IERSL = 0 IF NO TROUBLE OCCURRED.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
39 C IERSL = 1 IF A SINGULAR MATRIX AROSE WITH MITER = 3.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
40 C THIS ROUTINE ALSO USES THE COMMON VARIABLES EL0, H, MITER, AND N.
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
41 C-----------------------------------------------------------------------
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
42 IERSL = 0
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
43 GO TO (100, 100, 300, 400, 400), MITER
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
44 100 CALL DGESL (WM(3), N, N, IWM(21), X, 0)
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
45 RETURN
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
46 C
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
47 300 PHL0 = WM(2)
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
48 HL0 = H*EL0
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
49 WM(2) = HL0
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
50 IF (HL0 .EQ. PHL0) GO TO 330
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
51 R = HL0/PHL0
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
52 DO 320 I = 1,N
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
53 DI = 1.0D0 - R*(1.0D0 - 1.0D0/WM(I+2))
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
54 IF (DABS(DI) .EQ. 0.0D0) GO TO 390
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
55 320 WM(I+2) = 1.0D0/DI
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
56 330 DO 340 I = 1,N
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
57 340 X(I) = WM(I+2)*X(I)
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
58 RETURN
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
59 390 IERSL = 1
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
60 RETURN
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
61 C
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
62 400 ML = IWM(1)
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
63 MU = IWM(2)
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
64 MEBAND = 2*ML + MU + 1
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
65 CALL DGBSL (WM(3), MEBAND, N, ML, MU, IWM(21), X, 0)
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
66 RETURN
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
67 C----------------------- END OF SUBROUTINE SOLSY -----------------------
395bb6d6c096 [project @ 1995-12-14 08:32:12 by jwe]
jwe
parents:
diff changeset
68 END