dslvs.f 3.9 KB

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