dpjac.f 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. *DECK DPJAC
  2. SUBROUTINE DPJAC (NEQ, Y, YH, NYH, EWT, FTEM, SAVF, WM, IWM, DF,
  3. + DJAC, RPAR, IPAR)
  4. C***BEGIN PROLOGUE DPJAC
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to DDEBDF
  7. C***LIBRARY SLATEC
  8. C***TYPE DOUBLE PRECISION (PJAC-S, DPJAC-D)
  9. C***AUTHOR Watts, H. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C DPJAC sets up the iteration matrix (involving the Jacobian) for the
  13. C integration package DDEBDF.
  14. C
  15. C***SEE ALSO DDEBDF
  16. C***ROUTINES CALLED DGBFA, DGEFA, DVNRMS
  17. C***COMMON BLOCKS DDEBD1
  18. C***REVISION HISTORY (YYMMDD)
  19. C 820301 DATE WRITTEN
  20. C 890531 Changed all specific intrinsics to generic. (WRB)
  21. C 890911 Removed unnecessary intrinsics. (WRB)
  22. C 891214 Prologue converted to Version 4.0 format. (BAB)
  23. C 900328 Added TYPE section. (WRB)
  24. C 910722 Updated AUTHOR section. (ALS)
  25. C 920422 Changed DIMENSION statement. (WRB)
  26. C***END PROLOGUE DPJAC
  27. C
  28. INTEGER I, I1, I2, IER, II, IOWND, IOWNS, IPAR, IWM, J, J1,
  29. 1 JJ, JSTART, KFLAG, L, LENP, MAXORD, MBA, MBAND,
  30. 2 MEB1, MEBAND, METH, MITER, ML, ML3, MU, N, NEQ,
  31. 3 NFE, NJE, NQ, NQU, NST, NYH
  32. DOUBLE PRECISION CON, DI, DVNRMS, EL0, EWT,
  33. 1 FAC, FTEM, H, HL0, HMIN, HMXI, HU, R, R0, ROWND, ROWNS,
  34. 2 RPAR, SAVF, SRUR, TN, UROUND, WM, Y, YH, YI, YJ, YJJ
  35. EXTERNAL DF, DJAC
  36. DIMENSION Y(*),YH(NYH,*),EWT(*),FTEM(*),SAVF(*),WM(*),IWM(*),
  37. 1 RPAR(*),IPAR(*)
  38. COMMON /DDEBD1/ ROWND,ROWNS(210),EL0,H,HMIN,HMXI,HU,TN,UROUND,
  39. 1 IOWND(14),IOWNS(6),IER,JSTART,KFLAG,L,METH,MITER,
  40. 2 MAXORD,N,NQ,NST,NFE,NJE,NQU
  41. C ------------------------------------------------------------------
  42. C DPJAC IS CALLED BY DSTOD 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 DJAC 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 DGEFA IF MITER = 1 OR 2, AND BY DGBFA IF MITER = 4 OR 5.
  51. C
  52. C IN ADDITION TO VARIABLES DESCRIBED PREVIOUSLY, COMMUNICATION
  53. C WITH DPJAC USES THE FOLLOWING..
  54. C Y = ARRAY CONTAINING PREDICTED VALUES ON ENTRY.
  55. C FTEM = WORK ARRAY OF LENGTH N (ACOR IN DSTOD ).
  56. C SAVF = ARRAY CONTAINING DF EVALUATED AT PREDICTED Y.
  57. C WM = DOUBLE PRECISION WORK SPACE FOR MATRICES. ON OUTPUT IT
  58. C CONTAINS THE
  59. C INVERSE DIAGONAL MATRIX IF MITER = 3 AND THE LU
  60. C DECOMPOSITION OF P IF MITER IS 1, 2 , 4, OR 5.
  61. C STORAGE OF MATRIX ELEMENTS STARTS AT WM(3).
  62. C WM ALSO CONTAINS THE FOLLOWING MATRIX-RELATED DATA..
  63. C WM(1) = SQRT(UROUND), USED IN NUMERICAL JACOBIAN
  64. C INCREMENTS. WM(2) = H*EL0, SAVED FOR LATER USE IF MITER =
  65. C 3.
  66. C IWM = INTEGER WORK SPACE CONTAINING PIVOT INFORMATION, STARTING
  67. C AT IWM(21), IF MITER IS 1, 2, 4, OR 5. IWM ALSO CONTAINS
  68. C THE BAND PARAMETERS ML = IWM(1) AND MU = IWM(2) IF MITER
  69. C IS 4 OR 5.
  70. C EL0 = EL(1) (INPUT).
  71. C IER = OUTPUT ERROR FLAG, = 0 IF NO TROUBLE, .NE. 0 IF
  72. C P MATRIX FOUND TO BE SINGULAR.
  73. C THIS ROUTINE ALSO USES THE COMMON VARIABLES EL0, H, TN, UROUND,
  74. C MITER, N, NFE, AND NJE.
  75. C-----------------------------------------------------------------------
  76. C BEGIN BLOCK PERMITTING ...EXITS TO 240
  77. C BEGIN BLOCK PERMITTING ...EXITS TO 220
  78. C BEGIN BLOCK PERMITTING ...EXITS TO 130
  79. C BEGIN BLOCK PERMITTING ...EXITS TO 70
  80. C***FIRST EXECUTABLE STATEMENT DPJAC
  81. NJE = NJE + 1
  82. HL0 = H*EL0
  83. GO TO (10,40,90,140,170), MITER
  84. C IF MITER = 1, CALL DJAC AND MULTIPLY BY SCALAR.
  85. C -----------------------
  86. 10 CONTINUE
  87. LENP = N*N
  88. DO 20 I = 1, LENP
  89. WM(I+2) = 0.0D0
  90. 20 CONTINUE
  91. CALL DJAC(TN,Y,WM(3),N,RPAR,IPAR)
  92. CON = -HL0
  93. DO 30 I = 1, LENP
  94. WM(I+2) = WM(I+2)*CON
  95. 30 CONTINUE
  96. C ...EXIT
  97. GO TO 70
  98. C IF MITER = 2, MAKE N CALLS TO DF TO APPROXIMATE J.
  99. C --------------------
  100. 40 CONTINUE
  101. FAC = DVNRMS(N,SAVF,EWT)
  102. R0 = 1000.0D0*ABS(H)*UROUND*N*FAC
  103. IF (R0 .EQ. 0.0D0) R0 = 1.0D0
  104. SRUR = WM(1)
  105. J1 = 2
  106. DO 60 J = 1, N
  107. YJ = Y(J)
  108. R = MAX(SRUR*ABS(YJ),R0*EWT(J))
  109. Y(J) = Y(J) + R
  110. FAC = -HL0/R
  111. CALL DF(TN,Y,FTEM,RPAR,IPAR)
  112. DO 50 I = 1, N
  113. WM(I+J1) = (FTEM(I) - SAVF(I))*FAC
  114. 50 CONTINUE
  115. Y(J) = YJ
  116. J1 = J1 + N
  117. 60 CONTINUE
  118. NFE = NFE + N
  119. 70 CONTINUE
  120. C ADD IDENTITY MATRIX.
  121. C -------------------------------------------------
  122. J = 3
  123. DO 80 I = 1, N
  124. WM(J) = WM(J) + 1.0D0
  125. J = J + (N + 1)
  126. 80 CONTINUE
  127. C DO LU DECOMPOSITION ON P.
  128. C --------------------------------------------
  129. CALL DGEFA(WM(3),N,N,IWM(21),IER)
  130. C .........EXIT
  131. GO TO 240
  132. C IF MITER = 3, CONSTRUCT A DIAGONAL APPROXIMATION TO J AND
  133. C P. ---------
  134. 90 CONTINUE
  135. WM(2) = HL0
  136. IER = 0
  137. R = EL0*0.1D0
  138. DO 100 I = 1, N
  139. Y(I) = Y(I) + R*(H*SAVF(I) - YH(I,2))
  140. 100 CONTINUE
  141. CALL DF(TN,Y,WM(3),RPAR,IPAR)
  142. NFE = NFE + 1
  143. DO 120 I = 1, N
  144. R0 = H*SAVF(I) - YH(I,2)
  145. DI = 0.1D0*R0 - H*(WM(I+2) - SAVF(I))
  146. WM(I+2) = 1.0D0
  147. IF (ABS(R0) .LT. UROUND*EWT(I)) GO TO 110
  148. C .........EXIT
  149. IF (ABS(DI) .EQ. 0.0D0) GO TO 130
  150. WM(I+2) = 0.1D0*R0/DI
  151. 110 CONTINUE
  152. 120 CONTINUE
  153. C .........EXIT
  154. GO TO 240
  155. 130 CONTINUE
  156. IER = -1
  157. C ......EXIT
  158. GO TO 240
  159. C IF MITER = 4, CALL DJAC AND MULTIPLY BY SCALAR.
  160. C -----------------------
  161. 140 CONTINUE
  162. ML = IWM(1)
  163. MU = IWM(2)
  164. ML3 = 3
  165. MBAND = ML + MU + 1
  166. MEBAND = MBAND + ML
  167. LENP = MEBAND*N
  168. DO 150 I = 1, LENP
  169. WM(I+2) = 0.0D0
  170. 150 CONTINUE
  171. CALL DJAC(TN,Y,WM(ML3),MEBAND,RPAR,IPAR)
  172. CON = -HL0
  173. DO 160 I = 1, LENP
  174. WM(I+2) = WM(I+2)*CON
  175. 160 CONTINUE
  176. C ...EXIT
  177. GO TO 220
  178. C IF MITER = 5, MAKE MBAND CALLS TO DF TO APPROXIMATE J.
  179. C ----------------
  180. 170 CONTINUE
  181. ML = IWM(1)
  182. MU = IWM(2)
  183. MBAND = ML + MU + 1
  184. MBA = MIN(MBAND,N)
  185. MEBAND = MBAND + ML
  186. MEB1 = MEBAND - 1
  187. SRUR = WM(1)
  188. FAC = DVNRMS(N,SAVF,EWT)
  189. R0 = 1000.0D0*ABS(H)*UROUND*N*FAC
  190. IF (R0 .EQ. 0.0D0) R0 = 1.0D0
  191. DO 210 J = 1, MBA
  192. DO 180 I = J, N, MBAND
  193. YI = Y(I)
  194. R = MAX(SRUR*ABS(YI),R0*EWT(I))
  195. Y(I) = Y(I) + R
  196. 180 CONTINUE
  197. CALL DF(TN,Y,FTEM,RPAR,IPAR)
  198. DO 200 JJ = J, N, MBAND
  199. Y(JJ) = YH(JJ,1)
  200. YJJ = Y(JJ)
  201. R = MAX(SRUR*ABS(YJJ),R0*EWT(JJ))
  202. FAC = -HL0/R
  203. I1 = MAX(JJ-MU,1)
  204. I2 = MIN(JJ+ML,N)
  205. II = JJ*MEB1 - ML + 2
  206. DO 190 I = I1, I2
  207. WM(II+I) = (FTEM(I) - SAVF(I))*FAC
  208. 190 CONTINUE
  209. 200 CONTINUE
  210. 210 CONTINUE
  211. NFE = NFE + MBA
  212. 220 CONTINUE
  213. C ADD IDENTITY MATRIX.
  214. C -------------------------------------------------
  215. II = MBAND + 2
  216. DO 230 I = 1, N
  217. WM(II) = WM(II) + 1.0D0
  218. II = II + MEBAND
  219. 230 CONTINUE
  220. C DO LU DECOMPOSITION OF P.
  221. C --------------------------------------------
  222. CALL DGBFA(WM(3),MEBAND,N,ML,MU,IWM(21),IER)
  223. 240 CONTINUE
  224. RETURN
  225. C ----------------------- END OF SUBROUTINE DPJAC
  226. C -----------------------
  227. END