2
SUBROUTINE SLVS (WM, IWM, X, TEM)
3
C***BEGIN PROLOGUE SLVS
5
C***PURPOSE Subsidiary to DEBDF
7
C***TYPE SINGLE PRECISION (SLVS-S, DSLVS-D)
8
C***AUTHOR Watts, H. A., (SNLA)
11
C SLVS solves the linear system in the iteration scheme for the
12
C integrator package DEBDF.
15
C***ROUTINES CALLED SGBSL, SGESL
16
C***COMMON BLOCKS DEBDF1
17
C***REVISION HISTORY (YYMMDD)
19
C 891214 Prologue converted to Version 4.0 format. (BAB)
20
C 900328 Added TYPE section. (WRB)
21
C 910722 Updated AUTHOR section. (ALS)
22
C 920422 Changed DIMENSION statement. (WRB)
26
INTEGER IWM, I, IER, IOWND, IOWNS, JSTART, KFLAG, L, MAXORD,
27
1 MEBAND, METH, MITER, ML, MU, N, NFE, NJE, NQ, NQU, NST
29
1 ROWND, ROWNS, EL0, H, HMIN, HMXI, HU, TN, UROUND,
31
DIMENSION WM(*), IWM(*), X(*), TEM(*)
32
COMMON /DEBDF1/ ROWND, ROWNS(210),
33
1 EL0, H, HMIN, HMXI, HU, TN, UROUND, IOWND(14), IOWNS(6),
34
2 IER, JSTART, KFLAG, L, METH, MITER, MAXORD, N, NQ, NST, NFE,
36
C-----------------------------------------------------------------------
37
C THIS ROUTINE MANAGES THE SOLUTION OF THE LINEAR SYSTEM ARISING FROM
38
C A CHORD ITERATION. IT IS CALLED BY STOD IF MITER .NE. 0.
39
C IF MITER IS 1 OR 2, IT CALLS SGESL TO ACCOMPLISH THIS.
40
C IF MITER = 3 IT UPDATES THE COEFFICIENT H*EL0 IN THE DIAGONAL
41
C MATRIX, AND THEN COMPUTES THE SOLUTION.
42
C IF MITER IS 4 OR 5, IT CALLS SGBSL.
43
C COMMUNICATION WITH SLVS USES THE FOLLOWING VARIABLES..
44
C WM = REAL WORK SPACE CONTAINING THE INVERSE DIAGONAL MATRIX IF MITER
45
C IS 3 AND THE LU DECOMPOSITION OF THE MATRIX OTHERWISE.
46
C STORAGE OF MATRIX ELEMENTS STARTS AT WM(3).
47
C WM ALSO CONTAINS THE FOLLOWING MATRIX-RELATED DATA..
48
C WM(1) = SQRT(UROUND) (NOT USED HERE),
49
C WM(2) = HL0, THE PREVIOUS VALUE OF H*EL0, USED IF MITER = 3.
50
C IWM = INTEGER WORK SPACE CONTAINING PIVOT INFORMATION, STARTING AT
51
C IWM(21), IF MITER IS 1, 2, 4, OR 5. IWM ALSO CONTAINS THE
52
C BAND PARAMETERS ML = IWM(1) AND MU = IWM(2) IF MITER IS 4 OR 5.
53
C X = THE RIGHT-HAND SIDE VECTOR ON INPUT, AND THE SOLUTION VECTOR
54
C ON OUTPUT, OF LENGTH N.
55
C TEM = VECTOR OF WORK SPACE OF LENGTH N, NOT USED IN THIS VERSION.
56
C IER = OUTPUT FLAG (IN COMMON). IER = 0 IF NO TROUBLE OCCURRED.
57
C IER = -1 IF A SINGULAR MATRIX AROSE WITH MITER = 3.
58
C THIS ROUTINE ALSO USES THE COMMON VARIABLES EL0, H, MITER, AND N.
59
C-----------------------------------------------------------------------
60
C***FIRST EXECUTABLE STATEMENT SLVS
62
GO TO (100, 100, 300, 400, 400), MITER
63
100 CALL SGESL (WM(3), N, N, IWM(21), X, 0)
69
IF (HL0 .EQ. PHL0) GO TO 330
72
DI = 1.0E0 - R*(1.0E0 - 1.0E0/WM(I+2))
73
IF (ABS(DI) .EQ. 0.0E0) GO TO 390
74
320 WM(I+2) = 1.0E0/DI
76
340 X(I) = WM(I+2)*X(I)
83
MEBAND = 2*ML + MU + 1
84
CALL SGBSL (WM(3), MEBAND, N, ML, MU, IWM(21), X, 0)
86
C----------------------- END OF SUBROUTINE SLVS -----------------------