ddajac.f 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. *DECK DDAJAC
  2. SUBROUTINE DDAJAC (NEQ, X, Y, YPRIME, DELTA, CJ, H, IER, WT, E,
  3. * WM, IWM, RES, IRES, UROUND, JAC, RPAR, IPAR, NTEMP)
  4. C***BEGIN PROLOGUE DDAJAC
  5. C***SUBSIDIARY
  6. C***PURPOSE Compute the iteration matrix for DDASSL and form the
  7. C LU-decomposition.
  8. C***LIBRARY SLATEC (DASSL)
  9. C***TYPE DOUBLE PRECISION (SDAJAC-S, DDAJAC-D)
  10. C***AUTHOR Petzold, Linda R., (LLNL)
  11. C***DESCRIPTION
  12. C-----------------------------------------------------------------------
  13. C THIS ROUTINE COMPUTES THE ITERATION MATRIX
  14. C PD=DG/DY+CJ*DG/DYPRIME (WHERE G(X,Y,YPRIME)=0).
  15. C HERE PD IS COMPUTED BY THE USER-SUPPLIED
  16. C ROUTINE JAC IF IWM(MTYPE) IS 1 OR 4, AND
  17. C IT IS COMPUTED BY NUMERICAL FINITE DIFFERENCING
  18. C IF IWM(MTYPE)IS 2 OR 5
  19. C THE PARAMETERS HAVE THE FOLLOWING MEANINGS.
  20. C Y = ARRAY CONTAINING PREDICTED VALUES
  21. C YPRIME = ARRAY CONTAINING PREDICTED DERIVATIVES
  22. C DELTA = RESIDUAL EVALUATED AT (X,Y,YPRIME)
  23. C (USED ONLY IF IWM(MTYPE)=2 OR 5)
  24. C CJ = SCALAR PARAMETER DEFINING ITERATION MATRIX
  25. C H = CURRENT STEPSIZE IN INTEGRATION
  26. C IER = VARIABLE WHICH IS .NE. 0
  27. C IF ITERATION MATRIX IS SINGULAR,
  28. C AND 0 OTHERWISE.
  29. C WT = VECTOR OF WEIGHTS FOR COMPUTING NORMS
  30. C E = WORK SPACE (TEMPORARY) OF LENGTH NEQ
  31. C WM = REAL WORK SPACE FOR MATRICES. ON
  32. C OUTPUT IT CONTAINS THE LU DECOMPOSITION
  33. C OF THE ITERATION MATRIX.
  34. C IWM = INTEGER WORK SPACE CONTAINING
  35. C MATRIX INFORMATION
  36. C RES = NAME OF THE EXTERNAL USER-SUPPLIED ROUTINE
  37. C TO EVALUATE THE RESIDUAL FUNCTION G(X,Y,YPRIME)
  38. C IRES = FLAG WHICH IS EQUAL TO ZERO IF NO ILLEGAL VALUES
  39. C IN RES, AND LESS THAN ZERO OTHERWISE. (IF IRES
  40. C IS LESS THAN ZERO, THE MATRIX WAS NOT COMPLETED)
  41. C IN THIS CASE (IF IRES .LT. 0), THEN IER = 0.
  42. C UROUND = THE UNIT ROUNDOFF ERROR OF THE MACHINE BEING USED.
  43. C JAC = NAME OF THE EXTERNAL USER-SUPPLIED ROUTINE
  44. C TO EVALUATE THE ITERATION MATRIX (THIS ROUTINE
  45. C IS ONLY USED IF IWM(MTYPE) IS 1 OR 4)
  46. C-----------------------------------------------------------------------
  47. C***ROUTINES CALLED DGBFA, DGEFA
  48. C***REVISION HISTORY (YYMMDD)
  49. C 830315 DATE WRITTEN
  50. C 901009 Finished conversion to SLATEC 4.0 format (F.N.Fritsch)
  51. C 901010 Modified three MAX calls to be all on one line. (FNF)
  52. C 901019 Merged changes made by C. Ulrich with SLATEC 4.0 format.
  53. C 901026 Added explicit declarations for all variables and minor
  54. C cosmetic changes to prologue. (FNF)
  55. C 901101 Corrected PURPOSE. (FNF)
  56. C***END PROLOGUE DDAJAC
  57. C
  58. INTEGER NEQ, IER, IWM(*), IRES, IPAR(*), NTEMP
  59. DOUBLE PRECISION
  60. * X, Y(*), YPRIME(*), DELTA(*), CJ, H, WT(*), E(*), WM(*),
  61. * UROUND, RPAR(*)
  62. EXTERNAL RES, JAC
  63. C
  64. EXTERNAL DGBFA, DGEFA
  65. C
  66. INTEGER I, I1, I2, II, IPSAVE, ISAVE, J, K, L, LENPD, LIPVT,
  67. * LML, LMTYPE, LMU, MBA, MBAND, MEB1, MEBAND, MSAVE, MTYPE, N,
  68. * NPD, NPDM1, NROW
  69. DOUBLE PRECISION DEL, DELINV, SQUR, YPSAVE, YSAVE
  70. C
  71. PARAMETER (NPD=1)
  72. PARAMETER (LML=1)
  73. PARAMETER (LMU=2)
  74. PARAMETER (LMTYPE=4)
  75. PARAMETER (LIPVT=21)
  76. C
  77. C***FIRST EXECUTABLE STATEMENT DDAJAC
  78. IER = 0
  79. NPDM1=NPD-1
  80. MTYPE=IWM(LMTYPE)
  81. GO TO (100,200,300,400,500),MTYPE
  82. C
  83. C
  84. C DENSE USER-SUPPLIED MATRIX
  85. 100 LENPD=NEQ*NEQ
  86. DO 110 I=1,LENPD
  87. 110 WM(NPDM1+I)=0.0D0
  88. CALL JAC(X,Y,YPRIME,WM(NPD),CJ,RPAR,IPAR)
  89. GO TO 230
  90. C
  91. C
  92. C DENSE FINITE-DIFFERENCE-GENERATED MATRIX
  93. 200 IRES=0
  94. NROW=NPDM1
  95. SQUR = SQRT(UROUND)
  96. DO 210 I=1,NEQ
  97. DEL=SQUR*MAX(ABS(Y(I)),ABS(H*YPRIME(I)),ABS(WT(I)))
  98. DEL=SIGN(DEL,H*YPRIME(I))
  99. DEL=(Y(I)+DEL)-Y(I)
  100. YSAVE=Y(I)
  101. YPSAVE=YPRIME(I)
  102. Y(I)=Y(I)+DEL
  103. YPRIME(I)=YPRIME(I)+CJ*DEL
  104. CALL RES(X,Y,YPRIME,E,IRES,RPAR,IPAR)
  105. IF (IRES .LT. 0) RETURN
  106. DELINV=1.0D0/DEL
  107. DO 220 L=1,NEQ
  108. 220 WM(NROW+L)=(E(L)-DELTA(L))*DELINV
  109. NROW=NROW+NEQ
  110. Y(I)=YSAVE
  111. YPRIME(I)=YPSAVE
  112. 210 CONTINUE
  113. C
  114. C
  115. C DO DENSE-MATRIX LU DECOMPOSITION ON PD
  116. 230 CALL DGEFA(WM(NPD),NEQ,NEQ,IWM(LIPVT),IER)
  117. RETURN
  118. C
  119. C
  120. C DUMMY SECTION FOR IWM(MTYPE)=3
  121. 300 RETURN
  122. C
  123. C
  124. C BANDED USER-SUPPLIED MATRIX
  125. 400 LENPD=(2*IWM(LML)+IWM(LMU)+1)*NEQ
  126. DO 410 I=1,LENPD
  127. 410 WM(NPDM1+I)=0.0D0
  128. CALL JAC(X,Y,YPRIME,WM(NPD),CJ,RPAR,IPAR)
  129. MEBAND=2*IWM(LML)+IWM(LMU)+1
  130. GO TO 550
  131. C
  132. C
  133. C BANDED FINITE-DIFFERENCE-GENERATED MATRIX
  134. 500 MBAND=IWM(LML)+IWM(LMU)+1
  135. MBA=MIN(MBAND,NEQ)
  136. MEBAND=MBAND+IWM(LML)
  137. MEB1=MEBAND-1
  138. MSAVE=(NEQ/MBAND)+1
  139. ISAVE=NTEMP-1
  140. IPSAVE=ISAVE+MSAVE
  141. IRES=0
  142. SQUR=SQRT(UROUND)
  143. DO 540 J=1,MBA
  144. DO 510 N=J,NEQ,MBAND
  145. K= (N-J)/MBAND + 1
  146. WM(ISAVE+K)=Y(N)
  147. WM(IPSAVE+K)=YPRIME(N)
  148. DEL=SQUR*MAX(ABS(Y(N)),ABS(H*YPRIME(N)),ABS(WT(N)))
  149. DEL=SIGN(DEL,H*YPRIME(N))
  150. DEL=(Y(N)+DEL)-Y(N)
  151. Y(N)=Y(N)+DEL
  152. 510 YPRIME(N)=YPRIME(N)+CJ*DEL
  153. CALL RES(X,Y,YPRIME,E,IRES,RPAR,IPAR)
  154. IF (IRES .LT. 0) RETURN
  155. DO 530 N=J,NEQ,MBAND
  156. K= (N-J)/MBAND + 1
  157. Y(N)=WM(ISAVE+K)
  158. YPRIME(N)=WM(IPSAVE+K)
  159. DEL=SQUR*MAX(ABS(Y(N)),ABS(H*YPRIME(N)),ABS(WT(N)))
  160. DEL=SIGN(DEL,H*YPRIME(N))
  161. DEL=(Y(N)+DEL)-Y(N)
  162. DELINV=1.0D0/DEL
  163. I1=MAX(1,(N-IWM(LMU)))
  164. I2=MIN(NEQ,(N+IWM(LML)))
  165. II=N*MEB1-IWM(LML)+NPDM1
  166. DO 520 I=I1,I2
  167. 520 WM(II+I)=(E(I)-DELTA(I))*DELINV
  168. 530 CONTINUE
  169. 540 CONTINUE
  170. C
  171. C
  172. C DO LU DECOMPOSITION OF BANDED PD
  173. 550 CALL DGBFA(WM(NPD),MEBAND,NEQ,
  174. * IWM(LML),IWM(LMU),IWM(LIPVT),IER)
  175. RETURN
  176. C------END OF SUBROUTINE DDAJAC------
  177. END