ddcst.f 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. *DECK DDCST
  2. SUBROUTINE DDCST (MAXORD, MINT, ISWFLG, EL, TQ)
  3. C***BEGIN PROLOGUE DDCST
  4. C***SUBSIDIARY
  5. C***PURPOSE DDCST sets coefficients used by the core integrator DDSTP.
  6. C***LIBRARY SLATEC (SDRIVE)
  7. C***TYPE DOUBLE PRECISION (SDCST-S, DDCST-D, CDCST-C)
  8. C***AUTHOR Kahaner, D. K., (NIST)
  9. C National Institute of Standards and Technology
  10. C Gaithersburg, MD 20899
  11. C Sutherland, C. D., (LANL)
  12. C Mail Stop D466
  13. C Los Alamos National Laboratory
  14. C Los Alamos, NM 87545
  15. C***DESCRIPTION
  16. C
  17. C DDCST is called by DDNTL. The array EL determines the basic method.
  18. C The array TQ is involved in adjusting the step size in relation
  19. C to truncation error. EL and TQ depend upon MINT, and are calculated
  20. C for orders 1 to MAXORD(.LE. 12). For each order NQ, the coefficients
  21. C EL are calculated from the generating polynomial:
  22. C L(T) = EL(1,NQ) + EL(2,NQ)*T + ... + EL(NQ+1,NQ)*T**NQ.
  23. C For the implicit Adams methods, L(T) is given by
  24. C dL/dT = (1+T)*(2+T)* ... *(NQ-1+T)/K, L(-1) = 0,
  25. C where K = factorial(NQ-1).
  26. C For the Gear methods,
  27. C L(T) = (1+T)*(2+T)* ... *(NQ+T)/K,
  28. C where K = factorial(NQ)*(1 + 1/2 + ... + 1/NQ).
  29. C For each order NQ, there are three components of TQ.
  30. C
  31. C***ROUTINES CALLED (NONE)
  32. C***REVISION HISTORY (YYMMDD)
  33. C 790601 DATE WRITTEN
  34. C 900329 Initial submission to SLATEC.
  35. C***END PROLOGUE DDCST
  36. DOUBLE PRECISION EL(13,12), FACTRL(12), GAMMA(14), SUM, TQ(3,12)
  37. INTEGER I, ISWFLG, J, MAXORD, MINT, MXRD
  38. C***FIRST EXECUTABLE STATEMENT DDCST
  39. FACTRL(1) = 1.D0
  40. DO 10 I = 2,MAXORD
  41. 10 FACTRL(I) = I*FACTRL(I-1)
  42. C Compute Adams coefficients
  43. IF (MINT .EQ. 1) THEN
  44. GAMMA(1) = 1.D0
  45. DO 40 I = 1,MAXORD+1
  46. SUM = 0.D0
  47. DO 30 J = 1,I
  48. 30 SUM = SUM - GAMMA(J)/(I-J+2)
  49. 40 GAMMA(I+1) = SUM
  50. EL(1,1) = 1.D0
  51. EL(2,1) = 1.D0
  52. EL(2,2) = 1.D0
  53. EL(3,2) = 1.D0
  54. DO 60 J = 3,MAXORD
  55. EL(2,J) = FACTRL(J-1)
  56. DO 50 I = 3,J
  57. 50 EL(I,J) = (J-1)*EL(I,J-1) + EL(I-1,J-1)
  58. 60 EL(J+1,J) = 1.D0
  59. DO 80 J = 2,MAXORD
  60. EL(1,J) = EL(1,J-1) + GAMMA(J)
  61. EL(2,J) = 1.D0
  62. DO 80 I = 3,J+1
  63. 80 EL(I,J) = EL(I,J)/((I-1)*FACTRL(J-1))
  64. DO 100 J = 1,MAXORD
  65. TQ(1,J) = -1.D0/(FACTRL(J)*GAMMA(J))
  66. TQ(2,J) = -1.D0/GAMMA(J+1)
  67. 100 TQ(3,J) = -1.D0/GAMMA(J+2)
  68. C Compute Gear coefficients
  69. ELSE IF (MINT .EQ. 2) THEN
  70. EL(1,1) = 1.D0
  71. EL(2,1) = 1.D0
  72. DO 130 J = 2,MAXORD
  73. EL(1,J) = FACTRL(J)
  74. DO 120 I = 2,J
  75. 120 EL(I,J) = J*EL(I,J-1) + EL(I-1,J-1)
  76. 130 EL(J+1,J) = 1.D0
  77. SUM = 1.D0
  78. DO 150 J = 2,MAXORD
  79. SUM = SUM + 1.D0/J
  80. DO 150 I = 1,J+1
  81. 150 EL(I,J) = EL(I,J)/(FACTRL(J)*SUM)
  82. DO 170 J = 1,MAXORD
  83. IF (J .GT. 1) TQ(1,J) = 1.D0/FACTRL(J-1)
  84. TQ(2,J) = (J+1)/EL(1,J)
  85. 170 TQ(3,J) = (J+2)/EL(1,J)
  86. END IF
  87. C Compute constants used in the stiffness test.
  88. C These are the ratio of TQ(2,NQ) for the Gear
  89. C methods to those for the Adams methods.
  90. IF (ISWFLG .EQ. 3) THEN
  91. MXRD = MIN(MAXORD, 5)
  92. IF (MINT .EQ. 2) THEN
  93. GAMMA(1) = 1.D0
  94. DO 190 I = 1,MXRD
  95. SUM = 0.D0
  96. DO 180 J = 1,I
  97. 180 SUM = SUM - GAMMA(J)/(I-J+2)
  98. 190 GAMMA(I+1) = SUM
  99. END IF
  100. SUM = 1.D0
  101. DO 200 I = 2,MXRD
  102. SUM = SUM + 1.D0/I
  103. 200 EL(1+I,1) = -(I+1)*SUM*GAMMA(I+1)
  104. END IF
  105. RETURN
  106. END