dcfod.f 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. *DECK DCFOD
  2. SUBROUTINE DCFOD (METH, ELCO, TESCO)
  3. C***BEGIN PROLOGUE DCFOD
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DDEBDF
  6. C***LIBRARY SLATEC
  7. C***TYPE DOUBLE PRECISION (CFOD-S, DCFOD-D)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C DCFOD defines coefficients needed in the integrator package DDEBDF
  12. C
  13. C***SEE ALSO DDEBDF
  14. C***ROUTINES CALLED (NONE)
  15. C***REVISION HISTORY (YYMMDD)
  16. C 820301 DATE WRITTEN
  17. C 890911 Removed unnecessary intrinsics. (WRB)
  18. C 891214 Prologue converted to Version 4.0 format. (BAB)
  19. C 900328 Added TYPE section. (WRB)
  20. C***END PROLOGUE DCFOD
  21. C
  22. C
  23. INTEGER I, IB, METH, NQ, NQM1, NQP1
  24. DOUBLE PRECISION AGAMQ, ELCO, FNQ, FNQM1, PC, PINT, RAGQ,
  25. 1 RQ1FAC, RQFAC, TESCO, TSIGN, XPIN
  26. DIMENSION ELCO(13,12),TESCO(3,12)
  27. C ------------------------------------------------------------------
  28. C DCFOD IS CALLED BY THE INTEGRATOR ROUTINE TO SET COEFFICIENTS
  29. C NEEDED THERE. THE COEFFICIENTS FOR THE CURRENT METHOD, AS
  30. C GIVEN BY THE VALUE OF METH, ARE SET FOR ALL ORDERS AND SAVED.
  31. C THE MAXIMUM ORDER ASSUMED HERE IS 12 IF METH = 1 AND 5 IF METH =
  32. C 2. (A SMALLER VALUE OF THE MAXIMUM ORDER IS ALSO ALLOWED.)
  33. C DCFOD IS CALLED ONCE AT THE BEGINNING OF THE PROBLEM,
  34. C AND IS NOT CALLED AGAIN UNLESS AND UNTIL METH IS CHANGED.
  35. C
  36. C THE ELCO ARRAY CONTAINS THE BASIC METHOD COEFFICIENTS.
  37. C THE COEFFICIENTS EL(I), 1 .LE. I .LE. NQ+1, FOR THE METHOD OF
  38. C ORDER NQ ARE STORED IN ELCO(I,NQ). THEY ARE GIVEN BY A
  39. C GENERATING POLYNOMIAL, I.E.,
  40. C L(X) = EL(1) + EL(2)*X + ... + EL(NQ+1)*X**NQ.
  41. C FOR THE IMPLICIT ADAMS METHODS, L(X) IS GIVEN BY
  42. C DL/DX = (X+1)*(X+2)*...*(X+NQ-1)/FACTORIAL(NQ-1), L(-1) =
  43. C 0. FOR THE BDF METHODS, L(X) IS GIVEN BY
  44. C L(X) = (X+1)*(X+2)* ... *(X+NQ)/K,
  45. C WHERE K = FACTORIAL(NQ)*(1 + 1/2 + ... + 1/NQ).
  46. C
  47. C THE TESCO ARRAY CONTAINS TEST CONSTANTS USED FOR THE
  48. C LOCAL ERROR TEST AND THE SELECTION OF STEP SIZE AND/OR ORDER.
  49. C AT ORDER NQ, TESCO(K,NQ) IS USED FOR THE SELECTION OF STEP
  50. C SIZE AT ORDER NQ - 1 IF K = 1, AT ORDER NQ IF K = 2, AND AT ORDER
  51. C NQ + 1 IF K = 3.
  52. C ------------------------------------------------------------------
  53. DIMENSION PC(12)
  54. C
  55. C***FIRST EXECUTABLE STATEMENT DCFOD
  56. GO TO (10,60), METH
  57. C
  58. 10 CONTINUE
  59. ELCO(1,1) = 1.0D0
  60. ELCO(2,1) = 1.0D0
  61. TESCO(1,1) = 0.0D0
  62. TESCO(2,1) = 2.0D0
  63. TESCO(1,2) = 1.0D0
  64. TESCO(3,12) = 0.0D0
  65. PC(1) = 1.0D0
  66. RQFAC = 1.0D0
  67. DO 50 NQ = 2, 12
  68. C ------------------------------------------------------------
  69. C THE PC ARRAY WILL CONTAIN THE COEFFICIENTS OF THE
  70. C POLYNOMIAL P(X) = (X+1)*(X+2)*...*(X+NQ-1).
  71. C INITIALLY, P(X) = 1.
  72. C ------------------------------------------------------------
  73. RQ1FAC = RQFAC
  74. RQFAC = RQFAC/NQ
  75. NQM1 = NQ - 1
  76. FNQM1 = NQM1
  77. NQP1 = NQ + 1
  78. C FORM COEFFICIENTS OF P(X)*(X+NQ-1).
  79. C ----------------------------------
  80. PC(NQ) = 0.0D0
  81. DO 20 IB = 1, NQM1
  82. I = NQP1 - IB
  83. PC(I) = PC(I-1) + FNQM1*PC(I)
  84. 20 CONTINUE
  85. PC(1) = FNQM1*PC(1)
  86. C COMPUTE INTEGRAL, -1 TO 0, OF P(X) AND X*P(X).
  87. C -----------------------
  88. PINT = PC(1)
  89. XPIN = PC(1)/2.0D0
  90. TSIGN = 1.0D0
  91. DO 30 I = 2, NQ
  92. TSIGN = -TSIGN
  93. PINT = PINT + TSIGN*PC(I)/I
  94. XPIN = XPIN + TSIGN*PC(I)/(I+1)
  95. 30 CONTINUE
  96. C STORE COEFFICIENTS IN ELCO AND TESCO.
  97. C --------------------------------
  98. ELCO(1,NQ) = PINT*RQ1FAC
  99. ELCO(2,NQ) = 1.0D0
  100. DO 40 I = 2, NQ
  101. ELCO(I+1,NQ) = RQ1FAC*PC(I)/I
  102. 40 CONTINUE
  103. AGAMQ = RQFAC*XPIN
  104. RAGQ = 1.0D0/AGAMQ
  105. TESCO(2,NQ) = RAGQ
  106. IF (NQ .LT. 12) TESCO(1,NQP1) = RAGQ*RQFAC/NQP1
  107. TESCO(3,NQM1) = RAGQ
  108. 50 CONTINUE
  109. GO TO 100
  110. C
  111. 60 CONTINUE
  112. PC(1) = 1.0D0
  113. RQ1FAC = 1.0D0
  114. DO 90 NQ = 1, 5
  115. C ------------------------------------------------------------
  116. C THE PC ARRAY WILL CONTAIN THE COEFFICIENTS OF THE
  117. C POLYNOMIAL P(X) = (X+1)*(X+2)*...*(X+NQ).
  118. C INITIALLY, P(X) = 1.
  119. C ------------------------------------------------------------
  120. FNQ = NQ
  121. NQP1 = NQ + 1
  122. C FORM COEFFICIENTS OF P(X)*(X+NQ).
  123. C ------------------------------------
  124. PC(NQP1) = 0.0D0
  125. DO 70 IB = 1, NQ
  126. I = NQ + 2 - IB
  127. PC(I) = PC(I-1) + FNQ*PC(I)
  128. 70 CONTINUE
  129. PC(1) = FNQ*PC(1)
  130. C STORE COEFFICIENTS IN ELCO AND TESCO.
  131. C --------------------------------
  132. DO 80 I = 1, NQP1
  133. ELCO(I,NQ) = PC(I)/PC(2)
  134. 80 CONTINUE
  135. ELCO(2,NQ) = 1.0D0
  136. TESCO(1,NQ) = RQ1FAC
  137. TESCO(2,NQ) = NQP1/ELCO(1,NQ)
  138. TESCO(3,NQ) = (NQ+2)/ELCO(1,NQ)
  139. RQ1FAC = RQ1FAC/FNQ
  140. 90 CONTINUE
  141. 100 CONTINUE
  142. RETURN
  143. C ----------------------- END OF SUBROUTINE DCFOD
  144. C -----------------------
  145. END