sdajac.f 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. *DECK SDAJAC
  2. SUBROUTINE SDAJAC (NEQ, X, Y, YPRIME, DELTA, CJ, H, IER, WT, E,
  3. * WM, IWM, RES, IRES, UROUND, JAC, RPAR, IPAR, NTEMP)
  4. C***BEGIN PROLOGUE SDAJAC
  5. C***SUBSIDIARY
  6. C***PURPOSE Compute the iteration matrix for SDASSL and form the
  7. C LU-decomposition.
  8. C***LIBRARY SLATEC (DASSL)
  9. C***TYPE SINGLE 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 SGBFA, SGEFA
  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 SDAJAC
  57. C
  58. INTEGER NEQ, IER, IWM(*), IRES, IPAR(*), NTEMP
  59. REAL X, Y(*), YPRIME(*), DELTA(*), CJ, H, WT(*), E(*), WM(*),
  60. * UROUND, RPAR(*)
  61. EXTERNAL RES, JAC
  62. C
  63. EXTERNAL SGBFA, SGEFA
  64. C
  65. INTEGER I, I1, I2, II, IPSAVE, ISAVE, J, K, L, LENPD, LIPVT,
  66. * LML, LMTYPE, LMU, MBA, MBAND, MEB1, MEBAND, MSAVE, MTYPE, N,
  67. * NPD, NPDM1, NROW
  68. REAL DEL, DELINV, SQUR, YPSAVE, YSAVE
  69. C
  70. PARAMETER (NPD=1)
  71. PARAMETER (LML=1)
  72. PARAMETER (LMU=2)
  73. PARAMETER (LMTYPE=4)
  74. PARAMETER (LIPVT=21)
  75. C
  76. C***FIRST EXECUTABLE STATEMENT SDAJAC
  77. IER = 0
  78. NPDM1=NPD-1
  79. MTYPE=IWM(LMTYPE)
  80. GO TO (100,200,300,400,500),MTYPE
  81. C
  82. C
  83. C DENSE USER-SUPPLIED MATRIX
  84. 100 LENPD=NEQ*NEQ
  85. DO 110 I=1,LENPD
  86. 110 WM(NPDM1+I)=0.0E0
  87. CALL JAC(X,Y,YPRIME,WM(NPD),CJ,RPAR,IPAR)
  88. GO TO 230
  89. C
  90. C
  91. C DENSE FINITE-DIFFERENCE-GENERATED MATRIX
  92. 200 IRES=0
  93. NROW=NPDM1
  94. SQUR = SQRT(UROUND)
  95. DO 210 I=1,NEQ
  96. DEL=SQUR*MAX(ABS(Y(I)),ABS(H*YPRIME(I)),ABS(WT(I)))
  97. DEL=SIGN(DEL,H*YPRIME(I))
  98. DEL=(Y(I)+DEL)-Y(I)
  99. YSAVE=Y(I)
  100. YPSAVE=YPRIME(I)
  101. Y(I)=Y(I)+DEL
  102. YPRIME(I)=YPRIME(I)+CJ*DEL
  103. CALL RES(X,Y,YPRIME,E,IRES,RPAR,IPAR)
  104. IF (IRES .LT. 0) RETURN
  105. DELINV=1.0E0/DEL
  106. DO 220 L=1,NEQ
  107. 220 WM(NROW+L)=(E(L)-DELTA(L))*DELINV
  108. NROW=NROW+NEQ
  109. Y(I)=YSAVE
  110. YPRIME(I)=YPSAVE
  111. 210 CONTINUE
  112. C
  113. C
  114. C DO DENSE-MATRIX LU DECOMPOSITION ON PD
  115. 230 CALL SGEFA(WM(NPD),NEQ,NEQ,IWM(LIPVT),IER)
  116. RETURN
  117. C
  118. C
  119. C DUMMY SECTION FOR IWM(MTYPE)=3
  120. 300 RETURN
  121. C
  122. C
  123. C BANDED USER-SUPPLIED MATRIX
  124. 400 LENPD=(2*IWM(LML)+IWM(LMU)+1)*NEQ
  125. DO 410 I=1,LENPD
  126. 410 WM(NPDM1+I)=0.0E0
  127. CALL JAC(X,Y,YPRIME,WM(NPD),CJ,RPAR,IPAR)
  128. MEBAND=2*IWM(LML)+IWM(LMU)+1
  129. GO TO 550
  130. C
  131. C
  132. C BANDED FINITE-DIFFERENCE-GENERATED MATRIX
  133. 500 MBAND=IWM(LML)+IWM(LMU)+1
  134. MBA=MIN(MBAND,NEQ)
  135. MEBAND=MBAND+IWM(LML)
  136. MEB1=MEBAND-1
  137. MSAVE=(NEQ/MBAND)+1
  138. ISAVE=NTEMP-1
  139. IPSAVE=ISAVE+MSAVE
  140. IRES=0
  141. SQUR=SQRT(UROUND)
  142. DO 540 J=1,MBA
  143. DO 510 N=J,NEQ,MBAND
  144. K= (N-J)/MBAND + 1
  145. WM(ISAVE+K)=Y(N)
  146. WM(IPSAVE+K)=YPRIME(N)
  147. DEL=SQUR*MAX(ABS(Y(N)),ABS(H*YPRIME(N)),ABS(WT(N)))
  148. DEL=SIGN(DEL,H*YPRIME(N))
  149. DEL=(Y(N)+DEL)-Y(N)
  150. Y(N)=Y(N)+DEL
  151. 510 YPRIME(N)=YPRIME(N)+CJ*DEL
  152. CALL RES(X,Y,YPRIME,E,IRES,RPAR,IPAR)
  153. IF (IRES .LT. 0) RETURN
  154. DO 530 N=J,NEQ,MBAND
  155. K= (N-J)/MBAND + 1
  156. Y(N)=WM(ISAVE+K)
  157. YPRIME(N)=WM(IPSAVE+K)
  158. DEL=SQUR*MAX(ABS(Y(N)),ABS(H*YPRIME(N)),ABS(WT(N)))
  159. DEL=SIGN(DEL,H*YPRIME(N))
  160. DEL=(Y(N)+DEL)-Y(N)
  161. DELINV=1.0E0/DEL
  162. I1=MAX(1,(N-IWM(LMU)))
  163. I2=MIN(NEQ,(N+IWM(LML)))
  164. II=N*MEB1-IWM(LML)+NPDM1
  165. DO 520 I=I1,I2
  166. 520 WM(II+I)=(E(I)-DELTA(I))*DELINV
  167. 530 CONTINUE
  168. 540 CONTINUE
  169. C
  170. C
  171. C DO LU DECOMPOSITION OF BANDED PD
  172. 550 CALL SGBFA(WM(NPD),MEBAND,NEQ,
  173. * IWM(LML),IWM(LMU),IWM(LIPVT),IER)
  174. RETURN
  175. C------END OF SUBROUTINE SDAJAC------
  176. END