dpintm.f 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. *DECK DPINTM
  2. SUBROUTINE DPINTM (M, N, SX, IX, LMX, IPAGEF)
  3. C***BEGIN PROLOGUE DPINTM
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DSPLP
  6. C***LIBRARY SLATEC
  7. C***TYPE DOUBLE PRECISION (PINITM-S, DPINTM-D)
  8. C***AUTHOR Hanson, R. J., (SNLA)
  9. C Wisniewski, J. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C DPINTM LIMITS THE TYPE OF STORAGE TO A SEQUENTIAL SCHEME.
  13. C THE MATRIX IS STORED BY COLUMNS.
  14. C SPARSE MATRIX INITIALIZATION SUBROUTINE.
  15. C
  16. C M=NUMBER OF ROWS OF THE MATRIX.
  17. C N=NUMBER OF COLUMNS OF THE MATRIX.
  18. C SX(*),IX(*)=THE WORK ARRAYS WHICH ARE USED TO STORE THE SPARSE
  19. C MATRIX. THESE ARRAYS ARE AUTOMATICALLY MAINTAINED BY
  20. C THE PACKAGE FOR THE USER.
  21. C LMX=LENGTH OF THE WORK ARRAY SX(*).
  22. C LMX MUST BE AT LEAST N+7 WHERE
  23. C FOR GREATEST EFFICIENCY LMX SHOULD BE AT LEAST N+NZ+6
  24. C WHERE NZ IS THE MAXIMUM NUMBER OF NONZEROES TO BE
  25. C STORED IN THE MATRIX. VALUES OF LMX BETWEEN N+7 AND
  26. C N+NZ+6 WILL CAUSE DEMAND PAGING TO OCCUR.
  27. C THIS IS IMPLEMENTED BY THE PACKAGE.
  28. C IX(*) MUST BE DIMENSIONED AT LEAST LMX
  29. C IPAGEF=UNIT NUMBER WHERE DEMAND PAGES WILL BE STORED.
  30. C
  31. C THIS SUBROUTINE IS A MODIFICATION OF THE SUBROUTINE LINITM,
  32. C SANDIA LABS. REPT. SAND78-0785.
  33. C MODIFICATIONS BY K.L. HIEBERT AND R.J. HANSON
  34. C REVISED 811130-1000
  35. C REVISED YYMMDD-HHMM
  36. C
  37. C***SEE ALSO DSPLP
  38. C***ROUTINES CALLED XERMSG
  39. C***REVISION HISTORY (YYMMDD)
  40. C 811215 DATE WRITTEN
  41. C 890831 Modified array declarations. (WRB)
  42. C 891214 Prologue converted to Version 4.0 format. (BAB)
  43. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  44. C 900328 Added TYPE section. (WRB)
  45. C 910403 Updated AUTHOR and DESCRIPTION sections. (WRB)
  46. C***END PROLOGUE DPINTM
  47. DOUBLE PRECISION SX(*),ZERO,ONE
  48. DIMENSION IX(*)
  49. SAVE ZERO, ONE
  50. DATA ZERO,ONE /0.D0,1.D0/
  51. C***FIRST EXECUTABLE STATEMENT DPINTM
  52. IOPT=1
  53. C
  54. C CHECK FOR INPUT ERRORS.
  55. C
  56. IF (.NOT.(M.LE.0 .OR. N.LE.0)) GO TO 20002
  57. NERR=55
  58. CALL XERMSG ('SLATEC', 'DPINTM',
  59. + 'MATRIX DIMENSION M OR N .LE. 0', NERR, IOPT)
  60. C
  61. C VERIFY IF VALUE OF LMX IS LARGE ENOUGH.
  62. C
  63. 20002 IF (.NOT.(LMX.LT.N+7)) GO TO 20005
  64. NERR=55
  65. CALL XERMSG ('SLATEC', 'DPINTM',
  66. + 'THE VALUE OF LMX IS TOO SMALL', NERR, IOPT)
  67. C
  68. C INITIALIZE DATA STRUCTURE INDEPENDENT VALUES.
  69. C
  70. 20005 SX(1)=ZERO
  71. SX(2)=ZERO
  72. SX(3)=IPAGEF
  73. IX(1)=LMX
  74. IX(2)=M
  75. IX(3)=N
  76. IX(4)=0
  77. SX(LMX-1)=ZERO
  78. SX(LMX)=-ONE
  79. IX(LMX-1)=-1
  80. LP4=N+4
  81. C
  82. C INITIALIZE DATA STRUCTURE DEPENDENT VALUES.
  83. C
  84. I=4
  85. N20008=LP4
  86. GO TO 20009
  87. 20008 I=I+1
  88. 20009 IF ((N20008-I).LT.0) GO TO 20010
  89. SX(I)=ZERO
  90. GO TO 20008
  91. 20010 I=5
  92. N20012=LP4
  93. GO TO 20013
  94. 20012 I=I+1
  95. 20013 IF ((N20012-I).LT.0) GO TO 20014
  96. IX(I)=LP4
  97. GO TO 20012
  98. 20014 SX(N+5)=ZERO
  99. IX(N+5)=0
  100. IX(LMX)=0
  101. C
  102. C INITIALIZATION COMPLETE.
  103. C
  104. RETURN
  105. END