slvs.f 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. *DECK SLVS
  2. SUBROUTINE SLVS (WM, IWM, X, TEM)
  3. C***BEGIN PROLOGUE SLVS
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DEBDF
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (SLVS-S, DSLVS-D)
  8. C***AUTHOR Watts, H. A., (SNLA)
  9. C***DESCRIPTION
  10. C
  11. C SLVS solves the linear system in the iteration scheme for the
  12. C integrator package DEBDF.
  13. C
  14. C***SEE ALSO DEBDF
  15. C***ROUTINES CALLED SGBSL, SGESL
  16. C***COMMON BLOCKS DEBDF1
  17. C***REVISION HISTORY (YYMMDD)
  18. C 800901 DATE WRITTEN
  19. C 891214 Prologue converted to Version 4.0 format. (BAB)
  20. C 900328 Added TYPE section. (WRB)
  21. C 910722 Updated AUTHOR section. (ALS)
  22. C 920422 Changed DIMENSION statement. (WRB)
  23. C***END PROLOGUE SLVS
  24. C
  25. CLLL. OPTIMIZE
  26. INTEGER IWM, I, IER, IOWND, IOWNS, JSTART, KFLAG, L, MAXORD,
  27. 1 MEBAND, METH, MITER, ML, MU, N, NFE, NJE, NQ, NQU, NST
  28. REAL WM, X, TEM,
  29. 1 ROWND, ROWNS, EL0, H, HMIN, HMXI, HU, TN, UROUND,
  30. 2 DI, HL0, PHL0, R
  31. DIMENSION WM(*), IWM(*), X(*), TEM(*)
  32. COMMON /DEBDF1/ ROWND, ROWNS(210),
  33. 1 EL0, H, HMIN, HMXI, HU, TN, UROUND, IOWND(14), IOWNS(6),
  34. 2 IER, JSTART, KFLAG, L, METH, MITER, MAXORD, N, NQ, NST, NFE,
  35. 3 NJE, NQU
  36. C-----------------------------------------------------------------------
  37. C THIS ROUTINE MANAGES THE SOLUTION OF THE LINEAR SYSTEM ARISING FROM
  38. C A CHORD ITERATION. IT IS CALLED BY STOD IF MITER .NE. 0.
  39. C IF MITER IS 1 OR 2, IT CALLS SGESL TO ACCOMPLISH THIS.
  40. C IF MITER = 3 IT UPDATES THE COEFFICIENT H*EL0 IN THE DIAGONAL
  41. C MATRIX, AND THEN COMPUTES THE SOLUTION.
  42. C IF MITER IS 4 OR 5, IT CALLS SGBSL.
  43. C COMMUNICATION WITH SLVS USES THE FOLLOWING VARIABLES..
  44. C WM = REAL WORK SPACE CONTAINING THE INVERSE DIAGONAL MATRIX IF MITER
  45. C IS 3 AND THE LU DECOMPOSITION OF THE MATRIX OTHERWISE.
  46. C STORAGE OF MATRIX ELEMENTS STARTS AT WM(3).
  47. C WM ALSO CONTAINS THE FOLLOWING MATRIX-RELATED DATA..
  48. C WM(1) = SQRT(UROUND) (NOT USED HERE),
  49. C WM(2) = HL0, THE PREVIOUS VALUE OF H*EL0, USED IF MITER = 3.
  50. C IWM = INTEGER WORK SPACE CONTAINING PIVOT INFORMATION, STARTING AT
  51. C IWM(21), IF MITER IS 1, 2, 4, OR 5. IWM ALSO CONTAINS THE
  52. C BAND PARAMETERS ML = IWM(1) AND MU = IWM(2) IF MITER IS 4 OR 5.
  53. C X = THE RIGHT-HAND SIDE VECTOR ON INPUT, AND THE SOLUTION VECTOR
  54. C ON OUTPUT, OF LENGTH N.
  55. C TEM = VECTOR OF WORK SPACE OF LENGTH N, NOT USED IN THIS VERSION.
  56. C IER = OUTPUT FLAG (IN COMMON). IER = 0 IF NO TROUBLE OCCURRED.
  57. C IER = -1 IF A SINGULAR MATRIX AROSE WITH MITER = 3.
  58. C THIS ROUTINE ALSO USES THE COMMON VARIABLES EL0, H, MITER, AND N.
  59. C-----------------------------------------------------------------------
  60. C***FIRST EXECUTABLE STATEMENT SLVS
  61. IER = 0
  62. GO TO (100, 100, 300, 400, 400), MITER
  63. 100 CALL SGESL (WM(3), N, N, IWM(21), X, 0)
  64. RETURN
  65. C
  66. 300 PHL0 = WM(2)
  67. HL0 = H*EL0
  68. WM(2) = HL0
  69. IF (HL0 .EQ. PHL0) GO TO 330
  70. R = HL0/PHL0
  71. DO 320 I = 1,N
  72. DI = 1.0E0 - R*(1.0E0 - 1.0E0/WM(I+2))
  73. IF (ABS(DI) .EQ. 0.0E0) GO TO 390
  74. 320 WM(I+2) = 1.0E0/DI
  75. 330 DO 340 I = 1,N
  76. 340 X(I) = WM(I+2)*X(I)
  77. RETURN
  78. 390 IER = -1
  79. RETURN
  80. C
  81. 400 ML = IWM(1)
  82. MU = IWM(2)
  83. MEBAND = 2*ML + MU + 1
  84. CALL SGBSL (WM(3), MEBAND, N, ML, MU, IWM(21), X, 0)
  85. RETURN
  86. C----------------------- END OF SUBROUTINE SLVS -----------------------
  87. END