rkfab.f 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. *DECK RKFAB
  2. SUBROUTINE RKFAB (NCOMP, XPTS, NXPTS, NFC, IFLAG, Z, MXNON, P,
  3. + NTP, IP, YHP, NIV, U, V, W, S, STOWA, G, WORK, IWORK, NFCC)
  4. C***BEGIN PROLOGUE RKFAB
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to BVSUP
  7. C***LIBRARY SLATEC
  8. C***TYPE SINGLE PRECISION (RKFAB-S, DRKFAB-D)
  9. C***AUTHOR Watts, H. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C **********************************************************************
  13. C
  14. C Subroutine RKFAB integrates the initial value equations using
  15. C the variable-step RUNGE-KUTTA-FEHLBERG integration scheme or
  16. C the variable-order ADAMS method and orthonormalization
  17. C determined by a linear dependence test.
  18. C
  19. C **********************************************************************
  20. C
  21. C***SEE ALSO BVSUP
  22. C***ROUTINES CALLED BVDER, DEABM, DERKF, REORT, STOR1
  23. C***COMMON BLOCKS ML15TO, ML17BW, ML18JR, ML8SZ
  24. C***REVISION HISTORY (YYMMDD)
  25. C 750601 DATE WRITTEN
  26. C 890831 Modified array declarations. (WRB)
  27. C 890921 Realigned order of variables in certain COMMON blocks.
  28. C (WRB)
  29. C 891214 Prologue converted to Version 4.0 format. (BAB)
  30. C 900328 Added TYPE section. (WRB)
  31. C 910722 Updated AUTHOR section. (ALS)
  32. C***END PROLOGUE RKFAB
  33. C
  34. DIMENSION P(NTP,*),IP(NFCC,*),U(NCOMP,NFC,*),
  35. 1 V(NCOMP,*),W(NFCC,*),Z(*),YHP(NCOMP,*),
  36. 2 XPTS(*),S(*),STOWA(*),WORK(*),IWORK(*),
  37. 3 G(*)
  38. C
  39. C **********************************************************************
  40. C
  41. COMMON /ML8SZ/ C,XSAV,IGOFX,INHOMO,IVP,NCOMPD,NFCD
  42. COMMON /ML15TO/ PX,PWCND,TND,X,XBEG,XEND,XOT,XOP,INFO(15),ISTKOP,
  43. 1 KNSWOT,KOP,LOTJP,MNSWOT,NSWOT
  44. COMMON /ML18JR/ AE,RE,TOL,NXPTSD,NIC,NOPG,MXNOND,NDISK,NTAPE,NEQ,
  45. 1 INDPVT,INTEG,NPS,NTPD,NEQIVP,NUMORT,NFCCD,
  46. 2 ICOCO
  47. COMMON /ML17BW/ KKKZPW,NEEDW,NEEDIW,K1,K2,K3,K4,K5,K6,K7,K8,K9,
  48. 1 K10,K11,L1,L2,KKKINT,LLLINT
  49. C
  50. EXTERNAL BVDER
  51. C
  52. C **********************************************************************
  53. C INITIALIZATION OF COUNTERS AND VARIABLES.
  54. C
  55. C***FIRST EXECUTABLE STATEMENT RKFAB
  56. KOD = 1
  57. NON = 1
  58. X = XBEG
  59. JON = 1
  60. INFO(1) = 0
  61. INFO(2) = 0
  62. INFO(3) = 1
  63. INFO(4) = 1
  64. WORK(1) = XEND
  65. IF (NOPG .EQ. 0) GO TO 1
  66. INFO(3) = 0
  67. IF (X .EQ. Z(1)) JON = 2
  68. 1 NFCP1 = NFC + 1
  69. C
  70. C **********************************************************************
  71. C *****BEGINNING OF INTEGRATION LOOP AT OUTPUT POINTS.******************
  72. C **********************************************************************
  73. C
  74. DO 110 KOPP = 2,NXPTS
  75. KOP=KOPP
  76. C
  77. 5 XOP = XPTS(KOP)
  78. IF (NDISK .EQ. 0) KOD = KOP
  79. C
  80. C STEP BY STEP INTEGRATION LOOP BETWEEN OUTPUT POINTS.
  81. C
  82. 10 XXOP = XOP
  83. IF (NOPG .EQ. 0) GO TO 15
  84. IF (XEND.GT.XBEG.AND.XOP.GT.Z(JON)) XXOP=Z(JON)
  85. IF (XEND.LT.XBEG.AND.XOP.LT.Z(JON)) XXOP=Z(JON)
  86. C
  87. C **********************************************************************
  88. 15 GO TO (20,25),INTEG
  89. C DERKF INTEGRATOR
  90. C
  91. 20 CALL DERKF(BVDER,NEQ,X,YHP,XXOP,INFO,RE,AE,IDID,WORK,KKKINT,
  92. 1 IWORK,LLLINT,G,IPAR)
  93. GO TO 28
  94. C DEABM INTEGRATOR
  95. C
  96. 25 CALL DEABM(BVDER,NEQ,X,YHP,XXOP,INFO,RE,AE,IDID,WORK,KKKINT,
  97. 1 IWORK,LLLINT,G,IPAR)
  98. 28 IF(IDID .GE. 1) GO TO 30
  99. INFO(1) = 1
  100. IF(IDID .EQ. -1) GO TO 15
  101. IFLAG = 20 - IDID
  102. RETURN
  103. C
  104. C **********************************************************************
  105. C GRAM-SCHMIDT ORTHOGONALIZATION TEST FOR ORTHONORMALIZATION
  106. C (TEMPORARILY USING U AND V IN THE TEST)
  107. C
  108. 30 IF (NOPG .EQ. 0) GO TO 35
  109. IF (XXOP .NE. Z(JON)) GO TO 100
  110. JFLAG=2
  111. GO TO 40
  112. 35 JFLAG=1
  113. IF (INHOMO .EQ. 3 .AND. X .EQ. XEND) JFLAG=3
  114. C
  115. 40 IF (NDISK .EQ. 0) NON=NUMORT+1
  116. CALL REORT(NCOMP,U(1,1,KOD),V(1,KOD),YHP,NIV,
  117. 1 W(1,NON),S,P(1,NON),IP(1,NON),STOWA,JFLAG)
  118. C
  119. IF (JFLAG .NE. 30) GO TO 45
  120. IFLAG=30
  121. RETURN
  122. C
  123. 45 IF (JFLAG .EQ. 10) GO TO 5
  124. C
  125. IF (JFLAG .NE. 0) GO TO 100
  126. C
  127. C **********************************************************************
  128. C STORE ORTHONORMALIZED VECTORS INTO SOLUTION VECTORS.
  129. C
  130. IF (NUMORT .LT. MXNON) GO TO 65
  131. IF (X .EQ. XEND) GO TO 65
  132. IFLAG = 13
  133. RETURN
  134. C
  135. 65 NUMORT = NUMORT + 1
  136. CALL STOR1(YHP,U(1,1,KOD),YHP(1,NFCP1),V(1,KOD),1,
  137. 1 NDISK,NTAPE)
  138. C
  139. C **********************************************************************
  140. C STORE ORTHONORMALIZATION INFORMATION, INITIALIZE
  141. C INTEGRATION FLAG, AND CONTINUE INTEGRATION TO THE NEXT
  142. C ORTHONORMALIZATION POINT OR OUTPUT POINT.
  143. C
  144. Z(NUMORT) = X
  145. IF (INHOMO .EQ. 1 .AND. NPS .EQ. 0) C = S(NFCP1) * C
  146. IF (NDISK .EQ. 0) GO TO 90
  147. IF (INHOMO .EQ. 1) WRITE (NTAPE) (W(J,1), J = 1,NFCC)
  148. WRITE(NTAPE) (IP(J,1), J = 1,NFCC),(P(J,1), J = 1,NTP)
  149. 90 INFO(1) = 0
  150. JON = JON + 1
  151. IF (NOPG .EQ. 1 .AND. X .NE. XOP) GO TO 10
  152. C
  153. C **********************************************************************
  154. C CONTINUE INTEGRATION IF WE ARE NOT AT AN OUTPUT POINT.
  155. C
  156. 100 IF (IDID .EQ. 1) GO TO 15
  157. C
  158. C STORAGE OF HOMOGENEOUS SOLUTIONS IN U AND THE PARTICULAR
  159. C SOLUTION IN V AT THE OUTPUT POINTS.
  160. C
  161. CALL STOR1(U(1,1,KOD),YHP,V(1,KOD),YHP(1,NFCP1),0,NDISK,NTAPE)
  162. 110 CONTINUE
  163. C **********************************************************************
  164. C **********************************************************************
  165. C
  166. IFLAG = 0
  167. RETURN
  168. END