bvpor.f 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. *DECK BVPOR
  2. SUBROUTINE BVPOR (Y, NROWY, NCOMP, XPTS, NXPTS, A, NROWA, ALPHA,
  3. + NIC, B, NROWB, BETA, NFC, IFLAG, Z, MXNON, P, NTP, IP, W, NIV,
  4. + YHP, U, V, COEF, S, STOWA, G, WORK, IWORK, NFCC)
  5. C***BEGIN PROLOGUE BVPOR
  6. C***SUBSIDIARY
  7. C***PURPOSE Subsidiary to BVSUP
  8. C***LIBRARY SLATEC
  9. C***TYPE SINGLE PRECISION (BVPOR-S, DBVPOR-D)
  10. C***AUTHOR Watts, H. A., (SNLA)
  11. C***DESCRIPTION
  12. C
  13. C **********************************************************************
  14. C INPUT to BVPOR (items not defined in BVSUP comments)
  15. C **********************************************************************
  16. C
  17. C NOPG = 0 -- Orthonormalization points not pre-assigned
  18. C = 1 -- Orthonormalization points pre-assigned
  19. C
  20. C MXNON = Maximum number of orthogonalizations allowed.
  21. C
  22. C NDISK = 0 -- IN-CORE storage
  23. C = 1 -- DISK storage. Value of NTAPE in data statement
  24. C is set to 13. If another value is desired,
  25. C the data statement must be changed.
  26. C
  27. C INTEG = Type of integrator and associated test to be used
  28. C to determine when to orthonormalize.
  29. C
  30. C 1 -- Use GRAM-SCHMIDT test and DERKF
  31. C 2 -- Use GRAM-SCHMIDT test and DEABM
  32. C
  33. C TOL = Tolerance for allowable error in orthogonalization test.
  34. C
  35. C NPS = 0 Normalize particular solution to unit length at each
  36. C point of orthonormalization.
  37. C = 1 Do not normalize particular solution.
  38. C
  39. C NTP = Must be .GE. NFC*(NFC+1)/2.
  40. C
  41. C
  42. C NFCC = 2*NFC for special treatment of a complex valued problem
  43. C
  44. C ICOCO = 0 Skip final computations (superposition coefficients
  45. C and ,hence, boundary problem solution)
  46. C = 1 Calculate superposition coefficients and obtain
  47. C solution to the boundary value problem
  48. C
  49. C **********************************************************************
  50. C OUTPUT from BVPOR
  51. C **********************************************************************
  52. C
  53. C Y(NROWY,NXPTS) = Solution at specified output points.
  54. C
  55. C MXNON = Number of orthonormalizations performed by BVPOR.
  56. C
  57. C Z(MXNON+1) = Locations of orthonormalizations performed by BVPOR.
  58. C
  59. C NIV = Number of independent vectors returned from MGSBV. Normally
  60. C this parameter will be meaningful only when MGSBV returns with
  61. C MFLAG = 2.
  62. C
  63. C **********************************************************************
  64. C
  65. C The following variables are in the argument list because of
  66. C variable dimensioning. In general, they contain no information of
  67. C use to the user. The amount of storage set aside by the user must
  68. C be greater than or equal to that indicated by the dimension
  69. C statements. For the DISK storage mode, NON = 0 and KPTS = 1,
  70. C while for the IN-CORE storage mode, NON = MXNON and KPTS = NXPTS.
  71. C
  72. C P(NTP,NON+1)
  73. C IP(NFCC,NON+1)
  74. C YHP(NCOMP,NFC+1) plus an additional column of the length NEQIVP
  75. C U(NCOMP,NFC,KPTS)
  76. C V(NCOMP,KPTS)
  77. C W(NFCC,NON+1)
  78. C COEF(NFCC)
  79. C S(NFC+1)
  80. C STOWA(NCOMP*(NFC+1)+NEQIVP+1)
  81. C G(NCOMP)
  82. C WORK(KKKWS)
  83. C IWORK(LLLIWS)
  84. C
  85. C **********************************************************************
  86. C Subroutines used by BVPOR
  87. C LSSUDS -- Solves an underdetermined system of linear
  88. C equations. This routine is used to get a full
  89. C set of initial conditions for integration.
  90. C Called by BVPOR
  91. C
  92. C SVECS -- Obtains starting vectors for special treatment
  93. C of complex valued problems , called by BVPOR
  94. C
  95. C RKFAB -- Routine which conducts integration using DERKF or
  96. C DEABM
  97. C
  98. C STWAY -- Storage for backup capability, called by
  99. C BVPOR and REORT
  100. C
  101. C STOR1 -- Storage at output points, called by BVPOR,
  102. C RKFAB, REORT and STWAY.
  103. C
  104. C SDOT -- Single precision vector inner product routine,
  105. C called by BVPOR, SCOEF, LSSUDS, MGSBV,
  106. C BKSOL, REORT and PRVEC.
  107. C ** NOTE **
  108. C A considerable improvement in speed can be achieved if a
  109. C machine language version is used for SDOT.
  110. C
  111. C SCOEF -- Computes the superposition constants from the
  112. C boundary conditions at Xfinal.
  113. C
  114. C BKSOL -- Solves an upper triangular set of linear equations.
  115. C
  116. C **********************************************************************
  117. C
  118. C***SEE ALSO BVSUP
  119. C***ROUTINES CALLED BKSOL, LSSUDS, RKFAB, SCOEF, SDOT, STOR1, STWAY,
  120. C SVECS
  121. C***COMMON BLOCKS ML15TO, ML18JR, ML8SZ
  122. C***REVISION HISTORY (YYMMDD)
  123. C 750601 DATE WRITTEN
  124. C 890531 Changed all specific intrinsics to generic. (WRB)
  125. C 890831 Modified array declarations. (WRB)
  126. C 890921 Realigned order of variables in certain COMMON blocks.
  127. C (WRB)
  128. C 891214 Prologue converted to Version 4.0 format. (BAB)
  129. C 900328 Added TYPE section. (WRB)
  130. C 910722 Updated AUTHOR section. (ALS)
  131. C***END PROLOGUE BVPOR
  132. C
  133. DIMENSION Y(NROWY,*),A(NROWA,*),ALPHA(*),B(NROWB,*),
  134. 1 BETA(*),P(NTP,*),IP(NFCC,*),
  135. 2 U(NCOMP,NFC,*),V(NCOMP,*),W(NFCC,*),
  136. 3 COEF(*),Z(*),YHP(NCOMP,*),XPTS(*),S(*),
  137. 4 WORK(*),IWORK(*),STOWA(*),G(*)
  138. C
  139. C **********************************************************************
  140. C
  141. COMMON /ML8SZ/ C,XSAV,IGOFX,INHOMO,IVP,NCOMPD,NFCD
  142. COMMON /ML15TO/ PX,PWCND,TND,X,XBEG,XEND,XOT,XOP,INFO(15),ISTKOP,
  143. 1 KNSWOT,KOP,LOTJP,MNSWOT,NSWOT
  144. COMMON /ML18JR/ AE,RE,TOL,NXPTSD,NICD,NOPG,MXNOND,NDISK,NTAPE,
  145. 1 NEQ,INDPVT,INTEG,NPS,NTPD,NEQIVP,NUMORT,NFCCD,
  146. 2 ICOCO
  147. C
  148. C **********************************************************************
  149. C
  150. C***FIRST EXECUTABLE STATEMENT BVPOR
  151. NFCP1 = NFC + 1
  152. NUMORT = 0
  153. C = 1.0
  154. C
  155. C **********************************************************************
  156. C CALCULATE INITIAL CONDITIONS WHICH SATISFY
  157. C A*YH(XINITIAL)=0 AND A*YP(XINITIAL)=ALPHA.
  158. C WHEN NFC .NE. NFCC LSSUDS DEFINES VALUES YHP IN A MATRIX OF SIZE
  159. C (NFCC+1)*NCOMP AND ,HENCE, OVERFLOWS THE STORAGE ALLOCATION INTO
  160. C THE U ARRAY. HOWEVER, THIS IS OKAY SINCE PLENTY OF SPACE IS
  161. C AVAILABLE IN U AND IT HAS NOT YET BEEN USED.
  162. C
  163. NDW = NROWA * NCOMP
  164. KWS = NDW + NIC + 1
  165. KWD = KWS + NIC
  166. KWT = KWD + NIC
  167. KWC = KWT + NIC
  168. IFLAG = 0
  169. CALL LSSUDS(A,YHP(1,NFCC+1),ALPHA,NIC,NCOMP,NROWA,YHP,NCOMP,
  170. 1 IFLAG,1,IRA,0,WORK(1),WORK(NDW+1),IWORK,WORK(KWS),
  171. 2 WORK(KWD),WORK(KWT),ISFLG,WORK(KWC))
  172. IF (IFLAG .EQ. 1) GO TO 3
  173. IFLAG=-4
  174. GO TO 250
  175. 3 IF (NFC .NE. NFCC) CALL SVECS(NCOMP,NFC,YHP,WORK,IWORK,
  176. 1 INHOMO,IFLAG)
  177. IF (IFLAG .EQ. 1) GO TO 5
  178. IFLAG=-5
  179. GO TO 250
  180. C
  181. C **********************************************************************
  182. C DETERMINE THE NUMBER OF DIFFERENTIAL EQUATIONS TO BE INTEGRATED,
  183. C INITIALIZE VARIABLES FOR AUXILIARY INITIAL VALUE PROBLEM AND
  184. C STORE INITIAL CONDITIONS.
  185. C
  186. 5 NEQ = NCOMP * NFC
  187. IF (INHOMO .EQ. 1) NEQ = NEQ + NCOMP
  188. IVP = 0
  189. IF (NEQIVP .EQ. 0) GO TO 10
  190. IVP = NEQ
  191. NEQ = NEQ + NEQIVP
  192. NFCP2 = NFCP1
  193. IF (INHOMO .EQ. 1) NFCP2 = NFCP1 + 1
  194. DO 7 K = 1,NEQIVP
  195. 7 YHP(K,NFCP2) = ALPHA(NIC+K)
  196. 10 CALL STOR1(U,YHP,V,YHP(1,NFCP1),0,NDISK,NTAPE)
  197. C
  198. C **********************************************************************
  199. C SET UP DATA FOR THE ORTHONORMALIZATION TESTING PROCEDURE AND
  200. C SAVE INITIAL CONDITIONS IN CASE A RESTART IS NECESSARY.
  201. C
  202. NSWOT=1
  203. KNSWOT=0
  204. LOTJP=1
  205. TND=LOG10(10.*TOL)
  206. PWCND=LOG10(SQRT(TOL))
  207. X=XBEG
  208. PX=X
  209. XOT=XEND
  210. XOP=X
  211. KOP=1
  212. CALL STWAY(U,V,YHP,0,STOWA)
  213. C
  214. C **********************************************************************
  215. C ******** FORWARD INTEGRATION OF ALL INITIAL VALUE EQUATIONS **********
  216. C **********************************************************************
  217. C
  218. CALL RKFAB(NCOMP,XPTS,NXPTS,NFC,IFLAG,Z,MXNON,P,NTP,IP,
  219. 1 YHP,NIV,U,V,W,S,STOWA,G,WORK,IWORK,NFCC)
  220. IF (IFLAG .NE. 0 .OR. ICOCO .EQ. 0) GO TO 250
  221. C
  222. C **********************************************************************
  223. C **************** BACKWARD SWEEP TO OBTAIN SOLUTION *******************
  224. C **********************************************************************
  225. C
  226. C CALCULATE SUPERPOSITION COEFFICIENTS AT XFINAL.
  227. C
  228. C FOR THE DISK STORAGE VERSION, IT IS NOT NECESSARY TO READ U AND V
  229. C AT THE LAST OUTPUT POINT, SINCE THE LOCAL COPY OF EACH STILL EXISTS.
  230. C
  231. KOD = 1
  232. IF (NDISK .EQ. 0) KOD = NXPTS
  233. I1=1+NFCC*NFCC
  234. I2=I1+NFCC
  235. CALL SCOEF(U(1,1,KOD),V(1,KOD),NCOMP,NROWB,NFC,NIC,B,BETA,COEF,
  236. 1 INHOMO,RE,AE,WORK,WORK(I1),WORK(I2),IWORK,IFLAG,NFCC)
  237. C
  238. C **********************************************************************
  239. C CALCULATE SOLUTION AT OUTPUT POINTS BY RECURRING BACKWARDS.
  240. C AS WE RECUR BACKWARDS FROM XFINAL TO XINITIAL WE MUST CALCULATE
  241. C NEW SUPERPOSITION COEFFICIENTS EACH TIME WE CROSS A POINT OF
  242. C ORTHONORMALIZATION.
  243. C
  244. K = NUMORT
  245. NCOMP2=NCOMP/2
  246. IC=1
  247. IF (NFC .NE. NFCC) IC=2
  248. DO 200 J = 1,NXPTS
  249. KPTS = NXPTS - J + 1
  250. KOD = KPTS
  251. IF (NDISK .EQ. 1) KOD = 1
  252. 135 IF (K .EQ. 0) GO TO 170
  253. IF (XEND.GT.XBEG .AND. XPTS(KPTS).GE.Z(K)) GO TO 170
  254. IF (XEND.LT.XBEG .AND. XPTS(KPTS).LE.Z(K)) GO TO 170
  255. NON = K
  256. IF (NDISK .EQ. 0) GO TO 136
  257. NON = 1
  258. BACKSPACE NTAPE
  259. READ (NTAPE) (IP(I,1), I = 1,NFCC),(P(I,1), I = 1,NTP)
  260. BACKSPACE NTAPE
  261. 136 IF (INHOMO .NE. 1) GO TO 150
  262. IF (NDISK .EQ. 0) GO TO 138
  263. BACKSPACE NTAPE
  264. READ (NTAPE) (W(I,1), I = 1,NFCC)
  265. BACKSPACE NTAPE
  266. 138 DO 140 N = 1,NFCC
  267. 140 COEF(N) = COEF(N) - W(N,NON)
  268. 150 CALL BKSOL(NFCC,P(1,NON),COEF)
  269. DO 155 M = 1,NFCC
  270. 155 WORK(M) = COEF(M)
  271. DO 160 M = 1,NFCC
  272. L = IP(M,NON)
  273. 160 COEF(L) = WORK(M)
  274. K = K - 1
  275. GO TO 135
  276. 170 IF (NDISK .EQ. 0) GO TO 175
  277. BACKSPACE NTAPE
  278. READ (NTAPE) (V(I,1), I = 1,NCOMP),
  279. 1 ((U(I,M,1), I = 1,NCOMP), M = 1,NFC)
  280. BACKSPACE NTAPE
  281. 175 DO 180 N = 1,NCOMP
  282. 180 Y(N,KPTS) = V(N,KOD) + SDOT(NFC,U(N,1,KOD),NCOMP,COEF,IC)
  283. IF (NFC .EQ. NFCC) GO TO 200
  284. DO 190 N=1,NCOMP2
  285. NN=NCOMP2+N
  286. Y(N,KPTS)=Y(N,KPTS) - SDOT(NFC,U(NN,1,KOD),NCOMP,COEF(2),2)
  287. 190 Y(NN,KPTS)=Y(NN,KPTS) + SDOT(NFC,U(N,1,KOD),NCOMP,COEF(2),2)
  288. 200 CONTINUE
  289. C
  290. C **********************************************************************
  291. C
  292. 250 MXNON = NUMORT
  293. RETURN
  294. END