dusrmt.f 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. *DECK DUSRMT
  2. SUBROUTINE DUSRMT (I, J, AIJ, INDCAT, PRGOPT, DATTRV, IFLAG)
  3. C***BEGIN PROLOGUE DUSRMT
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DSPLP
  6. C***LIBRARY SLATEC
  7. C***TYPE DOUBLE PRECISION (USRMAT-S, DUSRMT-D)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C The user may supply this code
  12. C
  13. C***SEE ALSO DSPLP
  14. C***ROUTINES CALLED (NONE)
  15. C***REVISION HISTORY (YYMMDD)
  16. C 811215 DATE WRITTEN
  17. C 891214 Prologue converted to Version 4.0 format. (BAB)
  18. C 900328 Added TYPE section. (WRB)
  19. C***END PROLOGUE DUSRMT
  20. DOUBLE PRECISION PRGOPT(*),DATTRV(*),AIJ
  21. INTEGER IFLAG(*)
  22. C
  23. C***FIRST EXECUTABLE STATEMENT DUSRMT
  24. IF(IFLAG(1).EQ.1) THEN
  25. C
  26. C THIS IS THE INITIALIZATION STEP. THE VALUES OF IFLAG(K),K=2,3,4,
  27. C ARE RESPECTIVELY THE COLUMN INDEX, THE ROW INDEX (OR THE NEXT COL.
  28. C INDEX), AND THE POINTER TO THE MATRIX ENTRY'S VALUE WITHIN
  29. C DATTRV(*). ALSO CHECK (DATTRV(1)=0.) SIGNIFYING NO DATA.
  30. IF(DATTRV(1).EQ.0.D0) THEN
  31. I = 0
  32. J = 0
  33. IFLAG(1) = 3
  34. ELSE
  35. IFLAG(2)=-DATTRV(1)
  36. IFLAG(3)= DATTRV(2)
  37. IFLAG(4)= 3
  38. ENDIF
  39. C
  40. RETURN
  41. ELSE
  42. J=IFLAG(2)
  43. I=IFLAG(3)
  44. L=IFLAG(4)
  45. IF(I.EQ.0) THEN
  46. C
  47. C SIGNAL THAT ALL OF THE NONZERO ENTRIES HAVE BEEN DEFINED.
  48. IFLAG(1)=3
  49. RETURN
  50. ELSE IF(I.LT.0) THEN
  51. C
  52. C SIGNAL THAT A SWITCH IS MADE TO A NEW COLUMN.
  53. J=-I
  54. I=DATTRV(L)
  55. L=L+1
  56. ENDIF
  57. C
  58. AIJ=DATTRV(L)
  59. C
  60. C UPDATE THE INDICES AND POINTERS FOR THE NEXT ENTRY.
  61. IFLAG(2)=J
  62. IFLAG(3)=DATTRV(L+1)
  63. IFLAG(4)=L+2
  64. C
  65. C INDCAT=0 DENOTES THAT ENTRIES OF THE MATRIX ARE ASSIGNED THE
  66. C VALUES FROM DATTRV(*). NO ACCUMULATION IS PERFORMED.
  67. INDCAT=0
  68. RETURN
  69. ENDIF
  70. END