reort.f 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. *DECK REORT
  2. SUBROUTINE REORT (NCOMP, Y, YP, YHP, NIV, W, S, P, IP, STOWA,
  3. + IFLAG)
  4. C***BEGIN PROLOGUE REORT
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to BVSUP
  7. C***LIBRARY SLATEC
  8. C***TYPE SINGLE 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 BVSUP
  39. C***ROUTINES CALLED MGSBV, SDOT, STOR1, STWAY
  40. C***COMMON BLOCKS ML15TO, ML18JR, ML8SZ
  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 REORT
  51. C
  52. DIMENSION Y(NCOMP,*),YP(*),W(*),S(*),P(*),IP(*),
  53. 1 STOWA(*),YHP(NCOMP,*)
  54. C
  55. C **********************************************************************
  56. C
  57. COMMON /ML8SZ/ C,XSAV,IGOFX,INHOMO,IVP,NCOMPD,NFC
  58. COMMON /ML15TO/ PX,PWCND,TND,X,XBEG,XEND,XOT,XOP,INFO(15),ISTKOP,
  59. 1 KNSWOT,KOP,LOTJP,MNSWOT,NSWOT
  60. COMMON /ML18JR/ AE,RE,TOL,NXPTS,NIC,NOPG,MXNON,NDISK,NTAPE,NEQ,
  61. 1 INDPVT,INTEG,NPS,NTP,NEQIVP,NUMORT,NFCC,
  62. 2 ICOCO
  63. C
  64. C **********************************************************************
  65. C***FIRST EXECUTABLE STATEMENT REORT
  66. NFCP=NFC+1
  67. C
  68. C CHECK TO SEE IF ORTHONORMALIZATION TEST IS TO BE PERFORMED
  69. C
  70. IF (IFLAG .NE. 1) GO TO 5
  71. KNSWOT=KNSWOT+1
  72. IF (KNSWOT .GE. NSWOT) GO TO 5
  73. IF ((XEND-X)*(X-XOT) .LT. 0.) RETURN
  74. 5 CALL STOR1(Y,YHP,YP,YHP(1,NFCP),1,0,0)
  75. C
  76. C ****************************************
  77. C
  78. C ORTHOGONALIZE THE HOMOGENEOUS SOLUTIONS Y
  79. C AND PARTICULAR SOLUTION YP.
  80. C
  81. NIV=NFC
  82. CALL MGSBV(NCOMP,NFC,Y,NCOMP,NIV,MFLAG,S,P,IP,INHOMO,YP,W,WCND)
  83. C
  84. C ****************************************
  85. C
  86. C CHECK FOR LINEAR DEPENDENCE OF THE SOLUTIONS.
  87. C
  88. IF (MFLAG .EQ. 0) GO TO 25
  89. IF (IFLAG .EQ. 2) GO TO 15
  90. IF (NSWOT .GT. 1 .OR. LOTJP .EQ. 0) GO TO 20
  91. 15 IFLAG=30
  92. RETURN
  93. C
  94. C RETRIEVE DATA FOR A RESTART AT LAST ORTHONORMALIZATION POINT
  95. C
  96. 20 CALL STWAY(Y,YP,YHP,1,STOWA)
  97. LOTJP=1
  98. NSWOT=1
  99. KNSWOT=0
  100. MNSWOT=MNSWOT/2
  101. TND=TND+1.
  102. IFLAG=10
  103. RETURN
  104. C
  105. C ****************************************
  106. C
  107. 25 IF (IFLAG .NE. 1) GO TO 60
  108. C
  109. C TEST FOR ORTHONORMALIZATION
  110. C
  111. IF (WCND .LT. 50.*TOL) GO TO 60
  112. DO 30 IJK=1,NFCP
  113. IF (S(IJK) .GT. 1.0E+20) GO TO 60
  114. 30 CONTINUE
  115. C
  116. C USE LINEAR EXTRAPOLATION ON LOGARITHMIC VALUES OF THE NORM
  117. C DECREMENTS TO DETERMINE NEXT ORTHONORMALIZATION CHECKPOINT.
  118. C OTHER CONTROLS ON THE NUMBER OF STEPS TO THE NEXT CHECKPOINT
  119. C ARE ADDED FOR SAFETY PURPOSES.
  120. C
  121. NSWOT=KNSWOT
  122. KNSWOT=0
  123. LOTJP=0
  124. WCND=LOG10(WCND)
  125. IF (WCND .GT. TND+3.) NSWOT=2*NSWOT
  126. IF (WCND .GE. PWCND) GO TO 40
  127. DX=X-PX
  128. DND=PWCND-WCND
  129. IF (DND .GE. 4) NSWOT=NSWOT/2
  130. DNDT=WCND-TND
  131. IF (ABS(DX*DNDT) .GT. DND*ABS(XEND-X)) GO TO 40
  132. XOT=X+DX*DNDT/DND
  133. GO TO 50
  134. 40 XOT=XEND
  135. 50 NSWOT=MIN(MNSWOT,NSWOT)
  136. PWCND=WCND
  137. PX=X
  138. RETURN
  139. C
  140. C ****************************************
  141. C
  142. C ORTHONORMALIZATION NECESSARY SO WE NORMALIZE THE HOMOGENEOUS
  143. C SOLUTION VECTORS AND CHANGE W ACCORDINGLY.
  144. C
  145. 60 NSWOT=1
  146. KNSWOT=0
  147. LOTJP=1
  148. KK = 1
  149. L=1
  150. DO 70 K = 1,NFCC
  151. SRP=SQRT(P(KK))
  152. IF (INHOMO .EQ. 1) W(K)=SRP*W(K)
  153. VNORM=1./SRP
  154. P(KK)=VNORM
  155. KK = KK + NFCC + 1 - K
  156. IF (NFC .EQ. NFCC) GO TO 63
  157. IF (L .NE. K/2) GO TO 70
  158. 63 DO 65 J = 1,NCOMP
  159. 65 Y(J,L) = Y(J,L)*VNORM
  160. L=L+1
  161. 70 CONTINUE
  162. C
  163. IF (INHOMO .NE. 1 .OR. NPS .EQ. 1) GO TO 100
  164. C
  165. C NORMALIZE THE PARTICULAR SOLUTION
  166. C
  167. YPNM=SDOT(NCOMP,YP,1,YP,1)
  168. IF (YPNM .EQ. 0.0) YPNM = 1.0
  169. YPNM = SQRT(YPNM)
  170. S(NFCP) = YPNM
  171. DO 80 J = 1,NCOMP
  172. 80 YP(J) = YP(J) / YPNM
  173. DO 90 J = 1,NFCC
  174. 90 W(J) = C * W(J)
  175. C
  176. 100 IF (IFLAG .EQ. 1) CALL STWAY(Y,YP,YHP,0,STOWA)
  177. IFLAG=0
  178. RETURN
  179. END