dexbvp.f 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. *DECK DEXBVP
  2. SUBROUTINE DEXBVP (Y, NROWY, XPTS, A, NROWA, ALPHA, B, NROWB,
  3. + BETA, IFLAG, WORK, IWORK)
  4. C***BEGIN PROLOGUE DEXBVP
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to DBVSUP
  7. C***LIBRARY SLATEC
  8. C***TYPE DOUBLE PRECISION (EXBVP-S, DEXBVP-D)
  9. C***AUTHOR Watts, H. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C This subroutine is used to execute the basic technique for solving
  13. C the two-point boundary value problem.
  14. C
  15. C***SEE ALSO DBVSUP
  16. C***ROUTINES CALLED DBVPOR, XERMSG
  17. C***COMMON BLOCKS DML15T, DML17B, DML18J, DML5MC, DML8SZ
  18. C***REVISION HISTORY (YYMMDD)
  19. C 750601 DATE WRITTEN
  20. C 890531 Changed all specific intrinsics to generic. (WRB)
  21. C 890831 Modified array declarations. (WRB)
  22. C 890911 Removed unnecessary intrinsics. (WRB)
  23. C 890921 Realigned order of variables in certain COMMON blocks.
  24. C (WRB)
  25. C 890921 REVISION DATE from Version 3.2
  26. C 891214 Prologue converted to Version 4.0 format. (BAB)
  27. C 900328 Added TYPE section. (WRB)
  28. C 900510 Convert XERRWV calls to XERMSG calls. (RWC)
  29. C 910722 Updated AUTHOR section. (ALS)
  30. C***END PROLOGUE DEXBVP
  31. C
  32. INTEGER ICOCO, IEXP, IFLAG, IGOFX, INC, INDPVT, INFO, INHOMO,
  33. 1 INTEG, ISTKOP, IVP, IWORK(*), K1, K10, K11, K2, K3,
  34. 2 K4, K5, K6, K7, K8, K9, KKKINT, KKKZPW, KNSWOT, KOP, KOTC,
  35. 3 L1, L2, LLLINT, LOTJP, LPAR, MNSWOT, MXNON, NCOMP, NDISK,
  36. 4 NEEDIW, NEEDW, NEQ, NEQIVP, NFC, NFCC, NIC, NOPG,
  37. 5 NPS, NROWA, NROWB, NROWY, NSAFIW, NSAFW, NSWOT, NTAPE, NTP,
  38. 6 NUMORT, NXPTS
  39. DOUBLE PRECISION A(NROWA,*), AE, ALPHA(*), B(NROWB,*), BETA(*),
  40. 1 C, EPS, FOURU, PWCND, PX, RE, SQOVFL, SRU, TND, TOL, TWOU,
  41. 2 URO, WORK(*), X, XBEG, XEND, XL, XOP, XOT, XPTS(*), XSAV,
  42. 3 Y(NROWY,*), ZQUIT
  43. CHARACTER*8 XERN1, XERN2
  44. C
  45. C ******************************************************************
  46. C
  47. COMMON /DML8SZ/ C,XSAV,IGOFX,INHOMO,IVP,NCOMP,NFC
  48. COMMON /DML18J/ AE,RE,TOL,NXPTS,NIC,NOPG,MXNON,NDISK,NTAPE,NEQ,
  49. 1 INDPVT,INTEG,NPS,NTP,NEQIVP,NUMORT,NFCC,
  50. 2 ICOCO
  51. COMMON /DML15T/ PX,PWCND,TND,X,XBEG,XEND,XOT,XOP,INFO(15),ISTKOP,
  52. 1 KNSWOT,KOP,LOTJP,MNSWOT,NSWOT
  53. COMMON /DML17B/ KKKZPW,NEEDW,NEEDIW,K1,K2,K3,K4,K5,K6,K7,K8,K9,
  54. 1 K10,K11,L1,L2,KKKINT,LLLINT
  55. C
  56. COMMON /DML5MC/ URO,SRU,EPS,SQOVFL,TWOU,FOURU,LPAR
  57. C
  58. C***FIRST EXECUTABLE STATEMENT DEXBVP
  59. KOTC = 1
  60. IEXP = 0
  61. IF (IWORK(7) .EQ. -1) IEXP = IWORK(8)
  62. C
  63. C COMPUTE ORTHONORMALIZATION TOLERANCES.
  64. C
  65. 10 TOL = 10.0D0**((-LPAR - IEXP)*2)
  66. C
  67. IWORK(8) = IEXP
  68. MXNON = IWORK(2)
  69. C
  70. C **********************************************************************
  71. C **********************************************************************
  72. C
  73. CALL DBVPOR(Y,NROWY,NCOMP,XPTS,NXPTS,A,NROWA,ALPHA,NIC,B,
  74. 1 NROWB,BETA,NFC,IFLAG,WORK(1),MXNON,WORK(K1),NTP,
  75. 2 IWORK(18),WORK(K2),IWORK(16),WORK(K3),WORK(K4),
  76. 3 WORK(K5),WORK(K6),WORK(K7),WORK(K8),WORK(K9),
  77. 4 WORK(K10),IWORK(L1),NFCC)
  78. C
  79. C **********************************************************************
  80. C **********************************************************************
  81. C IF DMGSBV RETURNS WITH MESSAGE OF DEPENDENT VECTORS, WE REDUCE
  82. C ORTHONORMALIZATION TOLERANCE AND TRY AGAIN. THIS IS DONE
  83. C A MAXIMUM OF 2 TIMES.
  84. C
  85. IF (IFLAG .NE. 30) GO TO 20
  86. IF (KOTC .EQ. 3 .OR. NOPG .EQ. 1) GO TO 30
  87. KOTC = KOTC + 1
  88. IEXP = IEXP - 2
  89. GO TO 10
  90. C
  91. C **********************************************************************
  92. C IF DBVPOR RETURNS MESSAGE THAT THE MAXIMUM NUMBER OF
  93. C ORTHONORMALIZATIONS HAS BEEN ATTAINED AND WE CANNOT CONTINUE, THEN
  94. C WE ESTIMATE THE NEW STORAGE REQUIREMENTS IN ORDER TO SOLVE PROBLEM
  95. C
  96. 20 IF (IFLAG .NE. 13) GO TO 30
  97. XL = ABS(XEND-XBEG)
  98. ZQUIT = ABS(X-XBEG)
  99. INC = 1.5D0*XL/ZQUIT * (MXNON+1)
  100. IF (NDISK .NE. 1) THEN
  101. NSAFW = INC*KKKZPW + NEEDW
  102. NSAFIW = INC*NFCC + NEEDIW
  103. ELSE
  104. NSAFW = NEEDW + INC
  105. NSAFIW = NEEDIW
  106. ENDIF
  107. C
  108. WRITE (XERN1, '(I8)') NSAFW
  109. WRITE (XERN2, '(I8)') NSAFIW
  110. CALL XERMSG ('SLATEC', 'DEXBVP',
  111. * 'IN DBVSUP, PREDICTED STORAGE ALLOCATION FOR WORK ARRAY IS ' //
  112. * XERN1 // ', PREDICTED STORAGE ALLOCATION FOR IWORK ARRAY IS '
  113. * // XERN2, 1, 0)
  114. C
  115. 30 IWORK(1) = MXNON
  116. RETURN
  117. END