dcoef.f 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. *DECK DCOEF
  2. SUBROUTINE DCOEF (YH, YP, NCOMP, NROWB, NFC, NIC, B, BETA, COEF,
  3. + INHOMO, RE, AE, BY, CVEC, WORK, IWORK, IFLAG, NFCC)
  4. C***BEGIN PROLOGUE DCOEF
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to DBVSUP
  7. C***LIBRARY SLATEC
  8. C***TYPE DOUBLE PRECISION (SCOEF-S, DCOEF-D)
  9. C***AUTHOR Watts, H. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C **********************************************************************
  13. C INPUT to DCOEF
  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*16 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 = double precision array of internal storage. Dimension must
  34. C be GE
  35. C NFCC*(NFCC+4)
  36. C IWORK = integer array of internal storage. Dimension must be GE
  37. C 3+NFCC
  38. C
  39. C **********************************************************************
  40. C OUTPUT from DCOEF
  41. C **********************************************************************
  42. C
  43. C COEF = array containing superposition constants.
  44. C IFLAG = indicator of success from DSUDS in solving the
  45. C boundary equations.
  46. C = 0 boundary equations are solved.
  47. C = 1 boundary equations appear to have many solutions.
  48. C = 2 boundary equations appear to be inconsistent.
  49. C = 3 for this value of an eigenparameter, the boundary
  50. C equations have only the zero solution.
  51. C
  52. C **********************************************************************
  53. C
  54. C Subroutine DCOEF solves for the superposition constants from the
  55. C linear equations defined by the boundary conditions at X = XFINAL.
  56. C
  57. C B*YP + B*YH*COEF = BETA
  58. C
  59. C **********************************************************************
  60. C
  61. C***SEE ALSO DBVSUP
  62. C***ROUTINES CALLED DDOT, DSUDS, XGETF, XSETF
  63. C***COMMON BLOCKS DML5MC
  64. C***REVISION HISTORY (YYMMDD)
  65. C 750601 DATE WRITTEN
  66. C 890531 Changed all specific intrinsics to generic. (WRB)
  67. C 890831 Modified array declarations. (WRB)
  68. C 890921 Realigned order of variables in certain COMMON blocks.
  69. C (WRB)
  70. C 890921 REVISION DATE from Version 3.2
  71. C 891214 Prologue converted to Version 4.0 format. (BAB)
  72. C 900328 Added TYPE section. (WRB)
  73. C 910722 Updated AUTHOR section. (ALS)
  74. C***END PROLOGUE DCOEF
  75. C
  76. DOUBLE PRECISION DDOT
  77. INTEGER I, IFLAG, INHOMO, IWORK(*), J, K, KFLAG, KI, L, LPAR,
  78. 1 MLSO, NCOMP, NCOMP2, NF, NFC, NFCC, NFCCM1, NIC,
  79. 2 NROWB
  80. DOUBLE PRECISION AE, B(NROWB,*), BBN, BETA(*), BN, BRN,
  81. 1 BY(NFCC,*), BYKL, BYS, COEF(*), CONS, CVEC(*), EPS,
  82. 2 FOURU, GAM, RE, SQOVFL, SRU, TWOU, UN, URO, WORK(*),
  83. 3 YH(NCOMP,*), YP(*), YPN
  84. C
  85. COMMON /DML5MC/ URO,SRU,EPS,SQOVFL,TWOU,FOURU,LPAR
  86. C***FIRST EXECUTABLE STATEMENT DCOEF
  87. C
  88. C SET UP MATRIX B*YH AND VECTOR BETA - B*YP
  89. C
  90. NCOMP2 = NCOMP/2
  91. DO 80 K = 1, NFCC
  92. DO 10 J = 1, NFC
  93. L = J
  94. IF (NFC .NE. NFCC) L = 2*J - 1
  95. BY(K,L) = DDOT(NCOMP,B(K,1),NROWB,YH(1,J),1)
  96. 10 CONTINUE
  97. IF (NFC .EQ. NFCC) GO TO 30
  98. DO 20 J = 1, NFC
  99. L = 2*J
  100. BYKL = DDOT(NCOMP2,B(K,1),NROWB,YH(NCOMP2+1,J),1)
  101. BY(K,L) = DDOT(NCOMP2,B(K,NCOMP2+1),NROWB,YH(1,J),1)
  102. 1 - BYKL
  103. 20 CONTINUE
  104. 30 CONTINUE
  105. GO TO (40,50,60), INHOMO
  106. C CASE 1
  107. 40 CONTINUE
  108. CVEC(K) = BETA(K) - DDOT(NCOMP,B(K,1),NROWB,YP,1)
  109. GO TO 70
  110. C CASE 2
  111. 50 CONTINUE
  112. CVEC(K) = BETA(K)
  113. GO TO 70
  114. C CASE 3
  115. 60 CONTINUE
  116. CVEC(K) = 0.0D0
  117. 70 CONTINUE
  118. 80 CONTINUE
  119. CONS = ABS(CVEC(1))
  120. BYS = ABS(BY(1,1))
  121. C
  122. C ******************************************************************
  123. C SOLVE LINEAR SYSTEM
  124. C
  125. IFLAG = 0
  126. MLSO = 0
  127. IF (INHOMO .EQ. 3) MLSO = 1
  128. KFLAG = 0.5D0 * LOG10(EPS)
  129. CALL XGETF(NF)
  130. CALL XSETF(0)
  131. 90 CONTINUE
  132. CALL DSUDS(BY,COEF,CVEC,NFCC,NFCC,NFCC,KFLAG,MLSO,WORK,IWORK)
  133. IF (KFLAG .NE. 3) GO TO 100
  134. KFLAG = 1
  135. IFLAG = 1
  136. GO TO 90
  137. 100 CONTINUE
  138. IF (KFLAG .EQ. 4) IFLAG = 2
  139. CALL XSETF(NF)
  140. IF (NFCC .EQ. 1) GO TO 180
  141. IF (INHOMO .NE. 3) GO TO 170
  142. IF (IWORK(1) .LT. NFCC) GO TO 140
  143. IFLAG = 3
  144. DO 110 K = 1, NFCC
  145. COEF(K) = 0.0D0
  146. 110 CONTINUE
  147. COEF(NFCC) = 1.0D0
  148. NFCCM1 = NFCC - 1
  149. DO 130 K = 1, NFCCM1
  150. J = NFCC - K
  151. L = NFCC - J + 1
  152. GAM = DDOT(L,BY(J,J),NFCC,COEF(J),1)/(WORK(J)*BY(J,J))
  153. DO 120 I = J, NFCC
  154. COEF(I) = COEF(I) + GAM*BY(J,I)
  155. 120 CONTINUE
  156. 130 CONTINUE
  157. GO TO 160
  158. 140 CONTINUE
  159. DO 150 K = 1, NFCC
  160. KI = 4*NFCC + K
  161. COEF(K) = WORK(KI)
  162. 150 CONTINUE
  163. 160 CONTINUE
  164. 170 CONTINUE
  165. GO TO 220
  166. 180 CONTINUE
  167. C
  168. C ***************************************************************
  169. C TESTING FOR EXISTENCE AND UNIQUENESS OF BOUNDARY-VALUE
  170. C PROBLEM SOLUTION IN A SCALAR CASE
  171. C
  172. BN = 0.0D0
  173. UN = 0.0D0
  174. YPN = 0.0D0
  175. DO 190 K = 1, NCOMP
  176. UN = MAX(UN,ABS(YH(K,1)))
  177. YPN = MAX(YPN,ABS(YP(K)))
  178. BN = MAX(BN,ABS(B(1,K)))
  179. 190 CONTINUE
  180. BBN = MAX(BN,ABS(BETA(1)))
  181. IF (BYS .GT. 10.0D0*(RE*UN + AE)*BN) GO TO 200
  182. BRN = BBN/BN*BYS
  183. IF (CONS .GE. 0.1D0*BRN .AND. CONS .LE. 10.0D0*BRN)
  184. 1 IFLAG = 1
  185. IF (CONS .GT. 10.0D0*BRN) IFLAG = 2
  186. IF (CONS .LE. RE*ABS(BETA(1)) + AE + (RE*YPN + AE)*BN)
  187. 1 IFLAG = 1
  188. IF (INHOMO .EQ. 3) COEF(1) = 1.0D0
  189. GO TO 210
  190. 200 CONTINUE
  191. IF (INHOMO .NE. 3) GO TO 210
  192. IFLAG = 3
  193. COEF(1) = 1.0D0
  194. 210 CONTINUE
  195. 220 CONTINUE
  196. RETURN
  197. END