sdcst.f 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. *DECK SDCST
  2. SUBROUTINE SDCST (MAXORD, MINT, ISWFLG, EL, TQ)
  3. C***BEGIN PROLOGUE SDCST
  4. C***SUBSIDIARY
  5. C***PURPOSE SDCST sets coefficients used by the core integrator SDSTP.
  6. C***LIBRARY SLATEC (SDRIVE)
  7. C***TYPE SINGLE 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 SDCST is called by SDNTL. 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***ROUTINES CALLED (NONE)
  31. C***REVISION HISTORY (YYMMDD)
  32. C 790601 DATE WRITTEN
  33. C 900329 Initial submission to SLATEC.
  34. C***END PROLOGUE SDCST
  35. REAL EL(13,12), FACTRL(12), GAMMA(14), SUM, TQ(3,12)
  36. INTEGER I, ISWFLG, J, MAXORD, MINT, MXRD
  37. C***FIRST EXECUTABLE STATEMENT SDCST
  38. FACTRL(1) = 1.E0
  39. DO 10 I = 2,MAXORD
  40. 10 FACTRL(I) = I*FACTRL(I-1)
  41. C Compute Adams coefficients
  42. IF (MINT .EQ. 1) THEN
  43. GAMMA(1) = 1.E0
  44. DO 40 I = 1,MAXORD+1
  45. SUM = 0.E0
  46. DO 30 J = 1,I
  47. 30 SUM = SUM - GAMMA(J)/(I-J+2)
  48. 40 GAMMA(I+1) = SUM
  49. EL(1,1) = 1.E0
  50. EL(2,1) = 1.E0
  51. EL(2,2) = 1.E0
  52. EL(3,2) = 1.E0
  53. DO 60 J = 3,MAXORD
  54. EL(2,J) = FACTRL(J-1)
  55. DO 50 I = 3,J
  56. 50 EL(I,J) = (J-1)*EL(I,J-1) + EL(I-1,J-1)
  57. 60 EL(J+1,J) = 1.E0
  58. DO 80 J = 2,MAXORD
  59. EL(1,J) = EL(1,J-1) + GAMMA(J)
  60. EL(2,J) = 1.E0
  61. DO 80 I = 3,J+1
  62. 80 EL(I,J) = EL(I,J)/((I-1)*FACTRL(J-1))
  63. DO 100 J = 1,MAXORD
  64. TQ(1,J) = -1.E0/(FACTRL(J)*GAMMA(J))
  65. TQ(2,J) = -1.E0/GAMMA(J+1)
  66. 100 TQ(3,J) = -1.E0/GAMMA(J+2)
  67. C Compute Gear coefficients
  68. ELSE IF (MINT .EQ. 2) THEN
  69. EL(1,1) = 1.E0
  70. EL(2,1) = 1.E0
  71. DO 130 J = 2,MAXORD
  72. EL(1,J) = FACTRL(J)
  73. DO 120 I = 2,J
  74. 120 EL(I,J) = J*EL(I,J-1) + EL(I-1,J-1)
  75. 130 EL(J+1,J) = 1.E0
  76. SUM = 1.E0
  77. DO 150 J = 2,MAXORD
  78. SUM = SUM + 1.E0/J
  79. DO 150 I = 1,J+1
  80. 150 EL(I,J) = EL(I,J)/(FACTRL(J)*SUM)
  81. DO 170 J = 1,MAXORD
  82. IF (J .GT. 1) TQ(1,J) = 1.E0/FACTRL(J-1)
  83. TQ(2,J) = (J+1)/EL(1,J)
  84. 170 TQ(3,J) = (J+2)/EL(1,J)
  85. END IF
  86. C Compute constants used in the stiffness test.
  87. C These are the ratio of TQ(2,NQ) for the Gear
  88. C methods to those for the Adams methods.
  89. IF (ISWFLG .EQ. 3) THEN
  90. MXRD = MIN(MAXORD, 5)
  91. IF (MINT .EQ. 2) THEN
  92. GAMMA(1) = 1.E0
  93. DO 190 I = 1,MXRD
  94. SUM = 0.E0
  95. DO 180 J = 1,I
  96. 180 SUM = SUM - GAMMA(J)/(I-J+2)
  97. 190 GAMMA(I+1) = SUM
  98. END IF
  99. SUM = 1.E0
  100. DO 200 I = 2,MXRD
  101. SUM = SUM + 1.E0/I
  102. 200 EL(1+I,1) = -(I+1)*SUM*GAMMA(I+1)
  103. END IF
  104. RETURN
  105. END