annotate libcruft/odessa/odessa_prepj.f @ 4329:d53c33d93440

[project @ 2003-02-18 20:00:48 by jwe]
author jwe
date Tue, 18 Feb 2003 20:08:20 +0000
parents 258c1d15ad78
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
1 SUBROUTINE ODESSA_PREPJ (NEQ, Y, YH, NYH, WM, IWM, EWT, SAVF,
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
2 1 FTEM, PAR, F, JAC, JOPT)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
3 IMPLICIT DOUBLE PRECISION (A-H,O-Z)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
4 DIMENSION NEQ(*), Y(*), YH(NYH,*), WM(*), IWM(*), EWT(*),
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
5 1 SAVF(*), FTEM(*), PAR(*)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
6 EXTERNAL F, JAC
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
7 PARAMETER (ZERO=0.0D0,ONE=1.0D0)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
8 COMMON /ODE001/ ROWND, ROWNS(173),
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
9 2 RDUM1(37), EL0, H, RDUM2(4), TN, UROUND,
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
10 3 IOWND(14), IOWNS(4),
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
11 4 IDUM1(3), IERPJ, IDUM2, JCUR, IDUM3(4),
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
12 5 MITER, IDUM4(4), N, IDUM5(2), NFE, NJE, IDUM6
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
13 C-----------------------------------------------------------------------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
14 C ODESSA_PREPJ IS CALLED BY ODESSA_STODE TO COMPUTE AND PROCESS THE MATRIX
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
15 C P = I - H*EL(1)*J , WHERE J IS AN APPROXIMATION TO THE JACOBIAN.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
16 C IF ISOPT = 1, ODESSA_PREPJ IS ALSO CALLED BY ODESSA_SPRIME WITH JOPT = 1.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
17 C HERE J IS COMPUTED BY THE USER-SUPPLIED ROUTINE JAC IF
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
18 C MITER = 1 OR 4, OR BY FINITE DIFFERENCING IF MITER = 2, 3, OR 5.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
19 C IF MITER = 3, A DIAGONAL APPROXIMATION TO J IS USED.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
20 C J IS STORED IN WM AND REPLACED BY P. IF MITER .NE. 3, P IS THEN
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
21 C SUBJECTED TO LU DECOMPOSITION (JOPT = 0) IN PREPARATION FOR LATER
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
22 C SOLUTION OF LINEAR SYSTEMS WITH P AS COEFFICIENT MATRIX. THIS IS
4329
d53c33d93440 [project @ 2003-02-18 20:00:48 by jwe]
jwe
parents: 3987
diff changeset
23 C DONE BY DGETRF IF MITER = 1 OR 2, AND BY DGBTRF IF MITER = 4 OR 5.
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
24 C
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
25 C IN ADDITION TO VARIABLES DESCRIBED PREVIOUSLY, COMMUNICATION
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
26 C WITH ODESSA_PREPJ USES THE FOLLOWING..
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
27 C Y = ARRAY CONTAINING PREDICTED VALUES ON ENTRY.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
28 C FTEM = WORK ARRAY OF LENGTH N (ACOR IN ODESSA_STODE).
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
29 C SAVF = ARRAY CONTAINING F EVALUATED AT PREDICTED Y.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
30 C WM = REAL WORK SPACE FOR MATRICES. ON OUTPUT IT CONTAINS THE
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
31 C INVERSE DIAGONAL MATRIX IF MITER = 3 AND THE LU DECOMPOSITION
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
32 C OF P IF MITER IS 1, 2 , 4, OR 5.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
33 C STORAGE OF MATRIX ELEMENTS STARTS AT WM(3).
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
34 C WM ALSO CONTAINS THE FOLLOWING MATRIX-RELATED DATA..
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
35 C WM(1) = SQRT(UROUND), USED IN NUMERICAL JACOBIAN INCREMENTS.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
36 C WM(2) = H*EL0, SAVED FOR LATER USE IF MITER = 3.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
37 C IWM = INTEGER WORK SPACE CONTAINING PIVOT INFORMATION, STARTING AT
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
38 C IWM(21), IF MITER IS 1, 2, 4, OR 5. IWM ALSO CONTAINS BAND
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
39 C PARAMETERS ML = IWM(1) AND MU = IWM(2) IF MITER IS 4 OR 5.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
40 C EL0 = EL(1) (INPUT).
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
41 C IERPJ = OUTPUT ERROR FLAG, = 0 IF NO TROUBLE, .GT. 0 IF
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
42 C P MATRIX FOUND TO BE SINGULAR.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
43 C JCUR = OUTPUT FLAG = 1 TO INDICATE THAT THE JACOBIAN MATRIX
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
44 C (OR APPROXIMATION) IS NOW CURRENT.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
45 C JOPT = INPUT JACOBIAN OPTION, = 1 IF JAC IS DESIRED ONLY.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
46 C THIS ROUTINE ALSO USES THE COMMON VARIABLES EL0, H, TN, UROUND,
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
47 C IERPJ, JCUR, MITER, N, NFE, AND NJE.
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
48 C-----------------------------------------------------------------------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
49 NJE = NJE + 1
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
50 IERPJ = 0
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
51 JCUR = 1
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
52 HL0 = H*EL0
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
53 GO TO (100, 200, 300, 400, 500), MITER
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
54 C IF MITER = 1, CALL JAC AND MULTIPLY BY SCALAR. -----------------------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
55 100 LENP = N*N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
56 DO 110 I = 1,LENP
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
57 110 WM(I+2) = ZERO
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
58 CALL JAC (NEQ, TN, Y, PAR, 0, 0, WM(3), N)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
59 IF (JOPT .EQ. 1) RETURN
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
60 CON = -HL0
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
61 DO 120 I = 1,LENP
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
62 120 WM(I+2) = WM(I+2)*CON
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
63 GO TO 240
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
64 C IF MITER = 2, MAKE N CALLS TO F TO APPROXIMATE J. --------------------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
65 200 FAC = ODESSA_VNORM (N, SAVF, EWT)
3987
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
66 R0 = 1000.0D0*DABS(H)*UROUND*DBLE(N)*FAC
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
67 IF (R0 .EQ. ZERO) R0 = ONE
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
68 SRUR = WM(1)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
69 J1 = 2
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
70 DO 230 J = 1,N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
71 YJ = Y(J)
3987
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
72 R = DMAX1(SRUR*DABS(YJ),R0/EWT(J))
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
73 Y(J) = Y(J) + R
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
74 FAC = -HL0/R
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
75 CALL F (NEQ, TN, Y, PAR, FTEM)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
76 DO 220 I = 1,N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
77 220 WM(I+J1) = (FTEM(I) - SAVF(I))*FAC
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
78 Y(J) = YJ
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
79 J1 = J1 + N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
80 230 CONTINUE
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
81 NFE = NFE + N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
82 IF (JOPT .EQ. 1) RETURN
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
83 C ADD IDENTITY MATRIX. -------------------------------------------------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
84 240 J = 3
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
85 DO 250 I = 1,N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
86 WM(J) = WM(J) + ONE
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
87 250 J = J + (N + 1)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
88 C DO LU DECOMPOSITION ON P. --------------------------------------------
4329
d53c33d93440 [project @ 2003-02-18 20:00:48 by jwe]
jwe
parents: 3987
diff changeset
89 CALL DGETRF ( N, N, WM(3), N, IWM(21), IER)
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
90 IF (IER .NE. 0) IERPJ = 1
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
91 RETURN
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
92 C IF MITER = 3, CONSTRUCT A DIAGONAL APPROXIMATION TO J AND P. ---------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
93 300 WM(2) = HL0
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
94 R = EL0*0.1D0
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
95 DO 310 I = 1,N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
96 310 Y(I) = Y(I) + R*(H*SAVF(I) - YH(I,2))
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
97 CALL F (NEQ, TN, Y, PAR, WM(3))
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
98 NFE = NFE + 1
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
99 DO 320 I = 1,N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
100 R0 = H*SAVF(I) - YH(I,2)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
101 DI = 0.1D0*R0 - H*(WM(I+2) - SAVF(I))
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
102 WM(I+2) = 1.0D0
3987
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
103 IF (DABS(R0) .LT. UROUND/EWT(I)) GO TO 320
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
104 IF (DABS(DI) .EQ. ZERO) GO TO 330
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
105 WM(I+2) = 0.1D0*R0/DI
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
106 320 CONTINUE
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
107 RETURN
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
108 330 IERPJ = 1
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
109 RETURN
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
110 C IF MITER = 4, CALL JAC AND MULTIPLY BY SCALAR. -----------------------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
111 400 ML = IWM(1)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
112 MU = IWM(2)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
113 ML3 = ML + 3
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
114 MBAND = ML + MU + 1
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
115 MEBAND = MBAND + ML
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
116 LENP = MEBAND*N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
117 DO 410 I = 1,LENP
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
118 410 WM(I+2) = ZERO
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
119 CALL JAC (NEQ, TN, Y, PAR, ML, MU, WM(ML3), MEBAND)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
120 IF (JOPT .EQ. 1) RETURN
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
121 CON = -HL0
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
122 DO 420 I = 1,LENP
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
123 420 WM(I+2) = WM(I+2)*CON
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
124 GO TO 570
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
125 C IF MITER = 5, MAKE MBAND CALLS TO F TO APPROXIMATE J. ----------------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
126 500 ML = IWM(1)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
127 MU = IWM(2)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
128 MBAND = ML + MU + 1
3987
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
129 MBA = MIN0(MBAND,N)
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
130 MEBAND = MBAND + ML
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
131 MEB1 = MEBAND - 1
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
132 SRUR = WM(1)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
133 FAC = ODESSA_VNORM (N, SAVF, EWT)
3987
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
134 R0 = 1000.0D0*DABS(H)*UROUND*DBLE(N)*FAC
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
135 IF (R0 .EQ. ZERO) R0 = ONE
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
136 DO 560 J = 1,MBA
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
137 DO 530 I = J,N,MBAND
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
138 YI = Y(I)
3987
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
139 R = DMAX1(SRUR*DABS(YI),R0/EWT(I))
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
140 530 Y(I) = Y(I) + R
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
141 CALL F (NEQ, TN, Y, PAR, FTEM)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
142 DO 550 JJ = J,N,MBAND
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
143 Y(JJ) = YH(JJ,1)
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
144 YJJ = Y(JJ)
3987
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
145 R = DMAX1(SRUR*DABS(YJJ),R0/EWT(JJ))
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
146 FAC = -HL0/R
3987
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
147 I1 = MAX0(JJ-MU,1)
258c1d15ad78 [project @ 2002-07-11 19:33:35 by tenny]
tenny
parents: 3983
diff changeset
148 I2 = MIN0(JJ+ML,N)
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
149 II = JJ*MEB1 - ML + 2
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
150 DO 540 I = I1,I2
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
151 540 WM(II+I) = (FTEM(I) - SAVF(I))*FAC
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
152 550 CONTINUE
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
153 560 CONTINUE
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
154 NFE = NFE + MBA
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
155 IF (JOPT .EQ. 1) RETURN
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
156 C ADD IDENTITY MATRIX. -------------------------------------------------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
157 570 II = MBAND + 2
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
158 DO 580 I = 1,N
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
159 WM(II) = WM(II) + ONE
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
160 580 II = II + MEBAND
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
161 C DO LU DECOMPOSITION OF P. --------------------------------------------
4329
d53c33d93440 [project @ 2003-02-18 20:00:48 by jwe]
jwe
parents: 3987
diff changeset
162 CALL DGBTRF ( N, N, ML, MU, WM(3), MEBAND, IWM(21), IER)
3983
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
163 IF (IER .NE. 0) IERPJ = 1
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
164 RETURN
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
165 C---------------- END OF SUBROUTINE ODESSA_PREPJ -----------------------
7a37caf6ed43 [project @ 2002-07-11 02:36:25 by jwe]
jwe
parents:
diff changeset
166 END