sdatrp.f 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. *DECK SDATRP
  2. SUBROUTINE SDATRP (X, XOUT, YOUT, YPOUT, NEQ, KOLD, PHI, PSI)
  3. C***BEGIN PROLOGUE SDATRP
  4. C***SUBSIDIARY
  5. C***PURPOSE Interpolation routine for SDASSL.
  6. C***LIBRARY SLATEC (DASSL)
  7. C***TYPE SINGLE PRECISION (SDATRP-S, DDATRP-D)
  8. C***AUTHOR Petzold, Linda R., (LLNL)
  9. C***DESCRIPTION
  10. C-----------------------------------------------------------------------
  11. C THE METHODS IN SUBROUTINE SDASTP USE POLYNOMIALS
  12. C TO APPROXIMATE THE SOLUTION. SDATRP APPROXIMATES THE
  13. C SOLUTION AND ITS DERIVATIVE AT TIME XOUT BY EVALUATING
  14. C ONE OF THESE POLYNOMIALS, AND ITS DERIVATIVE,THERE.
  15. C INFORMATION DEFINING THIS POLYNOMIAL IS PASSED FROM
  16. C SDASTP, SO SDATRP CANNOT BE USED ALONE.
  17. C
  18. C THE PARAMETERS ARE:
  19. C X THE CURRENT TIME IN THE INTEGRATION.
  20. C XOUT THE TIME AT WHICH THE SOLUTION IS DESIRED
  21. C YOUT THE INTERPOLATED APPROXIMATION TO Y AT XOUT
  22. C (THIS IS OUTPUT)
  23. C YPOUT THE INTERPOLATED APPROXIMATION TO YPRIME AT XOUT
  24. C (THIS IS OUTPUT)
  25. C NEQ NUMBER OF EQUATIONS
  26. C KOLD ORDER USED ON LAST SUCCESSFUL STEP
  27. C PHI ARRAY OF SCALED DIVIDED DIFFERENCES OF Y
  28. C PSI ARRAY OF PAST STEPSIZE HISTORY
  29. C-----------------------------------------------------------------------
  30. C***ROUTINES CALLED (NONE)
  31. C***REVISION HISTORY (YYMMDD)
  32. C 830315 DATE WRITTEN
  33. C 901009 Finished conversion to SLATEC 4.0 format (F.N.Fritsch)
  34. C 901019 Merged changes made by C. Ulrich with SLATEC 4.0 format.
  35. C 901026 Added explicit declarations for all variables and minor
  36. C cosmetic changes to prologue. (FNF)
  37. C***END PROLOGUE SDATRP
  38. C
  39. INTEGER NEQ, KOLD
  40. REAL X, XOUT, YOUT(*), YPOUT(*), PHI(NEQ,*), PSI(*)
  41. C
  42. INTEGER I, J, KOLDP1
  43. REAL C, D, GAMMA, TEMP1
  44. C
  45. C***FIRST EXECUTABLE STATEMENT SDATRP
  46. KOLDP1=KOLD+1
  47. TEMP1=XOUT-X
  48. DO 10 I=1,NEQ
  49. YOUT(I)=PHI(I,1)
  50. 10 YPOUT(I)=0.0E0
  51. C=1.0E0
  52. D=0.0E0
  53. GAMMA=TEMP1/PSI(1)
  54. DO 30 J=2,KOLDP1
  55. D=D*GAMMA+C/PSI(J-1)
  56. C=C*GAMMA
  57. GAMMA=(TEMP1+PSI(J-1))/PSI(J)
  58. DO 20 I=1,NEQ
  59. YOUT(I)=YOUT(I)+C*PHI(I,J)
  60. 20 YPOUT(I)=YPOUT(I)+D*PHI(I,J)
  61. 30 CONTINUE
  62. RETURN
  63. C
  64. C------END OF SUBROUTINE SDATRP------
  65. END