scoef.f 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. *DECK SCOEF
  2. SUBROUTINE SCOEF (YH, YP, NCOMP, NROWB, NFC, NIC, B, BETA, COEF,
  3. + INHOMO, RE, AE, BY, CVEC, WORK, IWORK, IFLAG, NFCC)
  4. C***BEGIN PROLOGUE SCOEF
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to BVSUP
  7. C***LIBRARY SLATEC
  8. C***TYPE SINGLE PRECISION (SCOEF-S, DCOEF-D)
  9. C***AUTHOR Watts, H. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C **********************************************************************
  13. C INPUT TO SCOEF
  14. C **********************************************************************
  15. C
  16. C YH = Matrix of homogeneous solutions.
  17. C YP = Vector containing particular solution.
  18. C NCOMP = Number of components per solution vector.
  19. C NROWB = First dimension of B in calling program.
  20. C NFC = Number of base solution vectors.
  21. C NFCC = 2*NFC for the special treatment of complex valued
  22. C equations. Otherwise, NFCC=NFC.
  23. C NIC = Number of specified initial conditions.
  24. C B = Boundary condition matrix at X = Xfinal.
  25. C BETA = Vector of nonhomogeneous boundary conditions at X = Xfinal.
  26. C 1 - Nonzero particular solution
  27. C INHOMO = 2 - Zero particular solution
  28. C 3 - Eigenvalue problem
  29. C RE = Relative error tolerance
  30. C AE = Absolute error tolerance
  31. C BY = Storage space for the matrix B*YH
  32. C CVEC = Storage space for the vector BETA-B*YP
  33. C WORK = Real array of internal storage. Dimension must be .GE.
  34. C NFCC*(NFCC+4)
  35. C IWORK = Integer array of internal storage. Dimension must be .GE.
  36. C 3+NFCC
  37. C
  38. C **********************************************************************
  39. C OUTPUT FROM SCOEF
  40. C **********************************************************************
  41. C
  42. C COEF = Array containing superposition constants.
  43. C IFLAG = Indicator of success from SUDS in solving the
  44. C boundary equations
  45. C = 0 Boundary equations are solved
  46. C = 1 Boundary equations appear to have many solutions
  47. C = 2 Boundary equations appear to be inconsistent
  48. C = 3 For this value of an eigenparameter, the boundary
  49. C equations have only the zero solution.
  50. C
  51. C **********************************************************************
  52. C
  53. C Subroutine SCOEF solves for the superposition constants from the
  54. C linear equations defined by the boundary conditions at X = Xfinal.
  55. C
  56. C B*YP + B*YH*COEF = BETA
  57. C
  58. C **********************************************************************
  59. C
  60. C***SEE ALSO BVSUP
  61. C***ROUTINES CALLED SDOT, SUDS, XGETF, XSETF
  62. C***COMMON BLOCKS ML5MCO
  63. C***REVISION HISTORY (YYMMDD)
  64. C 750601 DATE WRITTEN
  65. C 890531 Changed all specific intrinsics to generic. (WRB)
  66. C 890831 Modified array declarations. (WRB)
  67. C 890921 Realigned order of variables in certain COMMON blocks.
  68. C (WRB)
  69. C 891214 Prologue converted to Version 4.0 format. (BAB)
  70. C 900328 Added TYPE section. (WRB)
  71. C 910722 Updated AUTHOR section. (ALS)
  72. C***END PROLOGUE SCOEF
  73. C
  74. DIMENSION YH(NCOMP,*),YP(*),B(NROWB,*),BETA(*),
  75. 1 COEF(*),BY(NFCC,*),CVEC(*),WORK(*),IWORK(*)
  76. C
  77. COMMON /ML5MCO/ URO,SRU,EPS,SQOVFL,TWOU,FOURU,LPAR
  78. C
  79. C SET UP MATRIX B*YH AND VECTOR BETA - B*YP
  80. C
  81. C***FIRST EXECUTABLE STATEMENT SCOEF
  82. NCOMP2=NCOMP/2
  83. DO 7 K = 1,NFCC
  84. DO 1 J = 1,NFC
  85. L=J
  86. IF (NFC .NE. NFCC) L=2*J-1
  87. 1 BY(K,L) = SDOT(NCOMP,B(K,1),NROWB,YH(1,J),1)
  88. IF (NFC .EQ. NFCC) GO TO 3
  89. DO 2 J=1,NFC
  90. L=2*J
  91. BYKL=SDOT(NCOMP2,B(K,1),NROWB,YH(NCOMP2+1,J),1)
  92. BY(K,L)=SDOT(NCOMP2,B(K,NCOMP2+1),NROWB,YH(1,J),1) - BYKL
  93. 2 CONTINUE
  94. 3 GO TO (4,5,6), INHOMO
  95. C CASE 1
  96. 4 CVEC(K) = BETA(K) - SDOT(NCOMP,B(K,1),NROWB,YP,1)
  97. GO TO 7
  98. C CASE 2
  99. 5 CVEC(K) = BETA(K)
  100. GO TO 7
  101. C CASE 3
  102. 6 CVEC(K) = 0.
  103. 7 CONTINUE
  104. CONS=ABS(CVEC(1))
  105. BYS=ABS(BY(1,1))
  106. C
  107. C **********************************************************************
  108. C SOLVE LINEAR SYSTEM
  109. C
  110. IFLAG=0
  111. MLSO=0
  112. IF (INHOMO .EQ. 3) MLSO=1
  113. KFLAG = 0.5 * LOG10(EPS)
  114. CALL XGETF(NF)
  115. CALL XSETF(0)
  116. 10 CALL SUDS(BY,COEF,CVEC,NFCC,NFCC,NFCC,KFLAG,MLSO,WORK,IWORK)
  117. IF (KFLAG .NE. 3) GO TO 13
  118. KFLAG=1
  119. IFLAG=1
  120. GO TO 10
  121. 13 IF (KFLAG .EQ. 4) IFLAG=2
  122. CALL XSETF(NF)
  123. IF (NFCC .EQ. 1) GO TO 25
  124. IF (INHOMO .NE. 3) RETURN
  125. IF (IWORK(1) .LT. NFCC) GO TO 17
  126. IFLAG=3
  127. DO 14 K=1,NFCC
  128. 14 COEF(K)=0.
  129. COEF(NFCC)=1.
  130. NFCCM1=NFCC-1
  131. DO 15 K=1,NFCCM1
  132. J=NFCC-K
  133. L=NFCC-J+1
  134. GAM=SDOT(L,BY(J,J),NFCC,COEF(J),1)/(WORK(J)*BY(J,J))
  135. DO 15 I=J,NFCC
  136. 15 COEF(I)=COEF(I)+GAM*BY(J,I)
  137. RETURN
  138. 17 DO 20 K=1,NFCC
  139. KI=4*NFCC+K
  140. 20 COEF(K)=WORK(KI)
  141. RETURN
  142. C
  143. C **********************************************************************
  144. C TESTING FOR EXISTENCE AND UNIQUENESS OF BOUNDARY-VALUE PROBLEM
  145. C SOLUTION IN A SCALAR CASE
  146. C
  147. 25 BN = 0.
  148. UN = 0.
  149. YPN=0.
  150. DO 30 K = 1,NCOMP
  151. UN = MAX(UN,ABS(YH(K,1)))
  152. YPN=MAX(YPN,ABS(YP(K)))
  153. 30 BN = MAX(BN,ABS(B(1,K)))
  154. BBN = MAX(BN,ABS(BETA(1)))
  155. IF (BYS .GT. 10.*(RE*UN + AE)*BN) GO TO 35
  156. BRN = BBN / BN * BYS
  157. IF (CONS .GE. 0.1*BRN .AND. CONS .LE. 10.*BRN) IFLAG=1
  158. IF (CONS .GT. 10.*BRN) IFLAG=2
  159. IF (CONS .LE. RE*ABS(BETA(1))+AE + (RE*YPN+AE)*BN) IFLAG=1
  160. IF (INHOMO .EQ. 3) COEF(1)=1.
  161. RETURN
  162. 35 IF (INHOMO .NE. 3) RETURN
  163. IFLAG=3
  164. COEF(1)=1.
  165. RETURN
  166. END