mpchk.f 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. *DECK MPCHK
  2. SUBROUTINE MPCHK (I, J)
  3. C***BEGIN PROLOGUE MPCHK
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DQDOTA and DQDOTI
  6. C***LIBRARY SLATEC
  7. C***TYPE ALL (MPCHK-A)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C Checks legality of B, T, M, MXR and LUN which should be set
  12. C in COMMON. The condition on MXR (the dimension of the EP arrays)
  13. C is that MXR .GE. (I*T + J)
  14. C
  15. C***SEE ALSO DQDOTA, DQDOTI, MPBLAS
  16. C***ROUTINES CALLED I1MACH, MPERR
  17. C***COMMON BLOCKS MPCOM
  18. C***REVISION HISTORY (YYMMDD)
  19. C 791001 DATE WRITTEN
  20. C ?????? Modified for use with BLAS. Blank COMMON changed to named
  21. C COMMON. R given dimension 12.
  22. C 891009 Removed unreferenced statement label. (WRB)
  23. C 891009 REVISION DATE from Version 3.2
  24. C 891214 Prologue converted to Version 4.0 format. (BAB)
  25. C 900402 Added TYPE section. (WRB)
  26. C 930124 Increased Array size in MPCON for SUN -r8. (RWC)
  27. C***END PROLOGUE MPCHK
  28. COMMON /MPCOM/ B, T, M, LUN, MXR, R(30)
  29. INTEGER B, T, R
  30. C***FIRST EXECUTABLE STATEMENT MPCHK
  31. LUN = I1MACH(4)
  32. C NOW CHECK LEGALITY OF B, T AND M
  33. IF (B.GT.1) GO TO 40
  34. WRITE (LUN, 30) B
  35. 30 FORMAT (' *** B =', I10, ' ILLEGAL IN CALL TO MPCHK,'/
  36. 1 ' PERHAPS NOT SET BEFORE CALL TO AN MP ROUTINE ***')
  37. CALL MPERR
  38. 40 IF (T.GT.1) GO TO 60
  39. WRITE (LUN, 50) T
  40. 50 FORMAT (' *** T =', I10, ' ILLEGAL IN CALL TO MPCHK,'/
  41. 1 ' PERHAPS NOT SET BEFORE CALL TO AN MP ROUTINE ***')
  42. CALL MPERR
  43. 60 IF (M.GT.T) GO TO 80
  44. WRITE (LUN, 70)
  45. 70 FORMAT (' *** M .LE. T IN CALL TO MPCHK,'/
  46. 1 ' PERHAPS NOT SET BEFORE CALL TO AN MP ROUTINE ***')
  47. CALL MPERR
  48. C 8*B*B-1 SHOULD BE REPRESENTABLE, IF NOT WILL OVERFLOW
  49. C AND MAY BECOME NEGATIVE, SO CHECK FOR THIS
  50. 80 IB = 4*B*B - 1
  51. IF ((IB.GT.0).AND.((2*IB+1).GT.0)) GO TO 100
  52. WRITE (LUN, 90)
  53. 90 FORMAT (' *** B TOO LARGE IN CALL TO MPCHK ***')
  54. CALL MPERR
  55. C CHECK THAT SPACE IN COMMON IS SUFFICIENT
  56. 100 MX = I*T + J
  57. IF (MXR.GE.MX) RETURN
  58. C HERE COMMON IS TOO SMALL, SO GIVE ERROR MESSAGE.
  59. WRITE (LUN, 110) I, J, MX, MXR, T
  60. 110 FORMAT (' *** MXR TOO SMALL OR NOT SET TO DIM(R) BEFORE CALL',
  61. 1 ' TO AN MP ROUTINE *** ' /
  62. 2 ' *** MXR SHOULD BE AT LEAST', I3, '*T +', I4, ' =', I6, ' ***'
  63. 3 / ' *** ACTUALLY MXR =', I10, ', AND T =', I10, ' ***')
  64. CALL MPERR
  65. RETURN
  66. END