usrmat.f 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. *DECK USRMAT
  2. SUBROUTINE USRMAT (I, J, AIJ, INDCAT, PRGOPT, DATTRV, IFLAG)
  3. C***BEGIN PROLOGUE USRMAT
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to SPLP
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE 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 SPLP
  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 USRMAT
  20. DIMENSION PRGOPT(*),DATTRV(*),IFLAG(10)
  21. C
  22. C***FIRST EXECUTABLE STATEMENT USRMAT
  23. IF(IFLAG(1).EQ.1) THEN
  24. C
  25. C THIS IS THE INITIALIZATION STEP. THE VALUES OF IFLAG(K),K=2,3,4,
  26. C ARE RESPECTIVELY THE COLUMN INDEX, THE ROW INDEX (OR THE NEXT COL.
  27. C INDEX), AND THE POINTER TO THE MATRIX ENTRY'S VALUE WITHIN
  28. C DATTRV(*). ALSO CHECK (DATTRV(1)=0.) SIGNIFYING NO DATA.
  29. IF(DATTRV(1).EQ.0.) THEN
  30. I = 0
  31. J = 0
  32. IFLAG(1) = 3
  33. ELSE
  34. IFLAG(2)=-DATTRV(1)
  35. IFLAG(3)= DATTRV(2)
  36. IFLAG(4)= 3
  37. ENDIF
  38. C
  39. RETURN
  40. ELSE
  41. J=IFLAG(2)
  42. I=IFLAG(3)
  43. L=IFLAG(4)
  44. IF(I.EQ.0) THEN
  45. C
  46. C SIGNAL THAT ALL OF THE NONZERO ENTRIES HAVE BEEN DEFINED.
  47. IFLAG(1)=3
  48. RETURN
  49. ELSE IF(I.LT.0) THEN
  50. C
  51. C SIGNAL THAT A SWITCH IS MADE TO A NEW COLUMN.
  52. J=-I
  53. I=DATTRV(L)
  54. L=L+1
  55. ENDIF
  56. C
  57. AIJ=DATTRV(L)
  58. C
  59. C UPDATE THE INDICES AND POINTERS FOR THE NEXT ENTRY.
  60. IFLAG(2)=J
  61. IFLAG(3)=DATTRV(L+1)
  62. IFLAG(4)=L+2
  63. C
  64. C INDCAT=0 DENOTES THAT ENTRIES OF THE MATRIX ARE ASSIGNED THE
  65. C VALUES FROM DATTRV(*). NO ACCUMULATION IS PERFORMED.
  66. INDCAT=0
  67. RETURN
  68. ENDIF
  69. END