intyd.f 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. *DECK INTYD
  2. SUBROUTINE INTYD (T, K, YH, NYH, DKY, IFLAG)
  3. C***BEGIN PROLOGUE INTYD
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DEBDF
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (INTYD-S, DINTYD-D)
  8. C***AUTHOR Watts, H. A., (SNLA)
  9. C***DESCRIPTION
  10. C
  11. C INTYD approximates the solution and derivatives at T by polynomial
  12. C interpolation. Must be used in conjunction with the integrator
  13. C package DEBDF.
  14. C ----------------------------------------------------------------------
  15. C INTYD computes interpolated values of the K-th derivative of the
  16. C dependent variable vector Y, and stores it in DKY.
  17. C This routine is called by DEBDF with K = 0,1 and T = TOUT, but may
  18. C also be called by the user for any K up to the current order.
  19. C (see detailed instructions in LSODE usage documentation.)
  20. C ----------------------------------------------------------------------
  21. C The computed values in DKY are gotten by interpolation using the
  22. C Nordsieck history array YH. This array corresponds uniquely to a
  23. C vector-valued polynomial of degree NQCUR or less, and DKY is set
  24. C to the K-th derivative of this polynomial at T.
  25. C The formula for DKY is..
  26. C Q
  27. C DKY(I) = sum C(J,K) * (T - TN)**(J-K) * H**(-J) * YH(I,J+1)
  28. C J=K
  29. C where C(J,K) = J*(J-1)*...*(J-K+1), Q = NQCUR, TN = TCUR, H = HCUR.
  30. C The quantities NQ = NQCUR, L = NQ+1, N = NEQ, TN, and H are
  31. C communicated by common. The above sum is done in reverse order.
  32. C IFLAG is returned negative if either K or T is out of bounds.
  33. C ----------------------------------------------------------------------
  34. C
  35. C***SEE ALSO DEBDF
  36. C***ROUTINES CALLED (NONE)
  37. C***COMMON BLOCKS DEBDF1
  38. C***REVISION HISTORY (YYMMDD)
  39. C 800901 DATE WRITTEN
  40. C 890531 Changed all specific intrinsics to generic. (WRB)
  41. C 891214 Prologue converted to Version 4.0 format. (BAB)
  42. C 900328 Added TYPE section. (WRB)
  43. C 910722 Updated AUTHOR section. (ALS)
  44. C***END PROLOGUE INTYD
  45. C
  46. CLLL. OPTIMIZE
  47. INTEGER K, NYH, IFLAG, I, IC, IER, IOWND, IOWNS, J, JB, JB2,
  48. 1 JJ, JJ1, JP1, JSTART, KFLAG, L, MAXORD, METH, MITER, N, NFE,
  49. 2 NJE, NQ, NQU, NST
  50. REAL T, YH, DKY,
  51. 1 ROWND, ROWNS, EL0, H, HMIN, HMXI, HU, TN, UROUND,
  52. 2 C, R, S, TP
  53. DIMENSION YH(NYH,*), DKY(*)
  54. COMMON /DEBDF1/ ROWND, ROWNS(210),
  55. 1 EL0, H, HMIN, HMXI, HU, TN, UROUND, IOWND(14), IOWNS(6),
  56. 2 IER, JSTART, KFLAG, L, METH, MITER, MAXORD, N, NQ, NST, NFE,
  57. 3 NJE, NQU
  58. C
  59. C***FIRST EXECUTABLE STATEMENT INTYD
  60. IFLAG = 0
  61. IF (K .LT. 0 .OR. K .GT. NQ) GO TO 80
  62. TP = TN - HU*(1.0E0 + 100.0E0*UROUND)
  63. IF ((T-TP)*(T-TN) .GT. 0.0E0) GO TO 90
  64. C
  65. S = (T - TN)/H
  66. IC = 1
  67. IF (K .EQ. 0) GO TO 15
  68. JJ1 = L - K
  69. DO 10 JJ = JJ1,NQ
  70. 10 IC = IC*JJ
  71. 15 C = IC
  72. DO 20 I = 1,N
  73. 20 DKY(I) = C*YH(I,L)
  74. IF (K .EQ. NQ) GO TO 55
  75. JB2 = NQ - K
  76. DO 50 JB = 1,JB2
  77. J = NQ - JB
  78. JP1 = J + 1
  79. IC = 1
  80. IF (K .EQ. 0) GO TO 35
  81. JJ1 = JP1 - K
  82. DO 30 JJ = JJ1,J
  83. 30 IC = IC*JJ
  84. 35 C = IC
  85. DO 40 I = 1,N
  86. 40 DKY(I) = C*YH(I,JP1) + S*DKY(I)
  87. 50 CONTINUE
  88. IF (K .EQ. 0) RETURN
  89. 55 R = H**(-K)
  90. DO 60 I = 1,N
  91. 60 DKY(I) = R*DKY(I)
  92. RETURN
  93. C
  94. 80 IFLAG = -1
  95. RETURN
  96. 90 IFLAG = -2
  97. RETURN
  98. C----------------------- END OF SUBROUTINE INTYD -----------------------
  99. END