123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- *DECK DDCST
- SUBROUTINE DDCST (MAXORD, MINT, ISWFLG, EL, TQ)
- C***BEGIN PROLOGUE DDCST
- C***SUBSIDIARY
- C***PURPOSE DDCST sets coefficients used by the core integrator DDSTP.
- C***LIBRARY SLATEC (SDRIVE)
- C***TYPE DOUBLE PRECISION (SDCST-S, DDCST-D, CDCST-C)
- C***AUTHOR Kahaner, D. K., (NIST)
- C National Institute of Standards and Technology
- C Gaithersburg, MD 20899
- C Sutherland, C. D., (LANL)
- C Mail Stop D466
- C Los Alamos National Laboratory
- C Los Alamos, NM 87545
- C***DESCRIPTION
- C
- C DDCST is called by DDNTL. The array EL determines the basic method.
- C The array TQ is involved in adjusting the step size in relation
- C to truncation error. EL and TQ depend upon MINT, and are calculated
- C for orders 1 to MAXORD(.LE. 12). For each order NQ, the coefficients
- C EL are calculated from the generating polynomial:
- C L(T) = EL(1,NQ) + EL(2,NQ)*T + ... + EL(NQ+1,NQ)*T**NQ.
- C For the implicit Adams methods, L(T) is given by
- C dL/dT = (1+T)*(2+T)* ... *(NQ-1+T)/K, L(-1) = 0,
- C where K = factorial(NQ-1).
- C For the Gear methods,
- C L(T) = (1+T)*(2+T)* ... *(NQ+T)/K,
- C where K = factorial(NQ)*(1 + 1/2 + ... + 1/NQ).
- C For each order NQ, there are three components of TQ.
- C
- C***ROUTINES CALLED (NONE)
- C***REVISION HISTORY (YYMMDD)
- C 790601 DATE WRITTEN
- C 900329 Initial submission to SLATEC.
- C***END PROLOGUE DDCST
- DOUBLE PRECISION EL(13,12), FACTRL(12), GAMMA(14), SUM, TQ(3,12)
- INTEGER I, ISWFLG, J, MAXORD, MINT, MXRD
- C***FIRST EXECUTABLE STATEMENT DDCST
- FACTRL(1) = 1.D0
- DO 10 I = 2,MAXORD
- 10 FACTRL(I) = I*FACTRL(I-1)
- C Compute Adams coefficients
- IF (MINT .EQ. 1) THEN
- GAMMA(1) = 1.D0
- DO 40 I = 1,MAXORD+1
- SUM = 0.D0
- DO 30 J = 1,I
- 30 SUM = SUM - GAMMA(J)/(I-J+2)
- 40 GAMMA(I+1) = SUM
- EL(1,1) = 1.D0
- EL(2,1) = 1.D0
- EL(2,2) = 1.D0
- EL(3,2) = 1.D0
- DO 60 J = 3,MAXORD
- EL(2,J) = FACTRL(J-1)
- DO 50 I = 3,J
- 50 EL(I,J) = (J-1)*EL(I,J-1) + EL(I-1,J-1)
- 60 EL(J+1,J) = 1.D0
- DO 80 J = 2,MAXORD
- EL(1,J) = EL(1,J-1) + GAMMA(J)
- EL(2,J) = 1.D0
- DO 80 I = 3,J+1
- 80 EL(I,J) = EL(I,J)/((I-1)*FACTRL(J-1))
- DO 100 J = 1,MAXORD
- TQ(1,J) = -1.D0/(FACTRL(J)*GAMMA(J))
- TQ(2,J) = -1.D0/GAMMA(J+1)
- 100 TQ(3,J) = -1.D0/GAMMA(J+2)
- C Compute Gear coefficients
- ELSE IF (MINT .EQ. 2) THEN
- EL(1,1) = 1.D0
- EL(2,1) = 1.D0
- DO 130 J = 2,MAXORD
- EL(1,J) = FACTRL(J)
- DO 120 I = 2,J
- 120 EL(I,J) = J*EL(I,J-1) + EL(I-1,J-1)
- 130 EL(J+1,J) = 1.D0
- SUM = 1.D0
- DO 150 J = 2,MAXORD
- SUM = SUM + 1.D0/J
- DO 150 I = 1,J+1
- 150 EL(I,J) = EL(I,J)/(FACTRL(J)*SUM)
- DO 170 J = 1,MAXORD
- IF (J .GT. 1) TQ(1,J) = 1.D0/FACTRL(J-1)
- TQ(2,J) = (J+1)/EL(1,J)
- 170 TQ(3,J) = (J+2)/EL(1,J)
- END IF
- C Compute constants used in the stiffness test.
- C These are the ratio of TQ(2,NQ) for the Gear
- C methods to those for the Adams methods.
- IF (ISWFLG .EQ. 3) THEN
- MXRD = MIN(MAXORD, 5)
- IF (MINT .EQ. 2) THEN
- GAMMA(1) = 1.D0
- DO 190 I = 1,MXRD
- SUM = 0.D0
- DO 180 J = 1,I
- 180 SUM = SUM - GAMMA(J)/(I-J+2)
- 190 GAMMA(I+1) = SUM
- END IF
- SUM = 1.D0
- DO 200 I = 2,MXRD
- SUM = SUM + 1.D0/I
- 200 EL(1+I,1) = -(I+1)*SUM*GAMMA(I+1)
- END IF
- RETURN
- END
|