dprwpg.f 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. *DECK DPRWPG
  2. SUBROUTINE DPRWPG (KEY, IPAGE, LPG, SX, IX)
  3. C***BEGIN PROLOGUE DPRWPG
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DSPLP
  6. C***LIBRARY SLATEC
  7. C***TYPE DOUBLE PRECISION (PRWPGE-S, DPRWPG-D)
  8. C***AUTHOR Hanson, R. J., (SNLA)
  9. C Wisniewski, J. A., (SNLA)
  10. C***DESCRIPTION
  11. C
  12. C DPRWPG LIMITS THE TYPE OF STORAGE TO A SEQUENTIAL SCHEME.
  13. C VIRTUAL MEMORY PAGE READ/WRITE SUBROUTINE.
  14. C
  15. C DEPENDING ON THE VALUE OF KEY, SUBROUTINE DPRWPG() PERFORMS A PAGE
  16. C READ OR WRITE OF PAGE IPAGE. THE PAGE HAS LENGTH LPG.
  17. C
  18. C KEY IS A FLAG INDICATING WHETHER A PAGE READ OR WRITE IS
  19. C TO BE PERFORMED.
  20. C IF KEY = 1 DATA IS READ.
  21. C IF KEY = 2 DATA IS WRITTEN.
  22. C IPAGE IS THE PAGE NUMBER OF THE MATRIX TO BE ACCESSED.
  23. C LPG IS THE LENGTH OF THE PAGE OF THE MATRIX TO BE ACCESSED.
  24. C SX(*),IX(*) IS THE MATRIX TO BE ACCESSED.
  25. C
  26. C THIS SUBROUTINE IS A MODIFICATION OF THE SUBROUTINE LRWPGE,
  27. C SANDIA LABS. REPT. SAND78-0785.
  28. C MODIFICATIONS BY K.L. HIEBERT AND R.J. HANSON
  29. C REVISED 811130-1000
  30. C REVISED YYMMDD-HHMM
  31. C
  32. C***SEE ALSO DSPLP
  33. C***ROUTINES CALLED DPRWVR, XERMSG
  34. C***REVISION HISTORY (YYMMDD)
  35. C 811215 DATE WRITTEN
  36. C 891214 Prologue converted to Version 4.0 format. (BAB)
  37. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  38. C 900328 Added TYPE section. (WRB)
  39. C 900510 Fixed error messages and replaced GOTOs with
  40. C IF-THEN-ELSE. (RWC)
  41. C 910403 Updated AUTHOR and DESCRIPTION sections. (WRB)
  42. C***END PROLOGUE DPRWPG
  43. DOUBLE PRECISION SX(*)
  44. DIMENSION IX(*)
  45. C***FIRST EXECUTABLE STATEMENT DPRWPG
  46. C
  47. C CHECK IF IPAGE IS IN RANGE.
  48. C
  49. IF (IPAGE.LT.1) THEN
  50. CALL XERMSG ('SLATEC', 'DPRWPG',
  51. + 'THE VALUE OF IPAGE (PAGE NUMBER) WAS NOT IN THE RANGE' //
  52. + '1.LE.IPAGE.LE.MAXPGE.', 55, 1)
  53. ENDIF
  54. C
  55. C CHECK IF LPG IS POSITIVE.
  56. C
  57. IF (LPG.LE.0) THEN
  58. CALL XERMSG ('SLATEC', 'DPRWPG',
  59. + 'THE VALUE OF LPG (PAGE LENGTH) WAS NONPOSITIVE.', 55, 1)
  60. ENDIF
  61. C
  62. C DECIDE IF WE ARE READING OR WRITING.
  63. C
  64. IF (KEY.EQ.1) THEN
  65. C
  66. C CODE TO DO A PAGE READ.
  67. C
  68. CALL DPRWVR(KEY,IPAGE,LPG,SX,IX)
  69. ELSE IF (KEY.EQ.2) THEN
  70. C
  71. C CODE TO DO A PAGE WRITE.
  72. C
  73. CALL DPRWVR(KEY,IPAGE,LPG,SX,IX)
  74. ELSE
  75. CALL XERMSG ('SLATEC', 'DPRWPG',
  76. + 'THE VALUE OF KEY (READ-WRITE FLAG) WAS NOT 1 OR 2.', 55, 1)
  77. ENDIF
  78. RETURN
  79. END