2
SUBROUTINE PJAC (NEQ, Y, YH, NYH, EWT, FTEM, SAVF, WM, IWM, F,
4
C***BEGIN PROLOGUE PJAC
6
C***PURPOSE Subsidiary to DEBDF
8
C***TYPE SINGLE PRECISION (PJAC-S, DPJAC-D)
9
C***AUTHOR Watts, H. A., (SNLA)
12
C PJAC sets up the iteration matrix (involving the Jacobian) for the
13
C integration package DEBDF.
16
C***ROUTINES CALLED SGBFA, SGEFA, VNWRMS
17
C***COMMON BLOCKS DEBDF1
18
C***REVISION HISTORY (YYMMDD)
20
C 890531 Changed all specific intrinsics to generic. (WRB)
21
C 891214 Prologue converted to Version 4.0 format. (BAB)
22
C 900328 Added TYPE section. (WRB)
23
C 910722 Updated AUTHOR section. (ALS)
24
C 920422 Changed DIMENSION statement. (WRB)
28
INTEGER NEQ, NYH, IWM, I, I1, I2, IER, II, IOWND, IOWNS, J, J1,
29
1 JJ, JSTART, KFLAG, L, LENP, MAXORD, MBA, MBAND, MEB1, MEBAND,
30
2 METH, MITER, ML, ML3, MU, N, NFE, NJE, NQ, NQU, NST
32
REAL Y, YH, EWT, FTEM, SAVF, WM,
33
1 ROWND, ROWNS, EL0, H, HMIN, HMXI, HU, TN, UROUND,
34
2 CON, DI, FAC, HL0, R, R0, SRUR, YI, YJ, YJJ, VNWRMS
35
DIMENSION Y(*), YH(NYH,*), EWT(*), FTEM(*), SAVF(*),
36
1 WM(*), IWM(*), RPAR(*), IPAR(*)
37
COMMON /DEBDF1/ ROWND, ROWNS(210),
38
1 EL0, H, HMIN, HMXI, HU, TN, UROUND, IOWND(14), IOWNS(6),
39
2 IER, JSTART, KFLAG, L, METH, MITER, MAXORD, N, NQ, NST, NFE,
41
C-----------------------------------------------------------------------
42
C PJAC IS CALLED BY STOD TO COMPUTE AND PROCESS THE MATRIX
43
C P = I - H*EL(1)*J , WHERE J IS AN APPROXIMATION TO THE JACOBIAN.
44
C HERE J IS COMPUTED BY THE USER-SUPPLIED ROUTINE JAC IF
45
C MITER = 1 OR 4, OR BY FINITE DIFFERENCING IF MITER = 2, 3, OR 5.
46
C IF MITER = 3, A DIAGONAL APPROXIMATION TO J IS USED.
47
C J IS STORED IN WM AND REPLACED BY P. IF MITER .NE. 3, P IS THEN
48
C SUBJECTED TO LU DECOMPOSITION IN PREPARATION FOR LATER SOLUTION
49
C OF LINEAR SYSTEMS WITH P AS COEFFICIENT MATRIX. THIS IS DONE
50
C BY SGEFA IF MITER = 1 OR 2, AND BY SGBFA IF MITER = 4 OR 5.
52
C IN ADDITION TO VARIABLES DESCRIBED PREVIOUSLY, COMMUNICATION
53
C WITH PJAC USES THE FOLLOWING..
54
C Y = ARRAY CONTAINING PREDICTED VALUES ON ENTRY.
55
C FTEM = WORK ARRAY OF LENGTH N (ACOR IN STOD ).
56
C SAVF = ARRAY CONTAINING F EVALUATED AT PREDICTED Y.
57
C WM = REAL WORK SPACE FOR MATRICES. ON OUTPUT IT CONTAINS THE
58
C INVERSE DIAGONAL MATRIX IF MITER = 3 AND THE LU DECOMPOSITION
59
C OF P IF MITER IS 1, 2 , 4, OR 5.
60
C STORAGE OF MATRIX ELEMENTS STARTS AT WM(3).
61
C WM ALSO CONTAINS THE FOLLOWING MATRIX-RELATED DATA..
62
C WM(1) = SQRT(UROUND), USED IN NUMERICAL JACOBIAN INCREMENTS.
63
C WM(2) = H*EL0, SAVED FOR LATER USE IF MITER = 3.
64
C IWM = INTEGER WORK SPACE CONTAINING PIVOT INFORMATION, STARTING AT
65
C IWM(21), IF MITER IS 1, 2, 4, OR 5. IWM ALSO CONTAINS THE
66
C BAND PARAMETERS ML = IWM(1) AND MU = IWM(2) IF MITER IS 4 OR 5.
67
C EL0 = EL(1) (INPUT).
68
C IER = OUTPUT ERROR FLAG, = 0 IF NO TROUBLE, .NE. 0 IF
69
C P MATRIX FOUND TO BE SINGULAR.
70
C THIS ROUTINE ALSO USES THE COMMON VARIABLES EL0, H, TN, UROUND,
71
C MITER, N, NFE, AND NJE.
72
C-----------------------------------------------------------------------
73
C***FIRST EXECUTABLE STATEMENT PJAC
76
GO TO (100, 200, 300, 400, 500), MITER
77
C IF MITER = 1, CALL JAC AND MULTIPLY BY SCALAR. -----------------------
81
CALL JAC (TN, Y, WM(3), N, RPAR, IPAR)
84
120 WM(I+2) = WM(I+2)*CON
86
C IF MITER = 2, MAKE N CALLS TO F TO APPROXIMATE J. --------------------
87
200 FAC = VNWRMS (N, SAVF, EWT)
88
R0 = 1000.0E0*ABS(H)*UROUND*N*FAC
89
IF (R0 .EQ. 0.0E0) R0 = 1.0E0
94
R = MAX(SRUR*ABS(YJ),R0*EWT(J))
97
CALL F (TN, Y, FTEM, RPAR, IPAR)
99
220 WM(I+J1) = (FTEM(I) - SAVF(I))*FAC
104
C ADD IDENTITY MATRIX. -------------------------------------------------
107
WM(J) = WM(J) + 1.0E0
109
C DO LU DECOMPOSITION ON P. --------------------------------------------
110
CALL SGEFA (WM(3), N, N, IWM(21), IER)
112
C IF MITER = 3, CONSTRUCT A DIAGONAL APPROXIMATION TO J AND P. ---------
117
310 Y(I) = Y(I) + R*(H*SAVF(I) - YH(I,2))
118
CALL F (TN, Y, WM(3), RPAR, IPAR)
121
R0 = H*SAVF(I) - YH(I,2)
122
DI = 0.1E0*R0 - H*(WM(I+2) - SAVF(I))
124
IF (ABS(R0) .LT. UROUND*EWT(I)) GO TO 320
125
IF (ABS(DI) .EQ. 0.0E0) GO TO 330
126
WM(I+2) = 0.1E0*R0/DI
131
C IF MITER = 4, CALL JAC AND MULTIPLY BY SCALAR. -----------------------
140
CALL JAC (TN, Y, WM(ML3), MEBAND, RPAR, IPAR)
143
420 WM(I+2) = WM(I+2)*CON
145
C IF MITER = 5, MAKE MBAND CALLS TO F TO APPROXIMATE J. ----------------
153
FAC = VNWRMS (N, SAVF, EWT)
154
R0 = 1000.0E0*ABS(H)*UROUND*N*FAC
155
IF (R0 .EQ. 0.0E0) R0 = 1.0E0
159
R = MAX(SRUR*ABS(YI),R0*EWT(I))
161
CALL F (TN, Y, FTEM, RPAR, IPAR)
162
DO 550 JJ = J,N,MBAND
165
R = MAX(SRUR*ABS(YJJ),R0*EWT(JJ))
169
II = JJ*MEB1 - ML + 2
171
540 WM(II+I) = (FTEM(I) - SAVF(I))*FAC
175
C ADD IDENTITY MATRIX. -------------------------------------------------
178
WM(II) = WM(II) + 1.0E0
180
C DO LU DECOMPOSITION OF P. --------------------------------------------
181
CALL SGBFA (WM(3), MEBAND, N, ML, MU, IWM(21), IER)
183
C----------------------- END OF SUBROUTINE PJAC -----------------------