drkfab.f 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. *DECK DRKFAB
  2. SUBROUTINE DRKFAB (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 DRKFAB
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to DBVSUP
  7. C***LIBRARY SLATEC
  8. C***TYPE DOUBLE PRECISION (RKFAB-S, DRKFAB-D)
  9. C***AUTHOR Watts, H. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C **********************************************************************
  13. C
  14. C Subroutine DRKFAB 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 DBVSUP
  22. C***ROUTINES CALLED DBVDER, DDEABM, DDERKF, DREORT, DSTOR1
  23. C***COMMON BLOCKS DML15T, DML17B, DML18J, DML8SZ
  24. C***REVISION HISTORY (YYMMDD)
  25. C 750601 DATE WRITTEN
  26. C 890921 Realigned order of variables in certain COMMON blocks.
  27. C (WRB)
  28. C 891214 Prologue converted to Version 4.0 format. (BAB)
  29. C 900328 Added TYPE section. (WRB)
  30. C 910722 Updated AUTHOR section. (ALS)
  31. C***END PROLOGUE DRKFAB
  32. C
  33. INTEGER ICOCO, IDID, IFLAG, IGOFX, INDPVT, INFO, INHOMO, INTEG,
  34. 1 IPAR, ISTKOP, IVP, J, JFLAG, JON,
  35. 2 K1, K10, K11, K2, K3, K4, K5, K6, K7, K8, K9, KKKINT,
  36. 3 KKKZPW, KNSWOT, KOD, KOP, KOPP, L1, L2, LLLINT, LOTJP,
  37. 4 MNSWOT, MXNON, MXNOND, NCOMP, NCOMPD, NDISK, NEEDIW, NEEDW,
  38. 5 NEQ, NEQIVP, NFC, NFCC, NFCCD, NFCD, NFCP1, NIC, NIV, NON,
  39. 6 NOPG, NPS, NSWOT, NTAPE, NTP, NTPD, NUMORT, NXPTS, NXPTSD,
  40. 7 IP(NFCC,*), IWORK(*)
  41. DOUBLE PRECISION AE, C, G(*), P(NTP,*), PWCND, PX, RE,
  42. 1 S(*), STOWA(*), TND, TOL, U(NCOMP,NFC,*),
  43. 2 V(NCOMP,*), W(NFCC,*), WORK(*), X, XBEG, XEND, XOP,
  44. 3 XOT, XPTS(*), XSAV, XXOP, YHP(NCOMP,*), Z(*)
  45. C
  46. C ******************************************************************
  47. C
  48. COMMON /DML8SZ/ C,XSAV,IGOFX,INHOMO,IVP,NCOMPD,NFCD
  49. COMMON /DML15T/ PX,PWCND,TND,X,XBEG,XEND,XOT,XOP,INFO(15),ISTKOP,
  50. 1 KNSWOT,KOP,LOTJP,MNSWOT,NSWOT
  51. COMMON /DML18J/ AE,RE,TOL,NXPTSD,NIC,NOPG,MXNOND,NDISK,NTAPE,NEQ,
  52. 1 INDPVT,INTEG,NPS,NTPD,NEQIVP,NUMORT,NFCCD,
  53. 2 ICOCO
  54. COMMON /DML17B/ KKKZPW,NEEDW,NEEDIW,K1,K2,K3,K4,K5,K6,K7,K8,K9,
  55. 1 K10,K11,L1,L2,KKKINT,LLLINT
  56. C
  57. EXTERNAL DBVDER
  58. C
  59. C *****************************************************************
  60. C INITIALIZATION OF COUNTERS AND VARIABLES.
  61. C
  62. C BEGIN BLOCK PERMITTING ...EXITS TO 220
  63. C BEGIN BLOCK PERMITTING ...EXITS TO 10
  64. C***FIRST EXECUTABLE STATEMENT DRKFAB
  65. KOD = 1
  66. NON = 1
  67. X = XBEG
  68. JON = 1
  69. INFO(1) = 0
  70. INFO(2) = 0
  71. INFO(3) = 1
  72. INFO(4) = 1
  73. WORK(1) = XEND
  74. C ...EXIT
  75. IF (NOPG .EQ. 0) GO TO 10
  76. INFO(3) = 0
  77. IF (X .EQ. Z(1)) JON = 2
  78. 10 CONTINUE
  79. NFCP1 = NFC + 1
  80. C
  81. C ***************************************************************
  82. C *****BEGINNING OF INTEGRATION LOOP AT OUTPUT
  83. C POINTS.******************
  84. C ***************************************************************
  85. C
  86. DO 210 KOPP = 2, NXPTS
  87. KOP = KOPP
  88. XOP = XPTS(KOP)
  89. IF (NDISK .EQ. 0) KOD = KOP
  90. C
  91. 20 CONTINUE
  92. C
  93. C STEP BY STEP INTEGRATION LOOP BETWEEN OUTPUT POINTS.
  94. C
  95. C BEGIN BLOCK PERMITTING ...EXITS TO 190
  96. C BEGIN BLOCK PERMITTING ...EXITS TO 30
  97. XXOP = XOP
  98. C ...EXIT
  99. IF (NOPG .EQ. 0) GO TO 30
  100. IF (XEND .GT. XBEG .AND. XOP .GT. Z(JON))
  101. 1 XXOP = Z(JON)
  102. IF (XEND .LT. XBEG .AND. XOP .LT. Z(JON))
  103. 1 XXOP = Z(JON)
  104. 30 CONTINUE
  105. C
  106. C ******************************************************
  107. 40 CONTINUE
  108. C BEGIN BLOCK PERMITTING ...EXITS TO 170
  109. GO TO (50,60), INTEG
  110. C DDERKF INTEGRATOR
  111. C
  112. 50 CONTINUE
  113. CALL DDERKF(DBVDER,NEQ,X,YHP,XXOP,INFO,RE,AE,
  114. 1 IDID,WORK,KKKINT,IWORK,LLLINT,G,
  115. 2 IPAR)
  116. GO TO 70
  117. C DDEABM INTEGRATOR
  118. C
  119. 60 CONTINUE
  120. CALL DDEABM(DBVDER,NEQ,X,YHP,XXOP,INFO,RE,AE,
  121. 1 IDID,WORK,KKKINT,IWORK,LLLINT,G,
  122. 2 IPAR)
  123. 70 CONTINUE
  124. IF (IDID .GE. 1) GO TO 80
  125. INFO(1) = 1
  126. C ......EXIT
  127. IF (IDID .EQ. -1) GO TO 170
  128. IFLAG = 20 - IDID
  129. C .....................EXIT
  130. GO TO 220
  131. 80 CONTINUE
  132. C
  133. C ************************************************
  134. C GRAM-SCHMIDT ORTHOGONALIZATION TEST FOR
  135. C ORTHONORMALIZATION (TEMPORARILY USING U AND
  136. C V IN THE TEST)
  137. C
  138. IF (NOPG .EQ. 0) GO TO 100
  139. IF (XXOP .EQ. Z(JON)) GO TO 90
  140. C
  141. C ******************************************
  142. C CONTINUE INTEGRATION IF WE ARE NOT AT
  143. C AN OUTPUT POINT.
  144. C
  145. C ..................EXIT
  146. IF (IDID .NE. 1) GO TO 200
  147. C .........EXIT
  148. GO TO 170
  149. 90 CONTINUE
  150. JFLAG = 2
  151. GO TO 110
  152. 100 CONTINUE
  153. JFLAG = 1
  154. IF (INHOMO .EQ. 3 .AND. X .EQ. XEND)
  155. 1 JFLAG = 3
  156. 110 CONTINUE
  157. C
  158. IF (NDISK .EQ. 0) NON = NUMORT + 1
  159. CALL DREORT(NCOMP,U(1,1,KOD),V(1,KOD),YHP,NIV,
  160. 1 W(1,NON),S,P(1,NON),IP(1,NON),STOWA,
  161. 2 JFLAG)
  162. C
  163. IF (JFLAG .NE. 30) GO TO 120
  164. IFLAG = 30
  165. C .....................EXIT
  166. GO TO 220
  167. 120 CONTINUE
  168. C
  169. IF (JFLAG .NE. 10) GO TO 130
  170. XOP = XPTS(KOP)
  171. IF (NDISK .EQ. 0) KOD = KOP
  172. C ............EXIT
  173. GO TO 190
  174. 130 CONTINUE
  175. C
  176. IF (JFLAG .EQ. 0) GO TO 140
  177. C
  178. C *********************************************
  179. C CONTINUE INTEGRATION IF WE ARE NOT AT AN
  180. C OUTPUT POINT.
  181. C
  182. C ...............EXIT
  183. IF (IDID .NE. 1) GO TO 200
  184. C ......EXIT
  185. GO TO 170
  186. 140 CONTINUE
  187. C
  188. C ************************************************
  189. C STORE ORTHONORMALIZED VECTORS INTO SOLUTION
  190. C VECTORS.
  191. C
  192. IF (NUMORT .LT. MXNON) GO TO 150
  193. IF (X .EQ. XEND) GO TO 150
  194. IFLAG = 13
  195. C .....................EXIT
  196. GO TO 220
  197. 150 CONTINUE
  198. C
  199. NUMORT = NUMORT + 1
  200. CALL DSTOR1(YHP,U(1,1,KOD),YHP(1,NFCP1),
  201. 1 V(1,KOD),1,NDISK,NTAPE)
  202. C
  203. C ************************************************
  204. C STORE ORTHONORMALIZATION INFORMATION,
  205. C INITIALIZE INTEGRATION FLAG, AND CONTINUE
  206. C INTEGRATION TO THE NEXT ORTHONORMALIZATION
  207. C POINT OR OUTPUT POINT.
  208. C
  209. Z(NUMORT) = X
  210. IF (INHOMO .EQ. 1 .AND. NPS .EQ. 0)
  211. 1 C = S(NFCP1)*C
  212. IF (NDISK .EQ. 0) GO TO 160
  213. IF (INHOMO .EQ. 1)
  214. 1 WRITE (NTAPE) (W(J,1), J = 1, NFCC)
  215. WRITE (NTAPE)
  216. 1 (IP(J,1), J = 1, NFCC),
  217. 2 (P(J,1), J = 1, NTP)
  218. 160 CONTINUE
  219. INFO(1) = 0
  220. JON = JON + 1
  221. C ......EXIT
  222. IF (NOPG .EQ. 1 .AND. X .NE. XOP) GO TO 180
  223. C
  224. C ************************************************
  225. C CONTINUE INTEGRATION IF WE ARE NOT AT AN
  226. C OUTPUT POINT.
  227. C
  228. C ............EXIT
  229. IF (IDID .NE. 1) GO TO 200
  230. 170 CONTINUE
  231. GO TO 40
  232. 180 CONTINUE
  233. 190 CONTINUE
  234. GO TO 20
  235. 200 CONTINUE
  236. C
  237. C STORAGE OF HOMOGENEOUS SOLUTIONS IN U AND THE PARTICULAR
  238. C SOLUTION IN V AT THE OUTPUT POINTS.
  239. C
  240. CALL DSTOR1(U(1,1,KOD),YHP,V(1,KOD),YHP(1,NFCP1),0,NDISK,
  241. 1 NTAPE)
  242. 210 CONTINUE
  243. C ***************************************************************
  244. C ***************************************************************
  245. C
  246. IFLAG = 0
  247. 220 CONTINUE
  248. RETURN
  249. END