dreort.f 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. *DECK DREORT
  2. SUBROUTINE DREORT (NCOMP, Y, YP, YHP, NIV, W, S, P, IP, STOWA,
  3. + IFLAG)
  4. C***BEGIN PROLOGUE DREORT
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to DBVSUP
  7. C***LIBRARY SLATEC
  8. C***TYPE DOUBLE PRECISION (REORT-S, DREORT-D)
  9. C***AUTHOR Watts, H. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C **********************************************************************
  13. C INPUT
  14. C *********
  15. C Y, YP and YHP = homogeneous solution matrix and particular
  16. C solution vector to be orthonormalized.
  17. C IFLAG = 1 -- store YHP into Y and YP, test for
  18. C reorthonormalization, orthonormalize if needed,
  19. C save restart data.
  20. C 2 -- store YHP into Y and YP, reorthonormalization,
  21. C no restarts.
  22. C (preset orthonormalization mode)
  23. C 3 -- store YHP into Y and YP, reorthonormalization
  24. C (when INHOMO=3 and X=XEND).
  25. C **********************************************************************
  26. C OUTPUT
  27. C *********
  28. C Y, YP = orthonormalized solutions.
  29. C NIV = number of independent vectors returned from DMGSBV.
  30. C IFLAG = 0 -- reorthonormalization was performed.
  31. C 10 -- solution process must be restarted at the last
  32. C orthonormalization point.
  33. C 30 -- solutions are linearly dependent, problem must
  34. C be restarted from the beginning.
  35. C W, P, IP = orthonormalization information.
  36. C **********************************************************************
  37. C
  38. C***SEE ALSO DBVSUP
  39. C***ROUTINES CALLED DDOT, DMGSBV, DSTOR1, DSTWAY
  40. C***COMMON BLOCKS DML15T, DML18J, DML8SZ
  41. C***REVISION HISTORY (YYMMDD)
  42. C 750601 DATE WRITTEN
  43. C 890531 Changed all specific intrinsics to generic. (WRB)
  44. C 890831 Modified array declarations. (WRB)
  45. C 890921 Realigned order of variables in certain COMMON blocks.
  46. C (WRB)
  47. C 891214 Prologue converted to Version 4.0 format. (BAB)
  48. C 900328 Added TYPE section. (WRB)
  49. C 910722 Updated AUTHOR section. (ALS)
  50. C***END PROLOGUE DREORT
  51. C
  52. DOUBLE PRECISION DDOT
  53. INTEGER ICOCO, IFLAG, IGOFX, IJK, INDPVT, INFO, INHOMO, INTEG,
  54. 1 IP(*), ISTKOP, IVP, J, K, KK, KNSWOT, KOP, L, LOTJP, MFLAG,
  55. 2 MNSWOT, MXNON, NCOMP, NCOMPD, NDISK, NEQ, NEQIVP, NFC,
  56. 3 NFCC, NFCP, NIC, NIV, NOPG, NPS, NSWOT, NTAPE, NTP, NUMORT,
  57. 4 NXPTS
  58. DOUBLE PRECISION AE, C, DND, DNDT, DX, P(*), PWCND, PX, RE, S(*),
  59. 1 SRP, STOWA(*), TND, TOL, VNORM, W(*), WCND, X, XBEG, XEND,
  60. 2 XOP, XOT, XSAV, Y(NCOMP,*), YHP(NCOMP,*), YP(*), YPNM
  61. C
  62. C ******************************************************************
  63. C
  64. COMMON /DML8SZ/ C,XSAV,IGOFX,INHOMO,IVP,NCOMPD,NFC
  65. COMMON /DML15T/ PX,PWCND,TND,X,XBEG,XEND,XOT,XOP,INFO(15),ISTKOP,
  66. 1 KNSWOT,KOP,LOTJP,MNSWOT,NSWOT
  67. COMMON /DML18J/ AE,RE,TOL,NXPTS,NIC,NOPG,MXNON,NDISK,NTAPE,NEQ,
  68. 1 INDPVT,INTEG,NPS,NTP,NEQIVP,NUMORT,NFCC,
  69. 2 ICOCO
  70. C
  71. C **********************************************************************
  72. C BEGIN BLOCK PERMITTING ...EXITS TO 210
  73. C BEGIN BLOCK PERMITTING ...EXITS TO 10
  74. C***FIRST EXECUTABLE STATEMENT DREORT
  75. NFCP = NFC + 1
  76. C
  77. C CHECK TO SEE IF ORTHONORMALIZATION TEST IS TO BE PERFORMED
  78. C
  79. C ...EXIT
  80. IF (IFLAG .NE. 1) GO TO 10
  81. KNSWOT = KNSWOT + 1
  82. C ...EXIT
  83. IF (KNSWOT .GE. NSWOT) GO TO 10
  84. C ......EXIT
  85. IF ((XEND - X)*(X - XOT) .LT. 0.0D0) GO TO 210
  86. 10 CONTINUE
  87. CALL DSTOR1(Y,YHP,YP,YHP(1,NFCP),1,0,0)
  88. C
  89. C ***************************************************************
  90. C
  91. C ORTHOGONALIZE THE HOMOGENEOUS SOLUTIONS Y
  92. C AND PARTICULAR SOLUTION YP.
  93. C
  94. NIV = NFC
  95. CALL DMGSBV(NCOMP,NFC,Y,NCOMP,NIV,MFLAG,S,P,IP,INHOMO,YP,W,
  96. 1 WCND)
  97. C
  98. C ************************************************************
  99. C
  100. C CHECK FOR LINEAR DEPENDENCE OF THE SOLUTIONS.
  101. C
  102. IF (MFLAG .EQ. 0) GO TO 50
  103. C BEGIN BLOCK PERMITTING ...EXITS TO 40
  104. IF (IFLAG .EQ. 2) GO TO 30
  105. IF (NSWOT .LE. 1 .AND. LOTJP .NE. 0) GO TO 20
  106. C
  107. C RETRIEVE DATA FOR A RESTART AT LAST
  108. C ORTHONORMALIZATION POINT
  109. C
  110. CALL DSTWAY(Y,YP,YHP,1,STOWA)
  111. LOTJP = 1
  112. NSWOT = 1
  113. KNSWOT = 0
  114. MNSWOT = MNSWOT/2
  115. TND = TND + 1.0D0
  116. IFLAG = 10
  117. C .........EXIT
  118. GO TO 40
  119. 20 CONTINUE
  120. 30 CONTINUE
  121. IFLAG = 30
  122. 40 CONTINUE
  123. GO TO 200
  124. 50 CONTINUE
  125. C BEGIN BLOCK PERMITTING ...EXITS TO 190
  126. C BEGIN BLOCK PERMITTING ...EXITS TO 110
  127. C
  128. C ******************************************************
  129. C
  130. C ...EXIT
  131. IF (IFLAG .NE. 1) GO TO 110
  132. C
  133. C TEST FOR ORTHONORMALIZATION
  134. C
  135. C ...EXIT
  136. IF (WCND .LT. 50.0D0*TOL) GO TO 110
  137. DO 60 IJK = 1, NFCP
  138. C ......EXIT
  139. IF (S(IJK) .GT. 1.0D20) GO TO 110
  140. 60 CONTINUE
  141. C
  142. C USE LINEAR EXTRAPOLATION ON LOGARITHMIC VALUES OF THE
  143. C NORM DECREMENTS TO DETERMINE NEXT ORTHONORMALIZATION
  144. C CHECKPOINT. OTHER CONTROLS ON THE NUMBER OF STEPS TO
  145. C THE NEXT CHECKPOINT ARE ADDED FOR SAFETY PURPOSES.
  146. C
  147. NSWOT = KNSWOT
  148. KNSWOT = 0
  149. LOTJP = 0
  150. WCND = LOG10(WCND)
  151. IF (WCND .GT. TND + 3.0D0) NSWOT = 2*NSWOT
  152. IF (WCND .LT. PWCND) GO TO 70
  153. XOT = XEND
  154. NSWOT = MIN(MNSWOT,NSWOT)
  155. PWCND = WCND
  156. PX = X
  157. GO TO 100
  158. 70 CONTINUE
  159. DX = X - PX
  160. DND = PWCND - WCND
  161. IF (DND .GE. 4) NSWOT = NSWOT/2
  162. DNDT = WCND - TND
  163. IF (ABS(DX*DNDT) .LE. DND*ABS(XEND-X)) GO TO 80
  164. XOT = XEND
  165. NSWOT = MIN(MNSWOT,NSWOT)
  166. PWCND = WCND
  167. PX = X
  168. GO TO 90
  169. 80 CONTINUE
  170. XOT = X + DX*DNDT/DND
  171. NSWOT = MIN(MNSWOT,NSWOT)
  172. PWCND = WCND
  173. PX = X
  174. 90 CONTINUE
  175. 100 CONTINUE
  176. C ......EXIT
  177. GO TO 190
  178. 110 CONTINUE
  179. C
  180. C *********************************************************
  181. C
  182. C ORTHONORMALIZATION NECESSARY SO WE NORMALIZE THE
  183. C HOMOGENEOUS SOLUTION VECTORS AND CHANGE W ACCORDINGLY.
  184. C
  185. NSWOT = 1
  186. KNSWOT = 0
  187. LOTJP = 1
  188. KK = 1
  189. L = 1
  190. DO 150 K = 1, NFCC
  191. C BEGIN BLOCK PERMITTING ...EXITS TO 140
  192. SRP = SQRT(P(KK))
  193. IF (INHOMO .EQ. 1) W(K) = SRP*W(K)
  194. VNORM = 1.0D0/SRP
  195. P(KK) = VNORM
  196. KK = KK + NFCC + 1 - K
  197. IF (NFC .EQ. NFCC) GO TO 120
  198. C ......EXIT
  199. IF (L .NE. K/2) GO TO 140
  200. 120 CONTINUE
  201. DO 130 J = 1, NCOMP
  202. Y(J,L) = Y(J,L)*VNORM
  203. 130 CONTINUE
  204. L = L + 1
  205. 140 CONTINUE
  206. 150 CONTINUE
  207. C
  208. IF (INHOMO .NE. 1 .OR. NPS .EQ. 1) GO TO 180
  209. C
  210. C NORMALIZE THE PARTICULAR SOLUTION
  211. C
  212. YPNM = DDOT(NCOMP,YP,1,YP,1)
  213. IF (YPNM .EQ. 0.0D0) YPNM = 1.0D0
  214. YPNM = SQRT(YPNM)
  215. S(NFCP) = YPNM
  216. DO 160 J = 1, NCOMP
  217. YP(J) = YP(J)/YPNM
  218. 160 CONTINUE
  219. DO 170 J = 1, NFCC
  220. W(J) = C*W(J)
  221. 170 CONTINUE
  222. 180 CONTINUE
  223. C
  224. IF (IFLAG .EQ. 1) CALL DSTWAY(Y,YP,YHP,0,STOWA)
  225. IFLAG = 0
  226. 190 CONTINUE
  227. 200 CONTINUE
  228. 210 CONTINUE
  229. RETURN
  230. END