dintyd.f 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. *DECK DINTYD
  2. SUBROUTINE DINTYD (T, K, YH, NYH, DKY, IFLAG)
  3. C***BEGIN PROLOGUE DINTYD
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DDEBDF
  6. C***LIBRARY SLATEC
  7. C***TYPE DOUBLE PRECISION (INTYD-S, DINTYD-D)
  8. C***AUTHOR Watts, H. A., (SNLA)
  9. C***DESCRIPTION
  10. C
  11. C DINTYD approximates the solution and derivatives at T by polynomial
  12. C interpolation. Must be used in conjunction with the integrator
  13. C package DDEBDF.
  14. C ----------------------------------------------------------------------
  15. C DINTYD 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 DDEBDF 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 DDEBDF
  36. C***ROUTINES CALLED (NONE)
  37. C***COMMON BLOCKS DDEBD1
  38. C***REVISION HISTORY (YYMMDD)
  39. C 820301 DATE WRITTEN
  40. C 890911 Removed unnecessary intrinsics. (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 DINTYD
  45. C
  46. INTEGER I, IC, IER, IFLAG, IOWND, IOWNS, J, JB, JB2, JJ, JJ1,
  47. 1 JP1, JSTART, K, KFLAG, L, MAXORD, METH, MITER, N, NFE,
  48. 2 NJE, NQ, NQU, NST, NYH
  49. DOUBLE PRECISION C, DKY, EL0, H, HMIN, HMXI, HU, R, ROWND,
  50. 1 ROWNS, S, T, TN, TP, UROUND, YH
  51. DIMENSION YH(NYH,*),DKY(*)
  52. COMMON /DDEBD1/ ROWND,ROWNS(210),EL0,H,HMIN,HMXI,HU,TN,UROUND,
  53. 1 IOWND(14),IOWNS(6),IER,JSTART,KFLAG,L,METH,MITER,
  54. 2 MAXORD,N,NQ,NST,NFE,NJE,NQU
  55. C
  56. C BEGIN BLOCK PERMITTING ...EXITS TO 130
  57. C***FIRST EXECUTABLE STATEMENT DINTYD
  58. IFLAG = 0
  59. IF (K .LT. 0 .OR. K .GT. NQ) GO TO 110
  60. TP = TN - HU*(1.0D0 + 100.0D0*UROUND)
  61. IF ((T - TP)*(T - TN) .LE. 0.0D0) GO TO 10
  62. IFLAG = -2
  63. C .........EXIT
  64. GO TO 130
  65. 10 CONTINUE
  66. C
  67. S = (T - TN)/H
  68. IC = 1
  69. IF (K .EQ. 0) GO TO 30
  70. JJ1 = L - K
  71. DO 20 JJ = JJ1, NQ
  72. IC = IC*JJ
  73. 20 CONTINUE
  74. 30 CONTINUE
  75. C = IC
  76. DO 40 I = 1, N
  77. DKY(I) = C*YH(I,L)
  78. 40 CONTINUE
  79. IF (K .EQ. NQ) GO TO 90
  80. JB2 = NQ - K
  81. DO 80 JB = 1, JB2
  82. J = NQ - JB
  83. JP1 = J + 1
  84. IC = 1
  85. IF (K .EQ. 0) GO TO 60
  86. JJ1 = JP1 - K
  87. DO 50 JJ = JJ1, J
  88. IC = IC*JJ
  89. 50 CONTINUE
  90. 60 CONTINUE
  91. C = IC
  92. DO 70 I = 1, N
  93. DKY(I) = C*YH(I,JP1) + S*DKY(I)
  94. 70 CONTINUE
  95. 80 CONTINUE
  96. C .........EXIT
  97. IF (K .EQ. 0) GO TO 130
  98. 90 CONTINUE
  99. R = H**(-K)
  100. DO 100 I = 1, N
  101. DKY(I) = R*DKY(I)
  102. 100 CONTINUE
  103. GO TO 120
  104. 110 CONTINUE
  105. C
  106. IFLAG = -1
  107. 120 CONTINUE
  108. 130 CONTINUE
  109. RETURN
  110. C ----------------------- END OF SUBROUTINE DINTYD
  111. C -----------------------
  112. END