exbvp.f 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. *DECK EXBVP
  2. SUBROUTINE EXBVP (Y, NROWY, XPTS, A, NROWA, ALPHA, B, NROWB, BETA,
  3. + IFLAG, WORK, IWORK)
  4. C***BEGIN PROLOGUE EXBVP
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to BVSUP
  7. C***LIBRARY SLATEC
  8. C***TYPE SINGLE 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 BVSUP
  16. C***ROUTINES CALLED BVPOR, XERMSG
  17. C***COMMON BLOCKS ML15TO, ML17BW, ML18JR, ML5MCO, ML8SZ
  18. C***REVISION HISTORY (YYMMDD)
  19. C 750601 DATE WRITTEN
  20. C 890921 Realigned order of variables in certain COMMON blocks.
  21. C (WRB)
  22. C 891214 Prologue converted to Version 4.0 format. (BAB)
  23. C 900328 Added TYPE section. (WRB)
  24. C 900510 Convert XERRWV calls to XERMSG calls. (RWC)
  25. C 910722 Updated AUTHOR section. (ALS)
  26. C***END PROLOGUE EXBVP
  27. C
  28. DIMENSION Y(NROWY,*),A(NROWA,*),ALPHA(*),B(NROWB,*),BETA(*),
  29. 1 WORK(*),IWORK(*),XPTS(*)
  30. CHARACTER*8 XERN1, XERN2
  31. C
  32. C ****************************************************************
  33. C
  34. COMMON /ML8SZ/ C,XSAV,IGOFX,INHOMO,IVP,NCOMP,NFC
  35. COMMON /ML18JR/ AE,RE,TOL,NXPTS,NIC,NOPG,MXNON,NDISK,NTAPE,NEQ,
  36. 1 INDPVT,INTEG,NPS,NTP,NEQIVP,NUMORT,NFCC,
  37. 2 ICOCO
  38. COMMON /ML15TO/ PX,PWCND,TND,X,XBEG,XEND,XOT,XOP,INFO(15),ISTKOP,
  39. 1 KNSWOT,KOP,LOTJP,MNSWOT,NSWOT
  40. COMMON /ML17BW/ KKKZPW,NEEDW,NEEDIW,K1,K2,K3,K4,K5,K6,K7,K8,K9,
  41. 1 K10,K11,L1,L2,KKKINT,LLLINT
  42. C
  43. COMMON /ML5MCO/ URO,SRU,EPS,SQOVFL,TWOU,FOURU,LPAR
  44. C
  45. C***FIRST EXECUTABLE STATEMENT EXBVP
  46. KOTC = 1
  47. IEXP = 0
  48. IF (IWORK(7) .EQ. -1) IEXP = IWORK(8)
  49. C
  50. C COMPUTE ORTHONORMALIZATION TOLERANCES.
  51. C
  52. 10 TOL = 10.0**((-LPAR-IEXP)*2)
  53. C
  54. IWORK(8) = IEXP
  55. MXNON = IWORK(2)
  56. C
  57. C **********************************************************************
  58. C **********************************************************************
  59. C
  60. CALL BVPOR(Y,NROWY,NCOMP,XPTS,NXPTS,A,NROWA,ALPHA,NIC,B,
  61. 1 NROWB,BETA,NFC,IFLAG,WORK(1),MXNON,WORK(K1),NTP,
  62. 2 IWORK(18),WORK(K2),IWORK(16),WORK(K3),WORK(K4),
  63. 3 WORK(K5),WORK(K6),WORK(K7),WORK(K8),WORK(K9),
  64. 4 WORK(K10),IWORK(L1),NFCC)
  65. C
  66. C **********************************************************************
  67. C **********************************************************************
  68. C IF MGSBV RETURNS WITH MESSAGE OF DEPENDENT VECTORS, WE REDUCE
  69. C ORTHONORMALIZATION TOLERANCE AND TRY AGAIN. THIS IS DONE
  70. C A MAXIMUM OF 2 TIMES.
  71. C
  72. IF (IFLAG .NE. 30) GO TO 20
  73. IF (KOTC .EQ. 3 .OR. NOPG .EQ. 1) GO TO 30
  74. KOTC = KOTC + 1
  75. IEXP = IEXP - 2
  76. GO TO 10
  77. C
  78. C **********************************************************************
  79. C IF BVPOR RETURNS MESSAGE THAT THE MAXIMUM NUMBER OF
  80. C ORTHONORMALIZATIONS HAS BEEN ATTAINED AND WE CANNOT CONTINUE, THEN
  81. C WE ESTIMATE THE NEW STORAGE REQUIREMENTS IN ORDER TO SOLVE PROBLEM
  82. C
  83. 20 IF (IFLAG .NE. 13) GO TO 30
  84. XL = ABS(XEND-XBEG)
  85. ZQUIT = ABS(X-XBEG)
  86. INC = 1.5 * XL/ZQUIT * (MXNON+1)
  87. IF (NDISK .NE. 1) THEN
  88. NSAFW = INC*KKKZPW + NEEDW
  89. NSAFIW = INC*NFCC + NEEDIW
  90. ELSE
  91. NSAFW = NEEDW + INC
  92. NSAFIW = NEEDIW
  93. ENDIF
  94. C
  95. WRITE (XERN1, '(I8)') NSAFW
  96. WRITE (XERN2, '(I8)') NSAFIW
  97. CALL XERMSG ('SLATEC', 'EXBVP',
  98. * 'IN BVSUP, PREDICTED STORAGE ALLOCATION FOR WORK ARRAY IS ' //
  99. * XERN1 // ', PREDICTED STORAGE ALLOCATION FOR IWORK ARRAY IS '
  100. * // XERN2, 1, 0)
  101. C
  102. 30 IWORK(1) = MXNON
  103. RETURN
  104. END