home *** CD-ROM | disk | FTP | other *** search
/ Los Alamos National Laboratory / LANL_CD.ISO / software / slatec / quik_chk.txt < prev    next >
Encoding:
Text File  |  1992-10-16  |  956.7 KB  |  30,523 lines

  1. *DECK AVNTST
  2.       SUBROUTINE AVNTST (LUN, KPRINT, IPASS)
  3. C***BEGIN PROLOGUE  AVNTST
  4. C***PURPOSE  Quick check for AVINT.
  5. C***LIBRARY   SLATEC
  6. C***TYPE      SINGLE PRECISION (AVNTST-S, DAVNTS-D)
  7. C***AUTHOR  (UNKNOWN)
  8. C***ROUTINES CALLED  AVINT, R1MACH, XERCLR, XGETF, XSETF
  9. C***REVISION HISTORY  (YYMMDD)
  10. C   ??????  DATE WRITTEN
  11. C   890911  Removed unnecessary intrinsics.  (WRB)
  12. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13. C   901205  Changed usage of R1MACH(3) to R1MACH(4).  (RWC)
  14. C   910501  Added PURPOSE and TYPE records.  (WRB)
  15. C   910708  Minor modifications in use of KPRINT.  (WRB)
  16. C   920210  Code restructured and revised to test error returns for all
  17. C           values of KPRINT.  (WRB)
  18. C***END PROLOGUE  AVNTST
  19.       DIMENSION X(501), Y(501)
  20.       LOGICAL FATAL
  21. C***FIRST EXECUTABLE STATEMENT  AVNTST
  22.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  23.       IPASS = 1
  24.       TOL = MAX(.0001E0,SQRT(R1MACH(4)))
  25.       TOL1 = 1.0E-2*TOL
  26. C
  27. C     Perform first accuracy test.
  28. C
  29.       A = 0.0E0
  30.       B = 5.0E0
  31.       XINT = EXP(5.0D0) - 1.0D0
  32.       N = 500
  33.       RN1 = N - 1
  34.       SQB = SQRT(B)
  35.       DEL = 0.4E0*(B-A)/(N-1)
  36.       DO 100 I = 1,N
  37.         X(I) = SQB*SQRT(A+(I-1)*(B-A)/RN1) + DEL
  38.         Y(I) = EXP(X(I))
  39.   100 CONTINUE
  40.       CALL AVINT (X, Y, N, A, B, ANS, IERR)
  41. C
  42. C     See if test was passed.
  43. C
  44.       IF (ABS(ANS-XINT) .GT. TOL) THEN
  45.         IPASS = 0
  46.         IF (KPRINT .GE. 3) WRITE (LUN,9010) IERR, ANS, XINT
  47.       ENDIF
  48. C
  49. C     Perform second accuracy test.
  50. C
  51.       X(1) = 0.0E0
  52.       X(2) = 5.0E0
  53.       Y(1) = 1.0E0
  54.       Y(2) = 0.5E0
  55.       A = -0.5E0
  56.       B = 0.5E0
  57.       XINT = 1.0E0
  58.       CALL AVINT (X, Y, 2, A, B, ANS, IERR)
  59. C
  60. C     See if test was passed.
  61. C
  62.       IF (ABS(ANS-XINT) .GT. TOL1) THEN
  63.         IPASS = 0
  64.         IF (KPRINT .GE. 3) WRITE (LUN,9010) IERR, ANS, XINT
  65.       ENDIF
  66. C
  67. C     Send message indicating passage or failure of tests.
  68. C
  69.       IF (KPRINT .GE. 2) THEN
  70.         IF (IPASS .EQ. 1) THEN
  71.            IF (KPRINT .GE. 3) WRITE (LUN,9020)
  72.         ELSE
  73.            WRITE (LUN,9030)
  74.         ENDIF
  75.       ENDIF
  76. C
  77. C     Test error returns.
  78. C
  79.       CALL XGETF (KONTRL)
  80.       IF (KPRINT .LE. 2) THEN
  81.          CALL XSETF (0)
  82.       ELSE
  83.          CALL XSETF (1)
  84.       ENDIF
  85.       FATAL = .FALSE.
  86.       CALL XERCLR
  87. C
  88.       IF (KPRINT .GE. 3) THEN
  89.         WRITE (LUN,9040)
  90.       ENDIF
  91.       DO 110 I = 1,20
  92.         X(I) = (I-1)/19.0E0 - 0.01E0
  93.         IF (I .NE. 1) Y(I) = X(I)/(EXP(X(I))-1.0)
  94.   110 CONTINUE
  95. C
  96. C     Test IERR = 1 error return.
  97. C
  98.       Y(1) = 1.0E0
  99.       CALL AVINT (X, Y, 20, 0.0E0, 1.0E0, ANS, IERR)
  100.       IF (IERR .NE. 1) THEN
  101.         IPASS = 0
  102.         FATAL = .TRUE.
  103.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 1
  104.       ENDIF
  105.       CALL XERCLR
  106. C
  107. C     Test IERR = 2 error return.
  108. C
  109.       CALL AVINT (X, Y, 20, 1.0E0, 0.0E0, ANS, IERR)
  110.       IF (IERR .NE. 2) THEN
  111.         IPASS = 0
  112.         FATAL = .TRUE.
  113.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 2
  114.       ENDIF
  115.       IF (ANS .NE. 0.0E0) THEN
  116.         IPASS = 0
  117.         FATAL = .TRUE.
  118.         IF (KPRINT .GE. 3) WRITE (LUN,9070)
  119.       ENDIF
  120.       CALL XERCLR
  121. C
  122. C     Test IERR = 5 error return.
  123. C
  124.       CALL AVINT (X, Y, 1, 0.0E0, 1.0E0, ANS, IERR)
  125.       IF (IERR .NE. 5) THEN
  126.         IPASS = 0
  127.         FATAL = .TRUE.
  128.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 5
  129.       ENDIF
  130.       IF (ANS .NE. 0.0E0) THEN
  131.         IPASS = 0
  132.         FATAL = .TRUE.
  133.         IF (KPRINT .GE. 3) WRITE (LUN,9070)
  134.       ENDIF
  135.       CALL XERCLR
  136. C
  137. C     Test IERR = 4 error return.
  138. C
  139.       X(1) = 1.0E0/19.0E0
  140.       X(2) = 0.0E0
  141.       CALL AVINT (X, Y, 20, 0.0E0, 1.0E0, ANS, IERR)
  142.       IF (IERR .NE. 4) THEN
  143.         IPASS = 0
  144.         FATAL = .TRUE.
  145.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 4
  146.       ENDIF
  147.       IF (ANS .NE. 0.0E0) THEN
  148.         IPASS = 0
  149.         FATAL = .TRUE.
  150.         IF (KPRINT .GE. 3) WRITE (LUN,9070)
  151.       ENDIF
  152.       CALL XERCLR
  153. C
  154. C     Test IERR = 3 error return.
  155. C
  156.       X(1) = 0.0E0
  157.       X(2) = 1.0E0/19.0E0
  158.       CALL AVINT (X, Y, 20, 0.0E0, .01E0, ANS, IERR)
  159.       IF (IERR .NE. 3) THEN
  160.         IPASS = 0
  161.         FATAL = .TRUE.
  162.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 3
  163.       ENDIF
  164.       IF (ANS .NE. 0.0E0) THEN
  165.         IPASS = 0
  166.         FATAL = .TRUE.
  167.         IF (KPRINT .GE. 3) WRITE (LUN,9070)
  168.       ENDIF
  169.       CALL XERCLR
  170. C
  171. C     Reset XERMSG control variables and write summary.
  172. C
  173.       CALL XSETF (KONTRL)
  174.       IF (FATAL) THEN
  175.          IF (KPRINT .GE. 2) THEN
  176.             WRITE (LUN, 9080)
  177.          ENDIF
  178.       ELSE
  179.          IF (KPRINT .GE. 3) THEN
  180.             WRITE (LUN, 9090)
  181.          ENDIF
  182.       ENDIF
  183. C
  184. C     Write PASS/FAIL message.
  185. C
  186.       IF (IPASS.EQ.1 .AND. KPRINT.GE.3) WRITE (LUN,9100)
  187.       IF (IPASS.EQ.0 .AND. KPRINT.GE.2) WRITE (LUN,9110)
  188.       RETURN
  189.  9000 FORMAT ('1' / ' AVINT Quick Check')
  190.  9010 FORMAT (/' FAILED ACCURACY TEST' /
  191.      +        ' IERR=', I2, 5X, 'COMPUTED ANS=', E20.11 / 14X,
  192.      +        'CORRECT ANS=', E20.11, 5X, 'REQUESTED ERR=', E10.2)
  193.  9020 FORMAT (/ ' AVINT passed both accuracy tests.')
  194.  9030 FORMAT (/ ' AVINT failed at least one accuracy test.')
  195.  9040 FORMAT (/ ' Test error returns from AVINT' /
  196.      +        ' 4 error messages expected' /)
  197.  9060 FORMAT (/' IERR =', I2, ' and it should =', I2 /)
  198.  9070 FORMAT (1X, 'ANS .NE. 0')
  199.  9080 FORMAT (/ ' At least one incorrect argument test FAILED')
  200.  9090 FORMAT (/ ' All incorrect argument tests PASSED')
  201.  9100 FORMAT (/' ***************AVINT PASSED ALL TESTS***************')
  202.  9110 FORMAT (/' ***************AVINT FAILED SOME TESTS**************')
  203.       END
  204. *DECK BIKCK
  205.       SUBROUTINE BIKCK (LUN, KPRINT, IPASS)
  206. C***BEGIN PROLOGUE  BIKCK
  207. C***PURPOSE  Quick check for BESI and BESK.
  208. C***LIBRARY   SLATEC
  209. C***TYPE      SINGLE PRECISION (BIKCK-S, DBIKCK-D)
  210. C***KEYWORDS  QUICK CHECK
  211. C***AUTHOR  Amos, D. E., (SNLA)
  212. C***DESCRIPTION
  213. C
  214. C   BIKCK is a quick check routine for BESI and BESK.  The main loops
  215. C   evaluate the Wronskian and test the error.  Underflow and overflow
  216. C   diagnostics are checked in addition to illegal arguments.
  217. C
  218. C***ROUTINES CALLED  BESI, BESK, NUMXER, R1MACH, XERCLR, XGETF, XSETF
  219. C***REVISION HISTORY  (YYMMDD)
  220. C   750101  DATE WRITTEN
  221. C   890911  Removed unnecessary intrinsics.  (WRB)
  222. C   891004  Removed unreachable code.  (WRB)
  223. C   891004  REVISION DATE from Version 3.2
  224. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  225. C   901013  Editorial changes, some restructing and modifications to
  226. C           obtain more information when there is failure of the
  227. C           Wronskian.  (RWC)
  228. C   910501  Added PURPOSE and TYPE records.  (WRB)
  229. C   910708  Code revised to test error returns for all values of
  230. C           KPRINT.  (WRB)
  231. C***END PROLOGUE  BIKCK
  232.       INTEGER I, IX, K, KONTRL, KODE, LUN, M, N, NERR, NU, NW, NY
  233.       REAL ALP, DEL, ER, FNU, FNUP, RX, TOL, X
  234.       REAL FN(3), W(5), XX(5), Y(5)
  235.       REAL R1MACH
  236.       LOGICAL FATAL
  237. C***FIRST EXECUTABLE STATEMENT  BIKCK
  238.       IF (KPRINT .GE. 2) WRITE (LUN,90000)
  239. C
  240.       IPASS = 1
  241.       XX(1) = 0.49E0
  242.       XX(2) = 1.3E0
  243.       XX(3) = 5.3E0
  244.       XX(4) = 13.3E0
  245.       XX(5) = 21.3E0
  246.       FN(1) = 0.095E0
  247.       FN(2) = 0.70E0
  248.       FN(3) = 0.0E0
  249.       TOL = 500.0E0*MAX(R1MACH(4), 7.1E-15)
  250.       DO 60 KODE=1,2
  251.          DO 50 M=1,3
  252.             DO 40 N=1,4
  253.                DO 30 NU=1,4
  254.                   FNU = FN(M) + 12*(NU-1)
  255.                   DO 20 IX=1,5
  256.                      IF (IX.LT.2 .AND. NU.GT.3) GO TO 20
  257.                      X = XX(IX)
  258.                      RX = 1.0E0/X
  259.                      CALL BESI(X, FNU, KODE, N, Y, NY)
  260.                      IF (NY.NE.0) GO TO 20
  261.                      CALL BESK(X, FNU, KODE, N, W, NW)
  262.                      IF (NW.NE.0) GO TO 20
  263.                      FNUP = FNU + N
  264.                      CALL BESI(X,FNUP,KODE,1,Y(N+1),NY)
  265.                      IF (NY.NE.0) GO TO 20
  266.                      CALL BESK(X,FNUP,KODE,1,W(N+1),NW)
  267.                      IF (NW.NE.0) GO TO 20
  268.                      DO 10 I=1,N
  269.                         ER = Y(I+1)*W(I) + W(I+1)*Y(I) - RX
  270.                         ER = ABS(ER)*X
  271.                         IF (ER.GT.TOL) THEN
  272.                            IPASS = 0
  273.                            IF (KPRINT.GE.2) WRITE (LUN,90010) KODE,M,N,
  274.      *                        NU,IX,I,X,ER,TOL,
  275.      *                        Y(I),Y(I+1),W(I),W(I+1)
  276.                         ENDIF
  277.    10                CONTINUE
  278.    20             CONTINUE
  279.    30          CONTINUE
  280.    40       CONTINUE
  281.    50    CONTINUE
  282.    60 CONTINUE
  283. C
  284. C     Check small values of X and order
  285. C
  286.       N = 2
  287.       FNU = 1.0E0
  288.       X = R1MACH(4)/100.0E0
  289.       DO 80 I=1,3
  290.          DO 70 KODE=1,2
  291.             CALL BESI(X, FNU, KODE, N, Y, NY)
  292.             CALL BESK(X, FNU, KODE, N, W, NW)
  293.             ER = Y(2)*W(1) + W(2)*Y(1) - 1.0E0/X
  294.             ER = ABS(ER)*X
  295.             IF (ER.GT.TOL) THEN
  296.                IPASS = 0
  297.                IF (KPRINT.GE.2) WRITE (LUN,90020) I,KODE,FNU,X,ER,TOL,
  298.      +            Y(1),Y(2),W(1),W(2)
  299.                GO TO 700
  300.             ENDIF
  301.    70    CONTINUE
  302. C
  303.   700    FNU = R1MACH(4)/100.0E0
  304.          X = XX(2*I-1)
  305.    80 CONTINUE
  306. C
  307. C     Check large values of X and order
  308. C
  309.       KODE = 2
  310.       DO 76 K=1,2
  311.          DEL = 30*(K-1)
  312.          FNU = 45.0E0+DEL
  313.          DO 75 N=1,2
  314.             X = 20.0E0 + DEL
  315.             DO 71 I=1,5
  316.                RX = 1.0E0/X
  317.                CALL BESI(X, FNU, KODE, N, Y, NY)
  318.                IF (NY.NE.0) GO TO 71
  319.                CALL BESK(X, FNU, KODE, N, W, NW)
  320.                IF (NW.NE.0) GO TO 71
  321.                IF (N.EQ.1) THEN
  322.                   FNUP = FNU + 1.0E0
  323.                   CALL BESI(X,FNUP,KODE,1,Y(2),NY)
  324.                   IF (NY.NE.0) GO TO 71
  325.                   CALL BESK(X,FNUP,KODE,1,W(2),NW)
  326.                   IF (NW.NE.0) GO TO 71
  327.                ENDIF
  328.                ER = Y(2)*W(1) + Y(1)*W(2) - RX
  329.                ER = ABS(ER)*X
  330.                IF (ER.GT.TOL) THEN
  331.                   IPASS = 0
  332.                   IF (KPRINT.GE.2) WRITE (LUN,90030) K,N,I,FNUP,X,
  333.      +               ER,TOL,Y(1),Y(2),W(1),W(2)
  334.                   GO TO 760
  335.                ENDIF
  336.                X = X + 10.0E0
  337.    71       CONTINUE
  338.    75    CONTINUE
  339.    76 CONTINUE
  340. C
  341. C     Check underflow flags
  342. C
  343.   760 X = R1MACH(1)*10.0E0
  344.       ALP = 12.3E0
  345.       N = 3
  346.       CALL BESI(X, ALP, 1, N, Y, NY)
  347.       IF (NY.NE.3) THEN
  348.          IPASS = 0
  349.          IF (KPRINT.GE.2) WRITE (LUN,90040)
  350.       ENDIF
  351. C
  352.       X = LOG(R1MACH(2)/10.0E0) + 20.0E0
  353.       ALP = 1.3E0
  354.       N = 3
  355.       CALL BESK(X, ALP, 1, N, W, NW)
  356.       IF (NW.NE.3) THEN
  357.          IPASS = 0
  358.          IF (KPRINT.GE.2) WRITE (LUN,90050)
  359.       ENDIF
  360. C
  361. C     Trigger 10 error conditions
  362. C
  363.       CALL XGETF (KONTRL)
  364.       IF (KPRINT .LE. 2) THEN
  365.          CALL XSETF (0)
  366.       ELSE
  367.          CALL XSETF (1)
  368.       ENDIF
  369.       FATAL = .FALSE.
  370.       CALL XERCLR
  371. C
  372.       IF (KPRINT .GE. 3) WRITE (LUN,90060)
  373.       XX(1) = 1.0E0
  374.       XX(2) = 1.0E0
  375.       XX(3) = 1.0E0
  376.       XX(4) = 1.0E0
  377. C
  378. C     Illegal arguments
  379. C
  380.       DO 90 I=1,4
  381.          XX(I) = -XX(I)
  382.          K = INT(XX(3))
  383.          N = INT(XX(4))
  384.          CALL BESI(XX(1), XX(2), K, N, Y, NY)
  385.          IF (NUMXER(NERR) .NE. 2) THEN
  386.             IPASS = 0
  387.             FATAL = .TRUE.
  388.          ENDIF
  389.          CALL XERCLR
  390.          CALL BESK(XX(1), XX(2), K, N, W, NW)
  391.          IF (NUMXER(NERR) .NE. 2) THEN
  392.             IPASS = 0
  393.             FATAL = .TRUE.
  394.          ENDIF
  395.          CALL XERCLR
  396.          XX(I) = -XX(I)
  397.    90 CONTINUE
  398. C
  399. C     Trigger overflow
  400. C
  401.       X = LOG(R1MACH(2)/10.0E0) + 20.0E0
  402.       N = 3
  403.       ALP = 2.3E0
  404.       CALL BESI(X, ALP, 1, N, Y, NY)
  405.       IF (NUMXER(NERR) .NE. 6) THEN
  406.          IPASS = 0
  407.          FATAL = .TRUE.
  408.       ENDIF
  409.       CALL XERCLR
  410. C
  411.       X = R1MACH(1)*10.0E0
  412.       CALL BESK(X, ALP, 1, N, W, NW)
  413.       IF (NUMXER(NERR) .NE. 6) THEN
  414.          IPASS = 0
  415.          FATAL = .TRUE.
  416.       ENDIF
  417.       CALL XERCLR
  418. C
  419.       CALL XSETF (KONTRL)
  420.       IF (FATAL) THEN
  421.          IF (KPRINT .GE. 2) THEN
  422.             WRITE (LUN, 90070)
  423.          ENDIF
  424.       ELSE
  425.          IF (KPRINT .GE. 3) THEN
  426.             WRITE (LUN, 90080)
  427.          ENDIF
  428.       ENDIF
  429. C
  430.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,90100)
  431.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,90110)
  432.       RETURN
  433. C
  434. 90000 FORMAT (/ ' QUICK CHECKS FOR BESI AND BESK' //)
  435. 90010 FORMAT (/ ' ERROR IN QUICK CHECK OF WRONSKIAN', 1P /
  436.      +        ' KODE = ', I1,', M = ', I1, ', N = ', I1, ', NU = ', I1,
  437.      +        ', IX = ', I1, ', I = ', I1 /
  438.      +        ' X = ', E14.7, ', ER   = ', E14.7, ', TOL = ', E14.7 /
  439.      +        ' Y(I) = ', E14.7, ', Y(I+1) = ', E14.7 /
  440.      +        ' W(I) = ', E14.7, ', W(I+1) = ', E14.7)
  441. 90020 FORMAT (/ ' ERROR IN QUICK CHECK OF SMALL X AND ORDER', 1P /
  442.      +        ' I = ', I1,', KODE = ', I1, ', FNU = ', E14.7 /
  443.      +        ' X = ', E14.7, ', ER = ', E14.7, ', TOL = ', E14.7 /
  444.      +        ' Y(1) = ', E14.7, ', Y(2) = ', E14.7 /
  445.      +        ' W(1) = ', E14.7, ', W(2) = ', E14.7)
  446. 90030 FORMAT (/ ' ERROR IN QUICK CHECK OF LARGE X AND ORDER', 1P /
  447.      +        ' K = ', I1,', N = ', I1, ', I = ', I1,
  448.      +        ', FNUP = ', E14.7 /
  449.      +        ' X = ', E14.7, ', ER = ', E14.7, ', TOL = ', E14.7 /
  450.      +        ' Y(1) = ', E14.7, ', Y(2) = ', E14.7 /
  451.      +        ' W(1) = ', E14.7, ', W(2) = ', E14.7)
  452. 90040 FORMAT (/ ' ERROR IN BESI UNDERFLOW TEST' /)
  453. 90050 FORMAT (/ ' ERROR IN BESK UNDERFLOW TEST' /)
  454. 90060 FORMAT (// ' TRIGGER 10 ERROR CONDITIONS' //)
  455. 90070 FORMAT (/ ' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  456. 90080 FORMAT (/ ' ALL INCORRECT ARGUMENT TESTS PASSED')
  457. 90100 FORMAT (/' **********BESI AND BESK PASSED ALL TESTS************')
  458. 90110 FORMAT (/' **********BESI OR BESK FAILED SOME TESTS************')
  459.       END
  460. *DECK BJYCK
  461.       SUBROUTINE BJYCK (LUN, KPRINT, IPASS)
  462. C***BEGIN PROLOGUE  BJYCK
  463. C***PURPOSE  Quick check for BESJ and BESY.
  464. C***LIBRARY   SLATEC
  465. C***TYPE      SINGLE PRECISION (BJYCK-S, DBJYCK-D)
  466. C***KEYWORDS  QUICK CHECK
  467. C***AUTHOR  Amos, D. E., (SNLA)
  468. C***DESCRIPTION
  469. C
  470. C   BJYCK is a quick check routine for BESJ and BESY.  The main loops
  471. C   evaluate the Wronskian and test the error.  Underflow and overflow
  472. C   diagnostics are checked in addition to illegal arguments.
  473. C
  474. C***ROUTINES CALLED  BESJ, BESY, NUMXER, R1MACH, XERCLR, XGETF, XSETF
  475. C***REVISION HISTORY  (YYMMDD)
  476. C   750101  DATE WRITTEN
  477. C   890911  Removed unnecessary intrinsics.  (WRB)
  478. C   891004  Removed unreachable code.  (WRB)
  479. C   891004  REVISION DATE from Version 3.2
  480. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  481. C   901013  Editorial changes, some restructing and modifications to
  482. C           obtain more information when there is failure of the
  483. C           Wronskian.  (RWC)
  484. C   910501  Added PURPOSE and TYPE records.  (WRB)
  485. C   910708  Code revised to test error returns for all values of
  486. C           KPRINT.  (WRB)
  487. C***END PROLOGUE  BJYCK
  488.       INTEGER I, IX, K, KONTRL, LUN, M, N, NERR, NU, NY
  489.       REAL ALP, DEL, ER, FNU, FNUP, RHPI, RX, TOL, X
  490.       REAL FN(3), W(5), XX(5), Y(5)
  491.       REAL R1MACH
  492.       LOGICAL FATAL
  493. C***FIRST EXECUTABLE STATEMENT  BJYCK
  494.       IF (KPRINT.GE.2) WRITE (LUN,90000)
  495. C
  496.       IPASS=1
  497.       RHPI = 0.5E0/ATAN(1.0E0)
  498.       XX(1) = 0.49E0
  499.       XX(2) = 1.3E0
  500.       XX(3) = 5.3E0
  501.       XX(4) = 13.3E0
  502.       XX(5) = 21.3E0
  503.       FN(1) = 0.095E0
  504.       FN(2) = 0.70E0
  505.       FN(3) = 0.0E0
  506.       TOL = 500.0E0*MAX(R1MACH(4), 7.1E-15)
  507.       DO 50 M=1,3
  508.          DO 40 N=1,4
  509.             DO 30 NU=1,4
  510.                FNU = FN(M) + 12*(NU-1)
  511.                DO 20 IX=1,5
  512.                   IF (IX.LT.2 .AND. NU.GT.3) GO TO 20
  513.                   X = XX(IX)
  514.                   RX = RHPI/X
  515.                   CALL BESJ(X, FNU, N, Y, NY)
  516.                   IF (NY.NE.0) GO TO 20
  517.                   CALL BESY(X, FNU, N, W)
  518.                   FNUP = FNU + N
  519.                   CALL BESJ(X,FNUP,1,Y(N+1),NY)
  520.                   IF (NY.NE.0) GO TO 20
  521.                   CALL BESY(X,FNUP,1,W(N+1))
  522.                   DO 10 I=1,N
  523.                      ER = Y(I+1)*W(I) - W(I+1)*Y(I) - RX
  524.                      ER = ABS(ER)/RX
  525.                      IF (ER.GT.TOL) THEN
  526.                         IPASS = 0
  527.                         IF (KPRINT.GE.2) WRITE (LUN,90010) M,N,NU,IX,I,
  528.      *                     X,ER,TOL,Y(I),Y(I+1),W(I),W(I+1)
  529.                      ENDIF
  530.    10             CONTINUE
  531.    20          CONTINUE
  532.    30       CONTINUE
  533.    40    CONTINUE
  534.    50 CONTINUE
  535. C
  536. C     Check small values of X and order
  537. C
  538.       N = 2
  539.       FNU = 1.0E0
  540.       X = R1MACH(4)/100.0E0
  541.       RX = RHPI/X
  542.       DO 60 I=1,3
  543.          CALL BESJ(X, FNU, N, Y, NY)
  544.          CALL BESY(X, FNU, N, W)
  545.          ER = Y(2)*W(1) - W(2)*Y(1) - RX
  546.          ER = ABS(ER)/RX
  547.          IF (ER.GT.TOL) THEN
  548.             IPASS = 0
  549.             IF (KPRINT.GE.2) WRITE (LUN,90020) I,FNU,X,ER,TOL,
  550.      +         Y(I),Y(I+1),W(I),W(I+1)
  551.             GO TO 600
  552.          ENDIF
  553. C
  554.          FNU = R1MACH(4)/100.0E0
  555.          X = XX(2*I-1)
  556.          RX = RHPI/X
  557.    60 CONTINUE
  558. C
  559. C     Check large values of X and order
  560. C
  561.   600 DO 76 K=1,2
  562.          DEL = 30*(K-1)
  563.          FNU = 70.0E0+DEL
  564.          DO 75 N=1,2
  565.             X = 50.0E0 + DEL
  566.             DO 70 I=1,5
  567.                RX = RHPI/X
  568.                CALL BESJ(X, FNU, N, Y, NY)
  569.                IF (NY.NE.0) GO TO 70
  570.                CALL BESY(X, FNU, N, W)
  571.                IF (N.EQ.1) THEN
  572.                   FNUP = FNU + 1.0E0
  573.                   CALL BESJ(X,FNUP,1,Y(2),NY)
  574.                   IF (NY.NE.0) GO TO 70
  575.                   CALL BESY(X,FNUP,1,W(2))
  576.                ENDIF
  577.                ER = Y(2)*W(1) - Y(1)*W(2) - RX
  578.                ER = ABS(ER)/RX
  579.                IF (ER.GT.TOL) THEN
  580.                   IPASS = 0
  581.                   IF (KPRINT.GE.2) WRITE (LUN,90030) K,N,I,X,ER,TOL,
  582.      *               Y(1),Y(2),W(1),W(2)
  583.                   GO TO 800
  584.                ENDIF
  585.                X = X + 10.0E0
  586.    70       CONTINUE
  587.    75    CONTINUE
  588.    76 CONTINUE
  589. C
  590. C     Check underflow flags
  591. C
  592.   800 X = R1MACH(1)*10.0E0
  593.       ALP = 12.3E0
  594.       N = 3
  595.       CALL BESJ(X, ALP, N, Y, NY)
  596.       IF (NY.NE.3) THEN
  597.          IPASS = 0
  598.          IF (KPRINT.GE.2) WRITE (LUN,90040)
  599.       ENDIF
  600. C
  601. C     Trigger 7 error conditions
  602. C
  603.       CALL XGETF (KONTRL)
  604.       IF (KPRINT .LE. 2) THEN
  605.          CALL XSETF (0)
  606.       ELSE
  607.          CALL XSETF (1)
  608.       ENDIF
  609.       FATAL = .FALSE.
  610.       CALL XERCLR
  611. C
  612.       IF (KPRINT .GE. 3) WRITE (LUN,90050)
  613.       XX(1) = 1.0E0
  614.       XX(2) = 1.0E0
  615.       XX(3) = 1.0E0
  616. C
  617. C     Illegal arguments
  618. C
  619.       DO 80 I=1,3
  620.          XX(I) = -XX(I)
  621.          N = INT(XX(3))
  622.          CALL BESJ(XX(1), XX(2), N, Y, NY)
  623.          IF (NUMXER(NERR) .NE. 2) THEN
  624.             IPASS = 0
  625.             FATAL = .TRUE.
  626.          ENDIF
  627.          CALL XERCLR
  628.          CALL BESY(XX(1), XX(2), N, W)
  629.          IF (NUMXER(NERR) .NE. 2) THEN
  630.             IPASS = 0
  631.             FATAL = .TRUE.
  632.          ENDIF
  633.          CALL XERCLR
  634.          XX(I) = -XX(I)
  635.    80 CONTINUE
  636. C
  637. C     Trigger overflow
  638. C
  639.       X = R1MACH(1)*10.0E0
  640.       N = 3
  641.       ALP = 2.3E0
  642.       CALL BESY(X, ALP, N, W)
  643.       IF (NUMXER(NERR) .NE. 6) THEN
  644.          IPASS = 0
  645.          FATAL = .TRUE.
  646.       ENDIF
  647.       CALL XERCLR
  648.       CALL XSETF (KONTRL)
  649.       IF (FATAL) THEN
  650.          IF (KPRINT .GE. 2) THEN
  651.             WRITE (LUN, 90070)
  652.          ENDIF
  653.       ELSE
  654.          IF (KPRINT .GE. 3) THEN
  655.             WRITE (LUN, 90080)
  656.          ENDIF
  657.       ENDIF
  658. C
  659.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,90100)
  660.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,90110)
  661.       RETURN
  662. C
  663. 90000 FORMAT (/ ' QUICK CHECKS FOR BESJ AND BESY' //)
  664. 90010 FORMAT (/ ' ERROR IN QUICK CHECK OF WRONSKIAN', 1P /
  665.      +        ' M = ', I1,', N = ', I1, ', NU = ', I1, ', IX = ', I1,
  666.      +        ', I = ', I1, /
  667.      +        ' X = ', E14.7, ', ER   = ', E14.7, ', TOL = ', E14.7 /
  668.      +        ' Y(I) = ', E14.7, ', Y(I+1) = ', E14.7 /
  669.      +        ' W(I) = ', E14.7, ', W(I+1) = ', E14.7)
  670. 90020 FORMAT (/ ' ERROR IN QUICK CHECK OF SMALL X AND ORDER', 1P /
  671.      +        ' I = ', I1,',  FNU = ', E14.7 /
  672.      +        ' X = ', E14.7, ', ER = ', E14.7, ', TOL = ', E14.7 /
  673.      +        ' Y(1) = ', E14.7, ', Y(2) = ', E14.7 /
  674.      +        ' W(1) = ', E14.7, ', W(2) = ', E14.7)
  675. 90030 FORMAT (/ ' ERROR IN QUICK CHECK OF LARGE X AND ORDER', 1P /
  676.      +        ' K = ', I1,', N = ', I1, ', I = ', I1 /
  677.      +        ' X = ', E14.7, ', ER = ', E14.7, ', TOL = ', E14.7 /
  678.      +        ' Y(1) = ', E14.7, ', Y(2) = ', E14.7 /
  679.      +        ' W(1) = ', E14.7, ', W(2) = ', E14.7)
  680. 90040 FORMAT (/ ' ERROR IN BESJ UNDERFLOW TEST' /)
  681. 90050 FORMAT (// ' TRIGGER 7 ERROR CONDITIONS' //)
  682. 90070 FORMAT (/ ' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  683. 90080 FORMAT (/ ' ALL INCORRECT ARGUMENT TESTS PASSED')
  684. 90100 FORMAT (/' **********BESJ AND BESY PASSED ALL TESTS**********')
  685. 90110 FORMAT (/' **********BESJ OR BESY FAILED SOME TESTS**********')
  686.       END
  687. *DECK BLACHK
  688.       SUBROUTINE BLACHK (LUN, KPRINT, IPASS)
  689. C***BEGIN PROLOGUE  BLACHK
  690. C***PURPOSE  Quick check for Basic Linear Algebra Subprograms.
  691. C***LIBRARY   SLATEC
  692. C***KEYWORDS  QUICK CHECK
  693. C***AUTHOR  Lawson, C. L., (JPL)
  694. C***DESCRIPTION
  695. C
  696. C     ********************************* TBLA ***************************
  697. C     TEST DRIVER FOR BASIC LINEAR ALGEBRA SUBPROGRAMS.
  698. C     C. L. LAWSON, JPL, 1974 DEC 10, 1975 MAY 28
  699. C
  700. C     UPDATED BY K. HASKELL - JUNE 23,1980
  701. C
  702. C***ROUTINES CALLED  CHECK0, CHECK1, CHECK2, HEADER
  703. C***COMMON BLOCKS    COMBLA
  704. C***REVISION HISTORY  (YYMMDD)
  705. C   751210  DATE WRITTEN
  706. C   890618  REVISION DATE from Version 3.2
  707. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  708. C***END PROLOGUE  BLACHK
  709.       INTEGER IPASS, JTEST(38)
  710.       DOUBLE PRECISION DFAC,DQFAC
  711.       LOGICAL PASS
  712.       COMMON /COMBLA/ NPRINT, ICASE, N, INCX, INCY, MODE, PASS
  713.       DATA SFAC,SDFAC,DFAC,DQFAC / .625E-1, .50, .625D-1, 0.625D-1/
  714.       DATA JTEST /1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  715.      1            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1/
  716. C***FIRST EXECUTABLE STATEMENT  BLACHK
  717.       NPRINT = LUN
  718.       IPASS = 1
  719. C
  720.       IF (KPRINT.GE.2) WRITE (NPRINT,1005)
  721.  1005 FORMAT(1H1,50HQUICK CHECK OF 38 BASIC LINEAR ALGEBRA SUBROUTINES/)
  722.           DO 60 ICASE=1,38
  723.           IF(JTEST(ICASE) .EQ. 0) GO TO 60
  724.           CALL HEADER (KPRINT)
  725. C
  726. C         INITIALIZE  PASS, INCX, INCY, AND MODE FOR A NEW CASE.
  727. C         THE VALUE 9999 FOR INCX, INCY OR MODE WILL APPEAR IN THE
  728. C         DETAILED  OUTPUT, IF ANY, FOR CASES THAT DO NOT INVOLVE
  729. C         THESE PARAMETERS.
  730. C
  731.           PASS=.TRUE.
  732.           INCX=9999
  733.           INCY=9999
  734.           MODE=9999
  735.               GO TO (12,12,12,12,12,12,12,12,12,12,
  736.      A               12,10,10,12,12,10,10,12,12,12,
  737.      B               12,12,12,12,12,11,11,11,11,11,
  738.      C               11,11,11,11,11,11,11,11),  ICASE
  739. C                                       ICASE = 12-13 OR 16-17
  740.    10         CALL CHECK0(SFAC,DFAC,KPRINT)
  741.               GO TO 50
  742. C                                       ICASE = 26-38
  743.    11         CALL CHECK1(SFAC,DFAC,KPRINT)
  744.               GO TO 50
  745. C                                       ICASE =  1-11, 14-15, OR 18-25
  746.    12         CALL CHECK2(SFAC,SDFAC,DFAC,DQFAC,KPRINT)
  747.    50         CONTINUE
  748. C                                                  PRINT
  749.           IF (KPRINT.GE.2 .AND. PASS) WRITE (NPRINT,1001)
  750.       IF (.NOT.PASS) IPASS = 0
  751.    60     CONTINUE
  752.       IF (KPRINT.GE.2 .AND. IPASS.EQ.1) WRITE (NPRINT,1006)
  753.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (NPRINT,1007)
  754.       RETURN
  755.  1001 FORMAT(1H+,39X,4HPASS)
  756.  1006 FORMAT(/54H ****************BLAS PASSED ALL TESTS****************)
  757.  1007 FORMAT(/54H ****************BLAS FAILED SOME TESTS***************)
  758.       END
  759. *DECK BSPCK
  760.       SUBROUTINE BSPCK (LUN, KPRINT, IPASS)
  761. C***BEGIN PROLOGUE  BSPCK
  762. C***PURPOSE  Quick check for the B-Spline package.
  763. C***LIBRARY   SLATEC
  764. C***TYPE      SINGLE PRECISION (BSPCK-S, DBSPCK-D)
  765. C***KEYWORDS  QUICK CHECK
  766. C***AUTHOR  (UNKNOWN)
  767. C***DESCRIPTION
  768. C
  769. C   BSPCK is a quick check routine for the B-Spline package which
  770. C   tests consistency between results from higher level routines.
  771. C   Those routines not explicitly called are exercised at some lower
  772. C   level.  The routines exercised are BFQAD, BINT4, BINTK, BNFAC,
  773. C   BNSLV, BSGQ8, BSPDR, BSPEV, BSPPP, BSPVD, BSPVN, BSQAD, BVALU,
  774. C   INTRV, PFQAD, PPGQ8, PPQAD and PPVAL.
  775. C
  776. C***ROUTINES CALLED  BFQAD, BINT4, BINTK, BSPDR, BSPEV, BSPPP, BSPVD,
  777. C                    BSPVN, BSQAD, BVALU, FB, INTRV, PFQAD, PPQAD,
  778. C                    PPVAL, R1MACH
  779. C***REVISION HISTORY  (YYMMDD)
  780. C   ??????  DATE WRITTEN
  781. C   890911  Removed unnecessary intrinsics.  (WRB)
  782. C   891004  Removed unreachable code.  (WRB)
  783. C   891009  Removed unreferenced variables.  (WRB)
  784. C   891009  REVISION DATE from Version 3.2
  785. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  786. C***END PROLOGUE  BSPCK
  787.       INTEGER I, IBCL, IBCR, ICNT, ID, IERR, IKNT, ILEFT, ILO,
  788.      * INBV, INEV, INPPV, ITEST(7), IWORK, J, JHIGH, K, KK, KNT, KNTOPT,
  789.      * LDC, LDCC, LUN, LXI, MFLAG, N, NDATA, NMK, NN
  790.       REAL ADIF, ATOL, BC, BQUAD, BV, C, DEN, DN, ER, FBCL, FBCR,
  791.      * PQUAD, PI, Q, QQ, QSAVE, QUAD, SPV, SV, T, TOL, W, X, XI,
  792.      * XL, XX, X1, X2, Y, CC
  793.       REAL BVALU, PPVAL, R1MACH, FB
  794.       DIMENSION X(11), Y(11), QQ(77), BC(13), T(17), Q(3), QSAVE(2),
  795.      * XI(11), C(4,10), SV(4), ADIF(52), W(65), CC(4,4)
  796.       EXTERNAL FB
  797. C***FIRST EXECUTABLE STATEMENT  BSPCK
  798.       IF(KPRINT.GE.2) WRITE (LUN,99999)
  799. 99999 FORMAT (1H1, 1X, 31HQUICK CHECK FOR SPLINE ROUTINES//)
  800.       PI = 3.14159265358979324E0
  801.       DO 5 I=1,7
  802. 5     ITEST(I)=0
  803.       ICNT=1
  804.       TOL = 1000.0E0*R1MACH(4)
  805. C     GENERATE DATA
  806.       NDATA = 11
  807.       DEN = NDATA-1
  808.       DO 10 I=1,NDATA
  809.         X(I) = (I-1)/DEN
  810.         Y(I) = SIN(PI*X(I))
  811.    10 CONTINUE
  812.       X(3) = 2.0/DEN
  813.       Y(3) = SIN(PI*X(3))
  814. C     COMPUTE SPLINES FOR TWO KNOT ARRAYS
  815.       DO 80 IKNT=1,2
  816.         KNT = 3 - IKNT
  817.         IBCL = 1
  818.         IBCR = 2
  819.         FBCL = PI
  820.         FBCR = 0.0E0
  821.         CALL BINT4(X, Y, NDATA, IBCL, IBCR, FBCL, FBCR, KNT, T, BC, N,
  822.      *   K, W)
  823. C     ERROR TEST ON BINT4
  824.         INBV = 1
  825.         DO 20 I=1,NDATA
  826.           XX = X(I)
  827.           BV = BVALU(T,BC,N,K,0,XX,INBV,W)
  828.           ER = ABS(Y(I)-BV)
  829.           IF (ER.LE.TOL) GO TO 20
  830.       IF(KPRINT.GE.2) WRITE (LUN,99991)
  831. 99991 FORMAT (' ERROR TEST FOR INTERPOLATION BY BINT4 NOT SATISFIED')
  832.       GO TO 30
  833.    20   CONTINUE
  834.       ITEST(ICNT)=1
  835.       ICNT=2
  836.    30   CONTINUE
  837.         INBV = 1
  838.         BV = BVALU(T,BC,N,K,1,X(1),INBV,W)
  839.         ER = ABS(PI-BV)
  840.         IF (ER.LE.TOL) GO TO 35
  841.       IF(KPRINT.GE.2) WRITE (LUN,99989)
  842. 99989 FORMAT (' ERROR TEST FOR INTERPOLATION BY BINT4 NOT SATISFIED ',
  843.      *        'BY FIRST DERIVATIVE')
  844.       GO TO 40
  845.    35 ITEST(ICNT)=1
  846.       ICNT=3
  847.    40   CONTINUE
  848.         BV = BVALU(T,BC,N,K,2,X(NDATA),INBV,W)
  849.         ER = ABS(BV)
  850.         IF (ER.LE.TOL) GO TO 45
  851.         IF(KPRINT.GE.2) WRITE (LUN,99988)
  852. 99988 FORMAT (' ERROR TEST FOR INTERPOLATION BY BINT4 NOT SATISFIED ',
  853.      *        'BY SECOND DERIVATIVE')
  854.         GO TO 50
  855.    45 ITEST(ICNT)=1
  856.       ICNT=4
  857.    50   CONTINUE
  858. C     TEST FOR EQUALITY OF AREA FROM 4 ROUTINES
  859.         X1 = X(1)
  860.         X2 = X(NDATA)
  861.         CALL BSQAD(T, BC, N, K, X1, X2, BQUAD, W)
  862.         LDC = 4
  863.         CALL BSPPP(T, BC, N, K, LDC, C, XI, LXI, W)
  864.         CALL PPQAD(LDC, C, XI, LXI, K, X1, X2, Q(1))
  865.         CALL BFQAD(FB, T, BC, N, K, 0, X1, X2, TOL, Q(2), IERR, W)
  866.         CALL PFQAD(FB, LDC, C, XI, LXI, K, 0, X1, X2, TOL, Q(3), IERR)
  867. C     ERROR TEST FOR QUADRATURES
  868.         DO 60 I=1,3
  869.           ER = ABS(BQUAD-Q(I))
  870.           IF (ER.LE.TOL) GO TO 60
  871.           IF(KPRINT.GE.2) WRITE (LUN,99996)
  872. 99996 FORMAT (1X, 26HERROR IN QUADRATURE CHECKS)
  873.           GO TO 70
  874.    60   CONTINUE
  875.       ITEST(ICNT)=1
  876.       ICNT=5
  877.    70   CONTINUE
  878.         QSAVE(KNT) = BQUAD
  879.    80 CONTINUE
  880.       ER = ABS(QSAVE(1)-QSAVE(2))
  881.       IF (ER.GT.TOL) GO TO 330
  882.       ITEST(ICNT)=1
  883.       ICNT=6
  884.    90 CONTINUE
  885. C     CHECK BSPDR AND BSPEV AGAINST BVALU, PPVAL AND BSPVD
  886.       CALL BSPDR(T, BC, N, K, K, ADIF)
  887.       INEV = 1
  888.       INBV = 1
  889.       INPPV = 1
  890.       ILO = 1
  891.       DO 140 I=1,6
  892.         XX = X(I+I-1)
  893.         CALL BSPEV(T, ADIF, N, K, K, XX, INEV, SV, W)
  894.         ATOL = TOL
  895.         DO 100 J=1,K
  896.           SPV = BVALU(T,BC,N,K,J-1,XX,INBV,W)
  897.           ER = ABS(SPV-SV(J))
  898.           X2 = ABS(SV(J))
  899.           IF (X2.GT.1.0E0) ER = ER/X2
  900.           IF (ER.GT.ATOL) GO TO 340
  901.           ATOL = ATOL*10.0E0
  902.   100   CONTINUE
  903.         ATOL = TOL
  904.         DO 110 J=1,K
  905.           SPV = PPVAL(LDC,C,XI,LXI,K,J-1,XX,INPPV)
  906.           ER = ABS(SPV-SV(J))
  907.           X2 = ABS(SV(J))
  908.           IF (X2.GT.1.0E0) ER = ER/X2
  909.           IF (ER.GT.ATOL) GO TO 350
  910.           ATOL = ATOL*10.E0
  911.   110   CONTINUE
  912.         ATOL = TOL
  913.         LDCC = 4
  914.         X1 = XX
  915.         IF (I+I-1.EQ.NDATA) X1 = T(N)
  916.         NN = N + K
  917.         CALL INTRV(T, NN, X1, ILO, ILEFT, MFLAG)
  918.         DO 130 J=1,K
  919.           CALL BSPVD(T, K, J, XX, ILEFT, LDCC, CC, W)
  920.           ER = 0.0E0
  921.           DO 120 JJ=1,K
  922.             ER = ER + BC(ILEFT-K+JJ)*CC(JJ,J)
  923.   120     CONTINUE
  924.           ER = ABS(ER-SV(J))
  925.           X2 = ABS(SV(J))
  926.           IF (X2.GT.1.0E0) ER = ER/X2
  927.           IF (ER.GT.ATOL) GO TO 360
  928.           ATOL = ATOL*10.0E0
  929.   130   CONTINUE
  930.   140 CONTINUE
  931.       ITEST(ICNT)=1
  932.       ICNT=7
  933.   150 CONTINUE
  934.       DO 190 K=2,4
  935.         N = NDATA
  936.         NMK = N - K
  937.         DO 160 I=1,K
  938.           T(I) = X(1)
  939.           T(N+I) = X(N)
  940.   160   CONTINUE
  941.         XL = X(N) - X(1)
  942.         DN = N - K + 1
  943.         DO 170 I=1,NMK
  944.           T(K+I) = X(1) + I*XL/DN
  945.   170   CONTINUE
  946.         CALL BINTK(X, Y, T, N, K, BC, QQ, W)
  947. C     ERROR TEST ON BINTK
  948.         INBV = 1
  949.         DO 180 I=1,N
  950.           XX = X(I)
  951.           BV = BVALU(T,BC,N,K,0,XX,INBV,W)
  952.           ER = ABS(Y(I)-BV)
  953.           IF (ER.GT.TOL) GO TO 380
  954.   180   CONTINUE
  955.   190 CONTINUE
  956.       ITEST(ICNT)=1
  957.   200 CONTINUE
  958.       IPASS=1
  959.       DO 2000 I=1,7
  960. 2000  IPASS=IPASS*ITEST(I)
  961.       IF(KPRINT.LE.1) GO TO 3100
  962. C
  963. C     TRIGGER ERROR CONDITIONS
  964. C
  965.       IF(KPRINT.GE.3) WRITE (LUN,99997)
  966. 99997 FORMAT (/, 1X, 27HTRIGGER 52 ERROR CONDITIONS/)
  967. C
  968. C
  969.       W(1) = 11.0E0
  970.       W(2) = 4.0E0
  971.       W(3) = 2.0E0
  972.       W(4) = 0.5E0
  973.       W(5) = 4.0E0
  974.       ILO = 1
  975.       INEV = 1
  976.       INBV = 1
  977.       CALL INTRV(T, N+1, W(4), ILO, ILEFT, MFLAG)
  978.       DO 280 I=1,5
  979.         W(I) = -W(I)
  980.         N = INT(W(1))
  981.         K = INT(W(2))
  982.         ID = INT(W(3))
  983.         XX = W(4)
  984.         LDC = INT(W(5))
  985.         IF (I.EQ.5) GO TO 210
  986.         BV = BVALU(T,BC,N,K,ID,XX,INBV,QQ)
  987.         CALL BSPEV(T, ADIF, N, K, ID, XX, INEV, SV, QQ)
  988.         JHIGH = N - 10
  989.         CALL BSPVN(T, JHIGH, K, ID, XX, ILEFT, SV, QQ, IWORK)
  990.         CALL BFQAD(FB, T, BC, N, K, ID, XX, X2, TOL, QUAD, IERR, QQ)
  991.   210   CONTINUE
  992.         IF (I.EQ.3 .OR. I.EQ.4) GO TO 220
  993.         CALL BSPPP(T, BC, N, K, LDC, C, XI, LXI, QQ)
  994.   220   CONTINUE
  995.         IF (I.EQ.4 .OR. I.EQ.5) GO TO 230
  996.         CALL BSPDR(T, BC, N, K, ID, ADIF)
  997.   230   CONTINUE
  998.         IF (I.EQ.3 .OR. I.EQ.5) GO TO 240
  999.         CALL BSQAD(T, BC, N, K, XX, X2, BQUAD, QQ)
  1000.   240   CONTINUE
  1001.         IF (I.EQ.1) GO TO 250
  1002.         CALL BSPVD(T, K, ID, XX, ILEFT, LDC, C, QQ)
  1003.   250   CONTINUE
  1004.         IF (I.GT.2) GO TO 260
  1005.         CALL BINTK(X, Y, T, N, K, BC, QQ, ADIF)
  1006.   260   CONTINUE
  1007.         IF (I.EQ.4) GO TO 270
  1008.         KNTOPT = LDC - 2
  1009.         IBCL = K - 2
  1010.         CALL BINT4(X, Y, N, IBCL, ID, FBCL, FBCR, KNTOPT, T, BC, NN,
  1011.      *   KK, QQ)
  1012.   270   CONTINUE
  1013.         W(I) = -W(I)
  1014.   280 CONTINUE
  1015.       KNTOPT = 1
  1016.       X(1) = 1.0E0
  1017.       CALL BINT4(X, Y, N, IBCL, IBCR, FBCL, FBCR, KNTOPT, T, BC, N, K,
  1018.      * QQ)
  1019.       CALL BINTK(X, Y, T, N, K, BC, QQ, ADIF)
  1020.       X(1) = 0.0E0
  1021.       ATOL = 1.0E0
  1022.       KNTOPT = 3
  1023.       DO 290 I=1,3
  1024.         QQ(I) = -.30E0 + 0.10E0*(I-1)
  1025.         QQ(3+I) = 1.1E0 + 0.10E0*(I-1)
  1026.   290 CONTINUE
  1027.       QQ(1) = 1.0E0
  1028.       CALL BINT4(X, Y, NDATA, 1, 1, FBCL, FBCR, 3, T, BC, N, K, QQ)
  1029.       CALL BFQAD(FB, T, BC, N, K, ID, X1, X2, ATOL, QUAD, IERR, QQ)
  1030.       INPPV = 1
  1031.       DO 310 I=1,5
  1032.         W(I) = -W(I)
  1033.         LXI = INT(W(1))
  1034.         K = INT(W(2))
  1035.         ID = INT(W(3))
  1036.         XX = W(4)
  1037.         LDC = INT(W(5))
  1038.         SPV = PPVAL(LDC,C,XI,LXI,K,ID,XX,INPPV)
  1039.         CALL PFQAD(FB, LDC, C, XI, LXI, K, ID, XX, X2, TOL, QUAD, IERR)
  1040.         IF (I.EQ.3) GO TO 300
  1041.         CALL PPQAD(LDC, C, XI, LXI, K, XX, X2, PQUAD)
  1042.   300   CONTINUE
  1043.         W(I) = -W(I)
  1044.   310 CONTINUE
  1045.       LDC = INT(W(5))
  1046.       CALL PFQAD(FB, LDC, C, XI, LXI, K, ID, X1, X2, ATOL, QUAD, IERR)
  1047. 3100   CONTINUE
  1048.        IF(IPASS.EQ.1.AND.KPRINT.GE.2) WRITE(LUN,99980)
  1049.        IF(IPASS.EQ.0.AND.KPRINT.GE.1) WRITE(LUN,99981)
  1050. 99980 FORMAT(/54H **********B-SPLINE PACKAGE PASSED ALL TESTS**********)
  1051. 99981 FORMAT(/54H *********B-SPLINE PACKAGE FAILED SOME TESTS**********)
  1052.       RETURN
  1053. C
  1054. C
  1055.   330 CONTINUE
  1056.       IF(KPRINT.GE.2) WRITE (LUN,99995)
  1057. 99995 FORMAT (1X, 49HERROR IN QUADRATURE CHECK USING TWO SETS OF KNOTS)
  1058.       GO TO 90
  1059.   340 CONTINUE
  1060.       IF(KPRINT.GE.2) WRITE (LUN,99994)
  1061. 99994 FORMAT (1X, 45HCOMPARISONS FROM BSPEV AND BVALU DO NOT AGREE)
  1062.       GO TO 150
  1063.   350 CONTINUE
  1064.       IF(KPRINT.GE.2) WRITE (LUN,99993)
  1065. 99993 FORMAT (1X, 45HCOMPARISONS FROM BSPEV AND PPVAL DO NOT AGREE)
  1066.       GO TO 150
  1067.   360 CONTINUE
  1068.       IF(KPRINT.GE.2) WRITE (LUN,99992)
  1069. 99992 FORMAT (1X, 45HCOMPARISONS FROM BSPEV AND BSPVD DO NOT AGREE)
  1070.       GO TO 150
  1071.   380 CONTINUE
  1072.       IF(KPRINT.GE.2) WRITE(LUN,99990)
  1073. 99990 FORMAT (' ERROR TEST FOR INTERPOLATION BY BINTK NOT SATISFIED')
  1074.       GO TO 200
  1075.       END
  1076. *DECK CCHQC
  1077.       SUBROUTINE CCHQC (LUN, KPRINT, NERR)
  1078. C***BEGIN PROLOGUE  CCHQC
  1079. C***PURPOSE  Quick check for CCHDC.
  1080. C***LIBRARY   SLATEC
  1081. C***KEYWORDS  QUICK CHECK
  1082. C***AUTHOR  Voorhees, E. A., (LANL)
  1083. C***DESCRIPTION
  1084. C
  1085. C    QUICK CHECK FOR LINPACK SUBROUTINE CCHDC.
  1086. C
  1087. C    THE CHOLESKY FACTORIZATION OF MATRIX  A  IS COMPARED TO
  1088. C    THE STORED PRE-COMPUTED FACTORIZATION OF  A  (ENTERED
  1089. C    WITH A DATA STATEMENT).  FAILURE OF THE TEST OCCURS WHEN
  1090. C    AGREEMENT TO 3 SIGNIFICANT DIGITS IS NOT ACHIEVED AND AN
  1091. C    ERROR MESSAGE IS PRINTED.
  1092. C
  1093. C    THE INTEGER VALUES OF JPVT AND INFO ARE SIMILARLY TESTED.
  1094. C    LACK OF AGREEMENT RESULTS IN AN ERROR MESSAGE.  A SUMMARY
  1095. C    LINE IS ALWAYS PRINTED.
  1096. C
  1097. C    NO INPUT ARGUMENTS ARE REQUIRED.  ON RETURN, NERR (INTEGER
  1098. C    TYPE) CONTAINS THE TOTAL COUNT OF ALL FAILURES DETECTED.
  1099. C
  1100. C***ROUTINES CALLED  CCHDC
  1101. C***REVISION HISTORY  (YYMMDD)
  1102. C   801027  DATE WRITTEN
  1103. C   890618  REVISION DATE from Version 3.2
  1104. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  1105. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  1106. C           FORMATs.  (RWC)
  1107. C***END PROLOGUE  CCHQC
  1108.       COMPLEX A(4,4),WORK(4),AT(5,4),AF(4,4)
  1109.       INTEGER LDA,P,JPVT(4),JOB,INFO,JPVTT(4),I,J,INFOC,JPVTC(4)
  1110.       CHARACTER*20 KFAIL
  1111.       INTEGER INDX
  1112.       REAL DELX
  1113.       DATA A/(2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  1114.      1 (0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  1115.      2 (0.E0,0.E0),(0.E0,0.E0),(3.E0,0.E0),(0.E0,1.E0),
  1116.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  1117.       DATA JPVT/0,-1,1,0/
  1118.       DATA AF/(1.73205E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  1119.      1 (0.E0,-.57735E0),(1.91485E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  1120.      2 (0.E0,0.E0),(0.E0,0.E0),(1.41421E0,0.E0),(0.E0,1.E0),
  1121.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-.70711E0),(1.22475E0,0.E0)/
  1122.       DATA INFOC/4/
  1123.       DATA JPVTC/3,4,1,2/
  1124.       DATA KFAIL/'FACTORING JPVT INFO '/
  1125. C***FIRST EXECUTABLE STATEMENT  CCHQC
  1126.       JOB = 1
  1127.       LDA = 5
  1128.       P = 4
  1129.       NERR = 0
  1130. C
  1131. C     FORM AT AND JPVTT.
  1132. C
  1133.       DO 20 J=1,P
  1134.          JPVTT(J) = JPVT(J)
  1135.          DO 10 I=1,P
  1136.             AT(I,J) = A(I,J)
  1137.    10    CONTINUE
  1138.    20 CONTINUE
  1139. C
  1140. C     TEST CCHDC.
  1141. C
  1142.       CALL CCHDC(AT,LDA,P,WORK,JPVTT,JOB,INFO)
  1143.       INDX = 0
  1144.       DO 40 J=1,P
  1145.          DO 30 I=1,P
  1146.             DELX =ABS(REAL(AT(I,J)-AF(I,J)))+ABS(AIMAG(AT(I,J)-AF(I,J)))
  1147.             IF (DELX .GT. .0001) INDX=INDX+1
  1148.    30    CONTINUE
  1149.    40 CONTINUE
  1150. C
  1151.       IF (INDX .NE. 0) THEN
  1152.          WRITE (LUN,201) KFAIL(1:9)
  1153.          NERR = NERR + 1
  1154.       ENDIF
  1155. C
  1156.       INDX = 0
  1157.       DO 60 I=1,P
  1158.          IF (JPVTT(I) .NE. JPVTC(I)) INDX=INDX+1
  1159.    60 CONTINUE
  1160. C
  1161.       IF (INDX .NE. 0) THEN
  1162.          WRITE (LUN,201) KFAIL(11:14)
  1163.          NERR = NERR + 1
  1164.       ENDIF
  1165. C
  1166.       IF (INFO .NE. INFOC) THEN
  1167.          WRITE (LUN,201) KFAIL(16:19)
  1168.          NERR = NERR + 1
  1169.       ENDIF
  1170. C
  1171.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  1172.       RETURN
  1173. C
  1174.   200 FORMAT (/' * CCHQC - TEST FOR CCHDC FOUND ', I1, ' ERRORS.'/
  1175.      1   6X, '(NO TEST FOR CCHUD, CCHDD OR CCHEX)'/)
  1176.   201 FORMAT (/' *** CCHDC FAILURE - ERROR IN ', A)
  1177.       END
  1178. *DECK CDQAG
  1179.       SUBROUTINE CDQAG (LUN, KPRINT, IPASS)
  1180. C***BEGIN PROLOGUE  CDQAG
  1181. C***PURPOSE  Quick check for DQAG.
  1182. C***LIBRARY   SLATEC
  1183. C***TYPE      DOUBLE PRECISION (CQAG-S, CDQAG-D)
  1184. C***AUTHOR  (UNKNOWN)
  1185. C***ROUTINES CALLED  D1MACH, DF1G, DF2G, DF3G, DPRIN, DQAG
  1186. C***REVISION HISTORY  (YYMMDD)
  1187. C   ??????  DATE WRITTEN
  1188. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  1189. C   901205  Added PASS/FAIL message and changed the name of the first
  1190. C           argument.  (RWC)
  1191. C   910501  Added PURPOSE and TYPE records.  (WRB)
  1192. C***END PROLOGUE  CDQAG
  1193. C
  1194. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  1195. C
  1196.       DOUBLE PRECISION A,ABSERR,B,D1MACH,EPMACH,EPSABS,EPSREL,ERROR,
  1197.      *EXACT1,EXACT2,EXACT3,DF1G,DF2G,DF3G,PI,RESULT,UFLOW,WORK
  1198.       INTEGER IER,IP,IPASS,IWORK,KEY,KPRINT,LAST,LENW,LIMIT,
  1199.      *  NEVAL
  1200.       DIMENSION IERV(2),IWORK(100),WORK(400)
  1201.       EXTERNAL DF1G,DF2G,DF3G
  1202.       DATA PI/0.31415926535897932D+01/
  1203.       DATA EXACT1/0.1154700538379252D+01/
  1204.       DATA EXACT2/0.11780972450996172D+00/
  1205.       DATA EXACT3/0.1855802D+02/
  1206. C***FIRST EXECUTABLE STATEMENT  CDQAG
  1207.       IF (KPRINT.GE.2) WRITE (LUN, '(''1DQAG QUICK CHECK''/)')
  1208. C
  1209. C TEST ON IER = 0
  1210. C
  1211.       IPASS = 1
  1212.       LIMIT = 100
  1213.       LENW = LIMIT*4
  1214.       EPSABS = 0.0D+00
  1215.       EPMACH = D1MACH(4)
  1216.       KEY = 6
  1217.       EPSREL = MAX(SQRT(EPMACH),0.1D-07)
  1218.       A = 0.0D+00
  1219.       B = 0.1D+01
  1220.       CALL DQAG(DF1G,A,B,EPSABS,EPSREL,KEY,RESULT,ABSERR,NEVAL,IER,
  1221.      *LIMIT,LENW,LAST,IWORK,WORK)
  1222.       IERV(1) = IER
  1223.       IP = 0
  1224.       ERROR = ABS(EXACT1-RESULT)
  1225.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT1))
  1226.      *   IP = 1
  1227.       IF(IP.EQ.0) IPASS = 0
  1228.       CALL DPRIN(LUN,0,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  1229. C
  1230. C TEST ON IER = 1
  1231. C
  1232.       LIMIT = 1
  1233.       LENW = LIMIT*4
  1234.       B = PI*0.2D+01
  1235.        CALL DQAG(DF2G,A,B,EPSABS,EPSREL,KEY,RESULT,ABSERR,NEVAL,IER,
  1236.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1237.       IERV(1) = IER
  1238.       IP = 0
  1239.       IF(IER.EQ.1) IP = 1
  1240.       IF(IP.EQ.0) IPASS = 0
  1241.       CALL DPRIN(LUN,1,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,1)
  1242. C
  1243. C TEST ON IER = 2 OR 1
  1244. C
  1245.       UFLOW = D1MACH(1)
  1246.       LIMIT = 100
  1247.       LENW = LIMIT*4
  1248.       CALL DQAG(DF2G,A,B,UFLOW,0.0D+00,KEY,RESULT,ABSERR,NEVAL,IER,
  1249.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1250.       IERV(1) = IER
  1251.       IERV(2) = 1
  1252.       IP = 0
  1253.       IF(IER.EQ.2.OR.IER.EQ.1) IP = 1
  1254.       IF(IP.EQ.0) IPASS = 0
  1255.       CALL DPRIN(LUN,2,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,2)
  1256. C
  1257. C TEST ON IER = 3 OR 1
  1258. C
  1259.       B = 0.1D+01
  1260.       CALL DQAG(DF3G,A,B,EPSABS,EPSREL,1,RESULT,ABSERR,NEVAL,IER,
  1261.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1262.       IERV(1) = IER
  1263.       IERV(2) = 1
  1264.       IP = 0
  1265.       IF(IER.EQ.3.OR.IER.EQ.1) IP = 1
  1266.       IF(IP.EQ.0) IPASS = 0
  1267.       CALL DPRIN(LUN,3,KPRINT,IP,EXACT3,RESULT,ABSERR,NEVAL,IERV,2)
  1268. C
  1269. C TEST ON IER = 6
  1270. C
  1271.       LENW = 1
  1272.       CALL DQAG(DF1G,A,B,EPSABS,EPSREL,KEY,RESULT,ABSERR,NEVAL,IER,
  1273.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1274.       IERV(1) = IER
  1275.       IP = 0
  1276.       IF(IER.EQ.6.AND.RESULT.EQ.0.0D+00.AND.ABSERR.EQ.0.0D+00.AND.
  1277.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  1278.       IF(IP.EQ.0) IPASS = 0
  1279.       CALL DPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  1280. C
  1281.       IF (KPRINT.GE.1) THEN
  1282.          IF (IPASS.EQ.0) THEN
  1283.             WRITE(LUN, '(/'' SOME TEST(S) IN CDQAG FAILED''/)')
  1284.          ELSEIF (KPRINT.GE.2) THEN
  1285.             WRITE(LUN, '(/'' ALL TEST(S) IN CDQAG PASSED''/)')
  1286.          ENDIF
  1287.       ENDIF
  1288.       RETURN
  1289.       END
  1290. *DECK CDQAGI
  1291.       SUBROUTINE CDQAGI (LUN, KPRINT, IPASS)
  1292. C***BEGIN PROLOGUE  CDQAGI
  1293. C***PURPOSE  Quick check for DQAGI.
  1294. C***LIBRARY   SLATEC
  1295. C***TYPE      DOUBLE PRECISION (CQAGI-S, CDQAGI-D)
  1296. C***AUTHOR  (UNKNOWN)
  1297. C***ROUTINES CALLED  D1MACH, DPRIN, DQAGI, DT0, DT1, DT2, DT3, DT4, DT5
  1298. C***REVISION HISTORY  (YYMMDD)
  1299. C   ??????  DATE WRITTEN
  1300. C   891009  Removed unreferenced variables.  (WRB)
  1301. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  1302. C   901205  Added PASS/FAIL message and changed the name of the first
  1303. C           argument.  (RWC)
  1304. C   910501  Added PURPOSE and TYPE records.  (WRB)
  1305. C***END PROLOGUE  CDQAGI
  1306. C
  1307. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  1308. C
  1309.       DOUBLE PRECISION ABSERR,BOUND,D1MACH,EPMACH,EPSABS,
  1310.      *  EPSREL,ERROR,EXACT0,EXACT1,EXACT2,EXACT3,EXACT4,
  1311.      *  OFLOW,RESULT,DT0,DT1,DT2,DT3,DT4,DT5,UFLOW,WORK
  1312.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENW,LIMIT,LUN,NEVAL
  1313.       DIMENSION WORK(800),IWORK(200),IERV(4)
  1314.       EXTERNAL DT0,DT1,DT2,DT3,DT4,DT5
  1315.       DATA EXACT0/2.0D+00/,EXACT1/0.115470066904D1/
  1316.       DATA EXACT2/0.909864525656D-02/
  1317.       DATA EXACT3/0.31415926535897932D+01/
  1318.       DATA EXACT4/0.19984914554328673D+04/
  1319. C***FIRST EXECUTABLE STATEMENT  CDQAGI
  1320.       IF (KPRINT.GE.2) WRITE (LUN, '(''1DQAGI QUICK CHECK''/)')
  1321. C
  1322. C TEST ON IER = 0
  1323. C
  1324.       IPASS = 1
  1325.       LIMIT = 200
  1326.       LENW = LIMIT*4
  1327.       EPSABS = 0.0D+00
  1328.       EPMACH = D1MACH(4)
  1329.       EPSREL = MAX(SQRT(EPMACH),0.1D-07)
  1330.       BOUND = 0.0D+00
  1331.       INF = 1
  1332.       CALL DQAGI(DT0,BOUND,INF,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  1333.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1334.       ERROR = ABS(RESULT-EXACT0)
  1335.       IERV(1) = IER
  1336.       IP = 0
  1337.       IF(IER.EQ.0.AND.ERROR.LE.EPSREL*ABS(EXACT0))
  1338.      *  IP = 1
  1339.       IF(IP.EQ.0) IPASS = 0
  1340.       CALL DPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1341. C
  1342. C TEST ON IER = 1
  1343. C
  1344.       CALL DQAGI(DT1,BOUND,INF,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  1345.      *  1,4,LAST,IWORK,WORK)
  1346.       IERV(1) = IER
  1347.       IP = 0
  1348.       IF(IER.EQ.1) IP = 1
  1349.       IF(IP.EQ.0) IPASS = 0
  1350.       CALL DPRIN(LUN,1,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  1351. C
  1352. C TEST ON IER = 2 OR 4 OR 1
  1353. C
  1354.       UFLOW = D1MACH(1)
  1355.       CALL DQAGI(DT2,BOUND,INF,UFLOW,0.0D+00,RESULT,ABSERR,NEVAL,IER,
  1356.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1357.       IERV(1) = IER
  1358.       IERV(2) = 4
  1359.       IERV(3) = 1
  1360.       IP = 0
  1361.       IF(IER.EQ.2.OR.IER.EQ.4.OR.IER.EQ.1) IP = 1
  1362.       IF(IP.EQ.0) IPASS = 0
  1363.       CALL DPRIN(LUN,2,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,3)
  1364. C
  1365. C TEST ON IER = 3 OR 4 OR 1 OR 2
  1366. C
  1367.       CALL DQAGI(DT3,BOUND,INF,UFLOW,0.0D+00,RESULT,ABSERR,NEVAL,IER,
  1368.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1369.       IERV(1) = IER
  1370.       IERV(2) = 4
  1371.       IERV(3) = 1
  1372.       IERV(4) = 2
  1373.       IP = 0
  1374.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1.OR.IER.EQ.2) IP = 1
  1375.       IF(IP.EQ.0) IPASS = 0
  1376.       CALL DPRIN(LUN,3,KPRINT,IP,EXACT3,RESULT,ABSERR,NEVAL,IERV,4)
  1377. C
  1378. C TEST ON IER = 4 OR 3 OR 1 OR 0
  1379. C
  1380.       CALL DQAGI(DT4,BOUND,INF,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  1381.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1382.       IERV(1) = IER
  1383.       IERV(2) = 3
  1384.       IERV(3) = 1
  1385.       IERV(4) = 0
  1386.       IP = 0
  1387.       IF(IER.EQ.4.OR.IER.EQ.3.OR.IER.EQ.1.OR.IER.EQ.0) IP = 1
  1388.       IF(IP.EQ.0) IPASS = 0
  1389.       CALL DPRIN(LUN,4,KPRINT,IP,EXACT4,RESULT,ABSERR,NEVAL,IERV,4)
  1390. C
  1391. C TEST ON IER = 5
  1392. C
  1393.       OFLOW = D1MACH(2)
  1394.       CALL DQAGI(DT5,BOUND,INF,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  1395.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1396.       IERV(1) = IER
  1397.       IP = 0
  1398.       IF(IER.EQ.5) IP = 1
  1399.       IF(IP.EQ.0) IPASS = 0
  1400.       CALL DPRIN(LUN,5,KPRINT,IP,OFLOW,RESULT,ABSERR,NEVAL,IERV,1)
  1401. C
  1402. C TEST ON IER = 6
  1403. C
  1404.       CALL DQAGI(DT1,BOUND,INF,EPSABS,0.0D+00,RESULT,ABSERR,NEVAL,IER,
  1405.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1406.       IERV(1) = IER
  1407.       IP = 0
  1408.       IF(IER.EQ.6.AND.RESULT.EQ.0.0D+00.AND.ABSERR.EQ.0.0D+00.AND.
  1409.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  1410.       IF(IP.EQ.0) IPASS = 0
  1411.       CALL DPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  1412. C
  1413.       IF (KPRINT.GE.1) THEN
  1414.          IF (IPASS.EQ.0) THEN
  1415.             WRITE(LUN, '(/'' SOME TEST(S) IN CDQAGI FAILED''/)')
  1416.          ELSEIF (KPRINT.GE.2) THEN
  1417.             WRITE(LUN, '(/'' ALL TEST(S) IN CDQAGI PASSED''/)')
  1418.          ENDIF
  1419.       ENDIF
  1420.       RETURN
  1421.       END
  1422. *DECK CDQAGP
  1423.       SUBROUTINE CDQAGP (LUN, KPRINT, IPASS)
  1424. C***BEGIN PROLOGUE  CDQAGP
  1425. C***PURPOSE  Quick check for DQAGP.
  1426. C***LIBRARY   SLATEC
  1427. C***TYPE      DOUBLE PRECISION (CQAGP-S, CDQAGP-D)
  1428. C***AUTHOR  (UNKNOWN)
  1429. C***ROUTINES CALLED  D1MACH, DF1P, DF2P, DF3P, DF4P, DPRIN, DQAGP
  1430. C***REVISION HISTORY  (YYMMDD)
  1431. C   ??????  DATE WRITTEN
  1432. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  1433. C   901205  Added PASS/FAIL message and changed the name of the first
  1434. C           argument.  (RWC)
  1435. C   910501  Added PURPOSE and TYPE records.  (WRB)
  1436. C***END PROLOGUE  CDQAGP
  1437. C
  1438. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  1439. C
  1440.       DOUBLE PRECISION A,ABSERR,B,D1MACH,EPMACH,EPSABS,EPSREL,ERROR,
  1441.      *  EXACT1,
  1442.      *  EXACT2,EXACT3,DF1P,DF2P,DF3P,DF4P,OFLOW,POINTS,P1,P2,RESULT,
  1443.      *  UFLOW,WORK
  1444.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENIW,LENW,LIMIT,LUN,
  1445.      *  NEVAL,NPTS2
  1446.       DIMENSION IERV(4),IWORK(205),POINTS(5),WORK(405)
  1447.       EXTERNAL DF1P,DF2P,DF3P,DF4P
  1448.       DATA EXACT1/0.4285277667368085D+01/
  1449.       DATA EXACT2/0.909864525656D-2/
  1450.       DATA EXACT3/0.31415926535897932D+01/
  1451.       DATA P1/0.1428571428571428D+00/
  1452.       DATA P2/0.6666666666666667D+00/
  1453. C***FIRST EXECUTABLE STATEMENT  CDQAGP
  1454.       IF (KPRINT.GE.2) WRITE (LUN, '(''1DQAGP QUICK CHECK''/)')
  1455. C
  1456. C TEST ON IER = 0
  1457. C
  1458.       IPASS = 1
  1459.       NPTS2 = 4
  1460.       LIMIT = 100
  1461.       LENIW = LIMIT*2+NPTS2
  1462.       LENW = LIMIT*4+NPTS2
  1463.       EPSABS = 0.0D+00
  1464.       EPMACH = D1MACH(4)
  1465.       EPSREL = MAX(SQRT(EPMACH),0.1D-07)
  1466.       A = 0.0D+00
  1467.       B = 0.1D+01
  1468.       POINTS(1) = P1
  1469.       POINTS(2) = P2
  1470.       CALL DQAGP(DF1P,A,B,NPTS2,POINTS,EPSABS,EPSREL,RESULT,ABSERR,
  1471.      *  NEVAL,IER,LENIW,LENW,LAST,IWORK,WORK)
  1472.       ERROR = ABS(RESULT-EXACT1)
  1473.       IERV(1) = IER
  1474.       IP=0
  1475.       IF(IER.EQ.0.AND.ERROR.LE.EPSREL*ABS(EXACT1)) IP = 1
  1476.       IF(IP.EQ.0) IPASS = 0
  1477.       CALL DPRIN(LUN,0,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  1478. C
  1479. C TEST ON IER = 1
  1480. C
  1481.       LENIW = 10
  1482.       LENW = LENIW*2-NPTS2
  1483.       CALL DQAGP(DF1P,A,B,NPTS2,POINTS,EPSABS,EPSREL,RESULT,ABSERR,
  1484.      * NEVAL,IER,LENIW,LENW,LAST,IWORK,WORK)
  1485.       IERV(1) = IER
  1486.       IP = 0
  1487.       IF(IER.EQ.1) IP = 1
  1488.       IF(IP.EQ.0) IPASS = 0
  1489.       CALL DPRIN(LUN,1,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  1490. C
  1491. C TEST ON IER = 2, 4, 1 OR 3
  1492. C
  1493.       NPTS2 = 3
  1494.       POINTS(1) = 0.1D+00
  1495.       LENIW = LIMIT*2+NPTS2
  1496.       LENW = LIMIT*4+NPTS2
  1497.       UFLOW = D1MACH(1)
  1498.       A = 0.1D+00
  1499.       CALL DQAGP(DF2P,A,B,NPTS2,POINTS,UFLOW,0.0D+00,RESULT,ABSERR,
  1500.      * NEVAL,IER,LENIW,LENW,LAST,IWORK,WORK)
  1501.       IERV(1) = IER
  1502.       IERV(2) = 4
  1503.       IERV(3) = 1
  1504.       IERV(4) = 3
  1505.       IP = 0
  1506.       IF(IER.EQ.2.OR.IER.EQ.4.OR.IER.EQ.1.OR.IER.EQ.3) IP = 1
  1507.       IF(IP.EQ.0) IPASS = 0
  1508.       CALL DPRIN(LUN,2,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,4)
  1509. C
  1510. C TEST ON IER = 3 OR 4 OR 1 OR 2
  1511. C
  1512.       NPTS2 = 2
  1513.       LENIW = LIMIT*2+NPTS2
  1514.       LENW = LIMIT*4+NPTS2
  1515.       A = 0.0D+00
  1516.       B = 0.5D+01
  1517.       CALL DQAGP(DF3P,A,B,NPTS2,POINTS,UFLOW,0.0D+00,RESULT,ABSERR,
  1518.      * NEVAL,IER,LENIW,LENW,LAST,IWORK,WORK)
  1519.       IERV(1) = IER
  1520.       IERV(2) = 4
  1521.       IERV(3) = 1
  1522.       IERV(4) = 2
  1523.       IP = 0
  1524.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1.OR.IER.EQ.2) IP = 1
  1525.       IF(IP.EQ.0) IPASS = 0
  1526.       CALL DPRIN(LUN,3,KPRINT,IP,EXACT3,RESULT,ABSERR,NEVAL,IERV,4)
  1527. C
  1528. C TEST ON IER = 5
  1529. C
  1530.       B = 0.1D+01
  1531.       CALL DQAGP(DF4P,A,B,NPTS2,POINTS,EPSABS,EPSREL,RESULT,ABSERR,
  1532.      * NEVAL,IER,LENIW,LENW,LAST,IWORK,WORK)
  1533.       IERV(1) = IER
  1534.       IP = 0
  1535.       IF(IER.EQ.5) IP = 1
  1536.       IF(IP.EQ.0) IPASS = 0
  1537.       OFLOW = D1MACH(2)
  1538.       CALL DPRIN(LUN,5,KPRINT,IP,OFLOW,RESULT,ABSERR,NEVAL,IERV,1)
  1539. C
  1540. C TEST ON IER = 6
  1541. C
  1542.       NPTS2 = 5
  1543.       LENIW = LIMIT*2+NPTS2
  1544.       LENW = LIMIT*4+NPTS2
  1545.       POINTS(1) = P1
  1546.       POINTS(2) = P2
  1547.       POINTS(3) = 0.3D+01
  1548.       CALL DQAGP(DF1P,A,B,NPTS2,POINTS,EPSABS,EPSREL,RESULT,ABSERR,
  1549.      * NEVAL,IER,LENIW,LENW,LAST,IWORK,WORK)
  1550.       IERV(1) = IER
  1551.       IP = 0
  1552.       IF(IER.EQ.6.AND.RESULT.EQ.0.0D+00.AND.ABSERR.EQ.0.0D+00.AND.
  1553.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  1554.       IF(IP.EQ.0) IPASS = 0
  1555.       CALL DPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  1556. C
  1557.       IF (KPRINT.GE.1) THEN
  1558.          IF (IPASS.EQ.0) THEN
  1559.             WRITE(LUN, '(/'' SOME TEST(S) IN CDQAGP FAILED''/)')
  1560.          ELSEIF (KPRINT.GE.2) THEN
  1561.             WRITE(LUN, '(/'' ALL TEST(S) IN CDQAGP PASSED''/)')
  1562.          ENDIF
  1563.       ENDIF
  1564.       RETURN
  1565.       END
  1566. *DECK CDQAGS
  1567.       SUBROUTINE CDQAGS (LUN, KPRINT, IPASS)
  1568. C***BEGIN PROLOGUE  CDQAGS
  1569. C***PURPOSE  Quick check for DQAGS.
  1570. C***LIBRARY   SLATEC
  1571. C***TYPE      DOUBLE PRECISION (CQAGS-S, CDQAGS-D)
  1572. C***AUTHOR  (UNKNOWN)
  1573. C***ROUTINES CALLED  D1MACH, DF0S, DF1S, DF2S, DF3S, DF4S, DF5S, DPRIN,
  1574. C                    DQAGS
  1575. C***REVISION HISTORY  (YYMMDD)
  1576. C   ??????  DATE WRITTEN
  1577. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  1578. C   901205  Added PASS/FAIL message and changed the name of the first
  1579. C           argument.  (RWC)
  1580. C   910501  Added PURPOSE and TYPE records.  (WRB)
  1581. C   911114  Modified test on IER=4 to allow IER=5.  (WRB)
  1582. C***END PROLOGUE  CDQAGS
  1583. C
  1584. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  1585. C
  1586.       DOUBLE PRECISION A,ABSERR,B,D1MACH,EPMACH,EPSABS,
  1587.      *  EPSREL,ERROR,EXACT0,EXACT1,EXACT2,EXACT3,EXACT4,
  1588.      *  DF0S,DF1S,DF2S,DF3S,DF4S,DF5S,OFLOW,RESULT,UFLOW,WORK
  1589.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENW,LIMIT,NEVAL
  1590.       DIMENSION IERV(5),IWORK(200),WORK(800)
  1591.       EXTERNAL DF0S,DF1S,DF2S,DF3S,DF4S,DF5S
  1592.       DATA EXACT0/0.2D+01/
  1593.       DATA EXACT1/0.115470066904D+01/
  1594.       DATA EXACT2/0.909864525656D-02/
  1595.       DATA EXACT3/0.31415926535897932D+01/
  1596.       DATA EXACT4/0.19984914554328673D+04/
  1597. C***FIRST EXECUTABLE STATEMENT  CDQAGS
  1598.       IF (KPRINT.GE.2) WRITE (LUN, '(''1DQAGS QUICK CHECK''/)')
  1599. C
  1600. C TEST ON IER = 0
  1601. C
  1602.       IPASS = 1
  1603.       LIMIT = 200
  1604.       LENW = LIMIT*4
  1605.       EPSABS = 0.0D+00
  1606.       EPMACH = D1MACH(4)
  1607.       EPSREL = MAX(SQRT(EPMACH),0.1D-07)
  1608.       A = 0.0D+00
  1609.       B = 0.1D+01
  1610.       CALL DQAGS(DF0S,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  1611.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1612.       ERROR = ABS(RESULT-EXACT0)
  1613.       IERV(1) = IER
  1614.       IP = 0
  1615.       IF(IER.EQ.0.AND.ERROR.LE.EPSREL*ABS(EXACT0))
  1616.      *  IP = 1
  1617.       IF(IP.EQ.0) IPASS = 0
  1618.       CALL DPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1619. C
  1620. C TEST ON IER = 1
  1621. C
  1622.       CALL DQAGS(DF1S,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  1623.      *  1,4,LAST,IWORK,WORK)
  1624.       IERV(1) = IER
  1625.       IP = 0
  1626.       IF(IER.EQ.1)IP = 1
  1627.       IF(IP.EQ.0) IPASS = 0
  1628.       CALL DPRIN(LUN,1,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  1629. C
  1630. C TEST ON IER = 2 OR 4 OR 1
  1631. C
  1632.       UFLOW = D1MACH(1)
  1633.       A = 0.1D+00
  1634.       CALL DQAGS(DF2S,A,B,UFLOW,0.0D+00,RESULT,ABSERR,NEVAL,IER,
  1635.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1636.       IERV(1) = IER
  1637.       IERV(2) = 4
  1638.       IERV(3) = 1
  1639.       IP = 0
  1640.       IF(IER.EQ.2.OR.IER.EQ.4.OR.IER.EQ.1) IP = 1
  1641.       IF(IP.EQ.0) IPASS = 0
  1642.       CALL DPRIN(LUN,2,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,3)
  1643. C
  1644. C TEST ON IER = 3 OR 4 OR 1 OR 2
  1645. C
  1646.       A = 0.0D+00
  1647.       B = 0.5D+01
  1648.       CALL DQAGS(DF3S,A,B,UFLOW,0.0D+00,RESULT,ABSERR,NEVAL,IER,
  1649.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1650.       IERV(1) = IER
  1651.       IERV(2) = 4
  1652.       IERV(3) = 1
  1653.       IERV(4) = 2
  1654.       IP = 0
  1655.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1.OR.IER.EQ.2) IP = 1
  1656.       IF(IP.EQ.0) IPASS = 0
  1657.       CALL DPRIN(LUN,3,KPRINT,IP,EXACT3,RESULT,ABSERR,NEVAL,IERV,4)
  1658. C
  1659. C TEST ON IER = 4, OR 5 OR 3 OR 1 OR 0
  1660. C
  1661.       B = 0.1D+01
  1662.       CALL DQAGS(DF4S,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  1663.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1664.       IERV(1) = IER
  1665.       IERV(2) = 5
  1666.       IERV(3) = 3
  1667.       IERV(4) = 1
  1668.       IERV(5) = 0
  1669.       IP = 0
  1670.       IF(IER.EQ.5.OR.IER.EQ.4.OR.IER.EQ.3.OR.IER.EQ.1.OR.IER.EQ.0)
  1671.      *  IP = 1
  1672.       IF(IP.EQ.0) IPASS = 0
  1673.       CALL DPRIN(LUN,4,KPRINT,IP,EXACT4,RESULT,ABSERR,NEVAL,IERV,5)
  1674. C
  1675. C TEST ON IER = 5
  1676. C
  1677.       OFLOW = D1MACH(2)
  1678.       CALL DQAGS(DF5S,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  1679.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1680.       IERV(1) = IER
  1681.       IP = 0
  1682.       IF(IER.EQ.5) IP = 1
  1683.       IF(IP.EQ.0) IPASS = 0
  1684.       CALL DPRIN(LUN,5,KPRINT,IP,OFLOW,RESULT,ABSERR,NEVAL,IERV,1)
  1685. C
  1686. C TEST ON IER = 6
  1687. C
  1688.       CALL DQAGS(DF1S,A,B,EPSABS,0.0D+00,RESULT,ABSERR,NEVAL,IER,
  1689.      *  LIMIT,LENW,LAST,IWORK,WORK)
  1690.       IERV(1) = IER
  1691.       IP = 0
  1692.       IF(IER.EQ.6.AND.RESULT.EQ.0.0D+00.AND.ABSERR.EQ.0.0D+00.AND.
  1693.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  1694.       IF(IP.EQ.0) IPASS = 0
  1695.       CALL DPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  1696. C
  1697.       IF (KPRINT.GE.1) THEN
  1698.          IF (IPASS.EQ.0) THEN
  1699.             WRITE(LUN, '(/'' SOME TEST(S) IN CDQAGS FAILED''/)')
  1700.          ELSEIF (KPRINT.GE.2) THEN
  1701.             WRITE(LUN, '(/'' ALL TEST(S) IN CDQAGS PASSED''/)')
  1702.          ENDIF
  1703.       ENDIF
  1704.       RETURN
  1705.       END
  1706. *DECK CDQAWC
  1707.       SUBROUTINE CDQAWC (LUN, KPRINT, IPASS)
  1708. C***BEGIN PROLOGUE  CDQAWC
  1709. C***PURPOSE  Quick check for DQAWC.
  1710. C***LIBRARY   SLATEC
  1711. C***TYPE      DOUBLE PRECISION (CQAWC-S, CDQAWC-D)
  1712. C***AUTHOR  (UNKNOWN)
  1713. C***ROUTINES CALLED  D1MACH, DF0C, DF1C, DPRIN, DQAWC
  1714. C***REVISION HISTORY  (YYMMDD)
  1715. C   ??????  DATE WRITTEN
  1716. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  1717. C   901205  Added PASS/FAIL message and changed the name of the first
  1718. C           argument.  (RWC)
  1719. C   910501  Added PURPOSE and TYPE records.  (WRB)
  1720. C***END PROLOGUE  CDQAWC
  1721. C
  1722. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  1723. C
  1724.       DOUBLE PRECISION A,ABSERR,B,D1MACH,EPMACH,EPSABS,
  1725.      *  EPSREL,ERROR,EXACT0,EXACT1,DF0C,DF1C,C,
  1726.      *  RESULT,UFLOW,WORK
  1727.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENW,LIMIT,NEVAL
  1728.       DIMENSION WORK(800),IWORK(200),IERV(2)
  1729.       EXTERNAL DF0C,DF1C
  1730.       DATA EXACT0/-0.6284617285065624D+03/
  1731.       DATA EXACT1/0.1855802D+01/
  1732. C***FIRST EXECUTABLE STATEMENT  CDQAWC
  1733.       IF (KPRINT.GE.2) WRITE (LUN, '(''1DQAWC QUICK CHECK''/)')
  1734. C
  1735. C TEST ON IER = 0
  1736. C
  1737.       IPASS = 1
  1738.       C = 0.5D+00
  1739.       A = -1.0D+00
  1740.       B = 1.0D+00
  1741.       LIMIT = 200
  1742.       LENW = LIMIT*4
  1743.       EPSABS = 0.0D+00
  1744.       EPMACH = D1MACH(4)
  1745.       EPSREL = MAX(SQRT(EPMACH),0.1D-07)
  1746.       CALL DQAWC(DF0C,A,B,C,EPSABS,EPSREL,RESULT,ABSERR,
  1747.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  1748.       IERV(1) = IER
  1749.       IP = 0
  1750.       ERROR = ABS(EXACT0-RESULT)
  1751.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT0))
  1752.      *  IP = 1
  1753.       IF(IP.EQ.0) IPASS = 0
  1754.       CALL DPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1755. C
  1756. C TEST ON IER = 1
  1757. C
  1758.       CALL DQAWC(DF0C,A,B,C,EPSABS,EPSREL,RESULT,ABSERR,
  1759.      *  NEVAL,IER,1,4,LAST,IWORK,WORK)
  1760.       IERV(1) = IER
  1761.       IP = 0
  1762.       IF(IER.EQ.1) IP = 1
  1763.       IF(IP.EQ.0) IPASS = 0
  1764.       CALL DPRIN(LUN,1,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1765. C
  1766. C TEST ON IER = 2 OR 1
  1767. C
  1768.       UFLOW = D1MACH(1)
  1769.       CALL DQAWC(DF0C,A,B,C,UFLOW,0.0D+00,RESULT,ABSERR,
  1770.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  1771.       IERV(1) = IER
  1772.       IERV(2) = 1
  1773.       IP = 0
  1774.       IF(IER.EQ.2.OR.IER.EQ.1) IP = 1
  1775.       IF(IP.EQ.0) IPASS = 0
  1776.       CALL DPRIN(LUN,2,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,2)
  1777. C
  1778. C TEST ON IER = 3 OR 1
  1779. C
  1780.       CALL DQAWC(DF1C,0.0D+00,B,C,UFLOW,0.0D+00,RESULT,ABSERR,
  1781.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  1782.       IERV(1) = IER
  1783.       IERV(2) = 1
  1784.       IP = 0
  1785.       IF(IER.EQ.3.OR.IER.EQ.1) IP = 1
  1786.       IF(IP.EQ.0) IPASS = 0
  1787.       CALL DPRIN(LUN,3,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,2)
  1788. C
  1789. C TEST ON IER = 6
  1790. C
  1791.       EPSABS = 0.0D+00
  1792.       EPSREL = 0.0D+00
  1793.       CALL DQAWC(DF0C,A,B,C,EPSABS,EPSREL,RESULT,ABSERR,
  1794.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  1795.       IERV(1) = IER
  1796.       IP = 0
  1797.       IF(IER.EQ.6) IP = 1
  1798.       IF(IP.EQ.0) IPASS = 0
  1799.       CALL DPRIN(LUN,6,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1800. C
  1801.       IF (KPRINT.GE.1) THEN
  1802.          IF (IPASS.EQ.0) THEN
  1803.             WRITE(LUN, '(/'' SOME TEST(S) IN CDQAWC FAILED''/)')
  1804.          ELSEIF (KPRINT.GE.2) THEN
  1805.             WRITE(LUN, '(/'' ALL TEST(S) IN CDQAWC PASSED''/)')
  1806.          ENDIF
  1807.       ENDIF
  1808.       RETURN
  1809.       END
  1810. *DECK CDQAWF
  1811.       SUBROUTINE CDQAWF (LUN, KPRINT, IPASS)
  1812. C***BEGIN PROLOGUE  CDQAWF
  1813. C***PURPOSE  Quick check for DQAWF.
  1814. C***LIBRARY   SLATEC
  1815. C***TYPE      DOUBLE PRECISION (CQAWF-S, CDQAWF-D)
  1816. C***AUTHOR  (UNKNOWN)
  1817. C***ROUTINES CALLED  D1MACH, DF0F, DF1F, DPRIN, DQAWF
  1818. C***REVISION HISTORY  (YYMMDD)
  1819. C   ??????  DATE WRITTEN
  1820. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  1821. C   901205  Added PASS/FAIL message and changed the name of the first
  1822. C           argument.  (RWC)
  1823. C   910501  Added PURPOSE and TYPE records.  (WRB)
  1824. C***END PROLOGUE  CDQAWF
  1825. C
  1826. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  1827. C
  1828.       DOUBLE PRECISION A,ABSERR,D1MACH,EPSABS,EPMACH,
  1829.      *  ERROR,EXACT0,DF0F,DF1F,OMEGA,PI,RESULT,UFLOW,WORK
  1830.       INTEGER IER,IP,IPASS,KPRINT,LENW,LIMIT,LIMLST,LST,NEVAL
  1831.       DIMENSION IERV(4),IWORK(450),WORK(1425)
  1832.       EXTERNAL DF0F,DF1F
  1833.       DATA EXACT0/0.1422552162575912D+01/
  1834.       DATA PI/0.31415926535897932D+01/
  1835. C***FIRST EXECUTABLE STATEMENT  CDQAWF
  1836.       IF (KPRINT.GE.2) WRITE (LUN, '(''1DQAWF QUICK CHECK''/)')
  1837. C
  1838. C TEST ON IER = 0
  1839. C
  1840.       IPASS = 1
  1841.       MAXP1 = 21
  1842.       LIMLST = 50
  1843.       LIMIT = 200
  1844.       LENIW = LIMIT*2+LIMLST
  1845.       LENW = LENIW*2+MAXP1*25
  1846.       EPMACH = D1MACH(4)
  1847.       EPSABS = MAX(SQRT(EPMACH),0.1D-02)
  1848.       A = 0.0D+00
  1849.       OMEGA = 0.8D+01
  1850.       INTEGR = 2
  1851.       CALL DQAWF(DF0F,A,OMEGA,INTEGR,EPSABS,RESULT,ABSERR,NEVAL,
  1852.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  1853.       IERV(1) = IER
  1854.       IP = 0
  1855.       ERROR = ABS(EXACT0-RESULT)
  1856.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSABS)
  1857.      *  IP = 1
  1858.       IF(IP.EQ.0) IPASS = 0
  1859.       CALL DPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1860. C
  1861. C TEST ON IER = 1
  1862. C
  1863.       LIMLST = 3
  1864.       LENIW = 403
  1865.       LENW = LENIW*2+MAXP1*25
  1866.       CALL DQAWF(DF0F,A,OMEGA,INTEGR,EPSABS,RESULT,ABSERR,NEVAL,
  1867.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  1868.       IERV(1) = IER
  1869.       IP = 0
  1870.       IF(IER.EQ.1) IP = 1
  1871.       IF(IP.EQ.0) IPASS = 0
  1872.       CALL DPRIN(LUN,1,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1873. C
  1874. C TEST ON IER = 3 OR 4 OR 1 OR 2
  1875. C
  1876.       LIMLST = 50
  1877.       LENIW = LIMIT*2+LIMLST
  1878.       LENW = LENIW*2+MAXP1*25
  1879.       UFLOW = D1MACH(1)
  1880.       CALL DQAWF(DF1F,A,0.0D+00,1,UFLOW,RESULT,ABSERR,NEVAL,
  1881.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  1882.       IERV(1) = IER
  1883.       IERV(2) = 4
  1884.       IERV(3) = 1
  1885.       IERV(4) = 2
  1886.       IP = 0
  1887.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1.OR.IER.EQ.2) IP = 1
  1888.       IF(IP.EQ.0) IPASS = 0
  1889.       CALL DPRIN(LUN,3,KPRINT,IP,PI,RESULT,ABSERR,NEVAL,IERV,4)
  1890. C
  1891. C TEST ON IER = 6
  1892. C
  1893.       LIMLST = 50
  1894.       LENIW = 20
  1895.       CALL DQAWF(DF0F,A,OMEGA,INTEGR,EPSABS,RESULT,ABSERR,NEVAL,
  1896.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  1897.       IERV(1) = IER
  1898.       IP = 0
  1899.       IF(IER.EQ.6) IP = 1
  1900.       IF(IP.EQ.0) IPASS = 0
  1901.       CALL DPRIN(LUN,6,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1902. C
  1903. C TEST ON IER = 7
  1904. C
  1905.       LIMLST = 50
  1906.       LENIW = 52
  1907.       LENW = LENIW*2+MAXP1*25
  1908.       CALL DQAWF(DF0F,A,OMEGA,INTEGR,EPSABS,RESULT,ABSERR,NEVAL,
  1909.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  1910.       IERV(1) = IER
  1911.       IP = 0
  1912.       IF(IER.EQ.7) IP = 1
  1913.       IF(IP.EQ.0) IPASS = 0
  1914.       CALL DPRIN(LUN,7,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1915. C
  1916.       IF (KPRINT.GE.1) THEN
  1917.          IF (IPASS.EQ.0) THEN
  1918.             WRITE(LUN, '(/'' SOME TEST(S) IN CDQAWF FAILED''/)')
  1919.          ELSEIF (KPRINT.GE.2) THEN
  1920.             WRITE(LUN, '(/'' ALL TEST(S) IN CDQAWF PASSED''/)')
  1921.          ENDIF
  1922.       ENDIF
  1923.       RETURN
  1924.       END
  1925. *DECK CDQAWO
  1926.       SUBROUTINE CDQAWO (LUN, KPRINT, IPASS)
  1927. C***BEGIN PROLOGUE  CDQAWO
  1928. C***PURPOSE  Quick check for DQAWO.
  1929. C***LIBRARY   SLATEC
  1930. C***TYPE      DOUBLE PRECISION (CQAWO-S, CDQAWO-D)
  1931. C***AUTHOR  (UNKNOWN)
  1932. C***ROUTINES CALLED  D1MACH, DF0O, DF1O, DF2O, DPRIN, DQAWO
  1933. C***REVISION HISTORY  (YYMMDD)
  1934. C   ??????  DATE WRITTEN
  1935. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  1936. C   901205  Added PASS/FAIL message and changed the name of the first
  1937. C           argument.  (RWC)
  1938. C   910501  Added PURPOSE and TYPE records.  (WRB)
  1939. C***END PROLOGUE  CDQAWO
  1940. C
  1941. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  1942. C
  1943.       DOUBLE PRECISION A,ABSERR,B,EPMACH,EPSABS,
  1944.      *  EPSREL,ERROR,EXACT0,DF0O,DF1O,DF2O,
  1945.      *  OFLOW,OMEGA,PI,RESULT,D1MACH,UFLOW,WORK
  1946.       INTEGER IER,IERV,INTEGR,IP,IPASS,IWORK,KPRINT,LAST,LENW,LUN,
  1947.      *  MAXP1,NEVAL
  1948.       DIMENSION WORK(1325),IWORK(400),IERV(4)
  1949.       EXTERNAL DF0O,DF1O,DF2O
  1950.       DATA EXACT0/0.1042872789432789D+05/
  1951.       DATA PI/0.31415926535897932D+01/
  1952. C***FIRST EXECUTABLE STATEMENT  CDQAWO
  1953.       IF (KPRINT.GE.2) WRITE (LUN, '(''1DQAWO QUICK CHECK''/)')
  1954. C
  1955. C TEST ON IER = 0
  1956. C
  1957.       IPASS = 1
  1958.       MAXP1 = 21
  1959.       LENIW = 400
  1960.       LENW = LENIW*2+MAXP1*25
  1961.       EPSABS = 0.0D+00
  1962.       EPMACH = D1MACH(4)
  1963.       EPSREL = MAX(SQRT(EPMACH),0.1D-07)
  1964.       A = 0.0D+00
  1965.       B = PI
  1966.       OMEGA = 0.1D+01
  1967.       INTEGR = 2
  1968.       CALL DQAWO(DF0O,A,B,OMEGA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  1969.      * NEVAL,IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  1970.       IERV(1) = IER
  1971.       IP = 0
  1972.       ERROR = ABS(EXACT0-RESULT)
  1973.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT0))
  1974.      *  IP = 1
  1975.       IF(IP.EQ.0) IPASS = 0
  1976.       CALL DPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1977. C
  1978. C TEST ON IER = 1
  1979. C
  1980.       LENIW = 2
  1981.       LENW = LENIW*2+MAXP1*25
  1982.       CALL DQAWO(DF0O,A,B,OMEGA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  1983.      * NEVAL,IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  1984.       IERV(1) = IER
  1985.       IP = 0
  1986.       IF(IER.EQ.1) IP = 1
  1987.       IF(IP.EQ.0) IPASS = 0
  1988.       CALL DPRIN(LUN,1,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  1989. C
  1990. C TEST ON IER = 2 OR 4 OR 1
  1991. C
  1992.       UFLOW = D1MACH(1)
  1993.       LENIW = 400
  1994.       LENW = LENIW*2+MAXP1*25
  1995.       CALL DQAWO(DF0O,A,B,OMEGA,INTEGR,UFLOW,0.0D+00,RESULT,ABSERR,
  1996.      * NEVAL,IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  1997.       IERV(1) = IER
  1998.       IERV(2) = 4
  1999.       IERV(3) = 1
  2000.       IP = 0
  2001.       IF(IER.EQ.2.OR.IER.EQ.4.OR.IER.EQ.1) IP = 1
  2002.       IF(IP.EQ.0) IPASS = 0
  2003.       CALL DPRIN(LUN,2,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,3)
  2004. C
  2005. C TEST ON IER = 3 OR 4 OR 1 OR 2
  2006. C
  2007.       B = 0.5D+01
  2008.       OMEGA = 0.0D+00
  2009.       INTEGR = 1
  2010.       CALL DQAWO(DF1O,A,B,OMEGA,INTEGR,UFLOW,0.0D+00,RESULT,ABSERR,
  2011.      * NEVAL,IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  2012.       IERV(1) = IER
  2013.       IERV(2) = 4
  2014.       IERV(3) = 1
  2015.       IERV(4) = 2
  2016.       IP = 0
  2017.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1.OR.IER.EQ.2) IP = 1
  2018.       IF(IP.EQ.0) IPASS = 0
  2019.       CALL DPRIN(LUN,3,KPRINT,IP,PI,RESULT,ABSERR,NEVAL,IERV,4)
  2020. C
  2021. C TEST ON IER = 5
  2022. C
  2023.       B = 0.1D+01
  2024.       OFLOW = D1MACH(2)
  2025.       CALL DQAWO(DF2O,A,B,OMEGA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  2026.      * NEVAL,IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  2027.       IERV(1) = IER
  2028.       IP = 0
  2029.       IF(IER.EQ.5) IP = 1
  2030.       IF(IP.EQ.0) IPASS = 0
  2031.       CALL DPRIN(LUN,5,KPRINT,IP,OFLOW,RESULT,ABSERR,NEVAL,IERV,1)
  2032. C
  2033. C TEST ON IER = 6
  2034. C
  2035.       INTEGR = 3
  2036.       CALL DQAWO(DF0O,A,B,OMEGA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  2037.      * NEVAL,IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  2038.       IERV(1) = IER
  2039.       IP = 0
  2040.       IF(IER.EQ.6.AND.RESULT.EQ.0.0D+00.AND.ABSERR.EQ.0.0D+00.AND.
  2041.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  2042.       IF(IP.EQ.0) IPASS = 0
  2043.       CALL DPRIN(LUN,6,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  2044. C
  2045.       IF (KPRINT.GE.1) THEN
  2046.          IF (IPASS.EQ.0) THEN
  2047.             WRITE(LUN, '(/'' SOME TEST(S) IN CDQAWO FAILED''/)')
  2048.          ELSEIF (KPRINT.GE.2) THEN
  2049.             WRITE(LUN, '(/'' ALL TEST(S) IN CDQAWO PASSED''/)')
  2050.          ENDIF
  2051.       ENDIF
  2052.       RETURN
  2053.       END
  2054. *DECK CDQAWS
  2055.       SUBROUTINE CDQAWS (LUN, KPRINT, IPASS)
  2056. C***BEGIN PROLOGUE  CDQAWS
  2057. C***PURPOSE  Quick check for DQAWS.
  2058. C***LIBRARY   SLATEC
  2059. C***TYPE      DOUBLE PRECISION (CQAWS-S, CDQAWS-D)
  2060. C***AUTHOR  (UNKNOWN)
  2061. C***ROUTINES CALLED  D1MACH, DF0WS, DF1WS, DPRIN, DQAWS
  2062. C***REVISION HISTORY  (YYMMDD)
  2063. C   ??????  DATE WRITTEN
  2064. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  2065. C   901205  Added PASS/FAIL message and changed the name of the first
  2066. C           argument.  (RWC)
  2067. C   910501  Added PURPOSE and TYPE records.  (WRB)
  2068. C***END PROLOGUE  CDQAWS
  2069. C
  2070. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  2071. C
  2072.       DOUBLE PRECISION A,ABSERR,B,D1MACH,EPMACH,EPSABS,
  2073.      *  EPSREL,ERROR,EXACT0,EXACT1,DF0WS,DF1WS,ALFA,BETA,
  2074.      *  RESULT,UFLOW,WORK
  2075.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENW,LIMIT,NEVAL,INTEGR
  2076.       DIMENSION WORK(800),IWORK(200),IERV(2)
  2077.       EXTERNAL DF0WS,DF1WS
  2078.       DATA EXACT0/0.5350190569223644D+00/
  2079.       DATA EXACT1/0.1998491554328673D+04/
  2080. C***FIRST EXECUTABLE STATEMENT  CDQAWS
  2081.       IF (KPRINT.GE.2) WRITE (LUN, '(''1DQAWS QUICK CHECK''/)')
  2082. C
  2083. C TEST ON IER = 0
  2084. C
  2085.       IPASS = 1
  2086.       ALFA = -0.5D+00
  2087.       BETA = -0.5D+00
  2088.       INTEGR = 1
  2089.       A = 0.0D+00
  2090.       B = 0.1D+01
  2091.       LIMIT = 200
  2092.       LENW = LIMIT*4
  2093.       EPSABS = 0.0D+00
  2094.       EPMACH = D1MACH(4)
  2095.       EPSREL = MAX(SQRT(EPMACH),0.1D-07)
  2096.       CALL DQAWS(DF0WS,A,B,ALFA,BETA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  2097.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  2098.       IERV(1) = IER
  2099.       IP = 0
  2100.       ERROR = ABS(EXACT0-RESULT)
  2101.       IF(IER.EQ.0.AND.ERROR.LE.EPSREL*ABS(EXACT0))
  2102.      *  IP = 1
  2103.       IF(IP.EQ.0) IPASS = 0
  2104.       CALL DPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  2105. C
  2106. C TEST ON IER = 1
  2107. C
  2108.       CALL DQAWS(DF0WS,A,B,ALFA,BETA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  2109.      *  NEVAL,IER,2,8,LAST,IWORK,WORK)
  2110.       IERV(1) = IER
  2111.       IP = 0
  2112.       IF(IER.EQ.1) IP = 1
  2113.       IF(IP.EQ.0) IPASS = 0
  2114.       CALL DPRIN(LUN,1,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  2115. C
  2116. C TEST ON IER = 2 OR 1
  2117. C
  2118.       UFLOW = D1MACH(1)
  2119.       CALL DQAWS(DF0WS,A,B,ALFA,BETA,INTEGR,UFLOW,0.0D+00,RESULT,ABSERR,
  2120.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  2121.       IERV(1) = IER
  2122.       IERV(2) = 1
  2123.       IP = 0
  2124.       IF(IER.EQ.2.OR.IER.EQ.1) IP = 1
  2125.       IF(IP.EQ.0) IPASS = 0
  2126.       CALL DPRIN(LUN,2,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,2)
  2127. C
  2128. C TEST ON IER = 3 OR 1
  2129. C
  2130.       CALL DQAWS(DF1WS,A,B,ALFA,BETA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  2131.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  2132.       IERV(1) = IER
  2133.       IERV(2) = 1
  2134.       IP = 0
  2135.       IF(IER.EQ.3.OR.IER.EQ.1) IP = 1
  2136.       IF(IP.EQ.0) IPASS = 0
  2137.       CALL DPRIN(LUN,3,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,2)
  2138. C
  2139. C TEST ON IER = 6
  2140. C
  2141.       INTEGR = 0
  2142.       CALL DQAWS(DF1WS,A,B,ALFA,BETA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  2143.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  2144.       IERV(1) = IER
  2145.       IP = 0
  2146.       IF(IER.EQ.6) IP = 1
  2147.       IF(IP.EQ.0) IPASS = 0
  2148.       CALL DPRIN(LUN,6,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  2149. C
  2150.       IF (KPRINT.GE.1) THEN
  2151.          IF (IPASS.EQ.0) THEN
  2152.             WRITE(LUN, '(/'' SOME TEST(S) IN CDQAWS FAILED''/)')
  2153.          ELSEIF (KPRINT.GE.2) THEN
  2154.             WRITE(LUN, '(/'' ALL TEST(S) IN CDQAWS PASSED''/)')
  2155.          ENDIF
  2156.       ENDIF
  2157.       RETURN
  2158.       END
  2159. *DECK CDQNG
  2160.       SUBROUTINE CDQNG (LUN, KPRINT, IPASS)
  2161. C***BEGIN PROLOGUE  CDQNG
  2162. C***PURPOSE  Quick check for DQNG.
  2163. C***LIBRARY   SLATEC
  2164. C***TYPE      DOUBLE PRECISION (CQNG-S, CDQNG-D)
  2165. C***AUTHOR  (UNKNOWN)
  2166. C***ROUTINES CALLED  D1MACH, DF1N, DF2N, DPRIN, DQNG
  2167. C***REVISION HISTORY  (YYMMDD)
  2168. C   ??????  DATE WRITTEN
  2169. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  2170. C   901205  Added PASS/FAIL message and changed the name of the first
  2171. C           argument.  (RWC)
  2172. C   910501  Added PURPOSE and TYPE records.  (WRB)
  2173. C***END PROLOGUE  CDQNG
  2174. C
  2175. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  2176. C
  2177.       DOUBLE PRECISION A,ABSERR,B,D1MACH,EPMACH,EPSABS,EPSREL,EXACT1,
  2178.      *  ERROR,EXACT2,DF1N,DF2N,RESULT,UFLOW
  2179.       INTEGER IER,IERV,IP,IPASS,KPRINT,NEVAL
  2180.       DIMENSION IERV(1)
  2181.       EXTERNAL DF1N,DF2N
  2182.       DATA EXACT1/0.7281029132255818D+00/
  2183.       DATA EXACT2/0.1D+02/
  2184. C***FIRST EXECUTABLE STATEMENT  CDQNG
  2185.       IF (KPRINT.GE.2) WRITE (LUN, '(''1DQNG QUICK CHECK''/)')
  2186. C
  2187. C TEST ON IER = 0
  2188. C
  2189.       IPASS = 1
  2190.       EPSABS = 0.0D+00
  2191.       EPMACH = D1MACH(4)
  2192.       UFLOW = D1MACH(1)
  2193.       EPSREL = MAX(SQRT(EPMACH),0.1D-07)
  2194.       A=0.0D+00
  2195.       B=0.1D+01
  2196.       CALL DQNG(DF1N,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER)
  2197.       CALL DQNG(DF1N,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER)
  2198.       IERV(1)=IER
  2199.       IP = 0
  2200.       ERROR = ABS(EXACT1-RESULT)
  2201.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT1))
  2202.      *  IP = 1
  2203.       IF(IP.EQ.0) IPASS = 0
  2204.       IF(KPRINT.NE.0) CALL DPRIN(LUN,0,KPRINT,IP,EXACT1,RESULT,ABSERR,
  2205.      *  NEVAL,IERV,1)
  2206. C
  2207. C TEST ON IER = 1
  2208. C
  2209.       CALL DQNG(DF2N,A,B,UFLOW,0.0D+00,RESULT,ABSERR,NEVAL,IER)
  2210.       IERV(1) = IER
  2211.       IP=0
  2212.       IF(IER.EQ.1) IP = 1
  2213.       IF(IP.EQ.0) IPASS = 0
  2214.       IF(KPRINT.NE.0) CALL DPRIN(LUN,1,KPRINT,IP,EXACT2,RESULT,ABSERR,
  2215.      *  NEVAL,IERV,1)
  2216. C
  2217. C TEST ON IER = 6
  2218. C
  2219.       EPSABS = 0.0D+00
  2220.       EPSREL = 0.0D+00
  2221.       CALL DQNG(DF1N,A,B,EPSABS,0.0D+00,RESULT,ABSERR,NEVAL,IER)
  2222.       IERV(1) = IER
  2223.       IP = 0
  2224.       IF(IER.EQ.6.AND.RESULT.EQ.0.0D+00.AND.ABSERR.EQ.0.0D+00.AND.
  2225.      *  NEVAL.EQ.0) IP = 1
  2226.       IF(IP.EQ.0) IPASS = 0
  2227.       IF(KPRINT.NE.0) CALL DPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,
  2228.      *  NEVAL,IERV,1)
  2229. C
  2230.       IF (KPRINT.GE.1) THEN
  2231.          IF (IPASS.EQ.0) THEN
  2232.             WRITE(LUN, '(/'' SOME TEST(S) IN CDQNG FAILED''/)')
  2233.          ELSEIF (KPRINT.GE.2) THEN
  2234.             WRITE(LUN, '(/'' ALL TEST(S) IN CDQNG PASSED''/)')
  2235.          ENDIF
  2236.       ENDIF
  2237.       RETURN
  2238.       END
  2239. *DECK CFNCK
  2240.       SUBROUTINE CFNCK (LUN, KPRINT, IPASS)
  2241. C***BEGIN PROLOGUE  CFNCK
  2242. C***PURPOSE  Quick check for the complex Fullerton special functions.
  2243. C***LIBRARY   SLATEC
  2244. C***KEYWORDS  QUICK CHECK
  2245. C***AUTHOR  Boland, W. Robert, (LANL)
  2246. C           Chow, Jeff, (LANL)
  2247. C           Rivera, Shawn, (LANL)
  2248. C***DESCRIPTION
  2249. C
  2250. C     This subroutine does a quick check for the complex
  2251. C     routines in the Fullerton special function library.
  2252. C
  2253. C     Parameter list-
  2254. C
  2255. C     LUN      input integer value to designate the external
  2256. C              device unit for message output
  2257. C     KPRINT   input integer value to specify amount of
  2258. C              printing to be done by quick check
  2259. C     IPASS    output value indicating whether tests passed or
  2260. C              failed
  2261. C
  2262. C***ROUTINES CALLED  C0LGMC, CACOS, CACOSH, CASIN, CASINH, CATAN,
  2263. C                    CATAN2, CATANH, CBETA, CCBRT, CCOSH, CCOT, CEXPRL,
  2264. C                    CGAMMA, CGAMR, CLBETA, CLNGAM, CLNREL, CLOG10,
  2265. C                    CPSI, CSINH, CTAN, CTANH, R1MACH
  2266. C***REVISION HISTORY  (YYMMDD)
  2267. C   800901  DATE WRITTEN
  2268. C   891115  REVISION DATE from Version 3.2
  2269. C   891120  Checks of remainder of FNLIB routines added and code
  2270. C           reorganized.  (WRB)
  2271. C   900330  Prologue converted to Version 4.0 format.  (BAB)
  2272. C   900727  Added EXTERNAL statement.  (WRB)
  2273. C***END PROLOGUE  CFNCK
  2274.       INTEGER I,LUN,KPRINT,IPASS
  2275.       REAL SQRT2,SQRT3,PI,R1MACH,
  2276.      +     ERRMAX,ERRTOL,ABSERR,RELERR
  2277.       COMPLEX C(48),W(48),C1,CI,
  2278.      +        C0LGMC,CACOS,CACOSH,CASIN,CASINH,CATAN,CATAN2,CATANH,
  2279.      +        CBETA,CCBRT,CCOSH,CCOT,CEXPRL,CGAMMA,CGAMR,CLBETA,CLNGAM,
  2280.      +        CLNREL,CLOG10,CPSI,CSINH,CTAN,CTANH
  2281.       EXTERNAL CCOT, CGAMMA
  2282. C
  2283. C     Constants to be used
  2284. C
  2285.       DATA C1 /(1.E0,0.E0)/,CI /(0.E0,1.E0)/
  2286.       DATA SQRT2 /.1414213562 3730950488E1/
  2287.       DATA SQRT3 /.1732050807 5688772935E1/
  2288.       DATA PI /3.1415926535 8979323846E0/
  2289. C
  2290. C     Complex values through different calculations are stored in C(*)
  2291. C
  2292.       DATA C( 1) /( .121699028117870E 1, .326091563038355E 0)/
  2293.       DATA C( 2) /( .866025403784438E 0, .500000000000000E 0)/
  2294.       DATA C( 3) /( .520802437952465E 0,-.196048071390002E 1)/
  2295.       DATA C( 4) /( .599865470357589E 0, .113287925945897E 1)/
  2296.       DATA C( 5) /( .970930856437313E 0,-.113287925945897E 1)/
  2297.       DATA C( 6) /( .104999388884240E 1, .196048071389998E 1)/
  2298.       DATA C( 7) /( .313314753080534E-1, .541264220944095E-1)/
  2299.       DATA C( 8) /(-.785398163397449E 0, .658478948462413E 0)/
  2300.       DATA C( 9) /(-.785398163397449E 0,-.658478948462413E 0)/
  2301.       DATA C(10) /( .785398163397449E 0,-.658478948462413E 0)/
  2302.       DATA C(11) /( .313314753080534E-1, .541264220944095E-1)/
  2303.       DATA C(12) /(-.313314753080534E-1, .541264220944095E-1)/
  2304.       DATA C(13) /( .183048772171245E 1, .000000000000000E 0)/
  2305.       DATA C(14) /(-.757236713834364E-1,-.961745759068982E 0)/
  2306.       DATA C(15) /(-.813630257280238E-1, .103336966511721E 1)/
  2307.       DATA C(16) /( .546302489843789E 0, .000000000000000E 0)/
  2308.       DATA C(17) /( .150514997831990E 0,-.341094088460459E 0)/
  2309.       DATA C(18) /( .301029995663980E 0, .227396058973639E 0)/
  2310.       DATA C(19) /( .000000000000000E 0, .636619772367581E 0)/
  2311.       DATA C(20) /( .137802461354738E 1, .909330673631480E 0)/
  2312.       DATA C(21) /( .303123109082158E-1,-.244978663126864E 0)/
  2313.       DATA C(22) /( .693147180559947E 0, .523598775598298E 0)/
  2314.       DATA C(23) /(-.152857091948100E 1, .114371774040242E 1)/
  2315.       DATA C(24) /( .144363547517882E 1, .157079632679490E 1)/
  2316.       DATA C(25) /(-.100000000000000E 1, .000000000000000E 0)/
  2317.       DATA C(26) /( .181878614736412E 1, .586225017697977E 0)/
  2318.       DATA C(27) /( .402359478108525E 0, .101722196789785E 1)/
  2319.       DATA C(28) /( .549306144334055E 0,-.157079632679490E 1)/
  2320.       DATA C(29) /( .000000000000000E 0,-.117520119364380E 1)/
  2321.       DATA C(30) /(-.642148124715515E 0,-.106860742138277E 1)/
  2322.       DATA C(31) /( .397515306849130E 0, .104467701612914E 1)/
  2323.       DATA C(32) /(-.117520119364380E 1, .000000000000000E 0)/
  2324.       DATA C(33) /(-.116673625724091E 1,-.243458201185722E 0)/
  2325.       DATA C(34) /( .761594155955766E 0, .000000000000000E 0)/
  2326.       DATA C(35) /( .365427607174532E-1,-.612881308922810E-1)/
  2327.       DATA C(36) /( .896860330225849E-2, .244804656578857E-1)/
  2328.       DATA C(37) /( .177245385090552E 1, .000000000000000E 0)/
  2329.       DATA C(38) /( .300694617260656E 0,-.424967879433124E 0)/
  2330.       DATA C(39) /( .110951302025214E 1,-.156806064476794E 1)/
  2331.       DATA C(40) /( .183074439659052E 1, .569607641036682E 0)/
  2332.       DATA C(41) /(-.340863758923258E 1, .142127515954291E 1)/
  2333.       DATA C(42) /(-.156059525546301E 1, .152533527872833E 1)/
  2334.       DATA C(43) /(-.211272372936533E 0,-.765528316537801E 0)/
  2335.       DATA C(44) /( .380273164249058E-1,-.286343074460341E 0)/
  2336.       DATA C(45) /(-.268079774264798E 1, .130151697855085E 1)/
  2337.       DATA C(46) /(-.164841998888369E 1, .785398163397448E 0)/
  2338.       DATA C(47) /(-.196351002602143E 1, .000000000000000E 0)/
  2339.       DATA C(48) /( .161278484461574E 1, .147079632679497E 1)/
  2340. C***FIRST EXECUTABLE STATEMENT  CFNCK
  2341. C
  2342. C     Compute functional values
  2343. C
  2344. C     Exercise routines in Category C2.
  2345. C
  2346.       W( 1) = CCBRT(SQRT2*(1.E0+CI))
  2347.       W( 2) = CCBRT(CI)
  2348. C
  2349. C     Exercise routines in Category C4A.
  2350. C
  2351.       W( 3) = CACOS(PI+SQRT3*CI)
  2352.       W( 4) = CACOS(SQRT2-.25E0*PI*CI)
  2353.       W( 5) = CASIN(SQRT2-.25E0*PI*CI)
  2354.       W( 6) = CASIN(PI+SQRT3*CI)
  2355.       W( 7) = CATAN(.3125E-1+.541265877365273E-1*CI)
  2356.       W( 8) = CATAN(-.5E0+.866025403784438E0*CI)
  2357.       W( 9) = CATAN2(-.5E0-.866025403784438E0*CI,C1)
  2358.       W(10) = CATAN2(.5E0-.866025403784438E0*CI,C1)
  2359.       W(11) = CATAN2(.3125E-1+.541265877365273E-1*CI,C1)
  2360.       W(12) = CATAN2(-.3125E-1+.541265877365273E-1*CI,C1)
  2361.       W(13) = CCOT(.5E0+0.E0*CI)
  2362.       W(14) = CCOT(-1.E0+.5E0*PI*CI)
  2363.       W(15) = CTAN(-1.E0+.5E0*PI*CI)
  2364.       W(16) = CTAN(.5E0+0.E0*CI)
  2365. C
  2366. C     Exercise routines in Category C4B.
  2367. C
  2368.       W(17) = CLOG10(1.E0-CI)
  2369.       W(18) = CLOG10(SQRT3+CI)
  2370.       W(19) = CEXPRL(PI*CI)
  2371.       W(20) = CEXPRL(1.E0+CI)
  2372.       W(21) = CLNREL(-.25E0*CI)
  2373.       W(22) = CLNREL(SQRT3-1.E0+CI)
  2374. C
  2375. C     Exercise routines in Category C4C.
  2376. C
  2377.       W(23) = CACOSH(1.E0-2.E0*CI)
  2378.       W(24) = CACOSH(2.E0*CI)
  2379.       W(25) = CASINH(-.117520119364380E1+0.E0*CI)
  2380.       W(26) = CASINH(2.5E0+1.75E0*CI)
  2381.       W(27) = CATANH(1.E0+1.E0*CI)
  2382.       W(28) = CATANH(2.E0+0.E0*CI)
  2383.       W(29) = CCOSH(1.E0-.5E0*PI*CI)
  2384.       W(30) = CCOSH(-1.E0+2.E0*CI)
  2385.       W(31) = CSINH(1.E0-1.E0/PI+CI)
  2386.       W(32) = CSINH(1.E0+PI*CI)
  2387.       W(33) = CTANH(-1.E0+2.E0*CI)
  2388.       W(34) = CTANH(1.E0+PI*CI)
  2389. C
  2390. C     Exercise routines in Category C7A.
  2391. C
  2392.       W(35) = C0LGMC(.5E0+.5E0*CI)
  2393.       W(36) = C0LGMC(1.E0-1.E0*CI)
  2394.       W(37) = CGAMMA(.5E0+0.E0*CI)
  2395.       W(38) = CGAMMA(.5E0+CI)
  2396.       W(39) = CGAMR(.5E0-CI)
  2397.       W(40) = CGAMR(1.E0+CI)
  2398.       W(41) = CLNGAM(1.1E0+3.2E0*CI)
  2399.       W(42) = CLNGAM(1.9E0+2.4E0*CI)
  2400. C
  2401. C     Exercise routines in Category C7B.
  2402. C
  2403.       W(43) = CBETA(1.E0+CI,1.E0+CI)
  2404.       W(44) = CBETA(2.E0-CI,.5E0+CI)
  2405.       W(45) = CLBETA(2.E0+CI,1.E0-2.E0*CI)
  2406.       W(46) = CLBETA(1.E0-CI,2.E0+CI)
  2407. C
  2408. C     Exercise routines in Category C7C.
  2409. C
  2410.       W(47) = CPSI(.5E0+0.E0*CI)
  2411.       W(48) = CPSI(1.E0+5.E0*CI)
  2412. C
  2413. C     Check for possible errors
  2414. C
  2415.       ERRMAX = R1MACH(4)
  2416.       ERRTOL = SQRT(ERRMAX)
  2417.       DO 10 I = 1,48
  2418.         ABSERR = ABS(C(I)-W(I))
  2419.         RELERR = ABSERR/ABS(C(I))
  2420.         ERRMAX = MAX(RELERR,ERRMAX)
  2421.         IF (RELERR.GT.ERRTOL .AND. KPRINT.GE.2)
  2422.      +      WRITE (LUN,620) I,RELERR,ABSERR
  2423.    10 CONTINUE
  2424.       IPASS = 0
  2425.       IF (ERRMAX.LE.ERRTOL) IPASS = 1
  2426.       IF (IPASS.NE.0 .AND. KPRINT.GE.2) WRITE (LUN,610)
  2427.       RETURN
  2428.   610 FORMAT (' Complex Fullerton special function routines o.k.')
  2429.   620 FORMAT (' For I  = ', I3, '  test fails with RELERR  = ',
  2430.      +        E38.30, '  and ABSERR  = ', E38.30)
  2431.       END
  2432. *DECK CGBQC
  2433.       SUBROUTINE CGBQC (LUN, KPRINT, NERR)
  2434. C***BEGIN PROLOGUE  CGBQC
  2435. C***PURPOSE  Quick check for CGBFA, CGBCO, CGBSL and CGBDI.
  2436. C***LIBRARY   SLATEC
  2437. C***KEYWORDS  QUICK CHECK
  2438. C***AUTHOR  Voorhees, E. A., (LANL)
  2439. C***DESCRIPTION
  2440. C
  2441. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  2442. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  2443. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  2444. C    (THE SOLUTION VECTOR),  DC  (DETERMINANT OF  A ), AND
  2445. C    RCND  (RCOND) ARE ENTERED WITH DATA STATEMENTS.
  2446. C
  2447. C    THE COMPUTED TEST RESULTS FOR  X,  RCOND  AND THE DETER-
  2448. C    MINANT ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  2449. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  2450. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  2451. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  2452. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  2453. C
  2454. C    NO INPUT ARGUMENTS ARE REQUIRED.
  2455. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  2456. C    ALL FAILURES DETECTED BY CGBQC.
  2457. C
  2458. C***ROUTINES CALLED  CGBCO, CGBDI, CGBFA, CGBSL
  2459. C***REVISION HISTORY  (YYMMDD)
  2460. C   801015  DATE WRITTEN
  2461. C   890618  REVISION DATE from Version 3.2
  2462. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  2463. C   901010  Restructured using IF-THEN-ELSE-ENDIF, moved an ARITHMETIC
  2464. C           STATEMENT FUNCTION ahead of the FIRST EXECUTABLE STATEMENT
  2465. C           record and cleaned up FORMATs.  (RWC)
  2466. C***END PROLOGUE  CGBQC
  2467.       COMPLEX ABD(6,4),AT(7,4),B(4),BT(4),C(4),DET(2),DC(2),
  2468.      1 Z(4),XA,XB
  2469.       REAL R,RCOND,RCND,DELX
  2470.       CHARACTER KFAIL*39,KPROG*19
  2471.       INTEGER LDA,N,IPVT(4),INFO,I,J,INDX,NERR
  2472.       INTEGER ML,MU
  2473.       DATA ABD/(0.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  2474.      1 (2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  2475.      2 (0.E0,0.E0),(0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),
  2476.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  2477.      4 (3.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  2478.      5 (0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0),(0.E0,0.E0)/
  2479.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  2480.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  2481.       DATA DC/(3.3E0,0.E0),(1.0E0,0.E0)/
  2482.       DATA KPROG/'GBFA GBCO GBSL GBDI'/
  2483.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE'/
  2484.       DATA RCND/.24099E0/
  2485. C
  2486.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  2487. C***FIRST EXECUTABLE STATEMENT  CGBQC
  2488.       LDA = 7
  2489.       N = 4
  2490.       ML = 1
  2491.       MU = 3
  2492.       NERR = 0
  2493. C
  2494. C     FORM AT FOR CGBFA AND BT FOR CGBSL, TEST CGBFA
  2495. C
  2496.       DO 20 J=1,N
  2497.          BT(J) = B(J)
  2498.          DO 10 I=1,6
  2499.             AT(I,J) = ABD(I,J)
  2500.    10    CONTINUE
  2501.    20 CONTINUE
  2502. C
  2503.       CALL CGBFA(AT,LDA,N,ML,MU,IPVT,INFO)
  2504.       IF (INFO .NE. 0) THEN
  2505.          WRITE (LUN,201) KPROG(1:4),KFAIL(1:4)
  2506.          NERR = NERR + 1
  2507.       ENDIF
  2508. C
  2509. C     TEST CGBSL FOR JOB=0
  2510. C
  2511.       CALL CGBSL(AT,LDA,N,ML,MU,IPVT,BT,0)
  2512.       INDX = 0
  2513.       DO 40 I=1,N
  2514.          IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  2515.    40 CONTINUE
  2516. C
  2517.       IF (INDX .NE. 0) THEN
  2518.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  2519.          NERR = NERR + 1
  2520.       ENDIF
  2521. C
  2522. C     FORM AT FOR CGBCO AND BT FOR CGBSL, TEST CGBCO
  2523. C
  2524.       DO 70 J=1,N
  2525.          BT(J) = B(J)
  2526.          DO 60 I=1,6
  2527.             AT(I,J) = ABD(I,J)
  2528.    60    CONTINUE
  2529.    70 CONTINUE
  2530. C
  2531.       CALL CGBCO(AT,LDA,N,ML,MU,IPVT,RCOND,Z)
  2532.       R = ABS(RCND-RCOND)
  2533.       IF (R .GE. .0001) THEN
  2534.          WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  2535.          NERR = NERR + 1
  2536.       ENDIF
  2537. C
  2538. C     TEST CGBSL FOR JOB NOT EQUAL TO 0
  2539. C
  2540.       CALL CGBSL(AT,LDA,N,ML,MU,IPVT,BT,1)
  2541.       INDX = 0
  2542.       DO 90 I=1,N
  2543.          IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  2544.    90 CONTINUE
  2545. C
  2546.       IF (INDX .NE. 0) THEN
  2547.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  2548.          NERR = NERR + 1
  2549.       ENDIF
  2550. C
  2551. C     TEST CGBDI
  2552. C
  2553.       CALL CGBDI(AT,LDA,N,ML,MU,IPVT,DET)
  2554.       INDX = 0
  2555.       DO 110 I=1,2
  2556.          IF (DELX(DC(I),DET(I)) .GT. .0001) INDX=INDX+1
  2557.   110 CONTINUE
  2558. C
  2559.       IF (INDX .NE. 0) THEN
  2560.          WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  2561.          NERR = NERR + 1
  2562.       ENDIF
  2563. C
  2564.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  2565.       RETURN
  2566. C
  2567.   200 FORMAT(/' * CGBQC - TEST FOR CGBFA, CGBCO, CGBSL AND CGBDI FOUND '
  2568.      1   , I1, ' ERRORS.'/)
  2569.   201 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  2570.       END
  2571. *DECK CGECK
  2572.       SUBROUTINE CGECK (LUN, KPRINT, NERR)
  2573. C***BEGIN PROLOGUE  CGECK
  2574. C***PURPOSE  Quick check for CGEFA, CGECO, CGESL and CGEDI.
  2575. C***LIBRARY   SLATEC
  2576. C***KEYWORDS  QUICK CHECK
  2577. C***AUTHOR  Voorhees, E. A., (LANL)
  2578. C***DESCRIPTION
  2579. C
  2580. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  2581. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  2582. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  2583. C    (THE SOLUTION VECTOR),  AINV  (INVERSE OF MATRIX  A ),  DC
  2584. C    (DETERMINANT OF  A ), AND  RCND  ( RCOND ) ARE ENTERED
  2585. C    WITH DATA STATEMENTS.
  2586. C
  2587. C    THE COMPUTED TEST RESULTS FOR  X, RCOND, THE DETERMINANT, AND
  2588. C    THE INVERSE ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  2589. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  2590. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  2591. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  2592. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  2593. C
  2594. C    NO INPUT ARGUMENTS ARE REQUIRED.
  2595. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  2596. C    ALL FAILURES DETECTED BY CGECK.
  2597. C
  2598. C***ROUTINES CALLED  CGECO, CGEDI, CGEFA, CGESL
  2599. C***REVISION HISTORY  (YYMMDD)
  2600. C   801014  DATE WRITTEN
  2601. C   890618  REVISION DATE from Version 3.2
  2602. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  2603. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  2604. C           FORMATs.  (RWC)
  2605. C***END PROLOGUE  CGECK
  2606.       COMPLEX A(4,4),AT(5,4),B(4),BT(4),C(4),AINV(4,4),DET(2),DC(2),
  2607.      1 Z(4),XA,XB
  2608.       REAL R,RCOND,RCND,DELX
  2609.       CHARACTER KPROG*19,KFAIL*39
  2610.       INTEGER LDA,N,IPVT(4),INFO,I,J,INDX,NERR
  2611.       DATA A/(2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  2612.      1 (0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  2613.      2 (0.E0,0.E0),(0.E0,0.E0),(3.E0,0.E0),(0.E0,1.E0),
  2614.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  2615.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  2616.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  2617.       DATA AINV/(.66667E0,0.E0),(0.E0,-.33333E0),(0.E0,0.E0),(0.E0,
  2618.      1 0.E0),
  2619.      2 (0.E0,.33333E0),(.66667E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  2620.      3 (0.E0,0.E0),(0.E0,0.E0),(.36364E0,0.E0),(0.E0,-.09091E0),
  2621.      4 (0.E0,0.E0),(0.E0,0.E0),(0.E0,.09091E0),(.27273E0,0.E0)/
  2622.       DATA DC/(3.3E0,0.E0),(1.0E0,0.E0)/
  2623.       DATA KPROG/'GEFA GECO GESL GEDI'/
  2624.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE'/
  2625.       DATA RCND/.24099E0/
  2626. C
  2627.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  2628. C***FIRST EXECUTABLE STATEMENT  CGECK
  2629.       LDA = 5
  2630.       N = 4
  2631.       NERR = 0
  2632. C
  2633. C     FORM AT FOR CGEFA AND BT FOR CGESL, TEST CGEFA
  2634. C
  2635.       DO 20 J=1,N
  2636.          BT(J) = B(J)
  2637.          DO 10 I=1,N
  2638.             AT(I,J) = A(I,J)
  2639.    10    CONTINUE
  2640.    20 CONTINUE
  2641. C
  2642.       CALL CGEFA(AT,LDA,N,IPVT,INFO)
  2643.       IF (INFO .NE. 0) THEN
  2644.          WRITE (LUN,201) KPROG(1:4),KFAIL(1:4)
  2645.          NERR = NERR + 1
  2646.       ENDIF
  2647. C
  2648. C     TEST CGESL FOR JOB=0
  2649. C
  2650.       CALL CGESL(AT,LDA,N,IPVT,BT,0)
  2651.       INDX = 0
  2652.       DO 40 I=1,N
  2653.          IF(DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  2654.    40 CONTINUE
  2655. C
  2656.       IF (INDX .NE. 0) THEN
  2657.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  2658.          NERR = NERR + 1
  2659.       ENDIF
  2660. C
  2661. C     FORM AT FOR CGECO AND BT FOR CGESL, TEST CGECO
  2662. C
  2663.       DO 70 J=1,N
  2664.          BT(J) = B(J)
  2665.          DO 60 I=1,N
  2666.             AT(I,J) = A(I,J)
  2667.    60    CONTINUE
  2668.    70 CONTINUE
  2669. C
  2670.       CALL CGECO(AT,LDA,N,IPVT,RCOND,Z)
  2671.       R = ABS(RCND-RCOND)
  2672.       IF (R .GE. .0001) THEN
  2673.          WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  2674.          NERR = NERR + 1
  2675.       ENDIF
  2676. C
  2677. C     TEST CGESL FOR JOB NOT EQUAL TO 0
  2678. C
  2679.       CALL CGESL(AT,LDA,N,IPVT,BT,1)
  2680.       INDX = 0
  2681.       DO 90 I=1,N
  2682.         IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  2683.    90 CONTINUE
  2684. C
  2685.       IF (INDX .NE. 0) THEN
  2686.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  2687.          NERR = NERR + 1
  2688.       ENDIF
  2689. C
  2690. C     TEST CGEDI FOR JOB=11
  2691. C
  2692.       CALL CGEDI(AT,LDA,N,IPVT,DET,Z,11)
  2693.       INDX = 0
  2694.       DO 110 I=1,2
  2695.         IF (DELX(DC(I),DET(I)) .GT. .0001) INDX=INDX+1
  2696.   110 CONTINUE
  2697. C
  2698.       IF (INDX .NE. 0) THEN
  2699.          WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  2700.          NERR = NERR + 1
  2701.       ENDIF
  2702. C
  2703.       INDX = 0
  2704.       DO 140 I=1,N
  2705.          DO 130 J=1,N
  2706.             IF (DELX(AINV(I,J),AT(I,J)) .GT. .0001) INDX=INDX+1
  2707.   130    CONTINUE
  2708.   140 CONTINUE
  2709. C
  2710.       IF (INDX .NE. 0) THEN
  2711.          WRITE (LUN,201) KPROG(16:19),KFAIL(33:39)
  2712.          NERR = NERR + 1
  2713.       ENDIF
  2714. C
  2715.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  2716.       RETURN
  2717. C
  2718.   200 FORMAT(/' * CGECK - TEST FOR CGEFA, CGECO, CGESL AND CGEDI FOUND '
  2719.      1   , I1, ' ERRORS.'/)
  2720.   201 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  2721.       END
  2722. *DECK CGEQC
  2723.       SUBROUTINE CGEQC (LUN, KPRINT, NERR)
  2724. C***BEGIN PROLOGUE  CGEQC
  2725. C***PURPOSE  Quick check for CGEFS and CGEIR.
  2726. C***LIBRARY   SLATEC
  2727. C***TYPE      COMPLEX (SGEQC-S, DGEQC-D, CGEQC-C)
  2728. C***KEYWORDS  QUICK CHECK
  2729. C***AUTHOR  Jacobsen, Nancy, (LANL)
  2730. C***DESCRIPTION
  2731. C
  2732. C   Let A*X=B be a COMPLEX linear system where the
  2733. C   matrix is of the proper type for the Linpack subroutines
  2734. C   being called.  The values of A and B and the pre-computed
  2735. C   values of BXEX (the solution vector) are given in DATA
  2736. C   statements.  The computed test results for X are compared to
  2737. C   the stored pre-computed values.  Failure of the test occurs
  2738. C   when there is less than 80% agreement between the absolute
  2739. C   values.  There are 2 tests - one for the normal case and one
  2740. C   for the singular case.  A message is printed indicating
  2741. C   whether each subroutine has passed or failed for each case.
  2742. C
  2743. C   On return, NERR (INTEGER type) contains the total count of
  2744. C   all failures detected.
  2745. C
  2746. C***ROUTINES CALLED  CGEFS, CGEIR
  2747. C***REVISION HISTORY  (YYMMDD)
  2748. C   801029  DATE WRITTEN
  2749. C   890618  REVISION DATE from Version 3.2
  2750. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  2751. C   920601  Code reworked and TYPE section added.  (RWC, WRB)
  2752. C***END PROLOGUE  CGEQC
  2753. C     .. Scalar Arguments ..
  2754.       INTEGER KPRINT, LUN, NERR
  2755. C     .. Local Scalars ..
  2756.       COMPLEX XA, XB
  2757.       INTEGER I, IND, INDX, ITASK, J, KPROG, LDA, N
  2758. C     .. Local Arrays ..
  2759.       COMPLEX A(3,3), ATEMP(5,3), B(3), BTEMP(3), BXEX(3), WORK(12)
  2760.       INTEGER IWORK(3)
  2761.       CHARACTER LIST(2)*4
  2762. C     .. External Subroutines ..
  2763.       EXTERNAL CGEFS, CGEIR
  2764. C     .. Intrinsic Functions ..
  2765.       INTRINSIC ABS, AIMAG, REAL
  2766. C     .. Statement Functions ..
  2767.       REAL DELX
  2768. C     .. Data statements ..
  2769.       DATA A /(2., 3.), (1., 1.),  (1., 2.),
  2770.      +        (2., 0.), (1., -1.), (0., 0.),
  2771.      +        (0., 0.), (2., 5.),  (3., 2.)/
  2772.       DATA B /(-1., 1.), (-5., 4.), (-4., 7.)/
  2773.       DATA BXEX /(.21459E-01, .209012E+01), (.261373E+01, -.162231E+01),
  2774.      +           (.785407E+00, .109871E+01)/
  2775.       DATA LIST /'GEFS', 'GEIR'/
  2776. C     .. Statement Function definitions ..
  2777.       DELX(XA,XB) = ABS(REAL(XA-XB)) + ABS(AIMAG(XA-XB))
  2778. C***FIRST EXECUTABLE STATEMENT  CGEQC
  2779.       N = 3
  2780.       LDA = 5
  2781.       NERR = 0
  2782.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  2783. C
  2784.       DO 180 KPROG=1,2
  2785. C
  2786. C     First test case - normal
  2787. C
  2788.         ITASK = 1
  2789.         DO 100 I=1,N
  2790.           BTEMP(I) = B(I)
  2791.   100   CONTINUE
  2792.         DO 120 J=1,N
  2793.           DO 110 I=1,N
  2794.             ATEMP(I,J) = A(I,J)
  2795.   110     CONTINUE
  2796.   120   CONTINUE
  2797.         IF (KPROG .EQ. 1) THEN
  2798.           CALL CGEFS (ATEMP, LDA, N, BTEMP, ITASK, IND, WORK, IWORK)
  2799.         ELSE
  2800.           CALL CGEIR (ATEMP, LDA, N, BTEMP, ITASK, IND, WORK, IWORK)
  2801.         ENDIF
  2802.         IF (IND .LT. 0) THEN
  2803.           IF (KPRINT .GE. 2) WRITE (LUN, FMT=9020) LIST(KPROG), IND
  2804.           NERR = NERR + 1
  2805.         ENDIF
  2806. C
  2807. C       Calculate error for first test
  2808. C
  2809.         INDX = 0
  2810.         DO 130 I=1,N
  2811.           IF (DELX(BXEX(I),BTEMP(I)) .GT. .0001) INDX = INDX + 1
  2812.   130   CONTINUE
  2813.         IF (INDX .EQ. 0) THEN
  2814.           IF(KPRINT .GE. 3) WRITE (LUN, FMT=9010) LIST(KPROG)
  2815.         ELSE
  2816.           IF(KPRINT .GE. 2) WRITE (LUN, FMT=9020) LIST(KPROG)
  2817.           NERR = NERR + 1
  2818.         ENDIF
  2819. C
  2820. C       Second test case - singular matrix
  2821. C
  2822.         ITASK = 1
  2823.         DO 140 I=1,N
  2824.           BTEMP(I) = B(I)
  2825.   140   CONTINUE
  2826.         DO 160 J=1,N
  2827.           DO 150 I=1,N
  2828.             ATEMP(I,J) = A(I,J)
  2829.   150     CONTINUE
  2830.   160   CONTINUE
  2831.         DO 170 J=1,N
  2832.           ATEMP(1,J) = (0.E0,0.E0)
  2833.   170   CONTINUE
  2834.         IF (KPROG .EQ. 1) THEN
  2835.           CALL CGEFS (ATEMP, LDA, N, BTEMP, ITASK, IND,  WORK, IWORK)
  2836.         ELSE
  2837.           CALL CGEIR (ATEMP, LDA, N, BTEMP, ITASK, IND, WORK, IWORK)
  2838.         ENDIF
  2839.         IF (IND .EQ. -4) THEN
  2840.           IF (KPRINT .GE. 3) WRITE (LUN, FMT=9030) LIST(KPROG)
  2841.         ELSE
  2842.           IF (KPRINT .GE. 2) WRITE (LUN, FMT=9040) LIST(KPROG), IND
  2843.           NERR = NERR + 1
  2844.         ENDIF
  2845.   180 CONTINUE
  2846. C
  2847.       IF (KPRINT.GE.3 .AND. NERR.EQ.0) WRITE (LUN,9050)
  2848.       IF (KPRINT.GE.2 .AND. NERR.NE.0) WRITE (LUN,9060)
  2849.       RETURN
  2850. C
  2851.  9000 FORMAT (//, 2X, 'CGEFS and CGEIR Quick Check' /)
  2852.  9010 FORMAT (/, 5X, 'C', A, ' Normal test PASSED')
  2853.  9020 FORMAT (/, 5X, 'C', A, ' Test FAILED')
  2854.  9030 FORMAT (/, 5X, 'C', A, ' Singular test PASSED')
  2855.  9040 FORMAT (/, 5X, 'C', A, ' Singular test FAILED, IND=', I3)
  2856.  9050 FORMAT (/, 2X, 'CGEFS and CGEIR Quick Check PASSED' /)
  2857.  9060 FORMAT (/, 2X, 'CGEFS and CGEIR Quick Check FAILED' /)
  2858.       END
  2859. *DECK CGTQC
  2860.       SUBROUTINE CGTQC (LUN, KPRINT, NERR)
  2861. C***BEGIN PROLOGUE  CGTQC
  2862. C***PURPOSE  Quick check for CGTSL.
  2863. C***LIBRARY   SLATEC
  2864. C***KEYWORDS  QUICK CHECK
  2865. C***AUTHOR  Voorhees, E. A., (LANL)
  2866. C***DESCRIPTION
  2867. C
  2868. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  2869. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINE BEING TESTED.
  2870. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  CX
  2871. C    (THE SOLUTION VECTOR) ARE ENTERED WITH DATA STATEMENTS.
  2872. C
  2873. C    THE COMPUTED VALUES OF  X  ARE COMPARED TO THE STORED
  2874. C    PRE-COMPUTED VALUES OF CX.  FAILURE OF THE TEST OCCURS WHEN
  2875. C    AGREEMENT TO 3 SIGNIFICANT DIGITS IS NOT ACHIEVED AND AN
  2876. C    ERROR MESSAGE IS PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  2877. C
  2878. C    NO INPUT ARGUMENTS ARE REQUIRED.
  2879. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT
  2880. C    OF ALL FAILURES DETECTED BY CGTQC.
  2881. C
  2882. C***ROUTINES CALLED  CGTSL
  2883. C***REVISION HISTORY  (YYMMDD)
  2884. C   801024  DATE WRITTEN
  2885. C   890618  REVISION DATE from Version 3.2
  2886. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  2887. C   901010  Restructured using IF-THEN-ELSE-ENDIF, moved an ARITHMETIC
  2888. C           STATEMENT FUNCTION ahead of the FIRST EXECUTABLE STATEMENT
  2889. C           record and cleaned up FORMATs.  (RWC)
  2890. C***END PROLOGUE  CGTQC
  2891.       COMPLEX C(4),D(4),E(4),B(4),CX(4),CT(4),DT(4),ET(4),BT(4)
  2892.       CHARACTER KFAIL*13
  2893.       INTEGER N,INFO,I,INDX,NERR
  2894.       REAL DELX
  2895.       DATA C/(0.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,1.E0)/
  2896.       DATA D/(2.E0,0.E0),(2.E0,0.E0),(3.E0,0.E0),(4.E0,0.E0)/
  2897.       DATA E/(0.E0,-1.E0),(0.E0,0.E0),(0.E0,-1.E0),(0.E0,0.E0)/
  2898.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  2899.       DATA CX/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  2900.       DATA KFAIL/'INFO SOLUTION'/
  2901. C***FIRST EXECUTABLE STATEMENT  CGTQC
  2902.       N = 4
  2903.       NERR = 0
  2904.       DO 10 I=1,N
  2905.          CT(I) = C(I)
  2906.          DT(I) = D(I)
  2907.          ET(I) = E(I)
  2908.          BT(I) = B(I)
  2909.    10 CONTINUE
  2910. C
  2911.       CALL CGTSL(N,CT,DT,ET,BT,INFO)
  2912.       IF (INFO .NE. 0) THEN
  2913.          WRITE (LUN,201) KFAIL(1:4)
  2914.          NERR = NERR + 1
  2915.       ENDIF
  2916. C
  2917.       INDX = 0
  2918.       DO 30 I=1,N
  2919.          DELX = ABS(REAL(BT(I)-CX(I)))+ABS(AIMAG(BT(I)-CX(I)))
  2920.          IF (DELX .GT. .0001) INDX=INDX+1
  2921.    30 CONTINUE
  2922. C
  2923.       IF (INDX .NE. 0) THEN
  2924.          WRITE (LUN,201) KFAIL(6:13)
  2925.          NERR = NERR + 1
  2926.       ENDIF
  2927. C
  2928.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  2929.       RETURN
  2930. C
  2931.   200 FORMAT (/' * CGTQC - TEST FOR CGTSL FOUND ', I1, ' ERRORS.'/)
  2932.   201 FORMAT (/' *** CGTSL FAILURE - ERROR IN ', A)
  2933.       END
  2934. *DECK CHECK0
  2935.       SUBROUTINE CHECK0 (SFAC, DFAC, KPRINT)
  2936. C***BEGIN PROLOGUE  CHECK0
  2937. C***PURPOSE  (UNKNOWN)
  2938. C***LIBRARY   SLATEC
  2939. C***AUTHOR  Lawson, C. L., (JPL)
  2940. C           Hanson, R. J., (SNLA)
  2941. C           Wisniewski, J. A., (SNLA)
  2942. C***DESCRIPTION
  2943. C
  2944. C     THIS SUBROUTINE TESTS SUBPROGRAMS 12-13 AND 16-17.
  2945. C     THESE SUBPROGRAMS HAVE NO ARRAY ARGUMENTS.
  2946. C
  2947. C     C. L. LAWSON, JPL, 1975 MAR 07, MAY 28
  2948. C     R. J. HANSON, J. A. WISNIEWSKI, SANDIA LABS, APRIL 25,1977.
  2949. C
  2950. C***ROUTINES CALLED  DROTG, DROTMG, DTEST, SROTG, SROTMG, STEST
  2951. C***COMMON BLOCKS    COMBLA
  2952. C***REVISION HISTORY  (YYMMDD)
  2953. C   750307  DATE WRITTEN
  2954. C   890911  Removed unnecessary intrinsics.  (WRB)
  2955. C   890911  REVISION DATE from Version 3.2
  2956. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  2957. C***END PROLOGUE  CHECK0
  2958.       COMMON /COMBLA/ NPRINT, ICASE, N, INCX, INCY, MODE, PASS
  2959.       LOGICAL          PASS
  2960.       REAL             STRUE(9),STEMP(9)
  2961.       DOUBLE PRECISION DC,DS,DA1(8),DB1(8),DC1(8),DS1(8)
  2962.       DOUBLE PRECISION DA,DATRUE(8),DBTRUE(8),DZERO,DFAC,DB
  2963.       DOUBLE PRECISION DAB(4,9),DTEMP(9),DTRUE(9,9),D12
  2964.       DATA ZERO, DZERO / 0., 0.D0 /
  2965.       DATA DA1/ .3D0,  .4D0, -.3D0, -.4D0, -.3D0,  0.D0,  0.D0,  1.D0/
  2966.       DATA DB1/ .4D0,  .3D0,  .4D0,  .3D0, -.4D0,  0.D0,  1.D0,  0.D0/
  2967.       DATA DC1/ .6D0,  .8D0, -.6D0,  .8D0,  .6D0,  1.D0,  0.D0,  1.D0/
  2968.       DATA DS1/ .8D0,  .6D0,  .8D0, -.6D0,  .8D0,  0.D0,  1.D0,  0.D0/
  2969.       DATA DATRUE/ .5D0,  .5D0,  .5D0, -.5D0, -.5D0, 0.D0, 1.D0, 1.D0/
  2970.       DATA DBTRUE/ 0.D0,  .6D0,  0.D0, -.6D0,  0.D0, 0.D0, 1.D0, 0.D0/
  2971. C                                              INPUT FOR MODIFIED GIVENS
  2972.       DATA DAB/ .1D0,.3D0,1.2D0,.2D0,
  2973.      A          .7D0, .2D0, .6D0, 4.2D0,
  2974.      B          0.D0,0.D0,0.D0,0.D0,
  2975.      C          4.D0, -1.D0, 2.D0, 4.D0,
  2976.      D          6.D-10, 2.D-2, 1.D5, 10.D0,
  2977.      E          4.D10, 2.D-2, 1.D-5, 10.D0,
  2978.      F          2.D-10, 4.D-2, 1.D5, 10.D0,
  2979.      G          2.D10, 4.D-2, 1.D-5, 10.D0,
  2980.      H          4.D0, -2.D0, 8.D0, 4.D0    /
  2981. C                                       TRUE RESULTS FOR MODIFIED GIVENS
  2982.       DATA DTRUE/0.D0,0.D0, 1.3D0, .2D0, 0.D0,0.D0,0.D0, .5D0, 0.D0,
  2983.      A           0.D0,0.D0, 4.5D0, 4.2D0, 1.D0, .5D0, 0.D0,0.D0,0.D0,
  2984.      B           0.D0,0.D0,0.D0,0.D0, -2.D0, 0.D0,0.D0,0.D0,0.D0,
  2985.      C           0.D0,0.D0,0.D0, 4.D0, -1.D0, 0.D0,0.D0,0.D0,0.D0,
  2986.      D           0.D0, 15.D-3, 0.D0, 10.D0, -1.D0, 0.D0, -1.D-4,
  2987.      E           0.D0, 1.D0,
  2988.      F           0.D0,0.D0, 6144.D-5, 10.D0, -1.D0, 4096.D0, -1.D6,
  2989.      G           0.D0, 1.D0,
  2990.      H           0.D0,0.D0,15.D0,10.D0,-1.D0, 5.D-5, 0.D0,1.D0,0.D0,
  2991.      I           0.D0,0.D0, 15.D0, 10.D0, -1. D0, 5.D5, -4096.D0,
  2992.      J           1.D0, 4096.D-6,
  2993.      K           0.D0,0.D0, 7.D0, 4.D0, 0.D0,0.D0, -.5D0, -.25D0, 0.D0/
  2994. C                   4096 = 2 ** 12
  2995.       DATA D12  /4096.D0/
  2996. C***FIRST EXECUTABLE STATEMENT  CHECK0
  2997. C
  2998. C                   COMPUTE TRUE VALUES WHICH CANNOT BE PRESTORED
  2999. C                   IN DECIMAL NOTATION.
  3000.       DTRUE(1,1) = 12.D0 / 130.D0
  3001.       DTRUE(2,1) = 36.D0 / 130.D0
  3002.       DTRUE(7,1) = -1.D0 / 6.D0
  3003.       DTRUE(1,2) = 14.D0 / 75.D0
  3004.       DTRUE(2,2) = 49.D0 / 75.D0
  3005.       DTRUE(9,2) = 1.D0 / 7.D0
  3006.       DTRUE(1,5) = 45.D-11 * (D12 * D12)
  3007.       DTRUE(3,5) = 4.D5 / (3.D0 * D12)
  3008.       DTRUE(6,5) = 1.D0 / D12
  3009.       DTRUE(8,5) = 1.D4 / (3.D0 * D12)
  3010.       DTRUE(1,6) = 4.D10 / (1.5D0 * D12 * D12)
  3011.       DTRUE(2,6) = 2.D-2 / 1.5D0
  3012.       DTRUE(8,6) = 5.D-7 * D12
  3013.       DTRUE(1,7) = 4.D0 / 150.D0
  3014.       DTRUE(2,7) = (2.D-10 / 1.5D0) * (D12 * D12)
  3015.       DTRUE(7,7) = -DTRUE(6,5)
  3016.       DTRUE(9,7) = 1.D4 / D12
  3017.       DTRUE(1,8) = DTRUE(1,7)
  3018.       DTRUE(2,8) = 2.D10 / (1.5D0 * D12 * D12)
  3019.       DTRUE(1,9) = 32.D0 / 7.D0
  3020.       DTRUE(2,9) = -16.D0 / 7.D0
  3021.       DBTRUE(1) = 1.D0/.6D0
  3022.       DBTRUE(3) = -1.D0/.6D0
  3023.       DBTRUE(5) = 1.D0/.6D0
  3024. C
  3025.       JUMP= ICASE-11
  3026.           DO 500 K = 1, 9
  3027. C                        SET N=K FOR IDENTIFICATION IN OUTPUT IF ANY.
  3028.           N=K
  3029. C                             BRANCH TO SELECT SUBPROGRAM TO BE TESTED.
  3030. C
  3031.           GO TO (120,130,999,999,160,170), JUMP
  3032. C                                                             12. SROTG
  3033.   120 IF(K.GT.8) GO TO 600
  3034.           SA = DA1(K)
  3035.           SB = DB1(K)
  3036.           CALL SROTG(SA,SB,SC,SS)
  3037.           CALL STEST(1,SA,REAL(DATRUE(K)),REAL(DATRUE(K)),SFAC,KPRINT)
  3038.           CALL STEST(1,SB,REAL(DBTRUE(K)),REAL(DBTRUE(K)),SFAC,KPRINT)
  3039.           CALL STEST(1,SC,REAL(DC1(K)),REAL(DC1(K)),SFAC,KPRINT)
  3040.           CALL STEST(1,SS,REAL(DS1(K)),REAL(DS1(K)),SFAC,KPRINT)
  3041.           GO TO 500
  3042. C                                                             13. DROTG
  3043.   130 IF(K.GT.8) GO TO 600
  3044.           DA = DA1(K)
  3045.           DB = DB1(K)
  3046.           CALL DROTG(DA,DB,DC,DS)
  3047.           CALL DTEST(1,DA,DATRUE(K),DATRUE(K),DFAC,KPRINT)
  3048.           CALL DTEST(1,DB,DBTRUE(K),DBTRUE(K),DFAC,KPRINT)
  3049.           CALL DTEST(1,DC,DC1(K),DC1(K),DFAC,KPRINT)
  3050.           CALL DTEST(1,DS,DS1(K),DS1(K),DFAC,KPRINT)
  3051.           GO TO 500
  3052. C                                                             16. SROTMG
  3053.   160     CONTINUE
  3054.                DO 162 I = 1, 4
  3055.                STEMP(I) = DAB(I,K)
  3056.                STEMP(I+4) = ZERO
  3057.   162          CONTINUE
  3058.            STEMP(9) = ZERO
  3059.            CALL SROTMG(STEMP(1),STEMP(2),STEMP(3),STEMP(4),STEMP(5))
  3060. C
  3061.                DO 166 I = 1, 9
  3062.   166          STRUE(I) = DTRUE(I,K)
  3063.           CALL STEST(9,STEMP,STRUE,STRUE,SFAC,KPRINT)
  3064.           GO TO 500
  3065. C                                                             17. DROTMG
  3066.   170     CONTINUE
  3067.                DO 172 I = 1, 4
  3068.                DTEMP(I) = DAB(I,K)
  3069.                DTEMP(I+4) = DZERO
  3070.   172          CONTINUE
  3071.           DTEMP(9) = DZERO
  3072.           CALL DROTMG(DTEMP(1),DTEMP(2),DTEMP(3),DTEMP(4),DTEMP(5))
  3073.           CALL DTEST(9,DTEMP,DTRUE(1,K),DTRUE(1,K),DFAC,KPRINT)
  3074.   500     CONTINUE
  3075.   600 RETURN
  3076. C                     THE FOLLOWING STOP SHOULD NEVER BE REACHED.
  3077.   999 STOP
  3078.       END
  3079. *DECK CHECK1
  3080.       SUBROUTINE CHECK1 (SFAC, DFAC, KPRINT)
  3081. C***BEGIN PROLOGUE  CHECK1
  3082. C***PURPOSE  (UNKNOWN)
  3083. C***LIBRARY   SLATEC
  3084. C***AUTHOR  Lawson, C. L., (JPL)
  3085. C***DESCRIPTION
  3086. C
  3087. C     THIS SUBPROGRAM TESTS THE INCREMENTING AND ACCURACY OF THE LINEAR
  3088. C     ALGEBRA SUBPROGRAMS 26 - 38 (SNRM2 TO ICAMAX). STORED RESULTS ARE
  3089. C     COMPARED WITH THE RESULT RETURNED BY THE SUBPROGRAM.
  3090. C
  3091. C     THESE SUBPROGRAMS REQUIRE A SINGLE VECTOR ARGUMENT.
  3092. C
  3093. C     ICASE            DESIGNATES WHICH SUBPROGRAM TO TEST.
  3094. C                      26 .LE. ICASE .LE. 38
  3095. C     C. L. LAWSON, JPL, 1974 DEC 10, MAY 28
  3096. C
  3097. C***ROUTINES CALLED  CSCAL, CSSCAL, DASUM, DNRM2, DSCAL, DTEST, ICAMAX,
  3098. C                    IDAMAX, ISAMAX, ITEST, SASUM, SCASUM, SCNRM2,
  3099. C                    SNRM2, SSCAL, STEST
  3100. C***COMMON BLOCKS    COMBLA
  3101. C***REVISION HISTORY  (YYMMDD)
  3102. C   741210  DATE WRITTEN
  3103. C   890911  Removed unnecessary intrinsics.  (WRB)
  3104. C   890911  REVISION DATE from Version 3.2
  3105. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  3106. C***END PROLOGUE  CHECK1
  3107.       COMMON /COMBLA/ NPRINT, ICASE, N, INCX, INCY, MODE, PASS
  3108.       LOGICAL          PASS
  3109.       INTEGER          ITRUE2(5),ITRUE3(5)
  3110.       DOUBLE PRECISION DA,DX(8)
  3111.       DOUBLE PRECISION DV(8,5,2)
  3112.       DOUBLE PRECISION DFAC
  3113.       DOUBLE PRECISION DNRM2,DASUM
  3114.       DOUBLE PRECISION DTRUE1(5),DTRUE3(5),DTRUE5(8,5,2)
  3115.       REAL             STRUE2(5),STRUE4(5),STRUE(8),SX(8)
  3116.       COMPLEX          CA,CV(8,5,2),CTRUE5(8,5,2),CTRUE6(8,5,2),CX(8)
  3117. C
  3118.       DATA SA, DA, CA        / .3, .3D0, (.4,-.7)    /
  3119.       DATA DV/.1D0,2.D0,2.D0,2.D0,2.D0,2.D0,2.D0,2.D0,
  3120.      1        .3D0,3.D0,3.D0,3.D0,3.D0,3.D0,3.D0,3.D0,
  3121.      2        .3D0,-.4D0,4.D0,4.D0,4.D0,4.D0,4.D0,4.D0,
  3122.      3        .2D0,-.6D0,.3D0,5.D0,5.D0,5.D0,5.D0,5.D0,
  3123.      4        .1D0,-.3D0,.5D0,-.1D0,6.D0,6.D0,6.D0,6.D0,
  3124.      5        .1D0,8.D0,8.D0,8.D0,8.D0,8.D0,8.D0,8.D0,
  3125.      6        .3D0,9.D0,9.D0,9.D0,9.D0,9.D0,9.D0,9.D0,
  3126.      7        .3D0,2.D0,-.4D0,2.D0,2.D0,2.D0,2.D0,2.D0,
  3127.      8        .2D0,3.D0,-.6D0,5.D0,.3D0,2.D0,2.D0,2.D0,
  3128.      9         .1D0,4.D0,-.3D0,6.D0,-.5D0,7.D0,-.1D0,              3.D0/
  3129. C     COMPLEX TEST VECTORS
  3130.       DATA CV/
  3131.      1(.1,.1),(1.,2.),(1.,2.),(1.,2.),(1.,2.),(1.,2.),(1.,2.),(1.,2.),
  3132.      2(.3,-.4),(3.,4.),(3.,4.),(3.,4.),(3.,4.),(3.,4.),(3.,4.),(3.,4.),
  3133.      3(.1,-.3),(.5,-.1),(5.,6.),(5.,6.),(5.,6.),(5.,6.),(5.,6.),(5.,6.),
  3134.      4(.1,.1),(-.6,.1),(.1,-.3),(7.,8.),(7.,8.),(7.,8.),(7.,8.),(7.,8.),
  3135.      5(.3,.1),(.1,.4),(.4,.1),(.1,.2),(2.,3.),(2.,3.),(2.,3.),(2.,3.),
  3136.      6(.1,.1),(4.,5.),(4.,5.),(4.,5.),(4.,5.),(4.,5.),(4.,5.),(4.,5.),
  3137.      7(.3,-.4),(6.,7.),(6.,7.),(6.,7.),(6.,7.),(6.,7.),(6.,7.),(6.,7.),
  3138.      8(.1,-.3),(8.,9.),(.5,-.1),(2.,5.),(2.,5.),(2.,5.),(2.,5.),(2.,5.),
  3139.      9(.1,.1),(3.,6.),(-.6,.1),(4.,7.),(.1,-.3),(7.,2.),(7.,2.),(7.,2.),
  3140.      T(.3,.1),(5.,8.),(.1,.4),(6.,9.),(.4,.1),(8.,3.),(.1,.2),(9.,4.) /
  3141. C
  3142.       DATA STRUE2/.0,.5,.6,.7,.7/
  3143.       DATA STRUE4/.0,.7,1.,1.3,1.7/
  3144.       DATA DTRUE1/.0D0,.3D0,.5D0,.7D0,.6D0/
  3145.       DATA DTRUE3/.0D0,.3D0,.7D0,1.1D0,1.D0/
  3146.       DATA DTRUE5/.10D0,2.D0,2.D0,2.D0,2.D0,2.D0,2.D0,2.D0,
  3147.      1            .09D0,3.D0,3.D0,3.D0,3.D0,3.D0,3.D0,3.D0,
  3148.      2            .09D0,-.12D0,4.D0,4.D0,4.D0,4.D0,4.D0,4.D0,
  3149.      3            .06D0,-.18D0,.09D0,5.D0,5.D0,5.D0,5.D0,5.D0,
  3150.      4            .03D0,-.09D0,.15D0,-.03D0,6.D0,6.D0,6.D0,6.D0,
  3151.      5            .10D0,8.D0,8.D0,8.D0,8.D0,8.D0,8.D0,8.D0,
  3152.      6            .09D0,9.D0,9.D0,9.D0,9.D0,9.D0,9.D0,9.D0,
  3153.      7            .09D0,2.D0,-.12D0,2.D0,2.D0,2.D0,2.D0,2.D0,
  3154.      8            .06D0,3.D0,-.18D0,5.D0,.09D0,2.D0,2.D0,2.D0,
  3155.      9            .03D0,4.D0, -.09D0,6.D0, -.15D0,7.D0, -.03D0,  3.D0/
  3156. C
  3157.       DATA CTRUE5/
  3158.      A(.1,.1),(1.,2.),(1.,2.),(1.,2.),(1.,2.),(1.,2.),(1.,2.),(1.,2.),
  3159.      B(-.16,-.37),(3.,4.),(3.,4.),(3.,4.),(3.,4.),(3.,4.),(3.,4.),
  3160.      C                                                         (3.,4.),
  3161.      D(-.17,-.19),(.13,-.39),(5.,6.),(5.,6.),(5.,6.),(5.,6.),(5.,6.),
  3162.      E                                                         (5.,6.),
  3163.      F(.11,-.03),(-.17,.46),(-.17,-.19),(7.,8.),(7.,8.),(7.,8.),(7.,8.),
  3164.      G                                                         (7.,8.),
  3165.      H(.19,-.17),(.32,.09),(.23,-.24),(.18,.01),(2.,3.),(2.,3.),(2.,3.),
  3166.      I                                                         (2.,3.),
  3167.      J(.1,.1),(4.,5.),(4.,5.),(4.,5.),(4.,5.),(4.,5.),(4.,5.),(4.,5.),
  3168.      K(-.16,-.37),(6.,7.),(6.,7.),(6.,7.),(6.,7.),(6.,7.),(6.,7.),
  3169.      L                                                         (6.,7.),
  3170.      M(-.17,-.19),(8.,9.),(.13,-.39),(2.,5.),(2.,5.),(2.,5.),(2.,5.),
  3171.      N                                                         (2.,5.),
  3172.      O(.11,-.03),(3.,6.),(-.17,.46),(4.,7.),(-.17,-.19),(7.,2.),(7.,2.),
  3173.      P                                                         (7.,2.),
  3174.      Q(.19,-.17),(5.,8.),(.32,.09),(6.,9.),(.23,-.24),(8.,3.),(.18,.01),
  3175.      R                                                         (9.,4.) /
  3176. C
  3177.       DATA CTRUE6/
  3178.      A(.1,.1),(1.,2.),(1.,2.),(1.,2.),(1.,2.),(1.,2.),(1.,2.),(1.,2.),
  3179.      B(.09,-.12),(3.,4.),(3.,4.),(3.,4.),(3.,4.),(3.,4.),(3.,4.),
  3180.      C                                                         (3.,4.),
  3181.      D(.03,-.09),(.15,-.03),(5.,6.),(5.,6.),(5.,6.),(5.,6.),(5.,6.),
  3182.      E                                                         (5.,6.),
  3183.      F(.03,.03),(-.18,.03),(.03,-.09),(7.,8.),(7.,8.),(7.,8.),(7.,8.),
  3184.      G                                                         (7.,8.),
  3185.      H(.09,.03),(.03,.12),(.12,.03),(.03,.06),(2.,3.),(2.,3.),(2.,3.),
  3186.      I                                                         (2.,3.),
  3187.      J(.1,.1),(4.,5.),(4.,5.),(4.,5.),(4.,5.),(4.,5.),(4.,5.),(4.,5.),
  3188.      K(.09,-.12),(6.,7.),(6.,7.),(6.,7.),(6.,7.),(6.,7.),(6.,7.),
  3189.      L                                                         (6.,7.),
  3190.      M(.03,-.09),(8.,9.),(.15,-.03),(2.,5.),(2.,5.),(2.,5.),(2.,5.),
  3191.      N                                                         (2.,5.),
  3192.      O(.03,.03),(3.,6.),(-.18,.03),(4.,7.),(.03,-.09),(7.,2.),(7.,2.),
  3193.      P                                                         (7.,2.),
  3194.      Q(.09,.03),(5.,8.),(.03,.12),(6.,9.),(.12,.03),(8.,3.),(.03,.06),
  3195.      R                                                         (9.,4.) /
  3196. C
  3197. C
  3198.       DATA ITRUE2/ 0, 1, 2, 2, 3/
  3199.       DATA ITRUE3/ 0, 1, 2, 2, 2/
  3200. C***FIRST EXECUTABLE STATEMENT  CHECK1
  3201.       JUMP=ICASE-25
  3202.          DO 520 INCX=1,2
  3203.             DO 500 NP1=1,5
  3204.             N=NP1-1
  3205.             LEN= 2*MAX(N,1)
  3206. C                                                  SET VECTOR ARGUMENTS.
  3207.                     DO 22 I = 1, LEN
  3208.                     SX(I) = DV(I,NP1,INCX)
  3209.                     DX(I) = DV(I,NP1,INCX)
  3210.    22               CX(I) = CV(I,NP1,INCX)
  3211. C
  3212. C                        BRANCH TO INVOKE SUBPROGRAM TO BE TESTED.
  3213. C
  3214.                GO TO (260,270,280,290,300,310,320,
  3215.      *                330,340,350,360,370,380),JUMP
  3216. C                                                             26. SNRM2
  3217.   260       STEMP = DTRUE1(NP1)
  3218.             CALL STEST(1,SNRM2(N,SX,INCX),STEMP,STEMP,SFAC,KPRINT)
  3219.             GO TO 500
  3220. C                                                             27. DNRM2
  3221.   270       CALL DTEST(1,DNRM2(N,DX,INCX),DTRUE1(NP1),DTRUE1(NP1),DFAC,
  3222.      1                 KPRINT)
  3223.             GO TO 500
  3224. C                                                             28. SCNRM2
  3225.   280       CALL STEST(1,SCNRM2(N,CX,INCX),STRUE2(NP1),STRUE2(NP1),
  3226.      1                 SFAC,KPRINT)
  3227.             GO TO 500
  3228. C                                                             29. SASUM
  3229.   290       STEMP = DTRUE3(NP1)
  3230.             CALL STEST(1,SASUM(N,SX,INCX),STEMP,STEMP,SFAC,KPRINT)
  3231.             GO TO 500
  3232. C                                                             30. DASUM
  3233.   300       CALL DTEST(1,DASUM(N,DX,INCX),DTRUE3(NP1),DTRUE3(NP1),DFAC,
  3234.      1                 KPRINT)
  3235.             GO TO 500
  3236. C                                                             31. SCASUM
  3237.   310       CALL STEST(1,SCASUM(N,CX,INCX),STRUE4(NP1),STRUE4(NP1),SFAC,
  3238.      1                 KPRINT)
  3239.             GO TO 500
  3240. C                                                             32. SSCALE
  3241.   320       CALL SSCAL(N,SA,SX,INCX)
  3242.                DO 322 I = 1, LEN
  3243.   322          STRUE(I) = DTRUE5(I,NP1,INCX)
  3244.             CALL STEST(LEN,SX,STRUE,STRUE,SFAC,KPRINT)
  3245.             GO TO 500
  3246. C                                                             33. DSCALE
  3247.   330       CALL DSCAL(N,DA,DX,INCX)
  3248.            CALL DTEST(LEN,DX,DTRUE5(1,NP1,INCX),DTRUE5(1,NP1,INCX),
  3249.      1                 DFAC,KPRINT)
  3250.             GO TO 500
  3251. C                                                             34. CSCALE
  3252.   340       CALL CSCAL(N,CA,CX,INCX)
  3253.         CALL STEST(2*LEN,CX,CTRUE5(1,NP1,INCX),CTRUE5(1,NP1,INCX),
  3254.      1                 SFAC,KPRINT)
  3255.             GO TO 500
  3256. C                                                             35. CSSCAL
  3257.   350       CALL CSSCAL(N,SA,CX,INCX)
  3258.          CALL STEST(2*LEN,CX,CTRUE6(1,NP1,INCX),CTRUE6(1,NP1,INCX),
  3259.      1                 SFAC,KPRINT)
  3260.             GO TO 500
  3261. C                                                             36. ISAMAX
  3262.   360       CALL ITEST(1,ISAMAX(N,SX,INCX),ITRUE2(NP1),KPRINT)
  3263.             GO TO 500
  3264. C                                                             37. IDAMAX
  3265.   370       CALL ITEST(1,IDAMAX(N,DX,INCX),ITRUE2(NP1),KPRINT)
  3266.             GO TO 500
  3267. C                                                             38. ICAMAX
  3268.   380       CALL ITEST(1,ICAMAX(N,CX,INCX),ITRUE3(NP1),KPRINT)
  3269. C
  3270.   500       CONTINUE
  3271.   520    CONTINUE
  3272.       RETURN
  3273.       END
  3274. *DECK CHECK2
  3275.       SUBROUTINE CHECK2 (SFAC, SDFAC, DFAC, DQFAC, KPRINT)
  3276. C***BEGIN PROLOGUE  CHECK2
  3277. C***PURPOSE  (UNKNOWN)
  3278. C***LIBRARY   SLATEC
  3279. C***AUTHOR  Lawson, C. L., (JPL)
  3280. C***DESCRIPTION
  3281. C
  3282. C     THIS SUBPROGRAM TESTS THE BASIC LINEAR ALGEBRA SUBPROGRAMS 1-11,
  3283. C     14-15, AND 18-25. SUBPROGRAMS IN THIS SET EACH REQUIRE TWO ARRAYS
  3284. C     IN THE PARAMETER LIST.
  3285. C
  3286. C     C. L. LAWSON, JPL, 1975 FEB 26, APR 29, MAY 8, MAY 28
  3287. C
  3288. C***ROUTINES CALLED  CAXPY, CCOPY, CDOTC, CDOTU, CSWAP, DAXPY, DCOPY,
  3289. C                    DDOT, DQDOTA, DQDOTI, DROT, DROTM, DSDOT, DSWAP,
  3290. C                    DTEST, SAXPY, SCOPY, SDOT, SDSDOT, SROT, SROTM,
  3291. C                    SSWAP, STEST
  3292. C***COMMON BLOCKS    COMBLA
  3293. C***REVISION HISTORY  (YYMMDD)
  3294. C   750226  DATE WRITTEN
  3295. C   890911  Removed unnecessary intrinsics.  (WRB)
  3296. C   890911  REVISION DATE from Version 3.2
  3297. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  3298. C***END PROLOGUE  CHECK2
  3299.       COMMON /COMBLA/ NPRINT, ICASE, N, INCX, INCY, MODE, PASS
  3300. C
  3301.       LOGICAL          PASS
  3302.       INTEGER          INCXS(4),INCYS(4),LENS(4,2),NS(4)
  3303.       REAL             SX(7),SY(7),STX(7),STY(7),SSIZE1(4),SSIZE2(14,2)
  3304.       REAL             SSIZE(7),QC(10),SPARAM(5),ST7B(4,4),SSIZE3(4)
  3305.       DOUBLE PRECISION DX(7),DA,DX1(7),DY1(7),DY(7),DT7(4,4),DT8(7,4,4)
  3306.       DOUBLE PRECISION DX2(7), DY2(7), DT2(4,4,2), DPARAM(5), DPAR(5,4)
  3307.       DOUBLE PRECISION DSDOT,DDOT,DQDOTI,DQDOTA,DFAC,DQFAC
  3308.       DOUBLE PRECISION DT10X(7,4,4),DT10Y(7,4,4),DB
  3309.       DOUBLE PRECISION DSIZE1(4),DSIZE2(7,2),DSIZE(7)
  3310.       DOUBLE PRECISION DC,DS,DT9X(7,4,4),DT9Y(7,4,4),DTX(7),DTY(7)
  3311.       DOUBLE PRECISION DT19X(7,4,16),DT19XA(7,4,4),DT19XB(7,4,4)
  3312.       DOUBLE PRECISION DT19XC(7,4,4),DT19XD(7,4,4),DT19Y(7,4,16)
  3313.       DOUBLE PRECISION DT19YA(7,4,4),DT19YB(7,4,4),DT19YC(7,4,4)
  3314.       DOUBLE PRECISION DT19YD(7,4,4)
  3315. C
  3316.       EQUIVALENCE (DT19X(1,1,1),DT19XA(1,1,1)),(DT19X(1,1,5),
  3317.      A   DT19XB(1,1,1)),(DT19X(1,1,9),DT19XC(1,1,1)),
  3318.      B   (DT19X(1,1,13),DT19XD(1,1,1))
  3319.       EQUIVALENCE (DT19Y(1,1,1),DT19YA(1,1,1)),(DT19Y(1,1,5),
  3320.      A   DT19YB(1,1,1)),(DT19Y(1,1,9),DT19YC(1,1,1)),
  3321.      B   (DT19Y(1,1,13),DT19YD(1,1,1))
  3322.       COMPLEX          CX(7),CA,CX1(7),CY1(7),CY(7),CT6(4,4),CT7(4,4)
  3323.       COMPLEX          CT8(7,4,4),CSIZE1(4),CSIZE2(7,2)
  3324.       COMPLEX          CT10X(7,4,4), CT10Y(7,4,4)
  3325.       COMPLEX          CDOTC,CDOTU
  3326.       DATA SA,DA,CA,DB,SB/.3,.3D0,(.4,-.7),.25D0,.1/
  3327.       DATA INCXS/   1,   2,  -2,  -1 /
  3328.       DATA INCYS/   1,  -2,   1,  -2 /
  3329.       DATA LENS/1, 1, 2, 4,   1, 1, 3, 7/
  3330.       DATA NS   /   0,   1,   2,   4 /
  3331.       DATA SC,SS,DC,DS/ .8,.6,.8D0,.6D0/
  3332.       DATA DX1/ .6D0, .1D0,-.5D0, .8D0, .9D0,-.3D0,-.4D0/
  3333.       DATA DY1/ .5D0,-.9D0, .3D0, .7D0,-.6D0, .2D0, .8D0/
  3334.       DATA DX2/ 1.D0,.01D0, .02D0,1.D0,.06D0, 2.D0, 1.D0/
  3335.       DATA DY2/ 1.D0,.04D0,-.03D0,-1.D0,.05D0,3.D0,-1.D0/
  3336. C            THE TERMS D11(3,2) AND D11(4,2) WILL BE SET BY
  3337. C            COMPUTATION AT RUN TIME.
  3338.       DATA CX1/(.7,-.8),(-.4,-.7),(-.1,-.9),(.2,-.8),(-.9,-.4),(.1,.4),
  3339.      *                                                        (-.6,.6)/
  3340.       DATA CY1/(.6,-.6),(-.9,.5),(.7,-.6),(.1,-.5),(-.1,-.2),(-.5,-.3),
  3341.      *                                                       (.8,-.7) /
  3342. C
  3343. C                             FOR DQDOTI AND DQDOTA
  3344. C
  3345.       DATA DT2/0.25D0,1.25D0,1.2504D0,0.2498D0,
  3346.      A         0.25D0,1.25D0,0.24D0,0.2492D0,
  3347.      B         0.25D0,1.25D0,0.31D0,0.2518D0,
  3348.      C         0.25D0,1.25D0,1.2497D0,0.2507D0,
  3349.      D         0.D0,2.D0,2.0008D0,-.0004D0,
  3350.      E         0.D0,2.D0,-.02D0,-.0016D0,
  3351.      F         0.D0,2.D0,.12D0,.0036D0,
  3352.      G         0.D0,2.D0,1.9994D0,.0014D0/
  3353.       DATA DT7/ 0.D0,.30D0,.21D0,.62D0,      0.D0,.30D0,-.07D0,.85D0,
  3354.      *          0.D0,.30D0,-.79D0,-.74D0,    0.D0,.30D0,.33D0,1.27D0/
  3355.       DATA ST7B/ .1, .4, .31, .72,     .1, .4, .03, .95,
  3356.      *           .1, .4, -.69, -.64,   .1, .4, .43, 1.37/
  3357. C
  3358. C                       FOR CDOTU
  3359. C
  3360.       DATA CT7/(0.,0.),(-.06,-.90),(.65,-.47),(-.34,-1.22),
  3361.      1         (0.,0.),(-.06,-.90),(-.59,-1.46),(-1.04,-.04),
  3362.      2         (0.,0.),(-.06,-.90),(-.83,.59),  (  .07,-.37),
  3363.      3         (0.,0.),(-.06,-.90),(-.76,-1.15),(-1.33,-1.82)/
  3364. C
  3365. C                       FOR CDOTC
  3366. C
  3367.       DATA CT6/(0.,0.),(.90,0.06), (.91,-.77),    (1.80,-.10),
  3368.      A         (0.,0.),(.90,0.06), (1.45,.74),    (.20,.90),
  3369.      B         (0.,0.),(.90,0.06), (-.55,.23),    (.83,-.39),
  3370.      C         (0.,0.),(.90,0.06), (1.04,0.79),    (1.95,1.22)/
  3371. C
  3372.       DATA DT8/.5D0,                     0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3373.      1         .68D0,                    0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3374.      2         .68D0,-.87D0,                 0.D0,0.D0,0.D0,0.D0,0.D0,
  3375.      3         .68D0,-.87D0,.15D0,.94D0,          0.D0,0.D0,0.D0,
  3376.      4         .5D0,                     0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3377.      5         .68D0,                    0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3378.      6         .35D0,-.9D0,.48D0,                   0.D0,0.D0,0.D0,0.D0,
  3379.      7         .38D0,-.9D0,.57D0,.7D0,-.75D0,.2D0,.98D0,
  3380.      8         .5D0,                      0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3381.      9         .68D0,                     0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3382.      A         .35D0,-.72D0,                0.D0,0.D0,0.D0,0.D0,0.D0,
  3383.      B         .38D0,-.63D0,.15D0,.88D0,                 0.D0,0.D0,0.D0,
  3384.      C         .5D0,                      0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3385.      D         .68D0,                     0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3386.      E         .68D0,-.9D0,.33D0,                0.D0,0.D0,0.D0,0.D0,
  3387.      F         .68D0,-.9D0,.33D0,.7D0,-.75D0,.2D0,1.04D0/
  3388. C
  3389.       DATA CT8/
  3390.      A(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3391.      B(.32,-1.41),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3392.      C(.32,-1.41),(-1.55,.5),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3393.      D(.32,-1.41),(-1.55,.5),(.03,-.89),(-.38,-.96),(0.,0.),(0.,0.),
  3394.      E                                                         (0.,0.),
  3395.      F(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3396.      G(.32,-1.41),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3397.      H(-.07,-.89),(-.9,.5),(.42,-1.41),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3398.      I(.78,.06),(-.9,.5),(.06,-.13),(.1,-.5),(-.77,-.49),(-.5,-.3),
  3399.      J                                                     (.52,-1.51),
  3400.      K(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3401.      L(.32,-1.41),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3402.      M(-.07,-.89),(-1.18,-.31),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3403.      N(.78,.06),(-1.54,.97),(.03,-.89),(-.18,-1.31),(0.,0.),(0.,0.),
  3404.      O(0.,0.),(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3405.      P(.32,-1.41),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3406.      Q(.32,-1.41),(-.9,.5),(.05,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3407.      R(.32,-1.41),(-.9,.5),(.05,-.6),(.1,-.5),(-.77,-.49),(-.5,-.3),
  3408.      S                                                     (.32,-1.16) /
  3409. C
  3410. C
  3411. C                TRUE X VALUES AFTER ROTATION USING SROT OR DROT.
  3412.       DATA DT9X/.6D0,                    0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3413.      A          .78D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3414.      B          .78D0,-.46D0,               0.D0,0.D0,0.D0,0.D0,0.D0,
  3415.      C          .78D0,-.46D0,-.22D0,1.06D0,              0.D0,0.D0,0.D0,
  3416.      D          .6D0,                    0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3417.      E          .78D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3418.      F          .66D0,.1D0,-.1D0,                   0.D0,0.D0,0.D0,0.D0,
  3419.      G          .96D0,.1D0,-.76D0,.8D0,.90D0,-.3D0,-.02D0,
  3420.      H          .6D0,                    0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3421.      I          .78D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3422.      J          -.06D0,.1D0,-.1D0,                  0.D0,0.D0,0.D0,0.D0,
  3423.      K          .90D0,.1D0,-.22D0,.8D0,.18D0,-.3D0,-.02D0,
  3424.      L          .6D0,                    0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3425.      M          .78D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3426.      N          .78D0,.26D0,                0.D0,0.D0,0.D0,0.D0,0.D0,
  3427.      O          .78D0,.26D0,-.76D0,1.12D0,               0.D0,0.D0,0.D0/
  3428. C
  3429. C                TRUE Y VALUES AFTER ROTATION USING SROT OR DROT.
  3430. C
  3431.       DATA DT9Y/ .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3432.      A           .04D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3433.      B           .04D0,-.78D0,              0.D0,0.D0,0.D0,0.D0,0.D0,
  3434.      C           .04D0,-.78D0, .54D0, .08D0,             0.D0,0.D0,0.D0,
  3435.      D           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3436.      E           .04D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3437.      F           .7D0,-.9D0,-.12D0,                 0.D0,0.D0,0.D0,0.D0,
  3438.      G           .64D0,-.9D0,-.30D0, .7D0,-.18D0, .2D0, .28D0,
  3439.      H           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3440.      I           .04D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3441.      J           .7D0,-1.08D0,              0.D0,0.D0,0.D0,0.D0,0.D0,
  3442.      K           .64D0,-1.26D0,.54D0, .20D0,             0.D0,0.D0,0.D0,
  3443.      L           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3444.      M          .04D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3445.      N           .04D0,-.9D0, .18D0,                0.D0,0.D0,0.D0,0.D0,
  3446.      O           .04D0,-.9D0, .18D0, .7D0,-.18D0, .2D0, .16D0/
  3447. C
  3448.       DATA DT10X/.6D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3449.      A           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3450.      B           .5D0,-.9D0,                0.D0,0.D0,0.D0,0.D0,0.D0,
  3451.      C           .5D0,-.9D0,.3D0,.7D0,                   0.D0,0.D0,0.D0,
  3452.      D           .6D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3453.      E           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3454.      F           .3D0,.1D0 ,.5D0,                   0.D0,0.D0,0.D0,0.D0,
  3455.      G           .8D0,.1D0 ,-.6D0,.8D0 ,.3D0,-.3D0,.5D0,
  3456.      H           .6D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3457.      I           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3458.      J           -.9D0,.1D0,.5D0,                   0.D0,0.D0,0.D0,0.D0,
  3459.      K           .7D0, .1D0,.3D0, .8D0,-.9D0,-.3D0,.5D0,
  3460.      L           .6D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3461.      M           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3462.      N           .5D0,.3D0,                 0.D0,0.D0,0.D0,0.D0,0.D0,
  3463.      O           .5D0,.3D0,-.6D0,.8D0,                   0.D0,0.D0,0.D0/
  3464. C
  3465.       DATA DT10Y/.5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3466.      A           .6D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3467.      B           .6D0,.1D0,                 0.D0,0.D0,0.D0,0.D0,0.D0,
  3468.      C           .6D0,.1D0,-.5D0,.8D0,                   0.D0,0.D0,0.D0,
  3469.      D           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3470.      E           .6D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3471.      F           -.5D0,-.9D0,.6D0,                  0.D0,0.D0,0.D0,0.D0,
  3472.      G           -.4D0,-.9D0,.9D0, .7D0,-.5D0, .2D0,.6D0,
  3473.      H           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3474.      I           .6D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3475.      J           -.5D0,.6D0,                0.D0,0.D0,0.D0,0.D0,0.D0,
  3476.      K           -.4D0,.9D0,-.5D0,.6D0,                  0.D0,0.D0,0.D0,
  3477.      L           .5D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3478.      M           .6D0,                   0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3479.      N           .6D0,-.9D0,.1D0,                   0.D0,0.D0,0.D0,0.D0,
  3480.      O           .6D0,-.9D0,.1D0, .7D0,-.5D0, .2D0, .8D0/
  3481. C
  3482.       DATA CT10X/
  3483.      A(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3484.      B(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3485.      C(.6,-.6),(-.9,.5),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3486.      D(.6,-.6),(-.9,.5),(.7,-.6),(.1,-.5),(0.,0.),(0.,0.),(0.,0.),
  3487.      E(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3488.      F(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3489.      G(.7,-.6),(-.4,-.7),(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3490.      H(.8,-.7),(-.4,-.7),(-.1,-.2),(.2,-.8),(.7,-.6),(.1,.4),(.6,-.6),
  3491.      I(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3492.      J(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3493.      K(-.9,.5),(-.4,-.7),(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3494.      L(.1,-.5),(-.4,-.7),(.7,-.6),(.2,-.8),(-.9,.5),(.1,.4),(.6,-.6),
  3495.      M(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3496.      N(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3497.      O(.6,-.6),(.7,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3498.      P(.6,-.6),(.7,-.6),(-.1,-.2),(.8,-.7),(0.,0.),(0.,0.),(0.,0.)   /
  3499. C
  3500.       DATA CT10Y/
  3501.      A(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3502.      B(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3503.      C(.7,-.8),(-.4,-.7),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3504.      D(.7,-.8),(-.4,-.7),(-.1,-.9),(.2,-.8),(0.,0.),(0.,0.),(0.,0.),
  3505.      E(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3506.      F(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3507.      G(-.1,-.9),(-.9,.5),(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3508.      H(-.6,.6),(-.9,.5),(-.9,-.4),(.1,-.5),(-.1,-.9),(-.5,-.3),(.7,-.8),
  3509.      I(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3510.      J(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3511.      K(-.1,-.9),(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3512.      L(-.6,.6),(-.9,-.4),(-.1,-.9),(.7,-.8),(0.,0.),(0.,0.),(0.,0.),
  3513.      M(.6,-.6),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3514.      N(.7,-.8),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3515.      O(.7,-.8),(-.9,.5),(-.4,-.7),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3516.      P(.7,-.8),(-.9,.5),(-.4,-.7),(.1,-.5),(-.1,-.9),(-.5,-.3),(.2,-.8)/
  3517. C                        TRUE X RESULTS F0R ROTATIONS SROTM AND DROTM
  3518.       DATA DT19XA/.6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3519.      A            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3520.      B            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3521.      C            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3522.      D            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3523.      E           -.8D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3524.      F           -.9D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3525.      G           3.5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3526.      H            .6D0,   .1D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3527.      I           -.8D0,  3.8D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3528.      J           -.9D0,  2.8D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3529.      K           3.5D0,  -.4D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3530.      L            .6D0,   .1D0,  -.5D0,   .8D0,          0.D0,0.D0,0.D0,
  3531.      M           -.8D0,  3.8D0, -2.2D0, -1.2D0,          0.D0,0.D0,0.D0,
  3532.      N           -.9D0,  2.8D0, -1.4D0, -1.3D0,          0.D0,0.D0,0.D0,
  3533.      O           3.5D0,  -.4D0, -2.2D0,  4.7D0,          0.D0,0.D0,0.D0/
  3534. C
  3535.       DATA DT19XB/.6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3536.      A            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3537.      B            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3538.      C            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3539.      D            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3540.      E           -.8D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3541.      F           -.9D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3542.      G           3.5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3543.      H            .6D0,   .1D0,  -.5D0,             0.D0,0.D0,0.D0,0.D0,
  3544.      I           0.D0,    .1D0, -3.0D0,             0.D0,0.D0,0.D0,0.D0,
  3545.      J           -.3D0,   .1D0, -2.0D0,             0.D0,0.D0,0.D0,0.D0,
  3546.      K           3.3D0,   .1D0, -2.0D0,             0.D0,0.D0,0.D0,0.D0,
  3547.      L            .6D0,   .1D0,  -.5D0,   .8D0,   .9D0,  -.3D0,  -.4D0,
  3548.      M          -2.0D0,   .1D0,  1.4D0,   .8D0,   .6D0,  -.3D0, -2.8D0,
  3549.      N          -1.8D0,   .1D0,  1.3D0,   .8D0,  0.D0,   -.3D0, -1.9D0,
  3550.      O           3.8D0,   .1D0, -3.1D0,   .8D0,  4.8D0,  -.3D0, -1.5D0 /
  3551. C
  3552.       DATA DT19XC/.6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3553.      A            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3554.      B            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3555.      C            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3556.      D            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3557.      E           -.8D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3558.      F           -.9D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3559.      G           3.5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3560.      H            .6D0,   .1D0,  -.5D0,             0.D0,0.D0,0.D0,0.D0,
  3561.      I           4.8D0,   .1D0, -3.0D0,             0.D0,0.D0,0.D0,0.D0,
  3562.      J           3.3D0,   .1D0, -2.0D0,             0.D0,0.D0,0.D0,0.D0,
  3563.      K           2.1D0,   .1D0, -2.0D0,             0.D0,0.D0,0.D0,0.D0,
  3564.      L            .6D0,   .1D0,  -.5D0,   .8D0,   .9D0,  -.3D0,  -.4D0,
  3565.      M          -1.6D0,   .1D0, -2.2D0,   .8D0,  5.4D0,  -.3D0, -2.8D0,
  3566.      N          -1.5D0,   .1D0, -1.4D0,   .8D0,  3.6D0,  -.3D0, -1.9D0,
  3567.      O           3.7D0,   .1D0, -2.2D0,   .8D0,  3.6D0,  -.3D0, -1.5D0 /
  3568. C
  3569.       DATA DT19XD/.6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3570.      A            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3571.      B            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3572.      C            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3573.      D            .6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3574.      E           -.8D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3575.      F           -.9D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3576.      G           3.5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3577.      H            .6D0,   .1D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3578.      I           -.8D0, -1.0D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3579.      J           -.9D0,  -.8D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3580.      K           3.5D0,   .8D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3581.      L            .6D0,   .1D0,  -.5D0,   .8D0,          0.D0,0.D0,0.D0,
  3582.      M           -.8D0, -1.0D0,  1.4D0, -1.6D0,          0.D0,0.D0,0.D0,
  3583.      N           -.9D0,  -.8D0,  1.3D0, -1.6D0,          0.D0,0.D0,0.D0,
  3584.      O           3.5D0,   .8D0, -3.1D0,  4.8D0,          0.D0,0.D0,0.D0/
  3585. C                        TRUE Y RESULTS FOR ROTATIONS SROTM AND DROTM
  3586.       DATA DT19YA/.5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3587.      A            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3588.      B            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3589.      C            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3590.      D            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3591.      E            .7D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3592.      F           1.7D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3593.      G          -2.6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3594.      H            .5D0,  -.9D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3595.      I            .7D0, -4.8D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3596.      J           1.7D0,  -.7D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3597.      K          -2.6D0,  3.5D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3598.      L            .5D0,  -.9D0,   .3D0,   .7D0,          0.D0,0.D0,0.D0,
  3599.      M            .7D0, -4.8D0,  3.0D0,  1.1D0,          0.D0,0.D0,0.D0,
  3600.      N           1.7D0,  -.7D0,  -.7D0,  2.3D0,          0.D0,0.D0,0.D0,
  3601.      O          -2.6D0,  3.5D0,  -.7D0, -3.6D0,          0.D0,0.D0,0.D0/
  3602. C
  3603.       DATA DT19YB/.5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3604.      A            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3605.      B            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3606.      C            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3607.      D            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3608.      E            .7D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3609.      F           1.7D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3610.      G          -2.6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3611.      H            .5D0,  -.9D0,   .3D0,             0.D0,0.D0,0.D0,0.D0,
  3612.      I           4.0D0,  -.9D0,  -.3D0,             0.D0,0.D0,0.D0,0.D0,
  3613.      J           -.5D0,  -.9D0,  1.5D0,             0.D0,0.D0,0.D0,0.D0,
  3614.      K          -1.5D0,  -.9D0, -1.8D0,             0.D0,0.D0,0.D0,0.D0,
  3615.      L            .5D0,  -.9D0,   .3D0,   .7D0,  -.6D0,   .2D0,   .8D0,
  3616.      M           3.7D0,  -.9D0, -1.2D0,   .7D0, -1.5D0,   .2D0,  2.2D0,
  3617.      N           -.3D0,  -.9D0,  2.1D0,   .7D0, -1.6D0,   .2D0,  2.0D0,
  3618.      O          -1.6D0,  -.9D0, -2.1D0,   .7D0,  2.9D0,   .2D0, -3.8D0 /
  3619. C
  3620.       DATA DT19YC/.5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3621.      A            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3622.      B            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3623.      C            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3624.      D            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3625.      E            .7D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3626.      F           1.7D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3627.      G          -2.6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3628.      H            .5D0,  -.9D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3629.      I           4.0D0, -6.3D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3630.      J           -.5D0,   .3D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3631.      K          -1.5D0,  3.0D0,             0.D0,0.D0,0.D0,0.D0,0.D0,
  3632.      L            .5D0,  -.9D0,   .3D0,   .7D0,          0.D0,0.D0,0.D0,
  3633.      M           3.7D0, -7.2D0,  3.0D0,  1.7D0,          0.D0,0.D0,0.D0,
  3634.      N           -.3D0,   .9D0,  -.7D0,  1.9D0,          0.D0,0.D0,0.D0,
  3635.      O          -1.6D0,  2.7D0,  -.7D0, -3.4D0,          0.D0,0.D0,0.D0/
  3636. C
  3637.       DATA DT19YD/.5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3638.      A            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3639.      B            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3640.      C            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3641.      D            .5D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3642.      E            .7D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3643.      F           1.7D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3644.      G          -2.6D0,                  0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3645.      H            .5D0,  -.9D0,   .3D0,             0.D0,0.D0,0.D0,0.D0,
  3646.      I            .7D0,  -.9D0,  1.2D0,             0.D0,0.D0,0.D0,0.D0,
  3647.      J           1.7D0,  -.9D0,   .5D0,             0.D0,0.D0,0.D0,0.D0,
  3648.      K          -2.6D0,  -.9D0, -1.3D0,             0.D0,0.D0,0.D0,0.D0,
  3649.      L            .5D0,  -.9D0,   .3D0,   .7D0,  -.6D0,   .2D0,   .8D0,
  3650.      M            .7D0,  -.9D0,  1.2D0,   .7D0, -1.5D0,   .2D0,  1.6D0,
  3651.      N           1.7D0,  -.9D0,   .5D0,   .7D0, -1.6D0,   .2D0,  2.4D0,
  3652.      O          -2.6D0,  -.9D0, -1.3D0,   .7D0,  2.9D0,   .2D0, -4.0D0 /
  3653. C
  3654.       DATA SSIZE1/ 0.  , .3  , 1.6  , 3.2   /
  3655.       DATA DSIZE1/ 0.D0, .3D0, 1.6D0, 3.2D0 /
  3656.       DATA SSIZE3/ .1, .4, 1.7, 3.3 /
  3657. C
  3658. C                         FOR CDOTC AND CDOTU
  3659. C
  3660.       DATA CSIZE1/ (0.,0.), (.9,.9), (1.63,1.73), (2.90,2.78) /
  3661.       DATA SSIZE2/0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
  3662.      A  1.17,1.17,1.17,1.17,1.17,1.17,1.17,
  3663.      B  1.17,1.17,1.17,1.17,1.17,1.17,1.17/
  3664.       DATA DSIZE2/0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,0.D0,
  3665.      A  1.17D0,1.17D0,1.17D0,1.17D0,1.17D0,1.17D0,1.17D0/
  3666. C
  3667. C                         FOR CAXPY
  3668. C
  3669.       DATA CSIZE2/
  3670.      A (0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),(0.,0.),
  3671.      B (1.54,1.54),(1.54,1.54),(1.54,1.54),(1.54,1.54),(1.54,1.54),
  3672.      C                                     (1.54,1.54),(1.54,1.54) /
  3673. C
  3674. C                         FOR SROTM AND DROTM
  3675. C
  3676.       DATA DPAR/-2.D0,  0.D0,0.D0,0.D0,0.D0,
  3677.      A          -1.D0,  2.D0, -3.D0, -4.D0,  5.D0,
  3678.      B           0.D0,  0.D0,  2.D0, -3.D0,  0.D0,
  3679.      C           1.D0,  5.D0,  2.D0,  0.D0, -4.D0/
  3680. C***FIRST EXECUTABLE STATEMENT  CHECK2
  3681.         DO 520 KI = 1, 4
  3682.         INCX = INCXS(KI)
  3683.         INCY = INCYS(KI)
  3684.         MX   = ABS(INCX)
  3685.         MY   = ABS(INCY)
  3686. C
  3687.           DO 500 KN=1,4
  3688.           N= NS(KN)
  3689.           KSIZE=MIN(2,KN)
  3690.           LENX = LENS(KN,MX)
  3691.           LENY = LENS(KN,MY)
  3692. C                                       INITIALIZE ALL ARGUMENT ARRAYS.
  3693.                DO 5 I = 1, 7
  3694.                SX(I) = DX1(I)
  3695.                SY(I) = DY1(I)
  3696.                DX(I) = DX1(I)
  3697.                DY(I) = DY1(I)
  3698.                CX(I) = CX1(I)
  3699.     5          CY(I) = CY1(I)
  3700. C
  3701. C                             BRANCH TO SELECT SUBPROGRAM TO BE TESTED.
  3702. C
  3703.           GO TO ( 10, 20, 30, 40, 50, 60, 70, 80, 90,100,
  3704.      A           110,999,999,140,150,999,999,180,190,200,
  3705.      B           210,220,230,240,250), ICASE
  3706. C                                                              1. SDOT
  3707.    10     CALL STEST(1,SDOT(N,SX,INCX,SY,INCY),REAL(DT7(KN,KI)),
  3708.      *                                         SSIZE1(KN),SFAC,KPRINT)
  3709.           GO TO 500
  3710. C                                                              2. DSDOT
  3711.    20     CALL STEST(1,REAL(DSDOT(N,SX,INCX,SY,INCY)),
  3712.      *               REAL(DT7(KN,KI)),SSIZE1(KN),SFAC,KPRINT)
  3713.           GO TO 500
  3714. C                                                              3. SDSDOT
  3715.    30     CALL STEST(1,SDSDOT(N,SB,SX,INCX,SY,INCY),
  3716.      *               ST7B(KN,KI),SSIZE3(KN),SFAC,KPRINT)
  3717.           GO TO 500
  3718. C                                                              4. DDOT
  3719.    40     CALL DTEST(1,DDOT(N,DX,INCX,DY,INCY),DT7(KN,KI),
  3720.      *               DSIZE1(KN),DFAC,KPRINT)
  3721.           GO TO 500
  3722. C                                                              5. DQDOTI
  3723.    50 CONTINUE
  3724. C                        DQDOTI AND DQDOTA ARE SUPPOSED TO USE EXTENDED
  3725. C                        PRECISION ARITHMETIC INTERNALLY.
  3726. C     SET MODE = 1 OR 2 TO DISTINGUISH TESTS OF DQDOTI OR DQDOTA
  3727. C     IN THE DIAGNOSTIC OUTPUT.
  3728. C
  3729.           MODE = 1
  3730.           CALL DTEST(1,DQDOTI(N,DB,QC,DX2,INCX,DY2,INCY),
  3731.      *               DT2(KN,KI,1),DT2(KN,KI,1),DQFAC,KPRINT)
  3732.       GO TO 500
  3733. C                                                              6. DQDOTA
  3734.    60 CONTINUE
  3735. C     TO TEST DQDOTA WE ACTUALLY TEST BOTH DQDOTI AND DQDOTA.
  3736. C     THE OUTPUT VALUE OF QX FROM DQDOTI WILL BE USED AS INPUT
  3737. C     TO DQDOTA.  QX IS SUPPOSED TO BE IN A MACHINE-DEPENDENT
  3738. C     EXTENDED PRECISION FORM.
  3739. C     MODE IS SET TO 1 OR 2 TO DISTINGUISH TESTS OF
  3740. C     DQDOTI OR DQDOTA IN THE DIAGNOSTIC OUTPUT.
  3741. C
  3742.           MODE = 1
  3743.           CALL DTEST(1,DQDOTI(N,DB,QC,DX2,INCX,DY2,INCY),
  3744.      *               DT2(KN,KI,1),DT2(KN,KI,1),DQFAC,KPRINT)
  3745.           MODE = 2
  3746.           CALL DTEST(1,DQDOTA(N,-DB,QC,DX2,INCX,DY2,INCY),
  3747.      *               DT2(KN,KI,2),DT2(KN,KI,2),DQFAC,KPRINT)
  3748.           GO TO 500
  3749. C                                                              7. CDOTC
  3750.    70     CALL STEST(2, CDOTC(N,CX,INCX,CY,INCY),
  3751.      *               CT6(KN,KI),CSIZE1(KN),SFAC,KPRINT)
  3752.           GO TO 500
  3753. C                                                              8. CDOTU
  3754.    80     CALL STEST(2,CDOTU(N,CX,INCX,CY,INCY),
  3755.      *               CT7(KN,KI),CSIZE1(KN),SFAC,KPRINT)
  3756.           GO TO 500
  3757. C                                                              9. SAXPY
  3758.    90     CALL SAXPY(N,SA,SX,INCX,SY,INCY)
  3759.                DO 95 J = 1, LENY
  3760.    95          STY(J) = DT8(J,KN,KI)
  3761.           CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC,KPRINT)
  3762.           GO TO 500
  3763. C                                                              10. DAXPY
  3764.   100      CALL DAXPY(N,DA,DX,INCX,DY,INCY)
  3765.           CALL DTEST(LENY,DY,DT8(1,KN,KI),DSIZE2(1,KSIZE),DFAC,KPRINT)
  3766.           GO TO 500
  3767. C                                                              11. CAXPY
  3768.   110     CALL CAXPY(N,CA,CX,INCX,CY,INCY)
  3769.           CALL STEST(2*LENY,CY,CT8(1,KN,KI),CSIZE2(1,KSIZE),SFAC,KPRINT)
  3770.           GO TO 500
  3771. C                                                              14. SROT
  3772.   140     CONTINUE
  3773.                DO 144 I = 1, 7
  3774.                SX(I) = DX1(I)
  3775.                SY(I) = DY1(I)
  3776.                STX(I) = DT9X(I,KN,KI)
  3777.                STY(I) = DT9Y(I,KN,KI)
  3778.   144         CONTINUE
  3779.           CALL SROT   (N,SX,INCX,SY,INCY,SC,SS)
  3780.           CALL STEST(LENX,SX,STX,SSIZE2(1,KSIZE),SFAC,KPRINT)
  3781.           CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC,KPRINT)
  3782.           GO TO 500
  3783. C                                                             15. DROT
  3784.   150     CONTINUE
  3785.                DO 154 I = 1, 7
  3786.                DX(I) = DX1(I)
  3787.                DY(I) = DY1(I)
  3788.   154          CONTINUE
  3789.           CALL DROT   (N,DX,INCX,DY,INCY,DC,DS)
  3790.           CALL DTEST(LENX,DX,DT9X(1,KN,KI),DSIZE2(1,KSIZE),DFAC,KPRINT)
  3791.           CALL DTEST(LENY,DY,DT9Y(1,KN,KI),DSIZE2(1,KSIZE),DFAC,KPRINT)
  3792.           GO TO 500
  3793. C                                                             18. SROTM
  3794.   180     KNI = KN + 4*(KI-1)
  3795.           DO 189 KPAR=1,4
  3796.           DO 182 I = 1, 7
  3797.           SX(I) = DX1(I)
  3798.           SY(I) = DY1(I)
  3799.           STX(I) = DT19X(I,KPAR,KNI)
  3800.   182     STY(I) = DT19Y(I,KPAR,KNI)
  3801. C
  3802.           DO 186 I = 1, 5
  3803.   186     SPARAM(I) = DPAR(I,KPAR)
  3804. C                          SET MODE TO IDENTIFY DIAGNOSTIC OUTPUT,
  3805. C                          IF ANY
  3806.           MODE = INT(SPARAM(1))
  3807. C
  3808.           DO 187 I = 1, LENX
  3809.   187     SSIZE(I) = STX(I)
  3810. C                         THE TRUE RESULTS DT19X(1,2,7) AND
  3811. C                         DT19X(5,3,8) ARE ZERO DUE TO CANCELLATION.
  3812. C                         DT19X(1,2,7) = 2.*.6 - 4.*.3 = 0
  3813. C                         DT19X(5,3,8) = .9 - 3.*.3 = 0
  3814. C                         FOR THESE CASES RESPECTIVELY SET SIZE( )
  3815. C                         EQUAL TO 2.4 AND 1.8
  3816.           IF ((KPAR .EQ. 2) .AND. (KNI .EQ. 7))
  3817.      1           SSIZE(1) = 2.4E0
  3818.           IF ((KPAR .EQ. 3) .AND. (KNI .EQ. 8))
  3819.      1           SSIZE(5) = 1.8E0
  3820. C
  3821.           CALL SROTM(N,SX,INCX,SY,INCY,SPARAM)
  3822.           CALL STEST(LENX,SX,STX,SSIZE,SFAC,KPRINT)
  3823.           CALL STEST(LENY,SY,STY,STY,SFAC,KPRINT)
  3824.   189     CONTINUE
  3825.           GO TO 500
  3826. C                                                             19. DROTM
  3827.   190     KNI = KN + 4*(KI-1)
  3828.           DO 199 KPAR=1,4
  3829.             DO 192 I = 1, 7
  3830.             DX(I) = DX1(I)
  3831.             DY(I) = DY1(I)
  3832.             DTX(I) = DT19X(I,KPAR,KNI)
  3833.   192       DTY(I) = DT19Y(I,KPAR,KNI)
  3834. C
  3835.             DO 196 I = 1, 5
  3836.   196       DPARAM(I) = DPAR(I,KPAR)
  3837. C                            SET MODE TO IDENTIFY DIAGNOSTIC OUTPUT,
  3838. C                            IF ANY
  3839.           MODE = INT(DPARAM(1))
  3840. C
  3841.             DO 197 I = 1, LENX
  3842.   197       DSIZE(I) = DTX(I)
  3843. C                             SEE REMARK ABOVE ABOUT DT11X(1,2,7)
  3844. C                             AND DT11X(5,3,8).
  3845.           IF ((KPAR .EQ. 2) .AND. (KNI .EQ. 7))
  3846.      1               DSIZE(1) = 2.4D0
  3847.           IF ((KPAR .EQ. 3) .AND. (KNI .EQ. 8))
  3848.      1               DSIZE(5) = 1.8D0
  3849. C
  3850.           CALL   DROTM(N,DX,INCX,DY,INCY,DPARAM)
  3851.           CALL DTEST(LENX,DX,DTX,DSIZE,DFAC,KPRINT)
  3852.           CALL DTEST(LENY,DY,DTY,DTY,DFAC,KPRINT)
  3853.   199     CONTINUE
  3854.           GO TO 500
  3855. C                                                             20. SCOPY
  3856.   200     DO 205 I = 1, 7
  3857.   205     STY(I) = DT10Y(I,KN,KI)
  3858.           CALL SCOPY(N,SX,INCX,SY,INCY)
  3859.           CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.,KPRINT)
  3860.           GO TO 500
  3861. C                                                             21. DCOPY
  3862.   210     CALL DCOPY(N,DX,INCX,DY,INCY)
  3863.           CALL DTEST(LENY,DY,DT10Y(1,KN,KI),DSIZE2(1,1),1.D0,KPRINT)
  3864.           GO TO 500
  3865. C                                                             22. CCOPY
  3866.   220     CALL CCOPY(N,CX,INCX,CY,INCY)
  3867.           CALL STEST(2*LENY,CY,CT10Y(1,KN,KI),SSIZE2(1,1),1.,KPRINT)
  3868.           GO TO 500
  3869. C                                                             23. SSWAP
  3870.   230     CALL SSWAP(N,SX,INCX,SY,INCY)
  3871.                DO 235 I = 1, 7
  3872.                STX(I) = DT10X(I,KN,KI)
  3873.   235          STY(I) = DT10Y(I,KN,KI)
  3874.           CALL STEST(LENX,SX,STX,SSIZE2(1,1),1.,KPRINT)
  3875.           CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.,KPRINT)
  3876.           GO TO 500
  3877. C                                                             24. DSWAP
  3878.   240     CALL DSWAP(N,DX,INCX,DY,INCY)
  3879.           CALL DTEST(LENX,DX,DT10X(1,KN,KI),DSIZE2(1,1),1.D0,KPRINT)
  3880.           CALL DTEST(LENY,DY,DT10Y(1,KN,KI),DSIZE2(1,1),1.D0,KPRINT)
  3881.           GO TO 500
  3882. C                                                             25. CSWAP
  3883.   250     CALL CSWAP(N,CX,INCX,CY,INCY)
  3884.           CALL STEST(2*LENX,CX,CT10X(1,KN,KI),SSIZE2(1,1),1.,KPRINT)
  3885.           CALL STEST(2*LENY,CY,CT10Y(1,KN,KI),SSIZE2(1,1),1.,KPRINT)
  3886. C
  3887. C
  3888. C
  3889.   500     CONTINUE
  3890.   520   CONTINUE
  3891.       RETURN
  3892. C                 THE FOLLOWING STOP SHOULD NEVER BE REACHED.
  3893.   999 STOP
  3894.       END
  3895. *DECK CHIQC
  3896.       SUBROUTINE CHIQC (LUN, KPRINT, NERR)
  3897. C***BEGIN PROLOGUE  CHIQC
  3898. C***PURPOSE  Quick check for CHIFA, CHICO, CHISL and CHIDI.
  3899. C***LIBRARY   SLATEC
  3900. C***KEYWORDS  QUICK CHECK
  3901. C***AUTHOR  Voorhees, E. A., (LANL)
  3902. C***DESCRIPTION
  3903. C
  3904. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  3905. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  3906. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  3907. C    (THE SOLUTION VECTOR),  AINV  (INVERSE OF MATRIX  A ),  DC
  3908. C    (DETERMINANT OF  A ), AND  RCND  ( RCOND ) ARE ENTERED
  3909. C    WITH DATA STATEMENTS.
  3910. C
  3911. C    THE COMPUTED TEST RESULTS FOR  X, RCOND, THE DETERMINANT, AND
  3912. C    THE INVERSE ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  3913. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  3914. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  3915. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  3916. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  3917. C
  3918. C    NO INPUT ARGUMENTS ARE REQUIRED.
  3919. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  3920. C    ALL FAILURES DETECTED BY CHIQC.
  3921. C
  3922. C***ROUTINES CALLED  CHICO, CHIDI, CHIFA, CHISL
  3923. C***REVISION HISTORY  (YYMMDD)
  3924. C   801022  DATE WRITTEN
  3925. C   890618  REVISION DATE from Version 3.2
  3926. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  3927. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  3928. C           FORMATs.  (RWC)
  3929. C***END PROLOGUE  CHIQC
  3930.       COMPLEX A(4,4),AT(5,4),B(4),BT(4),C(4),AINV(4,4),
  3931.      1 Z(4),XA,XB
  3932.       REAL R,RCOND,RCND,DELX,DET(2),DC(2)
  3933.       CHARACTER KPROG*19,KFAIL*47
  3934.       INTEGER LDA,N,IPVT(4),INFO,I,J,INDX,NERR
  3935.       INTEGER INERT(3),IRT(3)
  3936.       DATA A/(2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  3937.      1 (0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  3938.      2 (0.E0,0.E0),(0.E0,0.E0),(3.E0,0.E0),(0.E0,1.E0),
  3939.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  3940.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  3941.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  3942.       DATA AINV/(.66667E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,
  3943.      1 0.E0),
  3944.      2 (0.E0,.33333E0),(.66667E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  3945.      3 (0.E0,0.E0),(0.E0,0.E0),(.36364E0,0.E0),(0.E0,1.E0),
  3946.      4 (0.E0,0.E0),(0.E0,0.E0),(0.E0,.09091E0),(.27273E0,0.E0)/
  3947.       DATA DC/3.3E0,1.0E0/
  3948.       DATA KPROG/'HIFA HICO HISL HIDI'/
  3949.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE INERTIA'/
  3950.       DATA RCND/.24099E0/
  3951.       DATA IRT/4,0,0/
  3952. C
  3953.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  3954. C***FIRST EXECUTABLE STATEMENT  CHIQC
  3955.       LDA = 5
  3956.       N = 4
  3957.       NERR = 0
  3958. C
  3959. C     FORM AT FOR CHIFA AND BT FOR CHISL, TEST CHIFA
  3960. C
  3961.       DO 20 J=1,N
  3962.          BT(J) = B(J)
  3963.          DO 10 I=1,N
  3964.             AT(I,J) = A(I,J)
  3965.    10    CONTINUE
  3966.    20 CONTINUE
  3967. C
  3968.       CALL CHIFA(AT,LDA,N,IPVT,INFO)
  3969.       IF (INFO .NE. 0) THEN
  3970.          WRITE (LUN,201) KPROG(1:4),KFAIL(1:4)
  3971.          NERR = NERR + 1
  3972.       ENDIF
  3973. C
  3974. C     TEST CHISL
  3975. C
  3976.       CALL CHISL(AT,LDA,N,IPVT,BT)
  3977.       INDX = 0
  3978.       DO 40 I=1,N
  3979.          IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  3980.    40 CONTINUE
  3981. C
  3982.       IF (INDX .NE. 0) THEN
  3983.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  3984.          NERR = NERR + 1
  3985.       ENDIF
  3986. C
  3987. C     FORM AT FOR CHICO, TEST CHICO
  3988. C
  3989.       DO 70 J=1,N
  3990.          DO 60 I=1,N
  3991.             AT(I,J) = A(I,J)
  3992.    60    CONTINUE
  3993.    70 CONTINUE
  3994. C
  3995.       CALL CHICO(AT,LDA,N,IPVT,RCOND,Z)
  3996.       R = ABS(RCND-RCOND)
  3997.       IF (R .GE. .0001) THEN
  3998.          WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  3999.          NERR = NERR + 1
  4000.       ENDIF
  4001. C
  4002. C     TEST CHIDI FOR JOB=111
  4003. C
  4004.       CALL CHIDI(AT,LDA,N,IPVT,DET,INERT,Z,111)
  4005.       INDX = 0
  4006.       DO 110 I=1,2
  4007.          IF (ABS(DC(I)-DET(I)) .GT. .0001) INDX=INDX+1
  4008.   110 CONTINUE
  4009. C
  4010.       IF (INDX .NE. 0) THEN
  4011.          WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  4012.          NERR = NERR + 1
  4013.       ENDIF
  4014. C
  4015.       INDX = 0
  4016.       DO 140 I=1,N
  4017.          DO 130 J=1,N
  4018.             IF (DELX(AINV(I,J),AT(I,J)) .GT. .0001) INDX=INDX+1
  4019.   130    CONTINUE
  4020.   140 CONTINUE
  4021. C
  4022.       IF (INDX .NE. 0) THEN
  4023.          WRITE (LUN,201) KPROG(16:19),KFAIL(33:39)
  4024.          NERR = NERR + 1
  4025.       ENDIF
  4026. C
  4027.       INDX = 0
  4028.       DO 160 I=1,3
  4029.          IF((INERT(I)-IRT(I)) .NE. 0) INDX=INDX+1
  4030.   160 CONTINUE
  4031. C
  4032.       IF (INDX .NE. 0) THEN
  4033.          WRITE (LUN,201) KPROG(16:19),KFAIL(41:47)
  4034.          NERR = NERR + 1
  4035.       ENDIF
  4036. C
  4037.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  4038.       RETURN
  4039. C
  4040.   200 FORMAT(/' * CHIQC - TEST FOR CHIFA, CHICO, CHISL AND CHIDI FOUND '
  4041.      1   , I1, ' ERRORS.'/)
  4042.   201 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  4043.       END
  4044. *DECK CHPQC
  4045.       SUBROUTINE CHPQC (LUN, KPRINT, NERR)
  4046. C***BEGIN PROLOGUE  CHPQC
  4047. C***PURPOSE  Quick check for CHPFA, CHPCO, CHPSL and CHPDI.
  4048. C***LIBRARY   SLATEC
  4049. C***KEYWORDS  QUICK CHECK
  4050. C***AUTHOR  Voorhees, E. A., (LANL)
  4051. C***DESCRIPTION
  4052. C
  4053. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  4054. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  4055. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  4056. C    (THE SOLUTION VECTOR),  AINV  (INVERSE OF MATRIX  A ),  DC
  4057. C    (DETERMINANT OF  A ), AND  RCND  ( RCOND ) ARE ENTERED
  4058. C    WITH DATA STATEMENTS.
  4059. C
  4060. C    THE COMPUTED TEST RESULTS FOR  X, RCOND, THE DETERMINANT, AND
  4061. C    THE INVERSE ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  4062. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  4063. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  4064. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  4065. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  4066. C
  4067. C    NO INPUT ARGUMENTS ARE REQUIRED.
  4068. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  4069. C    ALL FAILURES DETECTED BY CHPQC.
  4070. C
  4071. C***ROUTINES CALLED  CHPCO, CHPDI, CHPFA, CHPSL
  4072. C***REVISION HISTORY  (YYMMDD)
  4073. C   801022  DATE WRITTEN
  4074. C   890618  REVISION DATE from Version 3.2
  4075. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4076. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  4077. C           FORMATs.  (RWC)
  4078. C***END PROLOGUE  CHPQC
  4079.       COMPLEX AP(10),AT(10),B(4),BT(4),C(4),AINV(10),
  4080.      1 Z(4),XA,XB
  4081.       REAL R,RCOND,RCND,DELX,DET(2),DC(2)
  4082.       CHARACTER KPROG*19, KFAIL*47
  4083.       INTEGER N,IPVT(4),INFO,I,J,INDX,NERR
  4084.       INTEGER INERT(3),IRT(3)
  4085.       DATA AP/(2.E0,0.E0),(0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),
  4086.      1 (0.E0,0.E0),(3.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  4087.      2 (0.E0,-1.E0),(4.E0,0.E0)/
  4088.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  4089.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  4090.       DATA AINV/(.66667E0,0.E0),(0.E0,.33333E0),(.66667E0,0.E0),
  4091.      1 (0.E0,0.E0),
  4092.      2 (0.E0,0.E0),(.36364E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  4093.      3 (0.E0,.09091E0),(.27273E0,0.E0)/
  4094.       DATA DC/3.3E0,1.0E0/
  4095.       DATA KPROG/'HPFA HPCO HPSL HPDI'/
  4096.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE INERTIA'/
  4097.       DATA RCND/.24099E0/
  4098.       DATA IRT/4,0,0/
  4099. C
  4100.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  4101. C***FIRST EXECUTABLE STATEMENT  CHPQC
  4102.       N = 4
  4103.       NERR = 0
  4104. C
  4105. C     FORM AT FOR CHPFA AND BT FOR CHPSL, TEST CHPFA
  4106. C
  4107.       DO 10 J=1,N
  4108.          BT(J) = B(J)
  4109.    10 CONTINUE
  4110. C
  4111.       DO 20 I=1,10
  4112.          AT(I) = AP(I)
  4113.    20 CONTINUE
  4114. C
  4115.       CALL CHPFA(AT,N,IPVT,INFO)
  4116.       IF (INFO .NE. 0) THEN
  4117.          WRITE (LUN,201) KPROG(1:4),KFAIL(1:4)
  4118.          NERR = NERR + 1
  4119.       ENDIF
  4120. C
  4121. C     TEST CHPSL
  4122. C
  4123.       CALL CHPSL(AT,N,IPVT,BT)
  4124.       INDX = 0
  4125.       DO 40 I=1,N
  4126.          IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  4127.    40 CONTINUE
  4128. C
  4129.       IF (INDX .NE. 0) THEN
  4130.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  4131.          NERR = NERR + 1
  4132.       ENDIF
  4133. C
  4134. C     FORM AT FOR CHPCO, TEST CHPCO
  4135. C
  4136.       DO 70 I=1,10
  4137.          AT(I) = AP(I)
  4138.    70 CONTINUE
  4139. C
  4140.       CALL CHPCO(AT,N,IPVT,RCOND,Z)
  4141.       R = ABS(RCND-RCOND)
  4142.       IF (R .GE. .0001) THEN
  4143.          WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  4144.          NERR = NERR + 1
  4145.       ENDIF
  4146. C
  4147. C     TEST CHPDI FOR JOB=111
  4148. C
  4149.       CALL CHPDI(AT,N,IPVT,DET,INERT,Z,111)
  4150.       INDX = 0
  4151.       DO 110 I=1,2
  4152.          IF (ABS(DC(I)-DET(I)) .GT. .0001) INDX=INDX+1
  4153.   110 CONTINUE
  4154. C
  4155.       IF (INDX .NE. 0) THEN
  4156.          WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  4157.          NERR = NERR + 1
  4158.       ENDIF
  4159. C
  4160.       INDX = 0
  4161.       DO 140 I=1,10
  4162.          IF (DELX(AINV(I),AT(I)) .GT. .0001) INDX=INDX+1
  4163.   140 CONTINUE
  4164. C
  4165.       IF (INDX .NE. 0) THEN
  4166.          WRITE (LUN,201) KPROG(16:19),KFAIL(33:39)
  4167.          NERR = NERR + 1
  4168.       ENDIF
  4169. C
  4170.       INDX = 0
  4171.       DO 160 I=1,3
  4172.          IF ((INERT(I)-IRT(I)) .NE. 0) INDX=INDX+1
  4173.   160 CONTINUE
  4174. C
  4175.       IF (INDX .NE. 0) THEN
  4176.          WRITE (LUN,201) KPROG(16:19),KFAIL(41:47)
  4177.          NERR = NERR + 1
  4178.       ENDIF
  4179. C
  4180.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  4181.       RETURN
  4182. C
  4183.   200 FORMAT(/' * CHPQC - TEST FOR CHPFA, CHPCO, CHPSL AND CHPDI FOUND '
  4184.      1   , I1, ' ERRORS.'/)
  4185.   201 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  4186.       END
  4187. *DECK CMPARE
  4188.       SUBROUTINE CMPARE (ICNT, ITEST)
  4189. C***BEGIN PROLOGUE  CMPARE
  4190. C***PURPOSE  Compare values in COMMON block CHECK for quick check
  4191. C            routine PFITQX.
  4192. C***LIBRARY   SLATEC
  4193. C***TYPE      SINGLE PRECISION (CMPARE-S, DCMPAR-D)
  4194. C***AUTHOR  (UNKNOWN)
  4195. C***ROUTINES CALLED  (NONE)
  4196. C***COMMON BLOCKS    CHECK
  4197. C***REVISION HISTORY  (YYMMDD)
  4198. C   ??????  DATE WRITTEN
  4199. C   890921  Realigned order of variables in the COMMON block.
  4200. C           (WRB)
  4201. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4202. C   920214  Minor improvements to code for readability.  (WRB)
  4203. C***END PROLOGUE  CMPARE
  4204. C     .. Scalar Arguments ..
  4205.       INTEGER ICNT
  4206. C     .. Array Arguments ..
  4207.       INTEGER ITEST(9)
  4208. C     .. Scalars in Common ..
  4209.       REAL EPS, RP, SVEPS, TOL
  4210.       INTEGER IERP, IERR, NORD, NORDP
  4211. C     .. Arrays in Common ..
  4212.       REAL R(11)
  4213. C     .. Local Scalars ..
  4214.       REAL RPP, SS
  4215.       INTEGER IERPP, NRDP
  4216. C     .. Local Arrays ..
  4217.       INTEGER ITEMP(4)
  4218. C     .. Intrinsic Functions ..
  4219.       INTRINSIC ABS
  4220. C     .. Common blocks ..
  4221.       COMMON /CHECK/ EPS, R, RP, SVEPS, TOL, NORDP, NORD, IERP, IERR
  4222. C***FIRST EXECUTABLE STATEMENT  CMPARE
  4223.       ICNT = ICNT + 1
  4224.       ITEMP(1) = 0
  4225.       ITEMP(2) = 0
  4226.       ITEMP(3) = 0
  4227.       ITEMP(4) = 0
  4228.       SS = SVEPS - EPS
  4229.       NRDP = NORDP - NORD
  4230.       RPP = RP - R(11)
  4231.       IERPP = IERP - IERR
  4232.       IF (ABS(SS).LE.TOL .OR. ICNT.LE.2 .OR. ICNT.GE.6) ITEMP(1) = 1
  4233.       IF (ABS(NRDP) .EQ. 0) ITEMP(2) = 1
  4234.       IF (ABS(RPP) .LE. TOL) ITEMP(3) = 1
  4235.       IF (ABS(IERPP) .EQ. 0) ITEMP(4) = 1
  4236. C
  4237. C     Check to see if all four tests were good.
  4238. C     If so, set the test number equal to 1.
  4239. C
  4240.       ITEST(ICNT) = ITEMP(1)*ITEMP(2)*ITEMP(3)*ITEMP(4)
  4241.       RETURN
  4242.       END
  4243. *DECK COMP
  4244.       LOGICAL FUNCTION COMP (IERACT, IEREXP, LOUT, KPRINT)
  4245. C***BEGIN PROLOGUE  COMP
  4246. C***SUBSIDIARY
  4247. C***PURPOSE  Compare actual and expected values of error flag.
  4248. C***LIBRARY   SLATEC
  4249. C***KEYWORDS  QUICK CHECK SERVICE ROUTINE
  4250. C***AUTHOR  Fritsch, F. N., (LLNL)
  4251. C***DESCRIPTION
  4252. C
  4253. C     COMPARE ACTUAL VALUE OF IERR WITH EXPECTED VALUE.
  4254. C        PRINT ERROR MESSAGE IF THEY DON'T AGREE.
  4255. C
  4256. C***ROUTINES CALLED  (NONE)
  4257. C***REVISION HISTORY  (YYMMDD)
  4258. C   820601  DATE WRITTEN
  4259. C   890618  REVISION DATE from Version 3.2
  4260. C   890706  Cosmetic changes to prologue.  (WRB)
  4261. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4262. C   900315  Revised prologue.  (FNF)
  4263. C   900316  Minor modification to format 5010.  (FNF)
  4264. C   910708  Minor modifications in use of KPRINT.  (WRB)
  4265. C***END PROLOGUE  COMP
  4266.       INTEGER  IERACT, IEREXP, LOUT, KPRINT
  4267. C***FIRST EXECUTABLE STATEMENT  COMP
  4268.       IF (IERACT .EQ. IEREXP)  THEN
  4269.          COMP = .TRUE.
  4270.          IF (KPRINT .GE. 3)  WRITE (LOUT, 5010)
  4271.  5010    FORMAT ('     OK.')
  4272.       ELSE
  4273.          COMP = .FALSE.
  4274.          IF (KPRINT .GE. 3)  WRITE (LOUT, 5020)  IERACT
  4275.  5020    FORMAT (' *** COMPARE FAILED -- IERR =',I5)
  4276.       ENDIF
  4277. C
  4278.       RETURN
  4279. C------------- LAST LINE OF COMP FOLLOWS -----------------------------
  4280.       END
  4281. *DECK CPBQC
  4282.       SUBROUTINE CPBQC (LUN, KPRINT, NERR)
  4283. C***BEGIN PROLOGUE  CPBQC
  4284. C***PURPOSE  Quick check for CPBFA, CPBCO, CPBSL and CPBDI.
  4285. C***LIBRARY   SLATEC
  4286. C***KEYWORDS  QUICK CHECK
  4287. C***AUTHOR  Voorhees, E. A., (LANL)
  4288. C***DESCRIPTION
  4289. C
  4290. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  4291. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  4292. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  4293. C    (THE SOLUTION VECTOR),  DC  (DETERMINANT OF  A ), AND
  4294. C    RCND  (RCOND) ARE ENTERED WITH DATA STATEMENTS.
  4295. C
  4296. C    THE COMPUTED TEST RESULTS FOR  X,  RCOND  AND THE DETER-
  4297. C    MINANT ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  4298. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  4299. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  4300. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  4301. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  4302. C
  4303. C    NO INPUT ARGUMENTS ARE REQUIRED.
  4304. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  4305. C    ALL FAILURES DETECTED BY CPBQC.
  4306. C
  4307. C***ROUTINES CALLED  CPBCO, CPBDI, CPBFA, CPBSL
  4308. C***REVISION HISTORY  (YYMMDD)
  4309. C   801020  DATE WRITTEN
  4310. C   890618  REVISION DATE from Version 3.2
  4311. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4312. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  4313. C           FORMATs.  (RWC)
  4314. C***END PROLOGUE  CPBQC
  4315.       COMPLEX ABD(2,4),AT(3,4),B(4),BT(4),C(4),
  4316.      1 Z(4),XA,XB
  4317.       REAL R,RCOND,RCND,DELX,DET(2),DC(2)
  4318.       CHARACTER KPROG*19, KFAIL*39
  4319.       INTEGER LDA,N,INFO,I,J,INDX,NERR,M
  4320.       DATA ABD/(0.E0,0.E0),(2.E0,0.E0),(0.E0,-1.E0),(2.E0,0.E0),
  4321.      1 (0.E0,0.E0),(3.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  4322.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  4323.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  4324.       DATA DC/3.3E0,1.0E0/
  4325.       DATA KPROG/'PBFA PBCO PBSL PBDI'/
  4326.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE'/
  4327.       DATA RCND/.24099E0/
  4328. C
  4329.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  4330. C***FIRST EXECUTABLE STATEMENT  CPBQC
  4331.       LDA = 3
  4332.       N = 4
  4333.       M = 1
  4334.       NERR = 0
  4335. C
  4336. C     FORM AT FOR CPBFA AND BT FOR CPBSL, TEST CPBFA
  4337. C
  4338.       DO 20 J=1,N
  4339.          BT(J) = B(J)
  4340.          DO 10 I=1,2
  4341.             AT(I,J) = ABD(I,J)
  4342.    10    CONTINUE
  4343.    20 CONTINUE
  4344. C
  4345.       CALL CPBFA(AT,LDA,N,M,INFO)
  4346.       IF (INFO .NE. 0) THEN
  4347.          WRITE (LUN,201) KPROG(1:4),KFAIL(1:4)
  4348.          NERR = NERR + 1
  4349.       ENDIF
  4350. C
  4351. C     TEST CPBSL
  4352. C
  4353.       CALL CPBSL(AT,LDA,N,M,BT)
  4354.       INDX = 0
  4355.       DO 40 I=1,N
  4356.          IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  4357.    40 CONTINUE
  4358. C
  4359.       IF (INDX .NE. 0) THEN
  4360.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  4361.          NERR = NERR + 1
  4362.       ENDIF
  4363. C
  4364. C     FORM AT FOR CPBCO, TEST CPBCO
  4365. C
  4366.        DO 70 J=1,N
  4367.           DO 60 I=1,2
  4368.              AT(I,J) = ABD(I,J)
  4369.    60     CONTINUE
  4370.    70 CONTINUE
  4371. C
  4372.       CALL CPBCO(AT,LDA,N,M,RCOND,Z,INFO)
  4373.       R = ABS(RCND-RCOND)
  4374.       IF (R .GE. .0001) THEN
  4375.          WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  4376.          NERR = NERR + 1
  4377.       ENDIF
  4378. C
  4379.       IF (INFO .NE. 0) THEN
  4380.          WRITE (LUN,201) KPROG(6:9),KFAIL(1:4)
  4381.          NERR = NERR + 1
  4382.       ENDIF
  4383. C
  4384. C     TEST CPBDI
  4385. C
  4386.       CALL CPBDI(AT,LDA,N,M,DET)
  4387.       INDX = 0
  4388.       DO 110 I=1,2
  4389.          IF (ABS(DC(I)-DET(I)) .GT. .0001) INDX=INDX+1
  4390.   110 CONTINUE
  4391. C
  4392.       IF (INDX .NE. 0) THEN
  4393.          WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  4394.          NERR = NERR + 1
  4395.       ENDIF
  4396. C
  4397.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  4398.       RETURN
  4399. C
  4400.   200 FORMAT(/' * CPBQC - TEST FOR CPBFA, CPBCO, CPBSL AND CPBDI FOUND '
  4401.      1   , I1, ' ERRORS.'/)
  4402.   201 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  4403.       END
  4404. *DECK CPOQC
  4405.       SUBROUTINE CPOQC (LUN, KPRINT, NERR)
  4406. C***BEGIN PROLOGUE  CPOQC
  4407. C***PURPOSE  Quick check for CPOFA, CPOCO, CPOSL and CPODI.
  4408. C***LIBRARY   SLATEC
  4409. C***KEYWORDS  QUICK CHECK
  4410. C***AUTHOR  Voorhees, E. A., (LANL)
  4411. C***DESCRIPTION
  4412. C
  4413. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  4414. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  4415. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  4416. C    (THE SOLUTION VECTOR),  AINV  (INVERSE OF MATRIX  A ),  DC
  4417. C    (DETERMINANT OF  A ), AND  RCND  ( RCOND ) ARE ENTERED
  4418. C    WITH DATA STATEMENTS.
  4419. C
  4420. C    THE COMPUTED TEST RESULTS FOR  X, RCOND, THE DETERMINANT, AND
  4421. C    THE INVERSE ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  4422. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  4423. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  4424. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  4425. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  4426. C
  4427. C    NO INPUT ARGUMENTS ARE REQUIRED.
  4428. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  4429. C    ALL FAILURES DETECTED BY CPOQC.
  4430. C
  4431. C***ROUTINES CALLED  CPOCO, CPODI, CPOFA, CPOSL
  4432. C***REVISION HISTORY  (YYMMDD)
  4433. C   801016  DATE WRITTEN
  4434. C   890618  REVISION DATE from Version 3.2
  4435. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4436. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  4437. C           FORMATs.  (RWC)
  4438. C***END PROLOGUE  CPOQC
  4439.       COMPLEX A(4,4),AT(5,4),B(4),BT(4),C(4),AINV(4,4),
  4440.      1 Z(4),XA,XB
  4441.       REAL R,RCOND,RCND,DELX,DET(2),DC(2)
  4442.       CHARACTER KPROG*19,KFAIL*39
  4443.       INTEGER LDA,N,INFO,I,J,INDX,NERR
  4444.       DATA A/(2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  4445.      1 (0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  4446.      2 (0.E0,0.E0),(0.E0,0.E0),(3.E0,0.E0),(0.E0,1.E0),
  4447.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  4448.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  4449.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  4450.       DATA AINV/(.66667E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,
  4451.      1 0.E0),
  4452.      2 (0.E0,.33333E0),(.66667E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  4453.      3 (0.E0,0.E0),(0.E0,0.E0),(.36364E0,0.E0),(0.E0,1.E0),
  4454.      4 (0.E0,0.E0),(0.E0,0.E0),(0.E0,.09091E0),(.27273E0,0.E0)/
  4455.       DATA DC/3.3E0,1.0E0/
  4456.       DATA KPROG/'POFA POCO POSL PODI'/
  4457.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE'/
  4458.       DATA RCND/.24099E0/
  4459. C
  4460.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  4461. C***FIRST EXECUTABLE STATEMENT  CPOQC
  4462.       LDA = 5
  4463.       N = 4
  4464.       NERR = 0
  4465. C
  4466. C     FORM AT FOR CPOFA AND BT FOR CPOSL, TEST CPOFA
  4467. C
  4468.       DO 20 J=1,N
  4469.          BT(J) = B(J)
  4470.          DO 10 I=1,N
  4471.             AT(I,J) = A(I,J)
  4472.    10    CONTINUE
  4473.    20 CONTINUE
  4474. C
  4475.       CALL CPOFA(AT,LDA,N,INFO)
  4476.       IF (INFO .NE. 0) THEN
  4477.          WRITE (LUN,201) KPROG(1:4),KFAIL(1:4)
  4478.          NERR = NERR + 1
  4479.       ENDIF
  4480. C
  4481. C     TEST CPOSL
  4482. C
  4483.       CALL CPOSL(AT,LDA,N,BT)
  4484.       INDX = 0
  4485.       DO 40 I=1,N
  4486.          IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  4487.    40 CONTINUE
  4488. C
  4489.       IF (INDX .NE. 0) THEN
  4490.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  4491.          NERR = NERR + 1
  4492.       ENDIF
  4493. C
  4494. C     FORM AT FOR CPOCO, TEST CPOCO
  4495. C
  4496.       DO 70 J=1,N
  4497.          DO 60 I=1,N
  4498.             AT(I,J) = A(I,J)
  4499.    60    CONTINUE
  4500.    70 CONTINUE
  4501. C
  4502.       CALL CPOCO(AT,LDA,N,RCOND,Z,INFO)
  4503.       R = ABS(RCND-RCOND)
  4504.       IF (R .GE. .0001) THEN
  4505.          WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  4506.          NERR = NERR + 1
  4507.       ENDIF
  4508. C
  4509.       IF (INFO .NE. 0) THEN
  4510.          WRITE (LUN,201) KPROG(6:9),KFAIL(1:4)
  4511.          NERR = NERR + 1
  4512.       ENDIF
  4513. C
  4514. C     TEST CPODI FOR JOB=11
  4515. C
  4516.       CALL CPODI(AT,LDA,N,DET,11)
  4517.       INDX = 0
  4518.       DO 110 I=1,2
  4519.          IF (ABS(DC(I)-DET(I)) .GT. .0001) INDX=INDX+1
  4520.   110 CONTINUE
  4521. C
  4522.       IF (INDX .NE. 0) THEN
  4523.          WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  4524.          NERR = NERR + 1
  4525.       ENDIF
  4526. C
  4527.       INDX = 0
  4528.       DO 140 I=1,N
  4529.          DO 130 J=1,N
  4530.             IF (DELX(AINV(I,J),AT(I,J)) .GT. .0001) INDX=INDX+1
  4531.   130    CONTINUE
  4532.   140 CONTINUE
  4533. C
  4534.       IF (INDX .NE. 0) THEN
  4535.          WRITE (LUN,201) KPROG(16:19),KFAIL(33:39)
  4536.          NERR = NERR + 1
  4537.       ENDIF
  4538. C
  4539. C
  4540.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  4541.       RETURN
  4542. C
  4543.   200 FORMAT(/' * CPOQC - TEST FOR CPOFA, CPOCO, CPOSL AND CPODI FOUND '
  4544.      1   , I1, ' ERRORS.'/)
  4545.   201 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  4546.       END
  4547. *DECK CPPQC
  4548.       SUBROUTINE CPPQC (LUN, KPRINT, NERR)
  4549. C***BEGIN PROLOGUE  CPPQC
  4550. C***PURPOSE  Quick check for CPPFA, CPPCO, CPPSL and CPPDI.
  4551. C***LIBRARY   SLATEC
  4552. C***KEYWORDS  QUICK CHECK
  4553. C***AUTHOR  Voorhees, E. A., (LANL)
  4554. C***DESCRIPTION
  4555. C
  4556. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  4557. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  4558. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  4559. C    (THE SOLUTION VECTOR),  AINV  (INVERSE OF MATRIX  A ),  DC
  4560. C    (DETERMINANT OF  A ), AND  RCND  ( RCOND ) ARE ENTERED
  4561. C    WITH DATA STATEMENTS.
  4562. C
  4563. C    THE COMPUTED TEST RESULTS FOR  X, RCOND, THE DETERMINANT, AND
  4564. C    THE INVERSE ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  4565. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  4566. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  4567. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  4568. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  4569. C
  4570. C    NO INPUT ARGUMENTS ARE REQUIRED.
  4571. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  4572. C    ALL FAILURES DETECTED BY CPPQC.
  4573. C
  4574. C***ROUTINES CALLED  CPPCO, CPPDI, CPPFA, CPPSL
  4575. C***REVISION HISTORY  (YYMMDD)
  4576. C   801016  DATE WRITTEN
  4577. C   890618  REVISION DATE from Version 3.2
  4578. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4579. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  4580. C           FORMATs.  (RWC)
  4581. C***END PROLOGUE  CPPQC
  4582.       COMPLEX AP(10),AT(10),B(4),BT(4),C(4),AINV(10),
  4583.      1 Z(4),XA,XB
  4584.       REAL R,RCOND,RCND,DELX,DET(2),DC(2)
  4585.       CHARACTER KPROG*19, KFAIL*39
  4586.       INTEGER N,INFO,I,J,INDX,NERR
  4587.       DATA AP/(2.E0,0.E0),(0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),
  4588.      1 (0.E0,0.E0),(3.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  4589.      2 (0.E0,-1.E0),(4.E0,0.E0)/
  4590.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  4591.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  4592.       DATA AINV/(.66667E0,0.E0),(0.E0,.33333E0),(.66667E0,0.E0),(0.E0,0.
  4593.      1E0),
  4594.      2 (0.E0,0.E0),(.36364E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  4595.      3 (0.E0,.09091E0),(.27273E0,0.E0)/
  4596.       DATA DC/3.3E0,1.0E0/
  4597.       DATA KPROG/'PPFA PPCO PPSL PPDI'/
  4598.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE'/
  4599.       DATA RCND/.24099E0/
  4600. C
  4601.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  4602. C***FIRST EXECUTABLE STATEMENT  CPPQC
  4603.       N = 4
  4604.       NERR = 0
  4605. C
  4606. C     FORM AT FOR CPPFA AND BT FOR CPPSL, TEST CPPFA
  4607. C
  4608.       DO 10 J=1,N
  4609.          BT(J) = B(J)
  4610.    10 CONTINUE
  4611. C
  4612.       DO 20 I=1,10
  4613.          AT(I) = AP(I)
  4614.    20 CONTINUE
  4615. C
  4616.       CALL CPPFA(AT,N,INFO)
  4617.       IF (INFO .NE. 0) THEN
  4618.          WRITE (LUN,201) KPROG(1:4),KFAIL(1:4)
  4619.          NERR = NERR + 1
  4620.       ENDIF
  4621. C
  4622. C     TEST CPPSL
  4623. C
  4624.       CALL CPPSL(AT,N,BT)
  4625.       INDX = 0
  4626.       DO 40 I=1,N
  4627.          IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  4628.    40 CONTINUE
  4629. C
  4630.       IF (INDX .NE. 0) THEN
  4631.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  4632.          NERR = NERR + 1
  4633.       ENDIF
  4634. C
  4635. C     FORM AT FOR CPPCO, TEST CPPCO
  4636. C
  4637.       DO 60 I=1,10
  4638.          AT(I) = AP(I)
  4639.    60 CONTINUE
  4640. C
  4641.       CALL CPPCO(AT,N,RCOND,Z,INFO)
  4642.       R = ABS(RCND-RCOND)
  4643.       IF (R .GE. .0001) THEN
  4644.          WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  4645.          NERR = NERR + 1
  4646.       ENDIF
  4647. C
  4648.       IF (INFO .NE. 0) THEN
  4649.          WRITE (LUN,201) KPROG(6:9),KFAIL(1:4)
  4650.          NERR = NERR + 1
  4651.       ENDIF
  4652. C
  4653. C     TEST CPPDI FOR JOB=11
  4654. C
  4655.       CALL CPPDI(AT,N,DET,11)
  4656.       INDX = 0
  4657.       DO 110 I=1,2
  4658.          IF (ABS(DC(I)-DET(I)) .GT. .0001) INDX=INDX+1
  4659.   110 CONTINUE
  4660. C
  4661.       IF (INDX .NE. 0) THEN
  4662.          WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  4663.          NERR = NERR + 1
  4664.       ENDIF
  4665. C
  4666.       INDX = 0
  4667.       DO 140 I=1,10
  4668.          IF(DELX(AINV(I),AT(I)) .GT. .0001) INDX=INDX+1
  4669.   140 CONTINUE
  4670. C
  4671.       IF (INDX .NE. 0) THEN
  4672.          WRITE (LUN,201) KPROG(16:19),KFAIL(33:39)
  4673.          NERR = NERR + 1
  4674.       ENDIF
  4675. C
  4676.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  4677.       RETURN
  4678. C
  4679.   200 FORMAT(/' * CPPQC - TEST FOR CPPFA, CPPCO, CPPSL AND CPPDI FOUND '
  4680.      1   , I1, ' ERRORS.'/)
  4681.   201 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  4682.       END
  4683. *DECK CPRIN
  4684.       SUBROUTINE CPRIN (LUN, NUM1, KPRINT, IP, EXACT, RESULT, ABSERR,
  4685.      +   NEVAL, IERV, LIERV)
  4686. C***BEGIN PROLOGUE  CPRIN
  4687. C***SUBSIDIARY
  4688. C***PURPOSE  Subsidiary to CQAG, CQAG, CQAGI, CQAGP, CQAGS, CQAWC,
  4689. C            CQAWF, CQAWO, CQAWS, and CQNG.
  4690. C***LIBRARY   SLATEC
  4691. C***AUTHOR  Piessens, Robert
  4692. C             Applied Mathematics and Programming Division
  4693. C             K. U. Leuven
  4694. C           de Doncker, Elise
  4695. C             Applied Mathematics and Programming Division
  4696. C             K. U. Leuven
  4697. C***DESCRIPTION
  4698. C
  4699. C   This program is called by the (single precision) Quadpack quick
  4700. C   check routines for printing out their messages.
  4701. C
  4702. C***ROUTINES CALLED  (NONE)
  4703. C***REVISION HISTORY  (YYMMDD)
  4704. C   810401  DATE WRITTEN
  4705. C   890831  Modified array declarations.  (WRB)
  4706. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4707. C   910627  Code completely rewritten.  (WRB)
  4708. C***END PROLOGUE  CPRIN
  4709. C     .. Scalar Arguments ..
  4710.       REAL ABSERR, EXACT, RESULT
  4711.       INTEGER IP, KPRINT, LIERV, LUN, NEVAL, NUM1
  4712. C     .. Array Arguments ..
  4713.       INTEGER IERV(*)
  4714. C     .. Local Scalars ..
  4715.       REAL ERROR
  4716.       INTEGER IER, K
  4717. C     .. Intrinsic Functions ..
  4718.       INTRINSIC ABS
  4719. C***FIRST EXECUTABLE STATEMENT  CPRIN
  4720.       IER = IERV(1)
  4721.       ERROR = ABS(EXACT-RESULT)
  4722. C
  4723.       IF (KPRINT .GE. 2) THEN
  4724.         IF (IP.EQ.1) THEN
  4725.           IF (KPRINT .GE. 3) THEN
  4726. C
  4727. C           Write PASS message.
  4728. C
  4729.             WRITE (UNIT=LUN, FMT=9000) NUM1
  4730.           ENDIF
  4731.         ELSE
  4732. C
  4733. C         Write failure messages.
  4734. C
  4735.           WRITE (UNIT=LUN, FMT=9010) NUM1
  4736.           IF (NUM1 .EQ. 0) WRITE (UNIT=LUN, FMT=9020)
  4737.           IF (NUM1 .GT. 0) WRITE (UNIT=LUN, FMT=9030) NUM1
  4738.           IF (LIERV .GT. 1) WRITE (UNIT=LUN, FMT=9040) (IERV(K),
  4739.      +                      K=2,LIERV)
  4740.           IF (NUM1 .EQ. 6) WRITE (UNIT=LUN, FMT=9050)
  4741.           WRITE (UNIT=LUN, FMT=9060)
  4742.           WRITE (UNIT=LUN, FMT=9070)
  4743.           IF (NUM1 .NE. 5) THEN
  4744.             WRITE (UNIT=LUN, FMT=9080) EXACT,RESULT,ERROR,ABSERR,IER,
  4745.      +                                 NEVAL
  4746.           ELSE
  4747.             WRITE (LUN,FMT=9090) RESULT,ABSERR,IER,NEVAL
  4748.           ENDIF
  4749.         ENDIF
  4750.       ENDIF
  4751. C
  4752.       RETURN
  4753. C
  4754.  9000 FORMAT (' TEST ON IER = ', I2, ' PASSED')
  4755.  9010 FORMAT (' TEST ON IER = ', I1, ' FAILED.')
  4756.  9020 FORMAT (' WE MUST HAVE IER = 0, ERROR.LE.ABSERR AND ABSERR.LE',
  4757.      +        '.MAX(EPSABS,EPSREL*ABS(EXACT))')
  4758.  9030 FORMAT (' WE MUST HAVE IER = ', I1)
  4759.  9040 FORMAT (' OR IER =     ', 8(I1,2X))
  4760.  9050 FORMAT (' RESULT, ABSERR, NEVAL AND EVENTUALLY LAST SHOULD BE',
  4761.      +        ' ZERO')
  4762.  9060 FORMAT (' WE HAVE   ')
  4763.  9070 FORMAT (7X, 'EXACT', 11X, 'RESULT', 6X, 'ERROR', 4X, 'ABSERR',
  4764.      +        4X, 'IER     NEVAL', /, ' ', 42X,
  4765.      +        '(EST.ERR.)(FLAG)(NO F-EVAL)')
  4766.  9080 FORMAT (' ', 2(E15.7,1X), 2(E9.2,1X), I4, 4X, I6)
  4767.  9090 FORMAT (5X, 'INFINITY', 4X, E15.7, 11X, E9.2, I5, 4X, I6)
  4768.       END
  4769. *DECK CPRPQX
  4770.       SUBROUTINE CPRPQX (LUN, KPRINT, IPASS)
  4771. C***BEGIN PROLOGUE  CPRPQX
  4772. C***PURPOSE  Quick check for CPZERO and RPZERO.
  4773. C***LIBRARY   SLATEC
  4774. C***KEYWORDS  QUICK CHECK
  4775. C***AUTHOR  Kahaner, D. K., (NBS)
  4776. C***DESCRIPTION
  4777. C
  4778. C     THIS QUICK CHECK ROUTINE IS WRITTEN FOR CPZERO AND RPZERO.
  4779. C     THE ZEROS OF POLYNOMIAL WITH COEFFICIENTS A(.) ARE STORED
  4780. C     IN ZK(.).  RELERR IS THE RELATIVE ACCURACY REQUIRED FOR
  4781. C     THEM TO PASS.
  4782. C
  4783. C***ROUTINES CALLED  CPZERO, R1MACH, RPZERO
  4784. C***REVISION HISTORY  (YYMMDD)
  4785. C   810223  DATE WRITTEN
  4786. C   890618  REVISION DATE from Version 3.2
  4787. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4788. C***END PROLOGUE  CPRPQX
  4789.       INTEGER KPRINT,IPASS,LUN
  4790.       INTEGER IDEG,IDEGP1,INFO,I,J,ID
  4791.       REAL A(6),ERR,ERRI,RELERR
  4792.       COMPLEX AC(6),Z(5),ZK(5),W(21)
  4793.       DATA IDEG / 5 /
  4794.       DATA A / 1., -3.7, 7.4, -10.8, 10.8, -6.8 /
  4795.       DATA ZK / (1.7,0.), (1.,1.), (1.,-1.),
  4796.      +          (0.,1.414213562 3730950488),
  4797.      +         (0.,-1.414213562 3730950488) /
  4798. C***FIRST EXECUTABLE STATEMENT  CPRPQX
  4799.       IPASS = 1
  4800.       IDEGP1 = IDEG+1
  4801.       RELERR = SQRT(R1MACH(4))
  4802.       DO 10 J=1,IDEGP1
  4803.          AC(J) = CMPLX(A(J),0.)
  4804.    10    CONTINUE
  4805.       INFO = 0
  4806.       CALL CPZERO(IDEG,AC,Z,W(4),INFO,W)
  4807.       IF(INFO .EQ. 0) GO TO 15
  4808.       IPASS=0
  4809.       IF(INFO .EQ. 1 .AND. KPRINT .GE .1) WRITE(LUN,630)
  4810.       IF(INFO .EQ. 2 .AND. KPRINT .GE .1) WRITE(LUN,640)
  4811. 15    DO 30 J=1,IDEG
  4812.          ERR = ABS(Z(J) - ZK(1))
  4813.          ID = 1
  4814.          DO 20 I=2,IDEG
  4815.             ERRI = ABS(Z(J) - ZK(I))
  4816.             IF (ERRI .LT. ERR) ID = I
  4817.             ERR = MIN(ERRI,ERR)
  4818.    20       CONTINUE
  4819.          IF (ABS(Z(J) - ZK(ID))/ABS(ZK(ID)) .GE. RELERR) IPASS = 0
  4820.    30    CONTINUE
  4821.       INFO = 0
  4822.       CALL RPZERO(IDEG,A,Z,W(4),INFO,W)
  4823.       IF(INFO .EQ. 0) GO TO 35
  4824.       IPASS=0
  4825.       IF(INFO .EQ. 1 .AND. KPRINT .GE .1) WRITE(LUN,650)
  4826.       IF(INFO .EQ. 2 .AND. KPRINT .GE .1) WRITE(LUN,660)
  4827. 35    DO 50 J=1,IDEG
  4828.          ERR = ABS(Z(J) - ZK(1))
  4829.          ID = 1
  4830.          DO 40 I=2,IDEG
  4831.             ERRI = ABS(Z(J) - ZK(I))
  4832.             IF (ERRI .LT. ERR) ID = I
  4833.             ERR = MIN(ERRI,ERR)
  4834.    40    CONTINUE
  4835.          IF (ABS(Z(J) - ZK(ID))/ABS(ZK(ID)) .GE. RELERR) IPASS = 0
  4836.    50 CONTINUE
  4837.       IF (KPRINT.GE.2 .AND. IPASS.NE.0) WRITE (LUN,670)
  4838.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN,680)
  4839.       RETURN
  4840. C
  4841.   630 FORMAT(' CPZERO TEST FAILS: LEADING COEFFICIENT OR DEGREE OF',
  4842.      1 ' POLYNOMIAL IS ZERO')
  4843.   640 FORMAT(' CPZERO TEST FAILS: NON-CONVERGENCE IN 125 ITERATIONS')
  4844.   650 FORMAT(' RPZERO TEST FAILS: LEADING COEFFICIENT OR DEGREE OF',
  4845.      1 ' POLYNOMIAL IS ZERO')
  4846.   660 FORMAT(' RPZERO TEST FAILS: NON-CONVERGENCE IN 125 ITERATIONS')
  4847.   670 FORMAT(25H CPRPQX PASSES ALL TESTS.)
  4848.   680 FORMAT(25H CPRPQX FAILS SOME TESTS.)
  4849.       END
  4850. *DECK CPTQC
  4851.       SUBROUTINE CPTQC (LUN, KPRINT, NERR)
  4852. C***BEGIN PROLOGUE  CPTQC
  4853. C***PURPOSE  Quick check for CPTSL.
  4854. C***LIBRARY   SLATEC
  4855. C***KEYWORDS  QUICK CHECK
  4856. C***AUTHOR  Voorhees, E. A., (LANL)
  4857. C***DESCRIPTION
  4858. C
  4859. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  4860. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINE BEING TESTED.
  4861. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  CX
  4862. C    (THE SOLUTION VECTOR) ARE ENTERED WITH DATA STATEMENTS.
  4863. C
  4864. C    THE COMPUTED VALUES OF  X  ARE COMPARED TO THE STORED
  4865. C    PRE-COMPUTED VALUES OF CX.  FAILURE OF THE TEST OCCURS WHEN
  4866. C    AGREEMENT TO 3 SIGNIFICANT DIGITS IS NOT ACHIEVED AND AN
  4867. C    ERROR MESSAGE IS PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  4868. C
  4869. C    NO INPUT ARGUMENTS ARE REQUIRED.
  4870. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT
  4871. C    OF ALL FAILURES DETECTED BY CPTQC.
  4872. C
  4873. C***ROUTINES CALLED  CPTSL
  4874. C***REVISION HISTORY  (YYMMDD)
  4875. C   801024  DATE WRITTEN
  4876. C   890618  REVISION DATE from Version 3.2
  4877. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4878. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  4879. C           FORMATs.  (RWC)
  4880. C***END PROLOGUE  CPTQC
  4881.       COMPLEX D(4),E(4),B(4),CX(4),DT(4),ET(4),BT(4)
  4882.       INTEGER N,I,INDX,NERR
  4883.       REAL DELX
  4884.       DATA D/(2.E0,0.E0),(2.E0,0.E0),(3.E0,0.E0),(4.E0,0.E0)/
  4885.       DATA E/(0.E0,-1.E0),(0.E0,0.E0),(0.E0,-1.E0),(0.E0,0.E0)/
  4886.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  4887.       DATA CX/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  4888. C***FIRST EXECUTABLE STATEMENT  CPTQC
  4889.       N = 4
  4890.       NERR = 0
  4891.       DO 10 I=1,N
  4892.          DT(I) = D(I)
  4893.          ET(I) = E(I)
  4894.          BT(I) = B(I)
  4895.    10 CONTINUE
  4896. C
  4897.       CALL CPTSL(N,DT,ET,BT)
  4898.       INDX = 0
  4899.       DO 20 I=1,N
  4900.          DELX = ABS(REAL(BT(I)-CX(I)))+ABS(AIMAG(BT(I)-CX(I)))
  4901.          IF (DELX .GT. .0001) INDX=INDX+1
  4902.    20 CONTINUE
  4903. C
  4904.       IF (INDX .NE. 0) THEN
  4905.          WRITE (LUN,201)
  4906.          NERR = NERR + 1
  4907.       ENDIF
  4908. C
  4909.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  4910.       RETURN
  4911. C
  4912.   200 FORMAT (/' * CPTQC - TEST FOR CPTSL FOUND ', I1, ' ERRORS.'/)
  4913.   201 FORMAT (/' *** CPTSL FAILURE - ERROR IN SOLUTION')
  4914.       END
  4915. *DECK CQAG
  4916.       SUBROUTINE CQAG (LUN, KPRINT, IPASS)
  4917. C***BEGIN PROLOGUE  CQAG
  4918. C***PURPOSE  Quick check for QAG.
  4919. C***LIBRARY   SLATEC
  4920. C***TYPE      SINGLE PRECISION (CQAG-S, CDQAG-D)
  4921. C***AUTHOR  (UNKNOWN)
  4922. C***ROUTINES CALLED  CPRIN, F1G, F2G, F3G, QAG, R1MACH
  4923. C***REVISION HISTORY  (YYMMDD)
  4924. C   ??????  DATE WRITTEN
  4925. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  4926. C   901205  Added PASS/FAIL message and changed the name of the first
  4927. C           argument.  (RWC)
  4928. C   910501  Added PURPOSE and TYPE records.  (WRB)
  4929. C***END PROLOGUE  CQAG
  4930. C
  4931. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  4932. C
  4933.       REAL A,ABSERR,B,R1MACH,EPMACH,EPSABS,EPSREL,ERROR,EXACT1,
  4934.      *  EXACT2,EXACT3,F1G,F2G,F3G,PI,RESULT,UFLOW,WORK
  4935.       INTEGER IER,IP,IPASS,IWORK,KEY,KPRINT,LAST,LENW,LIMIT,
  4936.      *  NEVAL
  4937.       DIMENSION IERV(2),IWORK(100),WORK(400)
  4938.       EXTERNAL F1G,F2G,F3G
  4939.       DATA PI/0.31415926535897932E+01/
  4940.       DATA EXACT1/0.1154700538379252E+01/
  4941.       DATA EXACT2/0.11780972450996172E+00/
  4942.       DATA EXACT3/0.1855802E+02/
  4943. C***FIRST EXECUTABLE STATEMENT  CQAG
  4944.       IF (KPRINT.GE.2) WRITE (LUN, '(''1QAG QUICK CHECK''/)')
  4945. C
  4946. C TEST ON IER = 0
  4947. C
  4948.       IPASS = 1
  4949.       LIMIT = 100
  4950.       LENW = LIMIT*4
  4951.       EPSABS = 0.0E+00
  4952.       EPMACH = R1MACH(4)
  4953.       KEY = 6
  4954.       EPSREL = MAX(SQRT(EPMACH),0.1E-07)
  4955.       A = 0.0E+00
  4956.       B = 0.1E+01
  4957.       CALL QAG(F1G,A,B,EPSABS,EPSREL,KEY,RESULT,ABSERR,NEVAL,IER,
  4958.      *  LIMIT,LENW,LAST,IWORK,WORK)
  4959.       IERV(1) = IER
  4960.       IP = 0
  4961.       ERROR = ABS(EXACT1-RESULT)
  4962.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT1))
  4963.      *  IP = 1
  4964.       IF(IP.EQ.0) IPASS = 0
  4965.       CALL CPRIN(LUN,0,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  4966. C
  4967. C TEST ON IER = 1
  4968. C
  4969.       LIMIT = 1
  4970.       LENW = LIMIT*4
  4971.       B = PI*0.2E+01
  4972.       CALL QAG(F2G,A,B,EPSABS,EPSREL,KEY,RESULT,ABSERR,NEVAL,IER,
  4973.      *  LIMIT,LENW,LAST,IWORK,WORK)
  4974.       IERV(1) = IER
  4975.       IP = 0
  4976.       IF(IER.EQ.1) IP = 1
  4977.       IF(IP.EQ.0) IPASS = 0
  4978.       CALL CPRIN(LUN,1,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,1)
  4979. C
  4980. C TEST ON IER = 2 OR 1
  4981. C
  4982.       UFLOW = R1MACH(1)
  4983.       LIMIT = 100
  4984.       LENW = LIMIT*4
  4985.       CALL QAG(F2G,A,B,UFLOW,0.0E+00,KEY,RESULT,ABSERR,NEVAL,IER,
  4986.      *  LIMIT,LENW,LAST,IWORK,WORK)
  4987.       IERV(1) = IER
  4988.       IERV(2) = 1
  4989.       IP = 0
  4990.       IF(IER.EQ.2.OR.IER.EQ.1) IP = 1
  4991.       IF(IP.EQ.0) IPASS = 0
  4992.       CALL CPRIN(LUN,2,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,2)
  4993. C
  4994. C TEST ON IER = 3 OR 1
  4995. C
  4996.       B = 0.1E+01
  4997.       CALL QAG(F3G,A,B,EPSABS,EPSREL,1,RESULT,ABSERR,NEVAL,IER,
  4998.      *  LIMIT,LENW,LAST,IWORK,WORK)
  4999.       IERV(1) = IER
  5000.       IERV(2) = 1
  5001.       IP = 0
  5002.       IF(IER.EQ.3.OR.IER.EQ.1) IP = 1
  5003.       IF(IP.EQ.0) IPASS = 0
  5004.       CALL CPRIN(LUN,3,KPRINT,IP,EXACT3,RESULT,ABSERR,NEVAL,IERV,2)
  5005. C
  5006. C TEST ON IER = 6
  5007. C
  5008.       LENW = 1
  5009.       CALL QAG(F1G,A,B,EPSABS,EPSREL,KEY,RESULT,ABSERR,NEVAL,IER,
  5010.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5011.       IERV(1) = IER
  5012.       IP = 0
  5013.       IF(IER.EQ.6.AND.RESULT.EQ.0.0E+00.AND.ABSERR.EQ.0.0E+00.AND.
  5014.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  5015.       IF(IP.EQ.0) IPASS = 0
  5016.       CALL CPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  5017. C
  5018.       IF (KPRINT.GE.1) THEN
  5019.          IF (IPASS.EQ.0) THEN
  5020.             WRITE(LUN, '(/'' SOME TEST(S) IN CQAG FAILED''/)')
  5021.          ELSEIF (KPRINT.GE.2) THEN
  5022.             WRITE(LUN, '(/'' ALL TEST(S) IN CQAG PASSED''/)')
  5023.          ENDIF
  5024.       ENDIF
  5025.       RETURN
  5026.       END
  5027. *DECK CQAGI
  5028.       SUBROUTINE CQAGI (LUN, KPRINT, IPASS)
  5029. C***BEGIN PROLOGUE  CQAGI
  5030. C***PURPOSE  Quick check for QAGI.
  5031. C***LIBRARY   SLATEC
  5032. C***TYPE      SINGLE PRECISION (CQAGI-S, CDQAGI-D)
  5033. C***AUTHOR  (UNKNOWN)
  5034. C***ROUTINES CALLED  CPRIN, QAGI, R1MACH, T0, T1, T2, T3, T4, T5
  5035. C***REVISION HISTORY  (YYMMDD)
  5036. C   ??????  DATE WRITTEN
  5037. C   891009  Removed unreferenced variables.  (WRB)
  5038. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  5039. C   901205  Added PASS/FAIL message and changed the name of the first
  5040. C           argument.  (RWC)
  5041. C   910501  Added PURPOSE and TYPE records.  (WRB)
  5042. C***END PROLOGUE  CQAGI
  5043. C
  5044. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  5045. C
  5046.       REAL ABSERR,BOUND,R1MACH,EPMACH,EPSABS,
  5047.      *  EPSREL,ERROR,EXACT0,EXACT1,EXACT2,EXACT3,EXACT4,
  5048.      *  OFLOW,RESULT,T0,T1,T2,T3,T4,T5,UFLOW,WORK
  5049.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENW,LIMIT,LUN,NEVAL
  5050.       DIMENSION WORK(800),IWORK(200),IERV(4)
  5051.       EXTERNAL T0,T1,T2,T3,T4,T5
  5052.       DATA EXACT0/2.0E+00/,EXACT1/0.115470066904E1/
  5053.       DATA EXACT2/0.909864525656E-02/
  5054.       DATA EXACT3/0.31415926535897932E+01/
  5055.       DATA EXACT4/0.19984914554328673E+04/
  5056. C***FIRST EXECUTABLE STATEMENT  CQAGI
  5057.       IF (KPRINT.GE.2) WRITE (LUN, '(''1QAGI QUICK CHECK''/)')
  5058. C
  5059. C TEST ON IER = 0
  5060. C
  5061.       IPASS = 1
  5062.       LIMIT = 200
  5063.       LENW = LIMIT*4
  5064.       EPSABS = 0.0E+00
  5065.       EPMACH = R1MACH(4)
  5066.       EPSREL = MAX(SQRT(EPMACH),0.1E-07)
  5067.       BOUND = 0.0E+00
  5068.       INF = 1
  5069.       CALL QAGI(T0,BOUND,INF,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  5070.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5071.       ERROR = ABS(RESULT-EXACT0)
  5072.       IERV(1) = IER
  5073.       IP = 0
  5074.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT0))
  5075.      *  IP = 1
  5076.       IF(IP.EQ.0) IPASS = 0
  5077.       CALL CPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5078. C
  5079. C TEST ON IER = 1
  5080. C
  5081.       CALL QAGI(T1,BOUND,INF,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  5082.      *  1,4,LAST,IWORK,WORK)
  5083.       IERV(1) = IER
  5084.       IP = 0
  5085.       IF(IER.EQ.1) IP = 1
  5086.       IF(IP.EQ.0) IPASS = 0
  5087.       CALL CPRIN(LUN,1,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  5088. C
  5089. C TEST ON IER = 2 OR 4 OR 1
  5090. C
  5091.       UFLOW = R1MACH(1)
  5092.       CALL QAGI(T2,BOUND,INF,UFLOW,0.0E+00,RESULT,ABSERR,NEVAL,IER,
  5093.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5094.       IERV(1) = IER
  5095.       IERV(2) = 4
  5096.       IERV(3) = 1
  5097.       IP = 0
  5098.       IF(IER.EQ.2.OR.IER.EQ.4.OR.IER.EQ.1) IP = 1
  5099.       IF(IP.EQ.0) IPASS = 0
  5100.       CALL CPRIN(LUN,2,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,3)
  5101. C
  5102. C TEST ON IER = 3 OR 4 OR 1
  5103. C
  5104.       CALL QAGI(T3,BOUND,INF,UFLOW,0.0E+00,RESULT,ABSERR,NEVAL,IER,
  5105.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5106.       IERV(1) = IER
  5107.       IERV(2) = 4
  5108.       IERV(3) = 1
  5109.       IP = 0
  5110.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1) IP = 1
  5111.       IF(IP.EQ.0) IPASS = 0
  5112.       CALL CPRIN(LUN,3,KPRINT,IP,EXACT3,RESULT,ABSERR,NEVAL,IERV,3)
  5113. C
  5114. C TEST ON IER = 4 OR 3 OR 1
  5115. C
  5116.       CALL QAGI(T4,BOUND,INF,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  5117.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5118.       IERV(1) = IER
  5119.       IERV(2) = 3
  5120.       IERV(3) = 1
  5121.       IERV(4)=2
  5122.       IP = 0
  5123.       IF(IER.EQ.4.OR.IER.EQ.3.OR.IER.EQ.1.OR.IER.EQ.2) IP = 1
  5124.       IF(IP.EQ.0) IPASS = 0
  5125.       CALL CPRIN(LUN,4,KPRINT,IP,EXACT4,RESULT,ABSERR,NEVAL,IERV,4)
  5126. C
  5127. C TEST ON IER = 5
  5128. C
  5129.       OFLOW = R1MACH(2)
  5130.       CALL QAGI(T5,BOUND,INF,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  5131.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5132.       IERV(1) = IER
  5133.       IP = 0
  5134.       IF(IER.EQ.5) IP = 1
  5135.       IF(IP.EQ.0) IPASS = 0
  5136.       CALL CPRIN(LUN,5,KPRINT,IP,OFLOW,RESULT,ABSERR,NEVAL,IERV,1)
  5137. C
  5138. C TEST ON IER = 6
  5139. C
  5140.       CALL QAGI(T1,BOUND,INF,EPSABS,0.0E+00,RESULT,ABSERR,NEVAL,IER,
  5141.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5142.       IERV(1) = IER
  5143.       IP = 0
  5144.       IF(IER.EQ.6.AND.RESULT.EQ.0.0E+00.AND.ABSERR.EQ.0.0E+00.AND.
  5145.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  5146.       IF(IP.EQ.0) IPASS = 0
  5147.       CALL CPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  5148. C
  5149.       IF (KPRINT.GE.1) THEN
  5150.          IF (IPASS.EQ.0) THEN
  5151.             WRITE(LUN, '(/'' SOME TEST(S) IN CQAGI FAILED''/)')
  5152.          ELSEIF (KPRINT.GE.2) THEN
  5153.             WRITE(LUN, '(/'' ALL TEST(S) IN CQAGI PASSED''/)')
  5154.          ENDIF
  5155.       ENDIF
  5156.       RETURN
  5157.       END
  5158. *DECK CQAGP
  5159.       SUBROUTINE CQAGP (LUN, KPRINT, IPASS)
  5160. C***BEGIN PROLOGUE  CQAGP
  5161. C***PURPOSE  Quick check for QAGP.
  5162. C***LIBRARY   SLATEC
  5163. C***TYPE      SINGLE PRECISION (CQAGP-S, CDQAGP-D)
  5164. C***AUTHOR  (UNKNOWN)
  5165. C***ROUTINES CALLED  CPRIN, F1P, F2P, F3P, F4P, QAGP, R1MACH
  5166. C***REVISION HISTORY  (YYMMDD)
  5167. C   ??????  DATE WRITTEN
  5168. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  5169. C   901205  Added PASS/FAIL message and changed the name of the first
  5170. C           argument.  (RWC)
  5171. C   910501  Added PURPOSE and TYPE records.  (WRB)
  5172. C***END PROLOGUE  CQAGP
  5173. C
  5174. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  5175. C
  5176.       REAL A,ABSERR,B,R1MACH,EPMACH,EPSABS,EPSREL,ERROR,EXACT1,
  5177.      *  EXACT2,EXACT3,F1P,F2P,F3P,F4P,OFLOW,POINTS,P1,P2,RESULT,
  5178.      *  UFLOW,WORK
  5179.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENIW,LENW,LIMIT,LUN,
  5180.      *  NEVAL,NPTS2
  5181.       DIMENSION IERV(4),IWORK(205),POINTS(5),WORK(405)
  5182.       EXTERNAL F1P,F2P,F3P,F4P
  5183.       DATA EXACT1/0.4285277667368085E+01/
  5184.       DATA EXACT2/0.909864525656E-2/
  5185.       DATA EXACT3/0.31415926535897932E+01/
  5186.       DATA P1/0.1428571428571428E+00/
  5187.       DATA P2/0.6666666666666667E+00/
  5188. C***FIRST EXECUTABLE STATEMENT  CQAGP
  5189.       IF (KPRINT.GE.2) WRITE (LUN, '(''1QAGP QUICK CHECK''/)')
  5190. C
  5191. C TEST ON IER = 0
  5192. C
  5193.       IPASS = 1
  5194.       NPTS2 = 4
  5195.       LIMIT = 100
  5196.       LENIW = LIMIT*2+NPTS2
  5197.       LENW = LIMIT*4+NPTS2
  5198.       EPSABS = 0.0E+00
  5199.       EPMACH = R1MACH(4)
  5200.       EPSREL = MAX(SQRT(EPMACH),0.1E-07)
  5201.       A = 0.0E+00
  5202.       B = 0.1E+01
  5203.       POINTS(1) = P1
  5204.       POINTS(2) = P2
  5205.       CALL QAGP(F1P,A,B,NPTS2,POINTS,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,
  5206.      *  IER,LENIW,LENW,LAST,IWORK,WORK)
  5207.       ERROR = ABS(RESULT-EXACT1)
  5208.       IERV(1) = IER
  5209.       IP = 0
  5210.       IF(IER.EQ.0.AND.ERROR.LE.EPSREL*ABS(EXACT1)) IP = 1
  5211.       IF(IP.EQ.0) IPASS = 0
  5212.       CALL CPRIN(LUN,0,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  5213. C
  5214. C TEST ON IER = 1
  5215. C
  5216.       LENIW = 10
  5217.       LENW = LENIW*2-NPTS2
  5218.       CALL QAGP(F1P,A,B,NPTS2,POINTS,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,
  5219.      *  IER,LENIW,LENW,LAST,IWORK,WORK)
  5220.       IERV(1) = IER
  5221.       IP = 0
  5222.       IF(IER.EQ.1) IP = 1
  5223.       IF(IP.EQ.0) IPASS = 0
  5224.       CALL CPRIN(LUN,1,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  5225. C
  5226. C TEST ON IER = 2, 4, 1 OR 3
  5227. C
  5228.       NPTS2 = 3
  5229.       POINTS(1) = 0.1E+00
  5230.       LENIW = LIMIT*2+NPTS2
  5231.       LENW = LIMIT*4+NPTS2
  5232.       UFLOW = R1MACH(1)
  5233.       A = 0.1E+00
  5234.       CALL QAGP(F2P,A,B,NPTS2,POINTS,UFLOW,0.0E+00,RESULT,ABSERR,NEVAL,
  5235.      *  IER,LENIW,LENW,LAST,IWORK,WORK)
  5236.       IERV(1) = IER
  5237.       IERV(2) = 4
  5238.       IERV(3) = 1
  5239.       IERV(4) = 3
  5240.       IP = 0
  5241.       IF(IER.EQ.2.OR.IER.EQ.4.OR.IER.EQ.1.OR.IER.EQ.3) IP = 1
  5242.       IF(IP.EQ.0) IPASS = 0
  5243.       CALL CPRIN(LUN,2,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,4)
  5244. C
  5245. C TEST ON IER = 3 OR 4 OR 1 OR 2
  5246. C
  5247.       NPTS2 = 2
  5248.       LENIW = LIMIT*2+NPTS2
  5249.       LENW = LIMIT*4+NPTS2
  5250.       A = 0.0E+00
  5251.       B = 0.5E+01
  5252.       CALL QAGP(F3P,A,B,NPTS2,POINTS,UFLOW,0.0E+00,RESULT,ABSERR,NEVAL,
  5253.      *  IER,LENIW,LENW,LAST,IWORK,WORK)
  5254.       IERV(1) = IER
  5255.       IERV(2) = 4
  5256.       IERV(3) = 1
  5257.       IERV(4)=2
  5258.       IP = 0
  5259.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1.OR.IER.EQ.2) IP = 1
  5260.       IF(IP.EQ.0) IPASS = 0
  5261.       CALL CPRIN(LUN,3,KPRINT,IP,EXACT3,RESULT,ABSERR,NEVAL,IERV,4)
  5262. C
  5263. C TEST ON IER = 5
  5264. C
  5265.       B = 0.1E+01
  5266.       CALL QAGP(F4P,A,B,NPTS2,POINTS,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,
  5267.      *  IER,LENIW,LENW,LAST,IWORK,WORK)
  5268.       IERV(1) = IER
  5269.       IP = 0
  5270.       IF(IER.EQ.5) IP = 1
  5271.       IF(IP.EQ.0) IPASS = 0
  5272.       OFLOW = R1MACH(2)
  5273.       CALL CPRIN(LUN,5,KPRINT,IP,OFLOW,RESULT,ABSERR,NEVAL,IERV,1)
  5274. C
  5275. C TEST ON IER = 6
  5276. C
  5277.       NPTS2 = 5
  5278.       LENIW = LIMIT*2+NPTS2
  5279.       LENW = LIMIT*4+NPTS2
  5280.       POINTS(1) = P1
  5281.       POINTS(2) = P2
  5282.       POINTS(3) = 0.3E+01
  5283.       CALL QAGP(F1P,A,B,NPTS2,POINTS,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,
  5284.      *  IER,LENIW,LENW,LAST,IWORK,WORK)
  5285.       IERV(1) = IER
  5286.       IP = 0
  5287.       IF(IER.EQ.6.AND.RESULT.EQ.0.0E+00.AND.ABSERR.EQ.0.0E+00.AND.
  5288.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  5289.       IF(IP.EQ.0) IPASS = 0
  5290.       CALL CPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  5291. C
  5292.       IF (KPRINT.GE.1) THEN
  5293.          IF (IPASS.EQ.0) THEN
  5294.             WRITE(LUN, '(/'' SOME TEST(S) IN CQAGP FAILED''/)')
  5295.          ELSEIF (KPRINT.GE.2) THEN
  5296.             WRITE(LUN, '(/'' ALL TEST(S) IN CQAGP PASSED''/)')
  5297.          ENDIF
  5298.       ENDIF
  5299.       RETURN
  5300.       END
  5301. *DECK CQAGS
  5302.       SUBROUTINE CQAGS (LUN, KPRINT, IPASS)
  5303. C***BEGIN PROLOGUE  CQAGS
  5304. C***PURPOSE  Quick check for QAGS.
  5305. C***LIBRARY   SLATEC
  5306. C***TYPE      SINGLE PRECISION (CQAGS-S, CDQAGS-D)
  5307. C***AUTHOR  (UNKNOWN)
  5308. C***ROUTINES CALLED  CPRIN, F0S, F1S, F2S, F3S, F4S, F5S, QAGS, R1MACH
  5309. C***REVISION HISTORY  (YYMMDD)
  5310. C   ??????  DATE WRITTEN
  5311. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  5312. C   901205  Added PASS/FAIL message and changed the name of the first
  5313. C           argument.  (RWC)
  5314. C   910501  Added PURPOSE and TYPE records.  (WRB)
  5315. C   911114  Modified test on IER=4 to allow IER=5.  (WRB)
  5316. C***END PROLOGUE  CQAGS
  5317. C
  5318. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  5319. C
  5320.       REAL A,ABSERR,B,R1MACH,EPMACH,EPSABS,
  5321.      *  EPSREL,ERROR,EXACT0,EXACT1,EXACT2,EXACT3,EXACT4,
  5322.      *  F0S,F1S,F2S,F3S,F4S,F5S,OFLOW,RESULT,UFLOW,WORK
  5323.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENW,LIMIT,NEVAL
  5324.       DIMENSION IERV(5),IWORK(200),WORK(800)
  5325.       EXTERNAL F0S,F1S,F2S,F3S,F4S,F5S
  5326.       DATA EXACT0/0.2E+01/
  5327.       DATA EXACT1/0.115470066904E+01/
  5328.       DATA EXACT2/0.909864525656E-02/
  5329.       DATA EXACT3/0.31415926535897932E+01/
  5330.       DATA EXACT4/0.19984914554328673E+04/
  5331. C***FIRST EXECUTABLE STATEMENT  CQAGS
  5332.       IF (KPRINT.GE.2) WRITE (LUN, '(''1QAGS QUICK CHECK''/)')
  5333. C
  5334. C TEST ON IER = 0
  5335. C
  5336.       IPASS = 1
  5337.       LIMIT = 200
  5338.       LENW = LIMIT*4
  5339.       EPSABS = 0.0E+00
  5340.       EPMACH = R1MACH(4)
  5341.       EPSREL = MAX(SQRT(EPMACH),0.1E-07)
  5342.       A = 0.0E+00
  5343.       B = 0.1E+01
  5344.       CALL QAGS(F0S,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  5345.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5346.       ERROR = ABS(RESULT-EXACT0)
  5347.       IERV(1) = IER
  5348.       IP = 0
  5349.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT0))
  5350.      *  IP = 1
  5351.       IF(IP.EQ.0) IPASS = 0
  5352.       CALL CPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5353. C
  5354. C TEST ON IER = 1
  5355. C
  5356.       CALL QAGS(F1S,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  5357.      *  1,4,LAST,IWORK,WORK)
  5358.       IERV(1) = IER
  5359.       IP = 0
  5360.       IF(IER.EQ.1) IP = 1
  5361.       IF(IP.EQ.0) IPASS = 0
  5362.       CALL CPRIN(LUN,1,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  5363. C
  5364. C TEST ON IER = 2 OR 4 OR 1
  5365. C
  5366.       UFLOW = R1MACH(1)
  5367.       A = 0.1E+00
  5368.       CALL QAGS(F2S,A,B,UFLOW,0.0E+00,RESULT,ABSERR,NEVAL,IER,
  5369.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5370.       IERV(1) = IER
  5371.       IERV(2) = 4
  5372.       IERV(3) = 1
  5373.       IP = 0
  5374.       IF(IER.EQ.2.OR.IER.EQ.4.OR.IER.EQ.1) IP = 1
  5375.       IF(IP.EQ.0) IPASS = 0
  5376.       CALL CPRIN(LUN,2,KPRINT,IP,EXACT2,RESULT,ABSERR,NEVAL,IERV,3)
  5377. C
  5378. C TEST ON IER = 3 OR 4 OR 1 OR 2
  5379. C
  5380.       A = 0.0E+00
  5381.       B = 0.5E+01
  5382.       CALL QAGS(F3S,A,B,UFLOW,0.0E+00,RESULT,ABSERR,NEVAL,IER,
  5383.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5384.       IERV(1) = IER
  5385.       IERV(2) = 4
  5386.       IERV(3) = 1
  5387.       IERV(4) = 2
  5388.       IP = 0
  5389.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1.OR.IER.EQ.2) IP = 1
  5390.       IF(IP.EQ.0) IPASS = 0
  5391.       CALL CPRIN(LUN,3,KPRINT,IP,EXACT3,RESULT,ABSERR,NEVAL,IERV,4)
  5392. C
  5393. C TEST ON IER = 4, OR 5 OR 3 OR 1 OR 0
  5394. C
  5395.       B = 0.1E+01
  5396.       EPSREL=1.E-4
  5397.       CALL QAGS(F4S,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  5398.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5399. C      IER=4
  5400.       IERV(1) = IER
  5401.       IERV(2) = 5
  5402.       IERV(3) = 3
  5403.       IERV(4) = 1
  5404.       IERV(5) = 0
  5405.       IP = 0
  5406.       IF(IER.EQ.5.OR.IER.EQ.4.OR.IER.EQ.3.OR.IER.EQ.1.OR.IER.EQ.0)
  5407.      *  IP = 1
  5408.       IF(IP.EQ.0) IPASS = 0
  5409.       CALL CPRIN(LUN,4,KPRINT,IP,EXACT4,RESULT,ABSERR,NEVAL,IERV,5)
  5410. C
  5411. C TEST ON IER = 5
  5412. C
  5413.       OFLOW = R1MACH(2)
  5414.       CALL QAGS(F5S,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER,
  5415.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5416.       IERV(1) = IER
  5417.       IP = 0
  5418.       IF(IER.EQ.5) IP = 1
  5419.       IF(IP.EQ.0) IPASS = 0
  5420.       CALL CPRIN(LUN,5,KPRINT,IP,OFLOW,RESULT,ABSERR,NEVAL,IERV,1)
  5421. C
  5422. C TEST ON IER = 6
  5423. C
  5424.       CALL QAGS(F1S,A,B,EPSABS,0.0E+00,RESULT,ABSERR,NEVAL,IER,
  5425.      *  LIMIT,LENW,LAST,IWORK,WORK)
  5426.       IERV(1) = IER
  5427.       IP = 0
  5428.       IF(IER.EQ.6.AND.RESULT.EQ.0.0E+00.AND.ABSERR.EQ.0.0E+00.AND.
  5429.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  5430.       IF(IP.EQ.0) IPASS = 0
  5431.       CALL CPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,1)
  5432. C
  5433.       IF (KPRINT.GE.1) THEN
  5434.          IF (IPASS.EQ.0) THEN
  5435.             WRITE(LUN, '(/'' SOME TEST(S) IN CQAGS FAILED''/)')
  5436.          ELSEIF (KPRINT.GE.2) THEN
  5437.             WRITE(LUN, '(/'' ALL TEST(S) IN CQAGS PASSED''/)')
  5438.          ENDIF
  5439.       ENDIF
  5440.       RETURN
  5441.       END
  5442. *DECK CQAWC
  5443.       SUBROUTINE CQAWC (LUN, KPRINT, IPASS)
  5444. C***BEGIN PROLOGUE  CQAWC
  5445. C***PURPOSE  Quick check for QAWC.
  5446. C***LIBRARY   SLATEC
  5447. C***TYPE      SINGLE PRECISION (CQAWC-S, CDQAWC-D)
  5448. C***AUTHOR  (UNKNOWN)
  5449. C***ROUTINES CALLED  CPRIN, F0C, F1C, QAWC, R1MACH
  5450. C***REVISION HISTORY  (YYMMDD)
  5451. C   ??????  DATE WRITTEN
  5452. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  5453. C   901205  Added PASS/FAIL message and changed the name of the first
  5454. C           argument.  (RWC)
  5455. C   910501  Added PURPOSE and TYPE records.  (WRB)
  5456. C***END PROLOGUE  CQAWC
  5457. C
  5458. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  5459. C
  5460.       REAL A,ABSERR,B,R1MACH,EPMACH,EPSABS,
  5461.      *  EPSREL,ERROR,EXACT0,EXACT1,F0C,F1C,C,
  5462.      *  RESULT,UFLOW,WORK
  5463.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENW,LIMIT,NEVAL
  5464.       DIMENSION WORK(800),IWORK(200),IERV(2)
  5465.       EXTERNAL F0C,F1C
  5466.       DATA EXACT0/-0.6284617285065624E+03/
  5467.       DATA EXACT1/0.1855802E+01/
  5468. C***FIRST EXECUTABLE STATEMENT  CQAWC
  5469.       IF (KPRINT.GE.2) WRITE (LUN, '(''1QAWC QUICK CHECK''/)')
  5470. C
  5471. C TEST ON IER = 0
  5472. C
  5473.       IPASS = 1
  5474.       C = 0.5E+00
  5475.       A = -1.0E+00
  5476.       B = 1.0E+00
  5477.       LIMIT = 200
  5478.       LENW = LIMIT*4
  5479.       EPSABS = 0.0E+00
  5480.       EPMACH = R1MACH(4)
  5481.       EPSREL = MAX(SQRT(EPMACH),0.1E-07)
  5482.       CALL QAWC(F0C,A,B,C,EPSABS,EPSREL,RESULT,ABSERR,
  5483.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  5484.       IERV(1) = IER
  5485.       IP = 0
  5486.       ERROR = ABS(EXACT0-RESULT)
  5487.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT0))
  5488.      *  IP = 1
  5489.       IF(IP.EQ.0) IPASS = 0
  5490.       CALL CPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5491. C
  5492. C TEST ON IER = 1
  5493. C
  5494.       CALL QAWC(F0C,A,B,C,EPSABS,EPSREL,RESULT,ABSERR,
  5495.      *  NEVAL,IER,1,4,LAST,IWORK,WORK)
  5496.       IERV(1) = IER
  5497.       IP = 0
  5498.       IF(IER.EQ.1) IP = 1
  5499.       IF(IP.EQ.0) IPASS = 0
  5500.       CALL CPRIN(LUN,1,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5501. C
  5502. C TEST ON IER = 2 OR 1
  5503. C
  5504.       UFLOW = R1MACH(1)
  5505.       CALL QAWC(F0C,A,B,C,UFLOW,0.0E+00,RESULT,ABSERR,
  5506.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  5507.       IERV(1) = IER
  5508.       IERV(2) = 1
  5509.       IP = 0
  5510.       IF(IER.EQ.2.OR.IER.EQ.1) IP = 1
  5511.       IF(IP.EQ.0) IPASS = 0
  5512.       CALL CPRIN(LUN,2,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,2)
  5513. C
  5514. C TEST ON IER = 3 OR 1
  5515. C
  5516.       CALL QAWC(F1C,0.0E+00,B,C,UFLOW,0.0E+00,RESULT,ABSERR,
  5517.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  5518.       IERV(1) = IER
  5519.       IERV(2) = 1
  5520.       IP = 0
  5521.       IF(IER.EQ.3.OR.IER.EQ.1) IP = 1
  5522.       IF(IP.EQ.0) IPASS = 0
  5523.       CALL CPRIN(LUN,3,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,2)
  5524. C
  5525. C TEST ON IER = 6
  5526. C
  5527.       EPSABS = 0.0E+00
  5528.       EPSREL = 0.0E+00
  5529.       CALL QAWC(F0C,A,B,C,EPSABS,EPSREL,RESULT,ABSERR,
  5530.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  5531.       IERV(1) = IER
  5532.       IP = 0
  5533.       IF(IER.EQ.6) IP = 1
  5534.       IF(IP.EQ.0) IPASS = 0
  5535.       CALL CPRIN(LUN,6,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5536. C
  5537.       IF (KPRINT.GE.1) THEN
  5538.          IF (IPASS.EQ.0) THEN
  5539.             WRITE(LUN, '(/'' SOME TEST(S) IN CQAWC FAILED''/)')
  5540.          ELSEIF (KPRINT.GE.2) THEN
  5541.             WRITE(LUN, '(/'' ALL TEST(S) IN CQAWC PASSED''/)')
  5542.          ENDIF
  5543.       ENDIF
  5544.       RETURN
  5545.       END
  5546. *DECK CQAWF
  5547.       SUBROUTINE CQAWF (LUN, KPRINT, IPASS)
  5548. C***BEGIN PROLOGUE  CQAWF
  5549. C***PURPOSE  Quick check for QAWF.
  5550. C***LIBRARY   SLATEC
  5551. C***TYPE      SINGLE PRECISION (CQAWF-S, CDQAWF-D)
  5552. C***AUTHOR  (UNKNOWN)
  5553. C***ROUTINES CALLED  CPRIN, F0F, F1F, QAWF, R1MACH
  5554. C***REVISION HISTORY  (YYMMDD)
  5555. C   ??????  DATE WRITTEN
  5556. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  5557. C   901205  Added PASS/FAIL message and changed the name of the first
  5558. C           argument.  (RWC)
  5559. C   910501  Added PURPOSE and TYPE records.  (WRB)
  5560. C***END PROLOGUE  CQAWF
  5561. C
  5562. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  5563. C
  5564.       REAL A,ABSERR,R1MACH,EPSABS,EPMACH,
  5565.      *  ERROR,EXACT0,F0F,F1F,OMEGA,PI,RESULT,UFLOW,WORK
  5566.       INTEGER IER,IP,IPASS,KPRINT,LENW,LIMIT,LIMLST,LST,NEVAL
  5567.       DIMENSION IERV(3),IWORK(450),WORK(1425)
  5568.       EXTERNAL F0F,F1F
  5569.       DATA EXACT0/0.1422552162575912E+01/
  5570.       DATA PI/0.31415926535897932E+01/
  5571. C***FIRST EXECUTABLE STATEMENT  CQAWF
  5572.       IF (KPRINT.GE.2) WRITE (LUN, '(''1QAWF QUICK CHECK''/)')
  5573. C
  5574. C TEST ON IER = 0
  5575. C
  5576.       IPASS = 1
  5577.       MAXP1 = 21
  5578.       LIMLST = 50
  5579.       LIMIT = 200
  5580.       LENIW = LIMIT*2+LIMLST
  5581.       LENW = LENIW*2+MAXP1*25
  5582.       EPMACH = R1MACH(4)
  5583.       EPSABS = MAX(SQRT(EPMACH),0.1E-02)
  5584.       A = 0.0E+00
  5585.       OMEGA = 0.8E+01
  5586.       INTEGR = 2
  5587.       CALL QAWF(F0F,A,OMEGA,INTEGR,EPSABS,RESULT,ABSERR,NEVAL,
  5588.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  5589.       IERV(1) = IER
  5590.       IP = 0
  5591.       ERROR = ABS(EXACT0-RESULT)
  5592.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSABS)
  5593.      *  IP = 1
  5594.       IF(IP.EQ.0) IPASS = 0
  5595.       CALL CPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5596. C
  5597. C TEST ON IER = 1
  5598. C
  5599.       LIMLST = 3
  5600.       LENIW = 403
  5601.       LENW = LENIW*2+MAXP1*25
  5602.       CALL QAWF(F0F,A,OMEGA,INTEGR,EPSABS,RESULT,ABSERR,NEVAL,
  5603.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  5604.       IERV(1) = IER
  5605.       IP = 0
  5606.       IF(IER.EQ.1) IP = 1
  5607.       IF(IP.EQ.0) IPASS = 0
  5608.       CALL CPRIN(LUN,1,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5609. C
  5610. C TEST ON IER = 3 OR 4 OR 1
  5611. C
  5612.       LIMLST = 50
  5613.       LENIW = LIMIT*2+LIMLST
  5614.       LENW = LENIW*2+MAXP1*25
  5615.       UFLOW = R1MACH(1)
  5616.       CALL QAWF(F1F,A,0.0E+00,1,UFLOW,RESULT,ABSERR,NEVAL,
  5617.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  5618.       IERV(1) = IER
  5619.       IERV(2) = 4
  5620.       IERV(3) = 1
  5621.       IP = 0
  5622.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1) IP = 1
  5623.       IF(IP.EQ.0) IPASS = 0
  5624.       CALL CPRIN(LUN,3,KPRINT,IP,PI,RESULT,ABSERR,NEVAL,IERV,3)
  5625. C
  5626. C TEST ON IER = 6
  5627. C
  5628.       LIMLST = 50
  5629.       LENIW = 20
  5630.       CALL QAWF(F0F,A,OMEGA,INTEGR,EPSABS,RESULT,ABSERR,NEVAL,
  5631.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  5632.       IERV(1) = IER
  5633.       IP = 0
  5634.       IF(IER.EQ.6) IP = 1
  5635.       IF(IP.EQ.0) IPASS = 0
  5636.       CALL CPRIN(LUN,6,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5637. C
  5638. C TEST ON IER = 7
  5639. C
  5640.       LIMLST = 50
  5641.       LENIW = 52
  5642.       LENW = LENIW*2+MAXP1*25
  5643.       CALL QAWF(F0F,A,OMEGA,INTEGR,EPSABS,RESULT,ABSERR,NEVAL,
  5644.      *  IER,LIMLST,LST,LENIW,MAXP1,LENW,IWORK,WORK)
  5645.       IERV(1) = IER
  5646.       IP = 0
  5647.       IF(IER.EQ.7) IP = 1
  5648.       IF(IP.EQ.0) IPASS = 0
  5649.       CALL CPRIN(LUN,7,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5650. C
  5651.       IF (KPRINT.GE.1) THEN
  5652.          IF (IPASS.EQ.0) THEN
  5653.             WRITE(LUN, '(/'' SOME TEST(S) IN CQAWF FAILED''/)')
  5654.          ELSEIF (KPRINT.GE.2) THEN
  5655.             WRITE(LUN, '(/'' ALL TEST(S) IN CQAWF PASSED''/)')
  5656.          ENDIF
  5657.       ENDIF
  5658.       RETURN
  5659.       END
  5660. *DECK CQAWO
  5661.       SUBROUTINE CQAWO (LUN, KPRINT, IPASS)
  5662. C***BEGIN PROLOGUE  CQAWO
  5663. C***PURPOSE  Quick check for QAWO.
  5664. C***LIBRARY   SLATEC
  5665. C***TYPE      SINGLE PRECISION (CQAWO-S, CDQAWO-D)
  5666. C***AUTHOR  (UNKNOWN)
  5667. C***ROUTINES CALLED  CPRIN, F0O, F1O, F2O, QAWO, R1MACH
  5668. C***REVISION HISTORY  (YYMMDD)
  5669. C   ??????  DATE WRITTEN
  5670. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  5671. C   901205  Added PASS/FAIL message and changed the name of the first
  5672. C           argument.  (RWC)
  5673. C   910501  Added PURPOSE and TYPE records.  (WRB)
  5674. C***END PROLOGUE  CQAWO
  5675. C
  5676. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  5677. C
  5678.       REAL A,ABSERR,B,EPMACH,EPSABS,
  5679.      *  EPSREL,ERROR,EXACT0,F0O,F1O,F2O,
  5680.      *  OFLOW,OMEGA,PI,RESULT,R1MACH,UFLOW,WORK
  5681.       INTEGER IER,IERV,INTEGR,IP,IPASS,IWORK,KPRINT,LAST,LENW,LUN,
  5682.      *  MAXP1,NEVAL
  5683.       DIMENSION WORK(1325),IWORK(400),IERV(4)
  5684.       EXTERNAL F0O,F1O,F2O
  5685.       DATA EXACT0/0.1042872789432789E+05/
  5686.       DATA PI/0.31415926535897932E+01/
  5687. C***FIRST EXECUTABLE STATEMENT  CQAWO
  5688.       IF (KPRINT.GE.2) WRITE (LUN, '(''1QAWO QUICK CHECK''/)')
  5689. C
  5690. C TEST ON IER = 0
  5691. C
  5692.       IPASS = 1
  5693.       MAXP1 = 21
  5694.       LENIW = 400
  5695.       LENW = LENIW*2+MAXP1*25
  5696.       EPSABS = 0.0E+00
  5697.       EPMACH = R1MACH(4)
  5698.       EPSREL = MAX(SQRT(EPMACH),0.1E-07)
  5699.       A = 0.0E+00
  5700.       B = PI
  5701.       OMEGA = 0.1E+01
  5702.       INTEGR = 2
  5703.       CALL QAWO(F0O,A,B,OMEGA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,
  5704.      *  IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  5705.       IERV(1) = IER
  5706.       IP = 0
  5707.       ERROR = ABS(EXACT0-RESULT)
  5708.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT0))
  5709.      *  IP = 1
  5710.       IF(IP.EQ.0) IPASS = 0
  5711.       CALL CPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5712. C
  5713. C TEST ON IER = 1
  5714. C
  5715.       LENIW = 2
  5716.       LENW = LENIW*2+MAXP1*25
  5717.       CALL QAWO(F0O,A,B,OMEGA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,
  5718.      *  IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  5719.       IERV(1) = IER
  5720.       IP = 0
  5721.       IF(IER.EQ.1) IP = 1
  5722.       IF(IP.EQ.0) IPASS = 0
  5723.       CALL CPRIN(LUN,1,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5724. C
  5725. C TEST ON IER = 2 OR 4 OR 1
  5726. C
  5727.       UFLOW = R1MACH(1)
  5728.       LENIW = 400
  5729.       LENW = LENIW*2+MAXP1*25
  5730.       CALL QAWO(F0O,A,B,OMEGA,INTEGR,UFLOW,0.0E+00,RESULT,ABSERR,NEVAL,
  5731.      *  IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  5732.       IERV(1) = IER
  5733.       IERV(2) = 4
  5734.       IERV(3) = 1
  5735.       IP = 0
  5736.       IF(IER.EQ.2.OR.IER.EQ.4.OR.IER.EQ.1) IP = 1
  5737.       IF(IP.EQ.0) IPASS = 0
  5738.       CALL CPRIN(LUN,2,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,3)
  5739. C
  5740. C TEST ON IER = 3 OR 4 OR 1
  5741. C
  5742.       B = 0.5E+01
  5743.       OMEGA = 0.0E+00
  5744.       INTEGR = 1
  5745.       CALL QAWO(F1O,A,B,OMEGA,INTEGR,UFLOW,0.0E+00,RESULT,ABSERR,NEVAL,
  5746.      *  IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  5747.       IERV(1) = IER
  5748.       IERV(2) = 4
  5749.       IERV(3) = 1
  5750.       IP = 0
  5751.       IF(IER.EQ.3.OR.IER.EQ.4.OR.IER.EQ.1) IP = 1
  5752.       IF(IP.EQ.0) IPASS = 0
  5753.       CALL CPRIN(LUN,3,KPRINT,IP,PI,RESULT,ABSERR,NEVAL,IERV,3)
  5754. C
  5755. C TEST ON IER = 5
  5756. C
  5757.       B = 0.1E+01
  5758.       OFLOW = R1MACH(2)
  5759.       CALL QAWO(F2O,A,B,OMEGA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,
  5760.      *  IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  5761.       IERV(1) = IER
  5762.       IP = 0
  5763.       IF(IER.EQ.5) IP = 1
  5764.       IF(IP.EQ.0) IPASS = 0
  5765.       CALL CPRIN(LUN,5,KPRINT,IP,OFLOW,RESULT,ABSERR,NEVAL,IERV,1)
  5766. C
  5767. C TEST ON IER = 6
  5768. C
  5769.       INTEGR = 3
  5770.       CALL QAWO(F0O,A,B,OMEGA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,
  5771.      *  IER,LENIW,MAXP1,LENW,LAST,IWORK,WORK)
  5772.       IERV(1) = IER
  5773.       IP = 0
  5774.       IF(IER.EQ.6.AND.RESULT.EQ.0.0E+00.AND.ABSERR.EQ.0.0E+00.AND.
  5775.      *  NEVAL.EQ.0.AND.LAST.EQ.0) IP = 1
  5776.       IF(IP.EQ.0) IPASS = 0
  5777.       CALL CPRIN(LUN,6,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5778. C
  5779.       IF (KPRINT.GE.1) THEN
  5780.          IF (IPASS.EQ.0) THEN
  5781.             WRITE(LUN, '(/'' SOME TEST(S) IN CQAWO FAILED''/)')
  5782.          ELSEIF (KPRINT.GE.2) THEN
  5783.             WRITE(LUN, '(/'' ALL TEST(S) IN CQAWO PASSED''/)')
  5784.          ENDIF
  5785.       ENDIF
  5786.       RETURN
  5787.       END
  5788. *DECK CQAWS
  5789.       SUBROUTINE CQAWS (LUN, KPRINT, IPASS)
  5790. C***BEGIN PROLOGUE  CQAWS
  5791. C***PURPOSE  Quick check for QAWS.
  5792. C***LIBRARY   SLATEC
  5793. C***TYPE      SINGLE PRECISION (CQAWS-S, CDQAWS-D)
  5794. C***AUTHOR  (UNKNOWN)
  5795. C***ROUTINES CALLED  CPRIN, F0WS, F1WS, QAWS, R1MACH
  5796. C***REVISION HISTORY  (YYMMDD)
  5797. C   ??????  DATE WRITTEN
  5798. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  5799. C   901205  Added PASS/FAIL message and changed the name of the first
  5800. C           argument.  (RWC)
  5801. C   910501  Added PURPOSE and TYPE records.  (WRB)
  5802. C***END PROLOGUE  CQAWS
  5803. C
  5804. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  5805.       REAL A,ABSERR,B,R1MACH,EPMACH,EPSABS,
  5806.      *  EPSREL,ERROR,EXACT0,EXACT1,F0WS,F1WS,ALFA,BETA,
  5807.      *  RESULT,UFLOW,WORK
  5808.       INTEGER IER,IP,IPASS,IWORK,KPRINT,LAST,LENW,LIMIT,NEVAL,INTEGR
  5809.       DIMENSION WORK(800),IWORK(200),IERV(2)
  5810.       EXTERNAL F0WS,F1WS
  5811.       DATA EXACT0/0.5350190569223644E+00/
  5812.       DATA EXACT1/0.1998491554328673E+04/
  5813. C***FIRST EXECUTABLE STATEMENT  CQAWS
  5814.       IF (KPRINT.GE.2) WRITE (LUN, '(''1QAWS QUICK CHECK''/)')
  5815. C
  5816. C TEST ON IER = 0
  5817. C
  5818.       IPASS = 1
  5819.       ALFA = -0.5E+00
  5820.       BETA = -0.5E+00
  5821.       INTEGR = 1
  5822.       A = 0.0E+00
  5823.       B = 0.1E+01
  5824.       LIMIT = 200
  5825.       LENW = LIMIT*4
  5826.       EPSABS = 0.0E+00
  5827.       EPMACH = R1MACH(4)
  5828.       EPSREL = MAX(SQRT(EPMACH),0.1E-07)
  5829.       CALL QAWS(F0WS,A,B,ALFA,BETA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  5830.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  5831.       IERV(1) = IER
  5832.       IP = 0
  5833.       ERROR = ABS(EXACT0-RESULT)
  5834.       IF(IER.EQ.0.AND.ERROR.LE.EPSREL*ABS(EXACT0))
  5835.      *  IP = 1
  5836.       IF(IP.EQ.0) IPASS = 0
  5837.       CALL CPRIN(LUN,0,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5838. C
  5839. C TEST ON IER = 1
  5840. C
  5841.       CALL QAWS(F0WS,A,B,ALFA,BETA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  5842.      *  NEVAL,IER,2,8,LAST,IWORK,WORK)
  5843.       IERV(1) = IER
  5844.       IP = 0
  5845.       IF(IER.EQ.1) IP = 1
  5846.       IF(IP.EQ.0) IPASS = 0
  5847.       CALL CPRIN(LUN,1,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5848. C
  5849. C TEST ON IER = 2 OR 1
  5850. C
  5851.       UFLOW = R1MACH(1)
  5852.       CALL QAWS(F0WS,A,B,ALFA,BETA,INTEGR,UFLOW,0.0E+00,RESULT,ABSERR,
  5853.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  5854.       IERV(1) = IER
  5855.       IERV(2) = 1
  5856.       IP = 0
  5857.       IF(IER.EQ.2.OR.IER.EQ.1) IP = 1
  5858.       IF(IP.EQ.0) IPASS = 0
  5859.       CALL CPRIN(LUN,2,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,2)
  5860. C
  5861. C TEST ON IER = 3 OR 1
  5862. C
  5863.       CALL QAWS(F1WS,A,B,ALFA,BETA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  5864.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  5865.       IERV(1) = IER
  5866.       IERV(2) = 1
  5867.       IP = 0
  5868.       IF(IER.EQ.3.OR.IER.EQ.1) IP = 1
  5869.       IF(IP.EQ.0) IPASS = 0
  5870.       CALL CPRIN(LUN,3,KPRINT,IP,EXACT1,RESULT,ABSERR,NEVAL,IERV,2)
  5871. C
  5872. C TEST ON IER = 6
  5873. C
  5874.       INTEGR = 0
  5875.       CALL QAWS(F1WS,A,B,ALFA,BETA,INTEGR,EPSABS,EPSREL,RESULT,ABSERR,
  5876.      *  NEVAL,IER,LIMIT,LENW,LAST,IWORK,WORK)
  5877.       IERV(1) = IER
  5878.       IP = 0
  5879.       IF(IER.EQ.6) IP = 1
  5880.       IF(IP.EQ.0) IPASS = 0
  5881.       CALL CPRIN(LUN,6,KPRINT,IP,EXACT0,RESULT,ABSERR,NEVAL,IERV,1)
  5882. C
  5883.       IF (KPRINT.GE.1) THEN
  5884.          IF (IPASS.EQ.0) THEN
  5885.             WRITE(LUN, '(/'' SOME TEST(S) IN CQAWS FAILED''/)')
  5886.          ELSEIF (KPRINT.GE.2) THEN
  5887.             WRITE(LUN, '(/'' ALL TEST(S) IN CQAWS PASSED''/)')
  5888.          ENDIF
  5889.       ENDIF
  5890.       RETURN
  5891.       END
  5892. *DECK CQCK
  5893.       SUBROUTINE CQCK (LUN, KPRINT, NERR)
  5894. C***BEGIN PROLOGUE  CQCK
  5895. C***PURPOSE  Quick check for CPOFS, CPOIR, CNBFS and CNBIR.
  5896. C***LIBRARY   SLATEC
  5897. C***KEYWORDS  QUICK CHECK
  5898. C***AUTHOR  Voorhees, E. A., (LANL)
  5899. C***DESCRIPTION
  5900. C
  5901. C    QUICK CHECK SUBROUTINE CQCK TESTS THE EXECUTION OF THE
  5902. C    SLATEC SUBROUTINES CPOFS, CPOIR, CNBFS AND CNBIR.
  5903. C    A TITLE LINE AND A SUMMARY LINE ARE ALWAYS OUTPUTTED.
  5904. C
  5905. C    THE SUMMARY LINE GIVES A COUNT OF THE NUMBER OF
  5906. C    PROBLEMS ENCOUNTERED IN THE TEST IF ANY EXIST.  CQCK
  5907. C    CHECKS COMPUTED VS. EXACT SOLUTIONS TO AGREE TO
  5908. C    WITHIN 0.8 TIMES THE WORD LENGTH OF THE COMPUTER
  5909. C    (1.6 IF DOUBLE PRECISION) FOR CASE 1.  CQCK ALSO
  5910. C    TESTS ERROR HANDLING BY THE SUBROUTINE (CALLS TO
  5911. C    XERMSG (CQCK SETS IFLAG/KONTRL TO 0))
  5912. C    USING A SINGULAR MATRIX FOR CASE 2.  EACH EXECUTION
  5913. C    PROBLEM DETECTED BY CQCK RESULTS IN AN ADDITIONAL
  5914. C    EXPLANATORY LINE OF OUTPUT.
  5915. C
  5916. C    CQCK REQUIRES NO INPUT ARGUMENTS.
  5917. C    ON RETURN, NERR (INTEGER TYPE) CONTAINS THE TOTAL COUNT
  5918. C    OF ALL PROBLEMS DETECTED BY CQCK.
  5919. C
  5920. C***ROUTINES CALLED  CNBFS, CNBIR, CPOFS, CPOIR, R1MACH
  5921. C***REVISION HISTORY  (YYMMDD)
  5922. C   801002  DATE WRITTEN
  5923. C   891009  Removed unreferenced statement labels.  (WRB)
  5924. C   891009  REVISION DATE from Version 3.2
  5925. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  5926. C   901009  Restructured using IF-THEN-ELSE-ENDIF, cleaned up FORMATs,
  5927. C           including removing an illegal character from column 1, and
  5928. C           editorial changes.  (RWC)
  5929. C***END PROLOGUE  CQCK
  5930.       REAL R,DELX,DELMAX,R1MACH
  5931.       COMPLEX A(4,4),AT(5,4),ABE(5,7),ABET(5,7),B(4),BT(4),C(4),WORK(35)
  5932.       CHARACTER*4 LIST(4)
  5933.       INTEGER LDA,N,ML,MU,IND,IWORK(4),NERR,I,J,J1,J2,JD,MLP,K,KCASE,
  5934.      1 KPROG
  5935.       DATA A/(2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  5936.      1  (0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  5937.      2  (0.E0,0.E0),(0.E0,0.E0),(3.E0,0.E0),(0.E0,1.E0),
  5938.      3  (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  5939.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  5940.       DATA B/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  5941.       DATA LIST/'POFS', 'POIR', 'NBFS', 'NBIR'/
  5942. C***FIRST EXECUTABLE STATEMENT  CQCK
  5943.       IF (KPRINT.GE.3) WRITE (LUN,800)
  5944.       LDA = 5
  5945.       N = 4
  5946.       ML = 2
  5947.       MU = 1
  5948.       JD = 2*ML+MU+1
  5949.       NERR = 0
  5950.       R = R1MACH(4)**0.8E0
  5951. C
  5952. C     FORM ABE(NB ARRAY) FROM MATRIX A.
  5953. C
  5954.       DO 30 J=1,JD
  5955.          DO 20 I=1,N
  5956.             ABE(I,J) = (0.0E0,0.0E0)
  5957.    20    CONTINUE
  5958.    30 CONTINUE
  5959. C
  5960.       MLP = ML+1
  5961.       DO 50 I=1,N
  5962.          J1 = MAX(1,I-ML)
  5963.          J2 = MIN(N,I+MU)
  5964.          DO 40 J=J1,J2
  5965.             K = J-I+MLP
  5966.             ABE(I,K) = A(I,J)
  5967.    40    CONTINUE
  5968.    50 CONTINUE
  5969. C
  5970. C     CASE 1 FOR WELL-CONDITIONED MATRIX, CASE 2 FOR SINGULAR MATRIX
  5971. C
  5972.       DO 170 KCASE=1,2
  5973.          DO 140 KPROG=1,4
  5974. C           FORM BT FROM B, AT FROM A, AND ABET FROM ABE.
  5975.             DO 60 I=1,N
  5976.                BT(I) = B(I)
  5977.                DO 58 J=1,N
  5978.                   AT(I,J) = A(I,J)
  5979.    58          CONTINUE
  5980.    60       CONTINUE
  5981. C
  5982.             DO 80 J=1,JD
  5983.                DO 70 I=1,N
  5984.                   ABET(I,J) = ABE(I,J)
  5985.    70          CONTINUE
  5986.    80       CONTINUE
  5987. C
  5988. C           MAKE AT AND ABET SINGULAR FOR CASE  =  2
  5989. C
  5990.             IF (KCASE.EQ.2) THEN
  5991.                DO 88 J=1,N
  5992.                   AT(1,J) = (0.0E0,0.0E0)
  5993.    88          CONTINUE
  5994. C
  5995.                DO 90 J=1,JD
  5996.                   ABET(1,J) = (0.0E0,0.0E0)
  5997.    90          CONTINUE
  5998.             ENDIF
  5999. C
  6000. C           SOLVE FOR X
  6001. C
  6002.             IF (KPROG.EQ.1) CALL CPOFS (AT,LDA,N,BT,1,IND,WORK)
  6003.             IF (KPROG.EQ.2) CALL CPOIR (AT,LDA,N,BT,1,IND,WORK)
  6004.             IF (KPROG.EQ.3) CALL CNBFS (ABET,LDA,N,ML,MU,BT,1,IND,WORK,
  6005.      *         IWORK)
  6006.             IF (KPROG.EQ.4) CALL CNBIR (ABET,LDA,N,ML,MU,BT,1,IND,WORK,
  6007.      *         IWORK)
  6008. C
  6009. C           COMPARE EXACT AND COMPUTED SOLUTIONS FOR CASE 1
  6010. C
  6011.             IF (KCASE.EQ.1) THEN
  6012.                DELMAX = 0.0E0
  6013.                DO 110 I=1,N
  6014.                   DELX = ABS(REAL(BT(I))-REAL(C(I)))
  6015.                   DELMAX = MAX(DELMAX,DELX)
  6016.                   DELX = ABS(AIMAG(BT(I))-AIMAG(C(I)))
  6017.                   DELMAX = MAX(DELMAX,DELX)
  6018.   110          CONTINUE
  6019. C
  6020.                IF (R.LE.DELMAX) THEN
  6021.                   NERR = NERR+1
  6022.                   WRITE (LUN,801) LIST(KPROG),KCASE,DELMAX
  6023.                ENDIF
  6024.             ELSE
  6025. C              CHECK CONTROL FOR SINGULAR MATRIX FOR CASE 2
  6026. C
  6027.                IF (IND.NE.-4) THEN
  6028.                   NERR = NERR+1
  6029.                   WRITE (LUN,802) LIST(KPROG),KCASE,IND
  6030.                ENDIF
  6031.             ENDIF
  6032.   140    CONTINUE
  6033.   170 CONTINUE
  6034. C
  6035. C     SUMMARY PRINT
  6036. C
  6037.       IF (NERR.NE.0) WRITE (LUN,803) NERR
  6038.       IF (KPRINT.GE.2 .AND. NERR.EQ.0) WRITE (LUN,804)
  6039.       RETURN
  6040. C
  6041.   800 FORMAT (/' *    CQCK - QUICK CHECK FOR CPOFS, CPOIR, CNBFS AND ',
  6042.      1   'CNBIR'/)
  6043.   801 FORMAT ('   PROBLEM WITH C', A, ', CASE ', I1,
  6044.      1   '.  MAX ABS ERROR OF', E11.4/)
  6045.   802 FORMAT ('   PROBLEM WITH C', A, ', CASE ', I1, '.  IND = ', I2,
  6046.      1   ' INSTEAD OF -4'/)
  6047.   803 FORMAT (/' **** CQCK DETECTED A TOTAL OF ', I2,' PROBLEMS. ****'/)
  6048.   804 FORMAT ('     CQCK DETECTED NO PROBLEMS.'/)
  6049.       END
  6050. *DECK CQNG
  6051.       SUBROUTINE CQNG (LUN, KPRINT, IPASS)
  6052. C***BEGIN PROLOGUE  CQNG
  6053. C***PURPOSE  Quick check for QNG.
  6054. C***LIBRARY   SLATEC
  6055. C***TYPE      SINGLE PRECISION (CQNG-S, CDQNG-D)
  6056. C***AUTHOR  (UNKNOWN)
  6057. C***ROUTINES CALLED  CPRIN, F1N, F2N, QNG, R1MACH
  6058. C***REVISION HISTORY  (YYMMDD)
  6059. C   ??????  DATE WRITTEN
  6060. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  6061. C   901205  Added PASS/FAIL message and changed the name of the first
  6062. C           argument.  (RWC)
  6063. C   910501  Added PURPOSE and TYPE records.  (WRB)
  6064. C***END PROLOGUE  CQNG
  6065. C
  6066. C FOR FURTHER DOCUMENTATION SEE ROUTINE CQPDOC
  6067. C
  6068.       REAL A,ABSERR,B,R1MACH,EPMACH,EPSABS,EPSREL,EXACT1,ERROR,
  6069.      *  EXACT2,F1N,F2N,RESULT,UFLOW
  6070.       INTEGER IER,IERV,IP,IPASS,KPRINT,NEVAL
  6071.       DIMENSION IERV(1)
  6072.       EXTERNAL F1N,F2N
  6073.       DATA EXACT1/0.7281029132255818E+00/
  6074.       DATA EXACT2/0.1E+02/
  6075. C***FIRST EXECUTABLE STATEMENT  CQNG
  6076.       IF (KPRINT.GE.2) WRITE (LUN, '(''1QNG QUICK CHECK''/)')
  6077. C
  6078. C TEST ON IER = 0
  6079. C
  6080.       IPASS = 1
  6081.       EPSABS = 0.0E+00
  6082.       EPMACH = R1MACH(4)
  6083.       UFLOW = R1MACH(1)
  6084.       EPSREL = MAX(SQRT(EPMACH),0.1E-07)
  6085.       A = 0.0E+00
  6086.       B = 0.1E+01
  6087.       CALL QNG(F1N,A,B,EPSABS,EPSREL,RESULT,ABSERR,NEVAL,IER)
  6088.       IERV(1) = IER
  6089.       IP = 0
  6090.       ERROR = ABS(EXACT1-RESULT)
  6091.       IF(IER.EQ.0.AND.ERROR.LE.ABSERR.AND.ABSERR.LE.EPSREL*ABS(EXACT1))
  6092.      *  IP = 1
  6093.       IF(IP.EQ.0) IPASS = 0
  6094.       IF(KPRINT.NE.0) CALL CPRIN(LUN,0,KPRINT,IP,EXACT1,RESULT,ABSERR,
  6095.      *  NEVAL,IERV,1)
  6096. C
  6097. C TEST ON IER = 1
  6098. C
  6099.       CALL QNG(F2N,A,B,UFLOW,0.0E+00,RESULT,ABSERR,NEVAL,IER)
  6100.       IERV(1) = IER
  6101.       IP = 0
  6102.       IF(IER.EQ.1) IP = 1
  6103.       IF(IP.EQ.0) IPASS = 0
  6104.       IF(KPRINT.NE.0) CALL CPRIN(LUN,1,KPRINT,IP,EXACT2,RESULT,ABSERR,
  6105.      *  NEVAL,IERV,1)
  6106. C
  6107. C TEST ON IER = 6
  6108. C
  6109.       EPSABS = 0.0E+00
  6110.       EPSREL = 0.0E+00
  6111.       CALL QNG(F1N,A,B,EPSABS,0.0E+00,RESULT,ABSERR,NEVAL,IER)
  6112.       IERV(1) = IER
  6113.       IP = 0
  6114.       IF(IER.EQ.6.AND.RESULT.EQ.0.0E+00.AND.ABSERR.EQ.0.0E+00.AND.
  6115.      *  NEVAL.EQ.0) IP = 1
  6116.       IF(IP.EQ.0) IPASS = 0
  6117.       IF(KPRINT.NE.0) CALL CPRIN(LUN,6,KPRINT,IP,EXACT1,RESULT,ABSERR,
  6118.      *  NEVAL,IERV,1)
  6119. C
  6120.       IF (KPRINT.GE.1) THEN
  6121.          IF (IPASS.EQ.0) THEN
  6122.             WRITE(LUN, '(/'' SOME TEST(S) IN CQNG FAILED''/)')
  6123.          ELSEIF (KPRINT.GE.2) THEN
  6124.             WRITE(LUN, '(/'' ALL TEST(S) IN CQNG PASSED''/)')
  6125.          ENDIF
  6126.       ENDIF
  6127.       RETURN
  6128.       END
  6129. *DECK CQRQC
  6130.       SUBROUTINE CQRQC (LUN, KPRINT, NERR)
  6131. C***BEGIN PROLOGUE  CQRQC
  6132. C***PURPOSE  Quick check for CQRDC and CQRSL.
  6133. C***LIBRARY   SLATEC
  6134. C***KEYWORDS  QUICK CHECK
  6135. C***AUTHOR  Voorhees, E. A., (LANL)
  6136. C***DESCRIPTION
  6137. C
  6138. C    THE RETURNED FLOATING POINT VALUES FROM CQRDC AND CQRSL FOR
  6139. C    FACTORED X, QRAUX, QY, QTY, B, RSD, AND XB ARE COMPARED TO
  6140. C    THEIR CORRESPONDING STORED PRE-COMPUTED VALUES (ENTERED
  6141. C    WITH DATA STATEMENTS).  FAILURE OF THE TEST OCCURS WHEN
  6142. C    AGREEMENT TO 3 SIGNIFICANT DIGITS IS NOT ACHIEVED AND AN
  6143. C    ERROR MESSAGE IS THEN PRINTED.
  6144. C
  6145. C    THE RETURNED INTEGER VALUES OF JPVT AND INFO ARE ALSO CHECKED.
  6146. C    LACK OF AGREEMENT RESULTS IN AN ERROR MESSAGE.  A SUMMARY
  6147. C    LINE IS ALWAYS PRINTED.
  6148. C
  6149. C    NO INPUT ARGUMENTS ARE REQUIRED.  ON RETURN, NERR (INTEGER
  6150. C    TYPE) CONTAINS THE TOTAL COUNT OF ALL FAILURES DETECTED.
  6151. C
  6152. C***ROUTINES CALLED  CQRDC, CQRSL
  6153. C***REVISION HISTORY  (YYMMDD)
  6154. C   801029  DATE WRITTEN
  6155. C   890618  REVISION DATE from Version 3.2
  6156. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  6157. C   901010  Restructured using IF-THEN-ELSE-ENDIF, moved an ARITHMETIC
  6158. C           STATEMENT FUNCTION ahead of the FIRST EXECUTABLE STATEMENT
  6159. C           record and cleaned up FORMATs.  (RWC)
  6160. C***END PROLOGUE  CQRQC
  6161.       COMPLEX A(4,4),QRAUX(4),WORK(4),Y(4),QY(4),QTY(4),B(4),RSD(4),XB(4
  6162.      1)
  6163.       COMPLEX AT(5,4),AC(4,4),QRAUXC(4),QYC(4),QTYC(4),BC(4),RSDC(4),XBC
  6164.      1(4),X1,X2
  6165.       CHARACTER KPROG*9,KFAIL*75
  6166.       INTEGER LDX,N,P,JPVT(4),JOB,K,INFO
  6167.       INTEGER JPVTT(4),JPVTC(4),I,J,INDX(5),NERR,L
  6168.       REAL DELX
  6169.       DATA A/(2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  6170.      1 (0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6171.      2 (0.E0,0.E0),(0.E0,0.E0),(3.E0,0.E0),(0.E0,1.E0),
  6172.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  6173.       DATA JPVT/0,-1,1,0/
  6174.       DATA Y/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  6175.       DATA AC/(-3.16228E0,0.E0),(0.E0,0.E0),(.94868E0,0.E0),
  6176.      1 (0.E0,.31623E0),(0.E0,2.21359E0),(-3.47851E0,0.E0),
  6177.      2 (0.E0,.31623E0),(.94868E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6178.      3 (2.23607E0,0.E0),(0.E0,.70711E0),(0.E0,0.E0),(0.E0,0.E0),
  6179.      4 (0.E0,-1.78885E0),(-1.34164E0,0.E0)/
  6180.       DATA QRAUXC/(1.E0,0.E0),(1.E0,0.E0),(1.70711E0,0.E0),(0.E0,0.E0)/
  6181.       DATA JPVTC/3,4,1,2/
  6182.       DATA QYC/(0.E0,-5.81378E0),(-2.68328E0,0.E0),(-1.89737E0,-1.58114E
  6183.      10),
  6184.      2 (1.58114E0,-3.79473E0)/
  6185.       DATA QTYC/(0.E0,5.37587E0),(-3.47851E0,0.E0),(4.02492E0,2.23607E0)
  6186.      1,
  6187.      2 (0.E0,-1.34164E0)/
  6188.       DATA BC/(0.E0,-1.E0),(1.E0,0.E0),(1.E0,1.E0),(0.E0,1.E0)/
  6189.       DATA RSDC/(0.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0)/
  6190.       DATA XBC/(3.E0,2.E0),(-1.E0,3.E0),(0.E0,-4.E0),(5.E0,0.E0)/
  6191.       DATA KPROG/'QRDC QRSL'/
  6192.       DATA KFAIL/'FACTOR QRAUX  JPVT  QY        QTY       SOLUTION  RSD
  6193.      1       XB        INFO'/
  6194. C
  6195.       DELX(X1,X2) = ABS(REAL(X1-X2))+ABS(AIMAG(X1-X2))
  6196. C***FIRST EXECUTABLE STATEMENT  CQRQC
  6197.       LDX = 5
  6198.       N = 4
  6199.       P = 4
  6200.       K = 4
  6201.       NERR = 0
  6202. C
  6203. C     FORM AT AND JPVTT
  6204. C
  6205.       DO 20 J=1,N
  6206.          JPVTT(J) = JPVT(J)
  6207.          DO 10 I=1,N
  6208.             AT(I,J) = A(I,J)
  6209.    10    CONTINUE
  6210.    20 CONTINUE
  6211. C
  6212. C     TEST CQRDC (FACTOR, QRAUX, JPVT)
  6213. C
  6214.       JOB = 1
  6215.       CALL CQRDC(AT,LDX,N,P,QRAUX,JPVTT,WORK,JOB)
  6216.       INDX(1) = 0
  6217.       DO 40 J=1,N
  6218.          DO 30 I=1,N
  6219.             IF (DELX(AT(I,J),AC(I,J)) .GT. .0001) INDX(1) = INDX(1)+1
  6220.    30    CONTINUE
  6221.    40 CONTINUE
  6222. C
  6223.       IF (INDX(1) .NE. 0) THEN
  6224.          WRITE (LUN, 501) KPROG(1:4),KFAIL(1:6)
  6225.          NERR = NERR + 1
  6226.       ENDIF
  6227. C
  6228.       DO 60 I=1,2
  6229.          INDX(I) = 0
  6230.    60 CONTINUE
  6231. C
  6232.       DO 70 I=1,N
  6233.          IF (DELX(QRAUX(I),QRAUXC(I)) .GT. .0001) INDX(1) = INDX(1)+1
  6234.          IF (JPVTT(I) .NE. JPVTC(I)) INDX(2) = INDX(2)+1
  6235.    70 CONTINUE
  6236. C
  6237.       DO 90 I=1,2
  6238.          L = 7*I+1
  6239.          IF (INDX(I) .NE. 0) THEN
  6240.             WRITE (LUN,501) KPROG(1:4),KFAIL(L:L+4)
  6241.             NERR = NERR + 1
  6242.          ENDIF
  6243.    90 CONTINUE
  6244. C
  6245. C     TEST CQRSL (QY, QTY, SOLUTION, RSD, XB, INFO)
  6246. C
  6247.       JOB = 11111
  6248.       DO 100 I=1,5
  6249.          INDX(I) = 0
  6250.   100 CONTINUE
  6251. C
  6252.       CALL CQRSL(AT,LDX,N,K,QRAUX,Y,QY,QTY,B,RSD,XB,JOB,INFO)
  6253.       DO 110 I=1,N
  6254.          IF (DELX(QY(I),QYC(I))   .GT. .0001) INDX(1) = INDX(1)+1
  6255.          IF (DELX(QTY(I),QTYC(I)) .GT. .0001) INDX(2) = INDX(2)+1
  6256.          IF (DELX(B(I),BC(I))     .GT. .0001) INDX(3) = INDX(3)+1
  6257.          IF (DELX(RSD(I),RSDC(I)) .GT. .0001) INDX(4) = INDX(4)+1
  6258.          IF (DELX(XB(I),XBC(I))   .GT. .0001) INDX(5) = INDX(5)+1
  6259.   110 CONTINUE
  6260. C
  6261.       DO 130 I=1,5
  6262.          L = 10*I+11
  6263.          IF (INDX(I) .NE. 0) THEN
  6264.             WRITE (LUN,501) KPROG(6:9),KFAIL(L:L+8)
  6265.             NERR = NERR + 1
  6266.          ENDIF
  6267.   130 CONTINUE
  6268. C
  6269.       IF (INFO .NE. 0) THEN
  6270.          WRITE (LUN,501) KPROG(6:9),KFAIL(71:74)
  6271.          NERR = NERR + 1
  6272.       ENDIF
  6273. C
  6274.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,500) NERR
  6275.       RETURN
  6276. C
  6277.   500 FORMAT(/' * CQRQC - TEST FOR CQRDC AND CQRSL FOUND ', I1,
  6278.      *   ' ERRORS.'/)
  6279.   501 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  6280.       END
  6281. *DECK CQRTST
  6282.       SUBROUTINE CQRTST (LUN, KPRINT, IPASS)
  6283. C***BEGIN PROLOGUE  CQRTST
  6284. C***PURPOSE  Quick check for CPQR79.
  6285. C***LIBRARY   SLATEC
  6286. C***TYPE      COMPLEX (RQRTST-S, CQRTST-C)
  6287. C***AUTHOR  (UNKNOWN)
  6288. C***ROUTINES CALLED  CPQR79, NUMXER, PASS, R1MACH, XERCLR, XGETF, XSETF
  6289. C***REVISION HISTORY  (YYMMDD)
  6290. C   ??????  DATE WRITTEN
  6291. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  6292. C   901205  Changed usage of R1MACH(3) to R1MACH(4).  (RWC)
  6293. C   911010  Code reworked and simplified.  (RWC and WRB)
  6294. C***END PROLOGUE  CQRTST
  6295.       INTEGER ITEST(2), ITMP(7)
  6296.       REAL WORK(144)
  6297.       COMPLEX COEFF1(9), COEFF2(2), COEFF3(2), ROOT(8), CHK1(8), CHK2
  6298.       LOGICAL FATAL
  6299. C
  6300.       DATA COEFF1 / (1.0,0.0), (-7.0,-2.0), (8.0,6.0), (28.0, 8.0),
  6301.      *              (-49.0,-24.0), (7.0,2.0), (-8.0,-6.0),
  6302.      *              (-28.0,-8.0), (48.0,24.0)/
  6303.       DATA COEFF2 / (1.0,1.0), (1.0,3.0) /
  6304.       DATA COEFF3 / (0.0,0.0), (1.0,3.0) /
  6305.       DATA CHK1 / (4.0,2.0), (3.0,0.0), (-2.0,0.0), (2.0,0.0),
  6306.      *            (0.0,-1.0), (-1.0,0.0), (0.0,1.0), (1.0,0.0) /
  6307.       DATA CHK2 / (-2.0,-1.0) /
  6308. C***FIRST EXECUTABLE STATEMENT  CQRTST
  6309.       IF (KPRINT .GE. 2) WRITE (LUN, 90000)
  6310.       TOL = SQRT(R1MACH(4))
  6311.       IPASS = 1
  6312. C
  6313. C     First test.
  6314. C
  6315.       CALL CPQR79 (8, COEFF1, ROOT, IERR, WORK)
  6316. C
  6317. C     Check to see if test passed.
  6318. C
  6319.       DO 10 I=1,7
  6320.          ITMP(I) = 0
  6321.    10 CONTINUE
  6322. C
  6323. C     Check for roots in any order.
  6324. C
  6325.       DO 30 I=1,7
  6326.          DO 20 J=1,7
  6327.             IF (ABS(ROOT(I)-CHK1(J)) .LE. TOL) THEN
  6328.                ITMP(J) = 1
  6329.                GOTO 30
  6330.             ENDIF
  6331.    20    CONTINUE
  6332.    30 CONTINUE
  6333. C
  6334. C     Check that we found all 7 roots.
  6335. C
  6336.       ITEST(1) = 1
  6337.       DO 40 I=1,7
  6338.          ITEST(1) = ITEST(1)*ITMP(I)
  6339.    40 CONTINUE
  6340. C
  6341. C     Print test results.
  6342. C
  6343.       IF (KPRINT.GE.3 .OR. (KPRINT.GE.2.AND.ITEST(1).EQ.0)) THEN
  6344.          WRITE (LUN, 90010)
  6345.          WRITE (LUN, 90020) (J,COEFF1(J), J=1,9)
  6346.          WRITE (LUN, 90030)
  6347.          WRITE (LUN, 90040) (J,ROOT(J), J=1,7)
  6348.       ENDIF
  6349.       IF (KPRINT .GE. 2) THEN
  6350.          CALL PASS (LUN, 1, ITEST(1))
  6351.       ENDIF
  6352. C
  6353. C     Set up next problem.
  6354. C
  6355.       CALL CPQR79 (1, COEFF2, ROOT, IERR, WORK)
  6356. C
  6357. C     Check to see if test passed.
  6358. C
  6359.       ITEST(2) = 1
  6360.       IF (ABS(ROOT(1)-CHK2) .GT. TOL) ITEST(2) = 0
  6361. C
  6362. C     Print test results for second test.
  6363. C
  6364.       IF (KPRINT.GE.3 .OR. (KPRINT.GE.2.AND.ITEST(1).EQ.0)) THEN
  6365.          WRITE (LUN, 90050)
  6366.          WRITE (LUN, 90010)
  6367.          WRITE (LUN, 90020) (J,COEFF2(J), J=1,2)
  6368.          WRITE (LUN, 90030)
  6369.          WRITE (LUN, 90040) (J,ROOT(J), J=1,1)
  6370.       ENDIF
  6371.       IF (KPRINT .GE. 2) THEN
  6372.          CALL PASS (LUN, 2, ITEST(2))
  6373.       ENDIF
  6374. C
  6375. C     Trigger 2 error conditions
  6376. C
  6377.       CALL XGETF (KONTRL)
  6378.       IF (KPRINT .LE. 2) THEN
  6379.          CALL XSETF (0)
  6380.       ELSE
  6381.          CALL XSETF (1)
  6382.       ENDIF
  6383.       FATAL = .FALSE.
  6384.       CALL XERCLR
  6385.       IF (KPRINT .GE. 3) WRITE (LUN, 90060)
  6386. C
  6387. C     CALL CPQR79 with 0 degree polynomial.
  6388. C
  6389.       CALL CPQR79 (0, COEFF2, ROOT, IERR, WORK)
  6390.       IF (NUMXER(NERR) .NE. 3) THEN
  6391.          FATAL = .TRUE.
  6392.       ENDIF
  6393.       CALL XERCLR
  6394. C
  6395. C     CALL CPQR79 with zero leading coefficient.
  6396. C
  6397.       CALL CPQR79 (2, COEFF3, ROOT, IERR, WORK)
  6398.       IF (NUMXER(NERR) .NE. 2) THEN
  6399.          FATAL = .TRUE.
  6400.       ENDIF
  6401.       CALL XERCLR
  6402. C
  6403.       CALL XSETF (KONTRL)
  6404.       IF (FATAL) THEN
  6405.          IPASS = 0
  6406.          IF (KPRINT .GE. 2) THEN
  6407.             WRITE (LUN, 90070)
  6408.          ENDIF
  6409.       ELSE
  6410.          IF (KPRINT .GE. 3) THEN
  6411.             WRITE (LUN, 90080)
  6412.          ENDIF
  6413.       ENDIF
  6414. C
  6415. C     See if all tests passed.
  6416. C
  6417.       IPASS = IPASS*ITEST(1)*ITEST(2)
  6418. C
  6419.       IF (IPASS.EQ.1 .AND. KPRINT.GT.1) WRITE (LUN,90100)
  6420.       IF (IPASS.EQ.0 .AND. KPRINT.NE.0) WRITE (LUN,90110)
  6421.       RETURN
  6422. C
  6423. 90000 FORMAT ('1', /,' CPQR79 QUICK CHECK')
  6424. 90010 FORMAT (/, ' CHECK REAL AND IMAGINARY PARTS OF ROOT' /
  6425.      *          ' COEFFICIENTS')
  6426. 90020 FORMAT (/ (I6, 3X, 1P, 2E22.14))
  6427. 90030 FORMAT (// 25X, 'TABLE of ROOTS' //
  6428.      *        '   ROOT         REAL  PART', 12X, 'IMAG  PART' /
  6429.      *        '  NUMBER', 8X, 2(' of  ZERO ', 12X))
  6430. 90040 FORMAT (I6, 3X, 1P, 2E22.14)
  6431. 90050 FORMAT (/, ' TEST SUBSEQUENT RELATED CALL')
  6432. 90060 FORMAT (// ' TRIGGER 2 ERROR CONDITIONS' //)
  6433. 90070 FORMAT (/ ' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  6434. 90080 FORMAT (/ ' ALL INCORRECT ARGUMENT TESTS PASSED')
  6435. 90100 FORMAT (/' **************CPQR79 PASSED ALL TESTS**************')
  6436. 90110 FORMAT (/' **************CPQR79 FAILED SOME TESTS*************')
  6437.       END
  6438. *DECK CSIQC
  6439.       SUBROUTINE CSIQC (LUN, KPRINT, NERR)
  6440. C***BEGIN PROLOGUE  CSIQC
  6441. C***PURPOSE  Quick check for CSIFA, CSICO, CSISL and CSIDI.
  6442. C***LIBRARY   SLATEC
  6443. C***KEYWORDS  QUICK CHECK
  6444. C***AUTHOR  Voorhees, E. A., (LANL)
  6445. C***DESCRIPTION
  6446. C
  6447. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  6448. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  6449. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  6450. C    (THE SOLUTION VECTOR),  AINV  (INVERSE OF MATRIX  A ),  DC
  6451. C    (DETERMINANT OF  A ), AND  RCND  ( RCOND ) ARE ENTERED
  6452. C    WITH DATA STATEMENTS.
  6453. C
  6454. C    THE COMPUTED TEST RESULTS FOR  X, RCOND, THE DETERMINANT, AND
  6455. C    THE INVERSE ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  6456. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  6457. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  6458. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  6459. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  6460. C
  6461. C    NO INPUT ARGUMENTS ARE REQUIRED.
  6462. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  6463. C    ALL FAILURES DETECTED BY CSIQC.
  6464. C
  6465. C***ROUTINES CALLED  CSICO, CSIDI, CSIFA, CSISL
  6466. C***REVISION HISTORY  (YYMMDD)
  6467. C   801021  DATE WRITTEN
  6468. C   890618  REVISION DATE from Version 3.2
  6469. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  6470. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  6471. C           FORMATs.  (RWC)
  6472. C***END PROLOGUE  CSIQC
  6473.       COMPLEX A(4,4),AT(5,4),B(4),BT(4),C(4),AINV(4,4),DET(2),DC(2),
  6474.      1 Z(4),XA,XB
  6475.       REAL R,RCOND,RCND,DELX
  6476.       CHARACTER KPROG*19, KFAIL*39
  6477.       INTEGER LDA,N,IPVT(4),INFO,I,J,INDX,NERR
  6478.       DATA A/(2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  6479.      1 (0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6480.      2 (0.E0,0.E0),(0.E0,0.E0),(3.E0,0.E0),(0.E0,1.E0),
  6481.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  6482.       DATA B/(3.E0,2.E0),(1.E0,1.E0),(0.E0,-4.E0),(3.E0,0.E0)/
  6483.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  6484.       DATA AINV/(.40000E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,
  6485.      1 0.E0),
  6486.      2 (0.E0,.20000E0),(.40000E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6487.      3 (0.E0,0.E0),(0.E0,0.E0),(.30769E0,0.E0),(0.E0,1.E0),
  6488.      4 (0.E0,0.E0),(0.E0,0.E0),(0.E0,.07692E0),(.23077E0,0.E0)/
  6489.       DATA DC/(6.5E0,0.E0),(1.0E0,0.E0)/
  6490.       DATA KPROG/'SIFA SICO SISL SIDI'/
  6491.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE'/
  6492.       DATA RCND/.58692E0/
  6493. C
  6494.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  6495. C***FIRST EXECUTABLE STATEMENT  CSIQC
  6496.       LDA = 5
  6497.       N = 4
  6498.       NERR = 0
  6499. C
  6500. C     FORM AT FOR CSIFA AND BT FOR CSISL, TEST CSIFA
  6501. C
  6502.       DO 20 J=1,N
  6503.          BT(J) = B(J)
  6504.          DO 10 I=1,N
  6505.             AT(I,J) = A(I,J)
  6506.    10    CONTINUE
  6507.    20 CONTINUE
  6508. C
  6509.       CALL CSIFA(AT,LDA,N,IPVT,INFO)
  6510.       IF (INFO .NE. 0) THEN
  6511.          WRITE (LUN,201) KPROG(1:4),KFAIL(1:4)
  6512.          NERR = NERR + 1
  6513.       ENDIF
  6514. C
  6515. C     TEST CSISL
  6516. C
  6517.       CALL CSISL(AT,LDA,N,IPVT,BT)
  6518.       INDX = 0
  6519.       DO 40 I=1,N
  6520.          IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  6521.    40 CONTINUE
  6522. C
  6523.       IF (INDX .NE. 0) THEN
  6524.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  6525.          NERR = NERR + 1
  6526.       ENDIF
  6527. C
  6528. C     FORM AT FOR CSICO, TEST CSICO
  6529. C
  6530.       DO 70 J=1,N
  6531.          DO 60 I=1,N
  6532.             AT(I,J) = A(I,J)
  6533.    60    CONTINUE
  6534.    70 CONTINUE
  6535. C
  6536.       CALL CSICO(AT,LDA,N,IPVT,RCOND,Z)
  6537.       R = ABS(RCND-RCOND)
  6538.       IF (R .GE. .0001) THEN
  6539.          WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  6540.          NERR = NERR + 1
  6541.       ENDIF
  6542. C
  6543. C     TEST CSIDI FOR JOB=11
  6544. C
  6545.       CALL CSIDI(AT,LDA,N,IPVT,DET,Z,11)
  6546.       INDX = 0
  6547.       DO 110 I=1,2
  6548.          IF (DELX(DC(I),DET(I)) .GT. .0001) INDX=INDX+1
  6549.   110 CONTINUE
  6550. C
  6551.       IF (INDX .NE. 0) THEN
  6552.          WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  6553.          NERR = NERR + 1
  6554.       ENDIF
  6555. C
  6556.       INDX = 0
  6557.       DO 140 I=1,N
  6558.          DO 130 J=1,N
  6559.             IF (DELX(AINV(I,J),AT(I,J)) .GT. .0001) INDX=INDX+1
  6560.   130    CONTINUE
  6561.   140 CONTINUE
  6562. C
  6563.       IF (INDX .NE. 0) THEN
  6564.          WRITE (LUN,201) KPROG(16:19),KFAIL(33:39)
  6565.          NERR = NERR + 1
  6566.       ENDIF
  6567. C
  6568.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  6569.       RETURN
  6570. C
  6571.   200 FORMAT(/' * CSIQC - TEST FOR CSIFA, CSICO, CSISL AND CSIDI FOUND '
  6572.      1   , I1, ' ERRORS.'/)
  6573.   201 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  6574.       END
  6575. *DECK CSPQC
  6576.       SUBROUTINE CSPQC (LUN, KPRINT, NERR)
  6577. C***BEGIN PROLOGUE  CSPQC
  6578. C***PURPOSE  Quick check for CSPFA, CSPCO, CSPSL and CSPDI.
  6579. C***LIBRARY   SLATEC
  6580. C***KEYWORDS  QUICK CHECK
  6581. C***AUTHOR  Voorhees, E. A., (LANL)
  6582. C***DESCRIPTION
  6583. C
  6584. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  6585. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  6586. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  6587. C    (THE SOLUTION VECTOR),  AINV  (INVERSE OF MATRIX  A ),  DC
  6588. C    (DETERMINANT OF  A ), AND  RCND  ( RCOND ) ARE ENTERED
  6589. C    WITH DATA STATEMENTS.
  6590. C
  6591. C    THE COMPUTED TEST RESULTS FOR  X, RCOND, THE DETERMINANT, AND
  6592. C    THE INVERSE ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  6593. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  6594. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  6595. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  6596. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  6597. C
  6598. C    NO INPUT ARGUMENTS ARE REQUIRED.
  6599. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  6600. C    ALL FAILURES DETECTED BY CSPQC.
  6601. C
  6602. C***ROUTINES CALLED  CSPCO, CSPDI, CSPFA, CSPSL
  6603. C***REVISION HISTORY  (YYMMDD)
  6604. C   801021  DATE WRITTEN
  6605. C   890618  REVISION DATE from Version 3.2
  6606. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  6607. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  6608. C           FORMATs.  (RWC)
  6609. C***END PROLOGUE  CSPQC
  6610.       COMPLEX AP(10),AT(10),B(4),BT(4),C(4),AINV(10),DET(2),DC(2),
  6611.      1 Z(4),XA,XB
  6612.       REAL R,RCOND,RCND,DELX
  6613.       CHARACTER KPROG*19, KFAIL*39
  6614.       INTEGER N,IPVT(4),INFO,I,J,INDX,NERR
  6615.       DATA AP/(2.E0,0.E0),(0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),
  6616.      1 (0.E0,0.E0),(3.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6617.      2 (0.E0,-1.E0),(4.E0,0.E0)/
  6618.       DATA B/(3.E0,2.E0),(1.E0,1.E0),(0.E0,-4.E0),(3.E0,0.E0)/
  6619.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  6620.       DATA AINV/(.4E0,0.E0),(0.E0,.2E0),(.4E0,0.E0),(0.E0,0.E0),
  6621.      1 (0.E0,0.E0),(.30769E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6622.      2 (0.E0,.07692E0),(.23077E0,0.E0)/
  6623.       DATA DC/(6.5E0,0.E0),(1.0E0,0.E0)/
  6624.       DATA KPROG/'SPFA SPCO SPSL SPDI'/
  6625.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE'/
  6626.       DATA RCND/.58692E0/
  6627. C
  6628.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  6629. C***FIRST EXECUTABLE STATEMENT  CSPQC
  6630.       N = 4
  6631.       NERR = 0
  6632. C
  6633. C     FORM AT FOR CSPFA AND BT FOR CSPSL, TEST CSPFA
  6634. C
  6635.       DO 10 J=1,N
  6636.          BT(J) = B(J)
  6637.    10 CONTINUE
  6638. C
  6639.       DO 20 I=1,10
  6640.          AT(I) = AP(I)
  6641.    20 CONTINUE
  6642. C
  6643.       CALL CSPFA(AT,N,IPVT,INFO)
  6644.       IF (INFO .NE. 0) THEN
  6645.          WRITE (LUN,201) KPROG(1:4),KFAIL(1:4)
  6646.          NERR = NERR + 1
  6647.       ENDIF
  6648. C
  6649. C     TEST CSPSL
  6650. C
  6651.       CALL CSPSL(AT,N,IPVT,BT)
  6652.       INDX = 0
  6653.       DO 40 I=1,N
  6654.          IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  6655.    40 CONTINUE
  6656. C
  6657.       IF (INDX .NE. 0) THEN
  6658.          WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  6659.          NERR = NERR + 1
  6660.       ENDIF
  6661. C
  6662. C     FORM AT FOR CSPCO, TEST CSPCO
  6663. C
  6664.       DO 60 I=1,10
  6665.          AT(I) = AP(I)
  6666.    60 CONTINUE
  6667. C
  6668.       CALL CSPCO(AT,N,IPVT,RCOND,Z)
  6669.       R = ABS(RCND-RCOND)
  6670.       IF (R .GE. .0001) THEN
  6671.          WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  6672.          NERR = NERR + 1
  6673.       ENDIF
  6674. C
  6675. C     TEST CSPDI FOR JOB=11
  6676. C
  6677.       CALL CSPDI(AT,N,IPVT,DET,Z,11)
  6678.       INDX = 0
  6679.       DO 110 I=1,2
  6680.         IF (DELX(DC(I),DET(I)) .GT. .0001) INDX=INDX+1
  6681.   110 CONTINUE
  6682. C
  6683.       IF (INDX .NE. 0) THEN
  6684.          WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  6685.          NERR = NERR + 1
  6686.       ENDIF
  6687. C
  6688.       INDX = 0
  6689.       DO 140 I=1,10
  6690.          IF (DELX(AINV(I),AT(I)) .GT. .0001) INDX=INDX+1
  6691.   140 CONTINUE
  6692. C
  6693.       IF (INDX .NE. 0) THEN
  6694.          WRITE (LUN,201) KPROG(16:19),KFAIL(33:39)
  6695.          NERR = NERR + 1
  6696.       ENDIF
  6697. C
  6698.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  6699.       RETURN
  6700. C
  6701.   200 FORMAT(/' * CSPQC - TEST FOR CSPFA, CSPCO, CSPSL AND CSPDI FOUND '
  6702.      1   , I1, ' ERRORS.'/)
  6703.   201 FORMAT (/'*** C', A, ' FAILURE - ERROR IN ', A)
  6704.       END
  6705. *DECK CSVQC
  6706.       SUBROUTINE CSVQC (LUN, KPRINT, NERR)
  6707. C***BEGIN PROLOGUE  CSVQC
  6708. C***PURPOSE  Quick check for CSVDC.
  6709. C***LIBRARY   SLATEC
  6710. C***KEYWORDS  QUICK CHECK
  6711. C***AUTHOR  Voorhees, E. A., (LANL)
  6712. C***DESCRIPTION
  6713. C
  6714. C    THE RETURNED FLOATING POINT VALUES FROM CSVDC FOR
  6715. C    S, E, U, AND  V  ARE COMPARED TO THEIR
  6716. C    CORRESPONDING STORED PRE-COMPUTED VALUES (ENTERED
  6717. C    WITH DATA STATEMENTS).  FAILURE OF THE TEST OCCURS WHEN
  6718. C    AGREEMENT TO 3 SIGNIFICANT DIGITS IS NOT ACHIEVED AND
  6719. C    AN ERROR MESSAGE IS THEN PRINTED.
  6720. C
  6721. C    THE RETURNED INTEGER VALUE OF INFO IS ALSO CHECKED.
  6722. C    LACK OF AGREEMENT RESULTS IN AN ERROR MESSAGE.  A SUMMARY
  6723. C    LINE IS ALWAYS PRINTED.
  6724. C
  6725. C    NO INPUT ARGUMENTS ARE REQUIRED.  ON RETURN, NERR (INTEGER
  6726. C    TYPE) CONTAINS THE TOTAL COUNT OF ALL FAILURES DETECTED.
  6727. C
  6728. C***ROUTINES CALLED  CSVDC
  6729. C***REVISION HISTORY  (YYMMDD)
  6730. C   801031  DATE WRITTEN
  6731. C   890618  REVISION DATE from Version 3.2
  6732. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  6733. C   901010  Restructured using IF-THEN-ELSE-ENDIF, moved an ARITHMETIC
  6734. C           STATEMENT FUNCTION ahead of the FIRST EXECUTABLE STATEMENT
  6735. C           record and cleaned up FORMATs.  (RWC)
  6736. C***END PROLOGUE  CSVQC
  6737.       COMPLEX A(4,4),WORK(4),S(4),E(4),U(4,4),V(4,4)
  6738.       COMPLEX AT(5,4),SC(4),EC(4),UVC(4,4),X1,X2
  6739.       INTEGER LDX,N,P,LDU,LDV,JOB,INFO
  6740.       CHARACTER KFAIL*12
  6741.       INTEGER I,J,INDX(4)
  6742.       REAL DELX
  6743.       DATA A/(2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  6744.      1 (0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6745.      2 (0.E0,0.E0),(0.E0,0.E0),(3.E0,0.E0),(0.E0,1.E0),
  6746.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  6747.       DATA KFAIL/'S E U V INFO'/
  6748.       DATA SC/(4.61803E0,0.E0),(3.0E0,0.E0),(2.38197E0,0.E0),(1.E0,0.E0)
  6749.      1/
  6750.       DATA EC/(0.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0)/
  6751.       DATA UVC/(0.E0,0.E0),(0.E0,0.E0),(-.52573E0,0.E0),(0.E0,-.85065E0)
  6752.      1,
  6753.      2 (.70711E0,0.E0),(0.E0,.70711E0),(0.E0,0.E0),(0.E0,0.E0),
  6754.      3 (0.E0,0.E0),(0.E0,0.E0),(-.85065E0,0.E0),(0.E0,.52573E0),
  6755.      4 (-.70711E0,0.E0),(0.E0,.70711E0),(0.E0,0.E0),(0.E0,0.E0)/
  6756. C
  6757.       DELX(X1,X2) = ABS(REAL(X1-X2))+ABS(AIMAG(X1-X2))
  6758. C***FIRST EXECUTABLE STATEMENT  CSVQC
  6759.       N = 4
  6760.       P = 4
  6761.       LDX = 5
  6762.       LDU = 4
  6763.       LDV = 4
  6764.       NERR = 0
  6765.       JOB = 11
  6766. C
  6767. C     FORM AT
  6768. C
  6769.       DO 20 J=1,N
  6770.          DO 10 I=1,N
  6771.             AT(I,J) = A(I,J)
  6772.    10    CONTINUE
  6773.    20 CONTINUE
  6774. C
  6775. C     TEST CSVDC  (S, E, U, V, INFO)
  6776. C
  6777.       DO 30 I=1,4
  6778.          INDX(I) = 0
  6779.    30 CONTINUE
  6780. C
  6781.       CALL CSVDC(AT,LDX,N,P,S,E,U,LDU,V,LDV,WORK,JOB,INFO)
  6782.       DO 50 J=1,N
  6783.          IF (DELX(S(J),SC(J)) .GT. .0001) INDX(1) = INDX(1)+1
  6784.          IF (DELX(E(J),EC(J)) .GT. .0001) INDX(2) = INDX(2)+1
  6785.          DO 40 I=1,N
  6786.             IF (DELX(U(I,J),UVC(I,J)) .GT. .0001) INDX(3) = INDX(3)+1
  6787.             IF (DELX(V(I,J),UVC(I,J)) .GT. .0001) INDX(4) = INDX(4)+1
  6788.    40    CONTINUE
  6789.    50 CONTINUE
  6790. C
  6791.       DO 70 I=1,4
  6792.          KONE=2*I-1
  6793.          IF (INDX(I) .NE. 0) THEN
  6794.             WRITE (LUN,201) KFAIL(KONE:KONE)
  6795.             NERR = NERR + 1
  6796.          ENDIF
  6797.    70 CONTINUE
  6798. C
  6799.       IF (INFO .NE. 0) THEN
  6800.          WRITE (LUN,201) KFAIL(9:12)
  6801.          NERR = NERR + 1
  6802.       ENDIF
  6803. C
  6804.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  6805.       RETURN
  6806. C
  6807.   200 FORMAT (/' * CSVQC - TEST FOR CSVDC FOUND ', I1, ' ERRORS.'/)
  6808.   201 FORMAT (/' *** CSVQC FAILURE - ERROR IN ', A)
  6809.       END
  6810. *DECK CTRQC
  6811.       SUBROUTINE CTRQC (LUN, KPRINT, NERR)
  6812. C***BEGIN PROLOGUE  CTRQC
  6813. C***PURPOSE  Quick check for CTRFA, CTRCO, CTRSL and CTRDI.
  6814. C***LIBRARY   SLATEC
  6815. C***KEYWORDS  QUICK CHECK
  6816. C***AUTHOR  Voorhees, E. A., (LANL)
  6817. C***DESCRIPTION
  6818. C
  6819. C    LET  A*X=B  BE A COMPLEX LINEAR SYSTEM WHERE THE MATRIX  A  IS
  6820. C    OF THE PROPER TYPE FOR THE LINPACK SUBROUTINES BEING TESTED.
  6821. C    THE VALUES OF  A  AND  B  AND THE PRE-COMPUTED VALUES OF  C
  6822. C    (THE SOLUTION VECTOR),  AINV  (INVERSE OF MATRIX  A ),  DC
  6823. C    (DETERMINANT OF  A ), AND  RCND  ( RCOND ) ARE ENTERED
  6824. C    WITH DATA STATEMENTS.
  6825. C
  6826. C    THE COMPUTED TEST RESULTS FOR  X, RCOND, THE DETERMINANT, AND
  6827. C    THE INVERSE ARE COMPARED TO THE STORED PRE-COMPUTED VALUES.
  6828. C    FAILURE OF THE TEST OCCURS WHEN AGREEMENT TO 3 SIGNIFICANT
  6829. C    DIGITS IS NOT ACHIEVED AND AN ERROR MESSAGE INDICATING WHICH
  6830. C    LINPACK SUBROUTINE FAILED AND WHICH QUANTITY WAS INVOLVED IS
  6831. C    PRINTED.  A SUMMARY LINE IS ALWAYS PRINTED.
  6832. C
  6833. C    NO INPUT ARGUMENTS ARE REQUIRED.
  6834. C    ON RETURN,  NERR  (INTEGER TYPE) CONTAINS THE TOTAL COUNT OF
  6835. C    ALL FAILURES DETECTED BY CTRQC.
  6836. C
  6837. C***ROUTINES CALLED  CTRCO, CTRDI, CTRSL
  6838. C***REVISION HISTORY  (YYMMDD)
  6839. C   801023  DATE WRITTEN
  6840. C   890618  REVISION DATE from Version 3.2
  6841. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  6842. C   901010  Restructured using IF-THEN-ELSE-ENDIF and cleaned up
  6843. C           FORMATs.  (RWC)
  6844. C***END PROLOGUE  CTRQC
  6845.       COMPLEX A(4,4),AT(5,4),B(4,2),BT(4),C(4),AINV(4,4,2),DET(2),
  6846.      1 DC(2),Z(4),XA,XB
  6847.       REAL R,RCOND,RCND(2),DELX
  6848.       CHARACTER KPROG*19, KFAIL*39
  6849.       INTEGER LDA,N,INFO,I,J,INDX,NERR
  6850.       INTEGER JOB,K,KK
  6851.       DATA A/(2.E0,0.E0),(0.E0,1.E0),(0.E0,0.E0),(0.E0,0.E0),
  6852.      1 (0.E0,-1.E0),(2.E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6853.      2 (0.E0,0.E0),(0.E0,0.E0),(3.E0,0.E0),(0.E0,1.E0),
  6854.      3 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.E0),(4.E0,0.E0)/
  6855.       DATA B/(2.E0,2.E0),(-1.E0,3.E0),(0.E0,-3.E0),(5.E0,0.E0),
  6856.      1 (3.E0,2.E0),(0.E0,2.E0),(0.E0,-4.E0),(4.E0,0.E0)/
  6857.       DATA C/(1.E0,1.E0),(0.E0,1.E0),(0.E0,-1.E0),(1.E0,0.E0)/
  6858.       DATA AINV/(.50000E0,0.E0),(0.E0,-.25000E0),(0.E0,0.E0),(0.E0,0.E0)
  6859.      1,
  6860.      2 (0.E0,-1.00000E0),(.50000E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6861.      3 (0.E0,0.E0),(0.E0,0.E0),(.33333E0,0.E0),(0.E0,-.083333E0),
  6862.      4 (0.E0,0.E0),(0.E0,0.E0),(0.E0,-1.00000E0),(.25000E0,0.E0),
  6863.      5 (.50000E0,0.E0),(0.E0,1.00000E0),(0.E0,0.E0),(0.E0,0.E0),
  6864.      6 (0.E0,.25000E0),(.50000E0,0.E0),(0.E0,0.E0),(0.E0,0.E0),
  6865.      7 (0.E0,0.E0),(0.E0,0.E0),(.33333E0,0.E0),(0.E0,1.00000E0),
  6866.      8 (0.E0,0.E0),(0.E0,0.E0),(0.E0,.083333E0),(.25000E0,0.E0)/
  6867.       DATA DC/(4.8E0,0.E0),(1.0E0,0.E0)/
  6868.       DATA KPROG/'TRFA TRCO TRSL TRDI'/
  6869.       DATA KFAIL/'INFO RCOND SOLUTION DETERMINANT INVERSE'/
  6870.       DATA RCND/.45695E0,.37047E0/
  6871. C
  6872.       DELX(XA,XB)=ABS(REAL(XA-XB))+ABS(AIMAG(XA-XB))
  6873. C***FIRST EXECUTABLE STATEMENT  CTRQC
  6874.       LDA = 5
  6875.       N = 4
  6876.       NERR = 0
  6877. C
  6878. C     K=1 FOR LOWER, K=2 FOR UPPER
  6879. C
  6880.       DO 160 K=1,2
  6881. C
  6882. C        FORM AT FOR CTRCO AND BT FOR CTRSL, TEST CTRCO
  6883. C
  6884.          DO 20 J=1,N
  6885.             BT(J) = B(J,K)
  6886.             DO 10 I=1,N
  6887.                AT(I,J) = A(I,J)
  6888.    10       CONTINUE
  6889.    20    CONTINUE
  6890. C
  6891.          JOB = K - 1
  6892.          CALL CTRCO(AT,LDA,N,RCOND,Z,JOB)
  6893.          R = ABS(RCND(K)-RCOND)
  6894.          IF (R .GE. .0001) THEN
  6895.             WRITE (LUN,201) KPROG(6:9),KFAIL(6:10)
  6896.             NERR = NERR + 1
  6897.          ENDIF
  6898. C
  6899. C        TEST CTRSL FOR JOB= 0 OR 1
  6900. C
  6901.          CALL CTRSL(AT,LDA,N,BT,JOB,INFO)
  6902.          IF (INFO .NE. 0) THEN
  6903.             WRITE (LUN,201) KPROG(11:14),KFAIL(1:4)
  6904.             NERR = NERR + 1
  6905.          ENDIF
  6906. C
  6907.          INDX = 0
  6908.          DO 50 I=1,N
  6909.             IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  6910.    50    CONTINUE
  6911. C
  6912.          IF (INDX .NE. 0) THEN
  6913.             WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  6914.             NERR = NERR + 1
  6915.          ENDIF
  6916. C
  6917. C        FORM BT FOR CTRSL
  6918. C
  6919.          KK = 3 - K
  6920.          DO 70 J=1,N
  6921.             BT(J) = B(J,KK)
  6922.    70    CONTINUE
  6923. C
  6924. C        TEST CTRSL FOR JOB EQUAL TO 10 OR 11
  6925. C
  6926.          JOB = 9 + K
  6927.          CALL CTRSL(AT,LDA,N,BT,JOB,INFO)
  6928.          IF (INFO .NE. 0) THEN
  6929.             WRITE (LUN,201) KPROG(11:14),KFAIL(1:4)
  6930.             NERR = NERR + 1
  6931.          ENDIF
  6932. C
  6933.          INDX = 0
  6934.          DO 90 I=1,N
  6935.             IF (DELX(C(I),BT(I)) .GT. .0001) INDX=INDX+1
  6936.    90    CONTINUE
  6937. C
  6938.          IF (INDX .NE. 0) THEN
  6939.             WRITE (LUN,201) KPROG(11:14),KFAIL(12:19)
  6940.             NERR = NERR + 1
  6941.          ENDIF
  6942. C
  6943. C        TEST CTRDI FOR JOB= 110 OR 111
  6944. C
  6945.          JOB = 109 + K
  6946.          CALL CTRDI(AT,LDA,N,DET,JOB,INFO)
  6947.          IF (INFO .NE. 0) THEN
  6948.             WRITE (LUN,201) KPROG(16:19),KFAIL(1:4)
  6949.             NERR = NERR + 1
  6950.          ENDIF
  6951. C
  6952.          INDX = 0
  6953.          DO 110 I=1,2
  6954.             IF (DELX(DC(I),DET(I)) .GT. .0001) INDX=INDX+1
  6955.   110    CONTINUE
  6956. C
  6957.          IF (INDX .NE. 0) THEN
  6958.             WRITE (LUN,201) KPROG(16:19),KFAIL(21:31)
  6959.             NERR = NERR + 1
  6960.          ENDIF
  6961. C
  6962.          INDX = 0
  6963.          DO 140 I=1,N
  6964.             DO 130 J=1,N
  6965.                IF (DELX(AINV(I,J,K),AT(I,J)) .GT. .0001) INDX=INDX+1
  6966.   130       CONTINUE
  6967.   140    CONTINUE
  6968. C
  6969.          IF (INDX .NE. 0) THEN
  6970.             WRITE (LUN,201) KPROG(16:19),KFAIL(33:39)
  6971.             NERR = NERR + 1
  6972.          ENDIF
  6973.   160 CONTINUE
  6974. C
  6975.       IF (KPRINT.GE.2 .OR. NERR.NE.0) WRITE (LUN,200) NERR
  6976.       RETURN
  6977. C
  6978.   200 FORMAT(/' * CTRQC - TEST FOR CTRCO, CTRSL AND CTRDI FOUND '
  6979.      1   , I2, ' ERRORS.'/)
  6980.   201 FORMAT (/' *** C', A, ' FAILURE - ERROR IN ', A)
  6981.       END
  6982. *DECK DAVNTS
  6983.       SUBROUTINE DAVNTS (LUN, KPRINT, IPASS)
  6984. C***BEGIN PROLOGUE  DAVNTS
  6985. C***PURPOSE  Quick check for DAVINT.
  6986. C***LIBRARY   SLATEC
  6987. C***TYPE      DOUBLE PRECISION (AVNTST-S, DAVNTS-D)
  6988. C***AUTHOR  (UNKNOWN)
  6989. C***ROUTINES CALLED  D1MACH, DAVINT, XERCLR, XGETF, XSETF
  6990. C***REVISION HISTORY  (YYMMDD)
  6991. C   ??????  DATE WRITTEN
  6992. C   890911  Removed unnecessary intrinsics.  (WRB)
  6993. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  6994. C   901205  Changed usage of D1MACH(3) to D1MACH(4).  (RWC)
  6995. C   910501  Added PURPOSE and TYPE records.  (WRB)
  6996. C   910708  Minor modifications in use of KPRINT.  (WRB)
  6997. C   920210  Code restructured and revised to test error returns for all
  6998. C           values of KPRINT.  (WRB)
  6999. C***END PROLOGUE  DAVNTS
  7000.       DOUBLE PRECISION D1MACH
  7001.       INTEGER I, IERR, IPASS, KPRINT, LUN, N
  7002.       DOUBLE PRECISION A, ANS, B, DEL, RN1, SQB, TOL, TOL1, X(501),
  7003.      +                 XINT, Y(501)
  7004.       LOGICAL FATAL
  7005. C***FIRST EXECUTABLE STATEMENT  DAVNTS
  7006.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  7007.       IPASS = 1
  7008.       TOL = MAX(.0001D0,SQRT(D1MACH(4)))
  7009.       TOL1 = 1.0D-2*TOL
  7010. C
  7011. C     Perform first accuracy test.
  7012. C
  7013.       A = 0.0D0
  7014.       B = 5.0D0
  7015.       XINT = EXP(5.0D0) - 1.0D0
  7016.       N = 500
  7017.       RN1 = N - 1
  7018.       SQB = SQRT(B)
  7019.       DEL = 0.4D0*(B-A)/(N-1)
  7020.       DO 100 I = 1,N
  7021.         X(I) = SQB*SQRT(A+(I-1)*(B-A)/RN1) + DEL
  7022.         Y(I) = EXP(X(I))
  7023.   100 CONTINUE
  7024.       CALL DAVINT (X, Y, N, A, B, ANS, IERR)
  7025. C
  7026. C     See if test was passed.
  7027. C
  7028.       IF (ABS(ANS-XINT) .GT. TOL) THEN
  7029.         IPASS = 0
  7030.         IF (KPRINT .GE. 3) WRITE (LUN,9010) IERR, ANS, XINT
  7031.       ENDIF
  7032. C
  7033. C     Perform second accuracy test.
  7034. C
  7035.       X(1) = 0.0D0
  7036.       X(2) = 5.0D0
  7037.       Y(1) = 1.0D0
  7038.       Y(2) = 0.5D0
  7039.       A = -0.5D0
  7040.       B = 0.5D0
  7041.       XINT = 1.0D0
  7042.       CALL DAVINT (X, Y, 2, A, B, ANS, IERR)
  7043. C
  7044. C     See if test was passed.
  7045. C
  7046.       IF (ABS(ANS-XINT) .GT. TOL1) THEN
  7047.         IPASS = 0
  7048.         IF (KPRINT .GE. 3) WRITE (LUN,9010) IERR, ANS, XINT
  7049.       ENDIF
  7050. C
  7051. C     Send message indicating passage or failure of tests.
  7052. C
  7053.       IF (KPRINT .GE. 2) THEN
  7054.         IF (IPASS .EQ. 1) THEN
  7055.            IF (KPRINT .GE. 3) WRITE (LUN,9020)
  7056.         ELSE
  7057.            WRITE (LUN,9030)
  7058.         ENDIF
  7059.       ENDIF
  7060. C
  7061. C     Test error returns.
  7062. C
  7063.       CALL XGETF (KONTRL)
  7064.       IF (KPRINT .LE. 2) THEN
  7065.          CALL XSETF (0)
  7066.       ELSE
  7067.          CALL XSETF (1)
  7068.       ENDIF
  7069.       FATAL = .FALSE.
  7070.       CALL XERCLR
  7071. C
  7072.       IF (KPRINT .GE. 3) THEN
  7073.         WRITE (LUN,9040)
  7074.       ENDIF
  7075.       DO 110 I = 1,20
  7076.         X(I) = (I-1)/19.0D0 - 0.01D0
  7077.         IF (I .NE. 1) Y(I) = X(I)/(EXP(X(I))-1.0)
  7078.   110 CONTINUE
  7079. C
  7080. C     Test IERR = 1 error return.
  7081. C
  7082.       Y(1) = 1.0D0
  7083.       CALL DAVINT (X, Y, 20, 0.0D0, 1.0D0, ANS, IERR)
  7084.       IF (IERR .NE. 1) THEN
  7085.         IPASS = 0
  7086.         FATAL = .TRUE.
  7087.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 1
  7088.       ENDIF
  7089.       CALL XERCLR
  7090. C
  7091. C     Test IERR = 2 error return.
  7092. C
  7093.       CALL DAVINT (X, Y, 20, 1.0D0, 0.0D0, ANS, IERR)
  7094.       IF (IERR .NE. 2) THEN
  7095.         IPASS = 0
  7096.         FATAL = .TRUE.
  7097.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 2
  7098.       ENDIF
  7099.       IF (ANS .NE. 0.0D0) THEN
  7100.         IPASS = 0
  7101.         FATAL = .TRUE.
  7102.         IF (KPRINT .GE. 3) WRITE (LUN,9070)
  7103.       ENDIF
  7104.       CALL XERCLR
  7105. C
  7106. C     Test IERR = 5 error return.
  7107. C
  7108.       CALL DAVINT (X, Y, 1, 0.0D0, 1.0D0, ANS, IERR)
  7109.       IF (IERR .NE. 5) THEN
  7110.         IPASS = 0
  7111.         FATAL = .TRUE.
  7112.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 5
  7113.       ENDIF
  7114.       IF (ANS .NE. 0.0D0) THEN
  7115.         IPASS = 0
  7116.         FATAL = .TRUE.
  7117.         IF (KPRINT .GE. 3) WRITE (LUN,9070)
  7118.       ENDIF
  7119.       CALL XERCLR
  7120. C
  7121. C     Test IERR = 4 error return.
  7122. C
  7123.       X(1) = 1.0D0/19.0D0
  7124.       X(2) = 0.0D0
  7125.       CALL DAVINT (X, Y, 20, 0.0D0, 1.0D0, ANS, IERR)
  7126.       IF (IERR .NE. 4) THEN
  7127.         IPASS = 0
  7128.         FATAL = .TRUE.
  7129.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 4
  7130.       ENDIF
  7131.       IF (ANS .NE. 0.0D0) THEN
  7132.         IPASS = 0
  7133.         FATAL = .TRUE.
  7134.         IF (KPRINT .GE. 3) WRITE (LUN,9070)
  7135.       ENDIF
  7136.       CALL XERCLR
  7137. C
  7138. C     Test IERR = 3 error return.
  7139. C
  7140.       X(1) = 0.0D0
  7141.       X(2) = 1.0D0/19.0D0
  7142.       CALL DAVINT (X, Y, 20, 0.0D0, .01D0, ANS, IERR)
  7143.       IF (IERR .NE. 3) THEN
  7144.         IPASS = 0
  7145.         FATAL = .TRUE.
  7146.         IF (KPRINT .GE. 3) WRITE (LUN,9060) IERR, 3
  7147.       ENDIF
  7148.       IF (ANS .NE. 0.0D0) THEN
  7149.         IPASS = 0
  7150.         FATAL = .TRUE.
  7151.         IF (KPRINT .GE. 3) WRITE (LUN,9070)
  7152.       ENDIF
  7153.       CALL XERCLR
  7154. C
  7155. C     Reset XERMSG control variables and write summary.
  7156. C
  7157.       CALL XSETF (KONTRL)
  7158.       IF (FATAL) THEN
  7159.          IF (KPRINT .GE. 2) THEN
  7160.             WRITE (LUN, 9080)
  7161.          ENDIF
  7162.       ELSE
  7163.          IF (KPRINT .GE. 3) THEN
  7164.             WRITE (LUN, 9090)
  7165.          ENDIF
  7166.       ENDIF
  7167. C
  7168. C     Write PASS/FAIL message.
  7169. C
  7170.       IF (IPASS.EQ.1 .AND. KPRINT.GE.3) WRITE (LUN,9100)
  7171.       IF (IPASS.EQ.0 .AND. KPRINT.GE.2) WRITE (LUN,9110)
  7172.       RETURN
  7173.  9000 FORMAT ('1' / ' DAVINT Quick Check')
  7174.  9010 FORMAT (/' FAILED ACCURACY TEST' /
  7175.      +        ' IERR=', I2, 5X, 'COMPUTED ANS=', E20.11 / 14X,
  7176.      +        'CORRECT ANS=', D20.11, 5X, 'REQUESTED ERR=', D10.2)
  7177.  9020 FORMAT (/ ' DAVINT passed both accuracy tests.')
  7178.  9030 FORMAT (/ ' DAVINT failed at least one accuracy test.')
  7179.  9040 FORMAT (/ ' Test error returns from DAVINT' /
  7180.      +        ' 4 error messages expected' /)
  7181.  9060 FORMAT (/' IERR =', I2, ' and it should =', I2 /)
  7182.  9070 FORMAT (1X, 'ANS .NE. 0')
  7183.  9080 FORMAT (/ ' At least one incorrect argument test FAILED')
  7184.  9090 FORMAT (/ ' All incorrect argument tests PASSED')
  7185.  9100 FORMAT (/' ***************DAVINT PASSED ALL TESTS***************')
  7186.  9110 FORMAT (/' ***************DAVINT FAILED SOME TESTS**************')
  7187.       END
  7188. *DECK DBIKCK
  7189.       SUBROUTINE DBIKCK (LUN, KPRINT, IPASS)
  7190. C***BEGIN PROLOGUE  DBIKCK
  7191. C***PURPOSE  Quick check for DBESI and DBESK.
  7192. C***LIBRARY   SLATEC
  7193. C***TYPE      DOUBLE PRECISION (BIKCK-S, DBIKCK-D)
  7194. C***KEYWORDS  QUICK CHECK
  7195. C***AUTHOR  Amos, D. E., (SNLA)
  7196. C***DESCRIPTION
  7197. C
  7198. C   DBIKCK is a quick check routine for DBESI and DBESK.  The main loops
  7199. C   evaluate the Wronskian and test the error.  Underflow and overflow
  7200. C   diagnostics are checked in addition to illegal arguments.
  7201. C
  7202. C***ROUTINES CALLED  D1MACH, DBESI, DBESK, NUMXER, XERCLR, XGETF, XSETF
  7203. C***REVISION HISTORY  (YYMMDD)
  7204. C   750101  DATE WRITTEN
  7205. C   890911  Removed unnecessary intrinsics.  (WRB)
  7206. C   891004  Removed unreachable code.  (WRB)
  7207. C   891004  REVISION DATE from Version 3.2
  7208. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  7209. C   901205  Changed usage of D1MACH(3) to D1MACH(4).  (RWC)
  7210. C   910121  Editorial Changes.  (RWC)
  7211. C   910501  Added TYPE record.  (WRB)
  7212. C   910708  Code revised to test error returns for all values of
  7213. C           KPRINT.  (WRB)
  7214. C   910801  Editorial changes, some restructing and modifications to
  7215. C           obtain more information when there is failure of the
  7216. C           Wronskian.  (WRB)
  7217. C***END PROLOGUE  DBIKCK
  7218.       INTEGER I, IPASS, IX, K, KODE, KONTRL, LUN, M, N, NERR, NU, NW, NY
  7219.       DOUBLE PRECISION ALP, DEL, ER, FNU, FNUP, RX, TOL, X
  7220.       DOUBLE PRECISION FN(3), W(5), XX(5), Y(5)
  7221.       DOUBLE PRECISION D1MACH
  7222.       LOGICAL FATAL
  7223. C***FIRST EXECUTABLE STATEMENT  DBIKCK
  7224.       IF (KPRINT .GE. 2) WRITE (LUN,90000)
  7225. C
  7226.       IPASS = 1
  7227.       XX(1) = 0.49D0
  7228.       XX(2) = 1.3D0
  7229.       XX(3) = 5.3D0
  7230.       XX(4) = 13.3D0
  7231.       XX(5) = 21.3D0
  7232.       FN(1) = 0.095D0
  7233.       FN(2) = 0.70D0
  7234.       FN(3) = 0.0D0
  7235.       TOL = MAX(500.0D0*D1MACH(4), 7.1D-12)
  7236.       DO 60 KODE=1,2
  7237.          DO 50 M=1,3
  7238.             DO 40 N=1,4
  7239.                DO 30 NU=1,4
  7240.                   FNU = FN(M) + 12*(NU-1)
  7241.                   DO 20 IX=1,5
  7242.                      IF (IX.LT.2 .AND. NU.GT.3) GO TO 20
  7243.                      X = XX(IX)
  7244.                      RX = 1.0D0/X
  7245.                      CALL DBESI(X, FNU, KODE, N, Y, NY)
  7246.                      IF (NY.NE.0) GO TO 20
  7247.                      CALL DBESK(X, FNU, KODE, N, W, NW)
  7248.                      IF (NW.NE.0) GO TO 20
  7249.                      FNUP = FNU + N
  7250.                      CALL DBESI(X,FNUP,KODE,1,Y(N+1),NY)
  7251.                      IF (NY.NE.0) GO TO 20
  7252.                      CALL DBESK(X,FNUP,KODE,1,W(N+1),NW)
  7253.                      IF (NW.NE.0) GO TO 20
  7254.                      DO 10 I=1,N
  7255.                         ER = Y(I+1)*W(I) + W(I+1)*Y(I) - RX
  7256.                         ER = ABS(ER)*X
  7257.                         IF (ER.GT.TOL) THEN
  7258.                            IPASS = 0
  7259.                            IF (KPRINT.GE.2) WRITE (LUN,90010) KODE,M,N,
  7260.      *                        NU,IX,I,X,ER,TOL,
  7261.      *                        Y(I),Y(I+1),W(I),W(I+1)
  7262.                         ENDIF
  7263.    10                CONTINUE
  7264.    20             CONTINUE
  7265.    30          CONTINUE
  7266.    40       CONTINUE
  7267.    50    CONTINUE
  7268.    60 CONTINUE
  7269. C
  7270. C     Check small values of X and order
  7271. C
  7272.       N = 2
  7273.       FNU = 1.0D0
  7274.       X = D1MACH(4)
  7275.       DO 80 I=1,3
  7276.          DO 70 KODE=1,2
  7277.             CALL DBESI(X, FNU, KODE, N, Y, NY)
  7278.             CALL DBESK(X, FNU, KODE, N, W, NW)
  7279.             ER = Y(2)*W(1) + W(2)*Y(1) - 1.0D0/X
  7280.             ER = ABS(ER)*X
  7281.             IF (ER.GT.TOL) THEN
  7282.                IPASS = 0
  7283.                IF (KPRINT.GE.2) WRITE (LUN,90020) I,KODE,FNU,X,ER,TOL,
  7284.      +            Y(1),Y(2),W(1),W(2)
  7285.                GO TO 700
  7286.             ENDIF
  7287.    70    CONTINUE
  7288. C
  7289.   700    FNU = D1MACH(4)/100.0D0
  7290.          X = XX(2*I-1)
  7291.    80 CONTINUE
  7292. C
  7293. C     Check large values of X and order
  7294. C
  7295.       KODE = 2
  7296.       DO 76 K=1,2
  7297.          DEL = 30*(K-1)
  7298.          FNU = 45.0D0+DEL
  7299.          DO 75 N=1,2
  7300.             X = 20.0D0 + DEL
  7301.             DO 71 I=1,5
  7302.                RX = 1.0D0/X
  7303.                CALL DBESI(X, FNU, KODE, N, Y, NY)
  7304.                IF (NY.NE.0) GO TO 71
  7305.                CALL DBESK(X, FNU, KODE, N, W, NW)
  7306.                IF (NW.NE.0) GO TO 71
  7307.                IF (N.EQ.1) THEN
  7308.                   FNUP = FNU + 1.0D0
  7309.                   CALL DBESI(X,FNUP,KODE,1,Y(2),NY)
  7310.                   IF (NY.NE.0) GO TO 71
  7311.                   CALL DBESK(X,FNUP,KODE,1,W(2),NW)
  7312.                   IF (NW.NE.0) GO TO 71
  7313.                ENDIF
  7314.                ER = Y(2)*W(1) + Y(1)*W(2) - RX
  7315.                ER = ABS(ER)*X
  7316.                IF (ER.GT.TOL) THEN
  7317.                   IPASS = 0
  7318.                   IF (KPRINT.GE.2) WRITE (LUN,90030) K,N,I,FNUP,X,
  7319.      +               ER,TOL,Y(1),Y(2),W(1),W(2)
  7320.                   GO TO 760
  7321.                ENDIF
  7322.                X = X + 10.0D0
  7323.    71       CONTINUE
  7324.    75    CONTINUE
  7325.    76 CONTINUE
  7326. C
  7327. C     Check underflow flags
  7328. C
  7329.   760 X = D1MACH(1)*10.0D0
  7330.       ALP = 12.3D0
  7331.       N = 3
  7332.       CALL DBESI(X, ALP, 1, N, Y, NY)
  7333.       IF (NY.NE.3) THEN
  7334.          IPASS = 0
  7335.          IF (KPRINT.GE.2) WRITE (LUN,90040)
  7336.       ENDIF
  7337. C
  7338.       X = LOG(D1MACH(2)/10.0D0) + 20.0D0
  7339.       ALP = 1.3D0
  7340.       N = 3
  7341.       CALL DBESK(X, ALP, 1, N, W, NW)
  7342.       IF (NW.NE.3) THEN
  7343.          IPASS = 0
  7344.          IF (KPRINT.GE.2) WRITE (LUN,90050)
  7345.       ENDIF
  7346. C
  7347. C     Trigger 10 error conditions
  7348. C
  7349.       CALL XGETF (KONTRL)
  7350.       IF (KPRINT .LE. 2) THEN
  7351.          CALL XSETF (0)
  7352.       ELSE
  7353.          CALL XSETF (1)
  7354.       ENDIF
  7355.       FATAL = .FALSE.
  7356.       CALL XERCLR
  7357. C
  7358.       IF (KPRINT .GE. 3) WRITE (LUN,90060)
  7359.       XX(1) = 1.0D0
  7360.       XX(2) = 1.0D0
  7361.       XX(3) = 1.0D0
  7362.       XX(4) = 1.0D0
  7363. C
  7364. C     Illegal arguments
  7365. C
  7366.       DO 90 I=1,4
  7367.          XX(I) = -XX(I)
  7368.          K = INT(XX(3))
  7369.          N = INT(XX(4))
  7370.          CALL DBESI(XX(1), XX(2), K, N, Y, NY)
  7371.          IF (NUMXER(NERR) .NE. 2) THEN
  7372.             IPASS = 0
  7373.             FATAL = .TRUE.
  7374.          ENDIF
  7375.          CALL XERCLR
  7376.          CALL DBESK(XX(1), XX(2), K, N, W, NW)
  7377.          IF (NUMXER(NERR) .NE. 2) THEN
  7378.             IPASS = 0
  7379.             FATAL = .TRUE.
  7380.          ENDIF
  7381.          CALL XERCLR
  7382.          XX(I) = -XX(I)
  7383.    90 CONTINUE
  7384. C
  7385. C     Trigger overflow
  7386. C
  7387.       X = LOG(D1MACH(2)/10.0D0) + 20.0D0
  7388.       N = 3
  7389.       ALP = 2.3D0
  7390.       CALL DBESI(X, ALP, 1, N, Y, NY)
  7391.       IF (NUMXER(NERR) .NE. 6) THEN
  7392.          IPASS = 0
  7393.          FATAL = .TRUE.
  7394.       ENDIF
  7395.       CALL XERCLR
  7396. C
  7397.       X = D1MACH(1)*10.0D0
  7398.       CALL DBESK(X, ALP, 1, N, W, NW)
  7399.       IF (NUMXER(NERR) .NE. 6) THEN
  7400.          IPASS = 0
  7401.          FATAL = .TRUE.
  7402.       ENDIF
  7403.       CALL XERCLR
  7404. C
  7405.       CALL XSETF (KONTRL)
  7406.       IF (FATAL) THEN
  7407.          IF (KPRINT .GE. 2) THEN
  7408.             WRITE (LUN, 90070)
  7409.          ENDIF
  7410.       ELSE
  7411.          IF (KPRINT .GE. 3) THEN
  7412.             WRITE (LUN, 90080)
  7413.          ENDIF
  7414.       ENDIF
  7415. C
  7416.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,90100)
  7417.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,90110)
  7418.       RETURN
  7419. 90000 FORMAT (/ ' QUICK CHECKS FOR DBESI AND DBESK' //)
  7420. 90010 FORMAT (/ ' ERROR IN QUICK CHECK OF WRONSKIAN', 1P /
  7421.      +        ' KODE = ', I1,', M = ', I1, ', N = ', I1, ', NU = ', I1,
  7422.      +        ', IX = ', I1, ', I = ', I1 /
  7423.      +        ' X = ', E14.7, ', ER   = ', E14.7, ', TOL = ', E14.7 /
  7424.      +        ' Y(I) = ', E14.7, ', Y(I+1) = ', E14.7 /
  7425.      +        ' W(I) = ', E14.7, ', W(I+1) = ', E14.7)
  7426. 90020 FORMAT (/ ' ERROR IN QUICK CHECK OF SMALL X AND ORDER', 1P /
  7427.      +        ' I = ', I1,', KODE = ', I1, ', FNU = ', E14.7 /
  7428.      +        ' X = ', E14.7, ', ER = ', E14.7, ', TOL = ', E14.7 /
  7429.      +        ' Y(1) = ', E14.7, ', Y(2) = ', E14.7 /
  7430.      +        ' W(1) = ', E14.7, ', W(2) = ', E14.7)
  7431. 90030 FORMAT (/ ' ERROR IN QUICK CHECK OF LARGE X AND ORDER', 1P /
  7432.      +        ' K = ', I1,', N = ', I1, ', I = ', I1,
  7433.      +        ', FNUP = ', E14.7 /
  7434.      +        ' X = ', E14.7, ', ER = ', E14.7, ', TOL = ', E14.7 /
  7435.      +        ' Y(1) = ', E14.7, ', Y(2) = ', E14.7 /
  7436.      +        ' W(1) = ', E14.7, ', W(2) = ', E14.7)
  7437. 90040 FORMAT (/ ' ERROR IN DBESI UNDERFLOW TEST' /)
  7438. 90050 FORMAT (/ ' ERROR IN DBESK UNDERFLOW TEST' /)
  7439. 90060 FORMAT (// ' TRIGGER 10 ERROR CONDITIONS' //)
  7440. 90070 FORMAT (/ ' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  7441. 90080 FORMAT (/ ' ALL INCORRECT ARGUMENT TESTS PASSED')
  7442. 90100 FORMAT (/' *********DBESI AND DBESK PASSED ALL TESTS***********')
  7443. 90110 FORMAT (/' *********DBESI OR DBESK FAILED SOME TESTS***********')
  7444.       END
  7445. *DECK DBJYCK
  7446.       SUBROUTINE DBJYCK (LUN, KPRINT, IPASS)
  7447. C***BEGIN PROLOGUE  DBJYCK
  7448. C***PURPOSE  Quick check for DBESJ and DBESY.
  7449. C***LIBRARY   SLATEC
  7450. C***TYPE      DOUBLE PRECISION (BJYCK-S, DBJYCK-D)
  7451. C***KEYWORDS  QUICK CHECK
  7452. C***AUTHOR  Amos, D. E., (SNLA)
  7453. C***DESCRIPTION
  7454. C
  7455. C   DBJYCK is a quick check routine for DBESJ and DBESY.  The main loops
  7456. C   evaluate the Wronskian and test the error.  Underflow and overflow
  7457. C   diagnostics are checked in addition to illegal arguments.
  7458. C
  7459. C***ROUTINES CALLED  D1MACH, DBESJ, DBESY, NUMXER, XERCLR, XGETF, XSETF
  7460. C***REVISION HISTORY  (YYMMDD)
  7461. C   750101  DATE WRITTEN
  7462. C   890911  Removed unnecessary intrinsics.  (WRB)
  7463. C   891004  Removed unreachable code.  (WRB)
  7464. C   891004  REVISION DATE from Version 3.2
  7465. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  7466. C   901205  Changed usage of D1MACH(3) to D1MACH(4).  (RWC)
  7467. C   910121  Editorial Changes.  (RWC)
  7468. C   910501  Added TYPE record.  (WRB)
  7469. C   910708  Code revised to test error returns for all values of
  7470. C           KPRINT.  (WRB)
  7471. C   910801  Editorial changes, some restructing and modifications to
  7472. C           obtain more information when there is failure of the
  7473. C           Wronskian.  (WRB)
  7474. C***END PROLOGUE  DBJYCK
  7475.       INTEGER I, IPASS, IX, K, KONTRL, LUN, M, N, NERR, NU, NY
  7476.       DOUBLE PRECISION ALP, DEL, ER, FNU, FNUP, RHPI, RX, TOL, X
  7477.       DOUBLE PRECISION FN(3), W(5), XX(5), Y(5)
  7478.       DOUBLE PRECISION D1MACH
  7479.       LOGICAL FATAL
  7480. C***FIRST EXECUTABLE STATEMENT  DBJYCK
  7481.       IF (KPRINT.GE.2) WRITE (LUN,90000)
  7482. C
  7483.       IPASS = 1
  7484.       RHPI  = 0.5D0/ATAN(1.0D0)
  7485.       XX(1) = 0.49D0
  7486.       XX(2) = 1.3D0
  7487.       XX(3) = 5.3D0
  7488.       XX(4) = 13.3D0
  7489.       XX(5) = 21.3D0
  7490.       FN(1) = 0.095D0
  7491.       FN(2) = 0.70D0
  7492.       FN(3) = 0.0D0
  7493.       TOL = MAX(500.0D0*D1MACH(4), 7.1D-12)
  7494.       DO 50 M=1,3
  7495.          DO 40 N=1,4
  7496.             DO 30 NU=1,4
  7497.                FNU = FN(M) + 12*(NU-1)
  7498.                DO 20 IX=1,5
  7499.                   IF (IX.LT.2 .AND. NU.GT.3) GO TO 20
  7500.                   X = XX(IX)
  7501.                   RX = RHPI/X
  7502.                   CALL DBESJ(X, FNU, N, Y, NY)
  7503.                   IF (NY.NE.0) GO TO 20
  7504.                   CALL DBESY(X, FNU, N, W)
  7505.                   FNUP = FNU + N
  7506.                   CALL DBESJ(X,FNUP,1,Y(N+1),NY)
  7507.                   IF (NY.NE.0) GO TO 20
  7508.                   CALL DBESY(X,FNUP,1,W(N+1))
  7509.                   DO 10 I=1,N
  7510.                      ER = Y(I+1)*W(I) - W(I+1)*Y(I) - RX
  7511.                      ER = ABS(ER)/RX
  7512.                      IF (ER.GT.TOL) THEN
  7513.                         IPASS = 0
  7514.                         IF (KPRINT.GE.2) WRITE (LUN,90010) M,N,NU,IX,I,
  7515.      *                     X,ER,TOL,Y(I),Y(I+1),W(I),W(I+1)
  7516.                      ENDIF
  7517.    10             CONTINUE
  7518.    20          CONTINUE
  7519.    30       CONTINUE
  7520.    40    CONTINUE
  7521.    50 CONTINUE
  7522. C
  7523. C     Check small values of X and order
  7524. C
  7525.       N = 2
  7526.       FNU = 1.0D0
  7527.       X = D1MACH(4)/5.0D0
  7528.       RX = RHPI/X
  7529.       DO 60 I=1,3
  7530.          CALL DBESJ(X, FNU, N, Y, NY)
  7531.          CALL DBESY(X, FNU, N, W)
  7532.          ER = Y(2)*W(1) - W(2)*Y(1) - RX
  7533.          ER = ABS(ER)/RX
  7534.          IF (ER.GT.TOL) THEN
  7535.             IPASS = 0
  7536.             IF (KPRINT.GE.2) WRITE (LUN,90020) I,FNU,X,ER,TOL,
  7537.      +         Y(I),Y(I+1),W(I),W(I+1)
  7538.             GO TO 600
  7539.          ENDIF
  7540.          FNU = D1MACH(4)/100.0D0
  7541.          X = XX(2*I-1)
  7542.          RX = RHPI/X
  7543.    60 CONTINUE
  7544. C
  7545. C     Check large values of X and order
  7546. C
  7547.   600 DO 76 K=1,2
  7548.          DEL = 30*(K-1)
  7549.          FNU = 70.0D0+DEL
  7550.          DO 75 N=1,2
  7551.             X = 50.0D0 + DEL
  7552.             DO 70 I=1,5
  7553.                RX = RHPI/X
  7554.                CALL DBESJ(X, FNU, N, Y, NY)
  7555.                IF (NY.NE.0) GO TO 70
  7556.                CALL DBESY(X, FNU, N, W)
  7557.                IF (N.EQ.1) THEN
  7558.                   FNUP = FNU + 1.0D0
  7559.                   CALL DBESJ(X,FNUP,1,Y(2),NY)
  7560.                   IF (NY.NE.0) GO TO 70
  7561.                   CALL DBESY(X,FNUP,1,W(2))
  7562.                ENDIF
  7563.                ER = Y(2)*W(1) - Y(1)*W(2) - RX
  7564.                ER = ABS(ER)/RX
  7565.                IF (ER.GT.TOL) THEN
  7566.                   IPASS = 0
  7567.                   IF (KPRINT.GE.2) WRITE (LUN,90030) K,N,I,X,ER,TOL,
  7568.      *               Y(1),Y(2),W(1),W(2)
  7569.                   GO TO 800
  7570.                ENDIF
  7571.                X = X + 10.0D0
  7572.    70       CONTINUE
  7573.    75    CONTINUE
  7574.    76 CONTINUE
  7575. C
  7576. C     Check underflow flags
  7577. C
  7578.   800 X = D1MACH(1)*10.0D0
  7579.       ALP = 12.3D0
  7580.       N = 3
  7581.       CALL DBESJ(X, ALP, N, Y, NY)
  7582.       IF (NY.NE.3) THEN
  7583.          IPASS = 0
  7584.          IF (KPRINT.GE.2) WRITE (LUN,90040)
  7585.       ENDIF
  7586. C
  7587. C     Trigger 7 error conditions
  7588. C
  7589.       CALL XGETF (KONTRL)
  7590.       IF (KPRINT .LE. 2) THEN
  7591.          CALL XSETF (0)
  7592.       ELSE
  7593.          CALL XSETF (1)
  7594.       ENDIF
  7595.       FATAL = .FALSE.
  7596.       CALL XERCLR
  7597. C
  7598.       IF (KPRINT .GE. 3) WRITE (LUN,90050)
  7599.       XX(1) = 1.0D0
  7600.       XX(2) = 1.0D0
  7601.       XX(3) = 1.0D0
  7602. C
  7603. C     Illegal arguments
  7604. C
  7605.       DO 80 I=1,3
  7606.          XX(I) = -XX(I)
  7607.          N = INT(XX(3))
  7608.          CALL DBESJ(XX(1), XX(2), N, Y, NY)
  7609.          IF (NUMXER(NERR) .NE. 2) THEN
  7610.             IPASS = 0
  7611.             FATAL = .TRUE.
  7612.          ENDIF
  7613.          CALL XERCLR
  7614.          CALL DBESY(XX(1), XX(2), N, W)
  7615.          IF (NUMXER(NERR) .NE. 2) THEN
  7616.             IPASS = 0
  7617.             FATAL = .TRUE.
  7618.          ENDIF
  7619.          CALL XERCLR
  7620.          XX(I) = -XX(I)
  7621.    80 CONTINUE
  7622. C
  7623. C     Trigger overflow
  7624. C
  7625.       X = D1MACH(1)*10.0D0
  7626.       N = 3
  7627.       ALP = 2.3D0
  7628.       CALL DBESY(X, ALP, N, W)
  7629.       IF (NUMXER(NERR) .NE. 6) THEN
  7630.          IPASS = 0
  7631.          FATAL = .TRUE.
  7632.       ENDIF
  7633.       CALL XERCLR
  7634.       CALL XSETF (KONTRL)
  7635.       IF (FATAL) THEN
  7636.          IF (KPRINT .GE. 2) THEN
  7637.             WRITE (LUN, 90070)
  7638.          ENDIF
  7639.       ELSE
  7640.          IF (KPRINT .GE. 3) THEN
  7641.             WRITE (LUN, 90080)
  7642.          ENDIF
  7643.       ENDIF
  7644. C
  7645.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,90100)
  7646.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,90110)
  7647.       RETURN
  7648. 90000 FORMAT (/ ' QUICK CHECKS FOR DBESJ AND DBESY' //)
  7649. 90010 FORMAT (/ ' ERROR IN QUICK CHECK OF WRONSKIAN', 1P /
  7650.      +        ' M = ', I1,', N = ', I1, ', NU = ', I1, ', IX = ', I1,
  7651.      +        ', I = ', I1, /
  7652.      +        ' X = ', E14.7, ', ER   = ', E14.7, ', TOL = ', E14.7 /
  7653.      +        ' Y(I) = ', E14.7, ', Y(I+1) = ', E14.7 /
  7654.      +        ' W(I) = ', E14.7, ', W(I+1) = ', E14.7)
  7655. 90020 FORMAT (/ ' ERROR IN QUICK CHECK OF SMALL X AND ORDER', 1P /
  7656.      +        ' I = ', I1,',  FNU = ', E14.7 /
  7657.      +        ' X = ', E14.7, ', ER = ', E14.7, ', TOL = ', E14.7 /
  7658.      +        ' Y(1) = ', E14.7, ', Y(2) = ', E14.7 /
  7659.      +        ' W(1) = ', E14.7, ', W(2) = ', E14.7)
  7660. 90030 FORMAT (/ ' ERROR IN QUICK CHECK OF LARGE X AND ORDER', 1P /
  7661.      +        ' K = ', I1,', N = ', I1, ', I = ', I1 /
  7662.      +        ' X = ', E14.7, ', ER = ', E14.7, ', TOL = ', E14.7 /
  7663.      +        ' Y(1) = ', E14.7, ', Y(2) = ', E14.7 /
  7664.      +        ' W(1) = ', E14.7, ', W(2) = ', E14.7)
  7665. 90040 FORMAT (/ ' ERROR IN DBESJ UNDERFLOW TEST' /)
  7666. 90050 FORMAT (// ' TRIGGER 7 ERROR CONDITIONS' //)
  7667. 90070 FORMAT (/ ' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  7668. 90080 FORMAT (/ ' ALL INCORRECT ARGUMENT TESTS PASSED')
  7669. 90100 FORMAT (/' *********DBESJ AND DBESY PASSED ALL TESTS*********')
  7670. 90110 FORMAT (/' *********DBESJ OR DBESY FAILED SOME TESTS*********')
  7671.       END
  7672. *DECK DBOCQX
  7673.       SUBROUTINE DBOCQX (LUN, KPRINT, IPASS)
  7674. C***BEGIN PROLOGUE  DBOCQX
  7675. C***PURPOSE  Quick check for DBOCLS.
  7676. C***LIBRARY   SLATEC
  7677. C***TYPE      DOUBLE PRECISION (SBOCQX-S, DBOCQX-D)
  7678. C***KEYWORDS  QUICK CHECK
  7679. C***AUTHOR  (UNKNOWN)
  7680. C***DESCRIPTION
  7681. C
  7682. C     MINIMAL TEST DRIVER FOR DBOCLS, BOUNDED CONSTRAINED LEAST
  7683. C     SQUARES SOLVER.  DELIVERS THE VALUE IPASS=1 IF 8 TESTS WERE
  7684. C     PASSED.  DELIVER THE VALUE IPASS=0 IF ANY ONE OF THEM FAILED.
  7685. C
  7686. C     RUN FOUR BOUNDED LEAST SQUARES PROBLEMS THAT COME FROM THE
  7687. C     DIPLOME WORK OF P. ZIMMERMANN.
  7688. C
  7689. C***ROUTINES CALLED  D1MACH, DBOCLS, DBOLS, DCOPY, DNRM2
  7690. C***REVISION HISTORY  (YYMMDD)
  7691. C   850310  DATE WRITTEN
  7692. C   890618  REVISION DATE from Version 3.2
  7693. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  7694. C   901010  Added PASS/FAIL message.  (RWC)
  7695. C***END PROLOGUE  DBOCQX
  7696.       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
  7697.       DOUBLE PRECISION
  7698.      *  D(6,5),W(11,11),BL(5,2),BU(5,2),X(30),RW(55),XTRUE(9)
  7699.       DOUBLE PRECISION C(5,5)
  7700.       DOUBLE PRECISION BL1(10),BU1(10)
  7701.       INTEGER IND(10),IW(20),IOPT(40)
  7702.       DOUBLE PRECISION RHS(6,2)
  7703.       CHARACTER*4 MSG
  7704. C
  7705.       DATA ((C(I,J),I=1,5),J=1,5)/1.D0,10.D0,4.D0,8.D0,1.D0,1.D0,10.D0,
  7706.      +     2.D0,-1.D0,1.D0,1.D0,-3.D0,-3.D0,2.D0,1.D0,1.D0,5.D0,5.D0,
  7707.      +     5.D0,1.D0,1.D0,4.D0,-1.D0,-3.D0,1.D0/
  7708.       DATA ((D(I,J),I=1,6),J=1,5)/-74.D0,14.D0,66.D0,-12.D0,3.D0,4.D0,
  7709.      +     80.D0,-69.D0,-72.D0,66.D0,8.D0,-12.D0,18.D0,21.D0,-5.D0,
  7710.      +     -30.D0,-7.D0,4.D0,-11.D0,28.D0,7.D0,-23.D0,-4.D0,4.D0,-4.D0,
  7711.      +     0.D0,1.D0,3.D0,1.D0,0.D0/
  7712.       DATA ((BL(I,J),I=1,5),J=1,2)/1.D0,0.D0,-1.D0,1.D0,-4.D0,-1.D0,
  7713.      +     0.D0,-3.D0,1.D0,-6.D0/
  7714.       DATA ((BU(I,J),I=1,5),J=1,2)/3.D0,2.D0,1.D0,3.D0,-2.D0,3.D0,4.D0,
  7715.      +     1.D0,5.D0,-2.D0/
  7716.       DATA ((RHS(I,J),I=1,6),J=1,2)/51.D0,-61.D0,-56.D0,69.D0,10.D0,
  7717.      +     -12.D0,-5.D0,-9.D0,708.D0,4165.D0,-13266.D0,8409.D0/
  7718.       DATA (XTRUE(J),J=1,9)/1.D0,2.D0,-1.D0,3.D0,-4.D0,1.D0,32.D0,30.D0,
  7719.      +     31.D0/
  7720. C***FIRST EXECUTABLE STATEMENT  DBOCQX
  7721.       MDW = 11
  7722.       MROWS = 6
  7723.       NCOLS = 5
  7724.       MCON = 4
  7725.       IOPT(1) = 99
  7726.       IPASS = 1
  7727.       ITEST = 0
  7728. C
  7729.       IF (KPRINT.GE.2) WRITE (LUN, 99998)
  7730. C
  7731.       DO 50 IB = 1,2
  7732.           DO 40 IRHS = 1,2
  7733. C
  7734. C           TRANSFER DATA TO WORKING ARRAY W(*,*).
  7735. C
  7736.               DO 10 J = 1,NCOLS
  7737.                   CALL DCOPY(MROWS,D(1,J),1,W(1,J),1)
  7738.    10         CONTINUE
  7739. C
  7740.               CALL DCOPY(MROWS,RHS(1,IRHS),1,W(1,NCOLS+1),1)
  7741. C
  7742. C             SET BOUND INDICATOR FLAGS.
  7743. C
  7744.               DO 20 J = 1,NCOLS
  7745.                   IND(J) = 3
  7746.    20         CONTINUE
  7747. C
  7748.               CALL DBOLS(W,MDW,MROWS,NCOLS,BL(1,IB),BU(1,IB),IND,IOPT,X,
  7749.      *                   RNORM,MODE,RW,IW)
  7750.               DO 30 J = 1,NCOLS
  7751.                   X(J) = X(J) - XTRUE(J)
  7752.    30         CONTINUE
  7753. C
  7754.               SR = DNRM2(NCOLS,X,1)
  7755.               MPASS = 1
  7756.               IF (SR.GT.10.D2*SQRT(D1MACH(4))) MPASS = 0
  7757.               IPASS = IPASS*MPASS
  7758.               IF (KPRINT.GE.2) THEN
  7759.                  MSG = 'PASS'
  7760.                  IF (MPASS.EQ.0) MSG = 'FAIL'
  7761.                  ITEST = ITEST + 1
  7762.                  WRITE (LUN, 99999) ITEST, IB, IRHS, SR, MSG
  7763.               ENDIF
  7764.    40     CONTINUE
  7765.    50 CONTINUE
  7766. C
  7767. C     RUN STOER'S PROBLEM FROM 1971 SIAM J. N. ANAL. PAPER.
  7768. C
  7769.       DO 90 IB = 1,2
  7770.          DO 80 IRHS = 1,2
  7771.             CALL DCOPY(11*10,0.D0,0,W,1)
  7772.             CALL DCOPY(NCOLS,BL(1,IB),1,BL1,1)
  7773.             CALL DCOPY(NCOLS,BU(1,IB),1,BU1,1)
  7774.             IND(NCOLS+1) = 2
  7775.             IND(NCOLS+2) = 1
  7776.             IND(NCOLS+3) = 2
  7777.             IND(NCOLS+4) = 3
  7778.             BU1(NCOLS+1) = 5.
  7779.             BL1(NCOLS+2) = 20.
  7780.             BU1(NCOLS+3) = 30.
  7781.             BL1(NCOLS+4) = 11.
  7782.             BU1(NCOLS+4) = 40.
  7783.             DO 60 J = 1,NCOLS
  7784.                CALL DCOPY(MCON,C(1,J),1,W(1,J),1)
  7785.                CALL DCOPY(MROWS,D(1,J),1,W(MCON+1,J),1)
  7786.    60       CONTINUE
  7787. C
  7788.             CALL DCOPY(MROWS,RHS(1,IRHS),1,W(MCON+1,NCOLS+1),1)
  7789. C
  7790. C           CHECK LENGTHS OF REQD. ARRAYS.
  7791. C
  7792.             IOPT(01) = 2
  7793.             IOPT(02) = 11
  7794.             IOPT(03) = 11
  7795.             IOPT(04) = 10
  7796.             IOPT(05) = 30
  7797.             IOPT(06) = 55
  7798.             IOPT(07) = 20
  7799.             IOPT(08) = 40
  7800.             IOPT(09) = 99
  7801.             CALL DBOCLS(W,MDW,MCON,MROWS,NCOLS,BL1,BU1,IND,IOPT,X,
  7802.      *                  RNORMC,RNORM,MODE,RW,IW)
  7803.             DO 70 J = 1,NCOLS + MCON
  7804.                X(J) = X(J) - XTRUE(J)
  7805.    70       CONTINUE
  7806. C
  7807.             SR = DNRM2(NCOLS+MCON,X,1)
  7808.             MPASS = 1
  7809.             IF (SR.GT.10.D2*SQRT(D1MACH(4))) MPASS = 0
  7810.             IPASS = IPASS*MPASS
  7811.             IF (KPRINT.GE.2) THEN
  7812.                MSG = 'PASS'
  7813.                IF (MPASS.EQ.0) MSG = 'FAIL'
  7814.                ITEST = ITEST + 1
  7815.                WRITE (LUN, 99999) ITEST, IB, IRHS, SR, MSG
  7816.             ENDIF
  7817.    80    CONTINUE
  7818.    90 CONTINUE
  7819. C
  7820. C     HERE THE VALUE OF IPASS=1 SAYS THAT DBOCLS HAS PASSED ITS TESTS.
  7821. C          THE VALUE OF IPASS=0 SAYS THAT DBOCLS HAS NOT PASSED.
  7822. C
  7823.       IF(KPRINT.GE.3)
  7824.      *WRITE(LUN,'('' IPASS VALUE. (A 1 IS GOOD, 0 IS BAD.)'',I4)')IPASS
  7825.       IF(KPRINT.GE.2.AND.IPASS.EQ.0) WRITE(LUN,10789)
  7826.       RETURN
  7827. C
  7828. 10789 FORMAT (' ERROR IN DBOCLS OR DBOLS')
  7829. 99998 FORMAT (' TEST   IB IRHS             SR')
  7830. 99999 FORMAT (3I5, 1P,E20.6, ' TEST ', A, 'ED.')
  7831.       END
  7832. *DECK DBSPCK
  7833.       SUBROUTINE DBSPCK (LUN, KPRINT, IPASS)
  7834. C***BEGIN PROLOGUE  DBSPCK
  7835. C***PURPOSE  Quick check for the B-spline package.
  7836. C***LIBRARY   SLATEC
  7837. C***TYPE      DOUBLE PRECISION (BSPCK-S, DBSPCK-D)
  7838. C***KEYWORDS  QUICK CHECK
  7839. C***AUTHOR  (UNKNOWN)
  7840. C***DESCRIPTION
  7841. C
  7842. C   DBSPCK is a quick check routine for the B-Spline package which
  7843. C   tests consistency between results from higher level routines.
  7844. C   Those routines not explicitly called are exercised at some lower
  7845. C   level.  The routines exercised are DBFQAD, DBINT4, DBINTK, DBNFAC,
  7846. C   DBNSLV, DBSGQ8, DBSPDR, DBSPEV, DBSPPP, DBSPVD, DBSPVN, DBSQAD,
  7847. C   DBVALU, DINTRV, DPFQAD, DPPGQ8, DPPQAD and DPPVAL.
  7848. C
  7849. C***ROUTINES CALLED  D1MACH, DBFQAD, DBINT4, DBINTK, DBSPDR, DBSPEV,
  7850. C                    DBSPPP, DBSPVD, DBSPVN, DBSQAD, DBVALU, DFB,
  7851. C                    DINTRV, DPFQAD, DPPQAD, DPPVAL
  7852. C***REVISION HISTORY  (YYMMDD)
  7853. C   ??????  DATE WRITTEN
  7854. C   890911  Removed unnecessary intrinsics.  (WRB)
  7855. C   891004  Removed unreachable code.  (WRB)
  7856. C   891009  Removed unreferenced variables.  (WRB)
  7857. C   891009  REVISION DATE from Version 3.2
  7858. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  7859. C***END PROLOGUE  DBSPCK
  7860.       INTEGER I, IBCL, IBCR, ICNT, ID, IERR, IKNT, ILEFT, ILO,
  7861.      * INBV, INEV, INPPV, ITEST(7), IWORK, J, JHIGH, K, KK, KNT, KNTOPT,
  7862.      * LDC, LDCC, LUN, LXI, MFLAG, N, NDATA, NMK, NN
  7863.       DOUBLE PRECISION ADIF, ATOL, BC, BQUAD, BV, C, DEN, DN, ER, FBCL,
  7864.      * FBCR, PQUAD, PI, Q, QQ, QSAVE, QUAD, SPV, SV, T, TOL, W, X,
  7865.      * XI, XL, XX, X1, X2, Y, QTOL, CC
  7866.       DOUBLE PRECISION DBVALU, DPPVAL, D1MACH, DFB
  7867.       DIMENSION X(11), Y(11), QQ(77), BC(13), T(17), Q(3), QSAVE(2),
  7868.      * XI(11), C(4,10), SV(4), ADIF(52), W(65), CC(4,4)
  7869.       EXTERNAL DFB
  7870. C***FIRST EXECUTABLE STATEMENT  DBSPCK
  7871.       IF(KPRINT.GE.2) WRITE (LUN,99999)
  7872. 99999 FORMAT (1H1, 1X, 45HQUICK CHECK FOR DOUBLE PRECISION SPLINE ROUTI,
  7873.      * 3HNES//)
  7874.       DO 5 I=1,7
  7875. 5     ITEST(I)=0
  7876.       ICNT=1
  7877.       PI = 3.14159265358979324D0
  7878.       TOL = 1000.0D0*D1MACH(4)
  7879.       QTOL = D1MACH(4)
  7880.       QTOL = 1000.0D0*MAX(QTOL,1.0D-18)
  7881. C     GENERATE DATA
  7882.       NDATA = 11
  7883.       DEN = NDATA - 1
  7884.       DO 10 I=1,NDATA
  7885.         X(I) = (I-1)/DEN
  7886.         Y(I) = SIN(PI*X(I))
  7887.    10 CONTINUE
  7888.       X(3) = 2.0D0/DEN + 0.1D0/DEN
  7889.       Y(3) = SIN(PI*X(3))
  7890. C     COMPUTE SPLINES FOR TWO KNOT ARRAYS
  7891.       DO 80 IKNT=1,2
  7892.         KNT = 3 - IKNT
  7893.         IBCL = 1
  7894.         IBCR = 2
  7895.         FBCL = PI
  7896.         FBCR = 0.0D0
  7897.         CALL DBINT4(X, Y, NDATA, IBCL, IBCR, FBCL, FBCR, KNT, T, BC, N,
  7898.      *   K, W)
  7899. C     ERROR TEST ON DBINT4
  7900.         INBV = 1
  7901.         DO 20 I=1,NDATA
  7902.           XX = X(I)
  7903.           BV = DBVALU(T,BC,N,K,0,XX,INBV,W)
  7904.           ER = ABS(Y(I)-BV)
  7905.           IF (ER.LE.TOL) GO TO 20
  7906.       IF(KPRINT.GE.2) WRITE (LUN,99991)
  7907. 99991 FORMAT (' ERROR TEST FOR INTERPOLATION BY DBINT4 NOT SATISFIED')
  7908.       GO TO 30
  7909.    20   CONTINUE
  7910.       ITEST(ICNT)=1
  7911.       ICNT=2
  7912.    30   CONTINUE
  7913.         INBV = 1
  7914.         BV = DBVALU(T,BC,N,K,1,X(1),INBV,W)
  7915.         ER = ABS(PI-BV)
  7916.         IF (ER.LE.TOL) GO TO 35
  7917.       IF(KPRINT.GE.2) WRITE (LUN,99989)
  7918. 99989 FORMAT (' ERROR TEST FOR INTERPOLATION BY DBINT4 NOT SATISFIED ',
  7919.      *        'BY FIRST DERIVATIVE')
  7920.       GO TO 40
  7921.    35 ITEST(ICNT)=1
  7922.       ICNT=3
  7923.    40   CONTINUE
  7924.         BV = DBVALU(T,BC,N,K,2,X(NDATA),INBV,W)
  7925.         ER = ABS(BV)
  7926.         IF (ER.LE.TOL) GO TO 45
  7927.       IF(KPRINT.GE.2) WRITE (LUN,99988)
  7928. 99988 FORMAT (' ERROR TEST FOR INTERPOLATION BY DBINT4 NOT SATISFIED' ,
  7929.      *        'BY SECOND DERIVATIVE')
  7930.       GO TO 50
  7931.    45 ITEST(ICNT)=1
  7932.       ICNT=4
  7933.    50   CONTINUE
  7934. C     TEST FOR EQUALITY OF AREA FROM 4 ROUTINES
  7935.         X1 = X(1)
  7936.         X2 = X(NDATA)
  7937.         CALL DBSQAD(T, BC, N, K, X1, X2, BQUAD, W)
  7938.         LDC = 4
  7939.         CALL DBSPPP(T, BC, N, K, LDC, C, XI, LXI, W)
  7940.         CALL DPPQAD(LDC, C, XI, LXI, K, X1, X2, Q(1))
  7941.         CALL DBFQAD(DFB, T, BC, N, K, 0, X1, X2, QTOL, Q(2), IERR, W)
  7942.         CALL DPFQAD(DFB, LDC, C, XI, LXI, K, 0, X1, X2, QTOL, Q(3),
  7943.      *   IERR)
  7944. C     ERROR TEST FOR QUADRATURES
  7945.         DO 60 I=1,3
  7946.           ER = ABS(BQUAD-Q(I))
  7947.           IF (ER.LE.QTOL) GO TO 60
  7948.       IF(KPRINT.GE.2) WRITE (LUN,99996)
  7949. 99996 FORMAT (1X, 26HERROR IN QUADRATURE CHECKS)
  7950.       GO TO 70
  7951.    60   CONTINUE
  7952.       ITEST(ICNT)=1
  7953.       ICNT=5
  7954.    70   CONTINUE
  7955.         QSAVE(KNT) = BQUAD
  7956.    80 CONTINUE
  7957.       ER = ABS(QSAVE(1)-QSAVE(2))
  7958.       IF (ER.GT.TOL) GO TO 330
  7959.       ITEST(ICNT)=1
  7960.       ICNT=6
  7961.    90 CONTINUE
  7962. C     CHECK DBSPDR AND DBSPEV AGAINST DBVALU, DPPVAL AND DBSPVD
  7963.       CALL DBSPDR(T, BC, N, K, K, ADIF)
  7964.       INEV = 1
  7965.       INBV = 1
  7966.       INPPV = 1
  7967.       ILO = 1
  7968.       DO 140 I=1,6
  7969.         XX = X(I+I-1)
  7970.         CALL DBSPEV(T, ADIF, N, K, K, XX, INEV, SV, W)
  7971.         ATOL = TOL
  7972.         DO 100 J=1,K
  7973.           SPV = DBVALU(T,BC,N,K,J-1,XX,INBV,W)
  7974.           ER = ABS(SPV-SV(J))
  7975.           X2 = ABS(SV(J))
  7976.           IF (X2.GT.1.0D0) ER = ER/X2
  7977.           IF (ER.GT.ATOL) GO TO 340
  7978.           ATOL = ATOL*10.0D0
  7979.   100   CONTINUE
  7980.         ATOL = TOL
  7981.         DO 110 J=1,K
  7982.           SPV = DPPVAL(LDC,C,XI,LXI,K,J-1,XX,INPPV)
  7983.           ER = ABS(SPV-SV(J))
  7984.           X2 = ABS(SV(J))
  7985.           IF (X2.GT.1.0D0) ER = ER/X2
  7986.           IF (ER.GT.ATOL) GO TO 350
  7987.           ATOL = ATOL*10.D0
  7988.   110   CONTINUE
  7989.         ATOL = TOL
  7990.         LDCC = 4
  7991.         X1 = XX
  7992.         IF (I+I-1.EQ.NDATA) X1 = T(N)
  7993.         NN = N + K
  7994.         CALL DINTRV(T, NN, X1, ILO, ILEFT, MFLAG)
  7995.         DO 130 J=1,K
  7996.           CALL DBSPVD(T, K, J, XX, ILEFT, LDCC, CC, W)
  7997.           ER = 0.0D0
  7998.           DO 120 JJ=1,K
  7999.             ER = ER + BC(ILEFT-K+JJ)*CC(JJ,J)
  8000.   120     CONTINUE
  8001.           ER = ABS(ER-SV(J))
  8002.           X2 = ABS(SV(J))
  8003.           IF (X2.GT.1.0D0) ER = ER/X2
  8004.           IF (ER.GT.ATOL) GO TO 360
  8005.           ATOL = ATOL*10.0D0
  8006.   130   CONTINUE
  8007.   140 CONTINUE
  8008.       ITEST(ICNT)=1
  8009.       ICNT=7
  8010.   150 CONTINUE
  8011.       DO 190 K=2,4
  8012.         N = NDATA
  8013.         NMK = N - K
  8014.         DO 160 I=1,K
  8015.           T(I) = X(1)
  8016.           T(N+I) = X(N)
  8017.   160   CONTINUE
  8018.         XL = X(N) - X(1)
  8019.         DN = N - K + 1
  8020.         DO 170 I=1,NMK
  8021.           T(K+I) = X(1) + I*XL/DN
  8022.   170   CONTINUE
  8023.         CALL DBINTK(X, Y, T, N, K, BC, QQ, W)
  8024. C     ERROR TEST ON DBINTK
  8025.         INBV = 1
  8026.         DO 180 I=1,N
  8027.           XX = X(I)
  8028.           BV = DBVALU(T,BC,N,K,0,XX,INBV,W)
  8029.           ER = ABS(Y(I)-BV)
  8030.           IF (ER.GT.TOL) GO TO 380
  8031.   180   CONTINUE
  8032.   190 CONTINUE
  8033.       ITEST(ICNT)=1
  8034.   200 CONTINUE
  8035.       IPASS=1
  8036.       DO 2000 I=1,7
  8037. 2000  IPASS=IPASS*ITEST(I)
  8038.       IF(KPRINT.LE.1) GO TO 3100
  8039. C
  8040. C     TRIGGER ERROR CONDITIONS
  8041. C
  8042.       IF(KPRINT.GE.3) WRITE (LUN,99997)
  8043. 99997 FORMAT (/, 1X, 27HTRIGGER 52 ERROR CONDITIONS/)
  8044. C
  8045. C
  8046.       W(1) = 11.0D0
  8047.       W(2) = 4.0D0
  8048.       W(3) = 2.0D0
  8049.       W(4) = 0.5D0
  8050.       W(5) = 4.0D0
  8051.       ILO = 1
  8052.       INEV = 1
  8053.       INBV = 1
  8054.       CALL DINTRV(T, N+1, W(4), ILO, ILEFT, MFLAG)
  8055.       DO 280 I=1,5
  8056.         W(I) = -W(I)
  8057.         N = INT(W(1))
  8058.         K = INT(W(2))
  8059.         ID = INT(W(3))
  8060.         XX = W(4)
  8061.         LDC = INT(W(5))
  8062.         IF (I.EQ.5) GO TO 210
  8063.         BV = DBVALU(T,BC,N,K,ID,XX,INBV,QQ)
  8064.         CALL DBSPEV(T, ADIF, N, K, ID, XX, INEV, SV, QQ)
  8065.         JHIGH = N - 10
  8066.         CALL DBSPVN(T, JHIGH, K, ID, XX, ILEFT, SV, QQ, IWORK)
  8067.         CALL DBFQAD(DFB, T, BC, N, K, ID, XX, X2, TOL, QUAD, IERR, QQ)
  8068.   210   CONTINUE
  8069.         IF (I.EQ.3 .OR. I.EQ.4) GO TO 220
  8070.         CALL DBSPPP(T, BC, N, K, LDC, C, XI, LXI, QQ)
  8071.   220   CONTINUE
  8072.         IF (I.EQ.4 .OR. I.EQ.5) GO TO 230
  8073.         CALL DBSPDR(T, BC, N, K, ID, ADIF)
  8074.   230   CONTINUE
  8075.         IF (I.EQ.3 .OR. I.EQ.5) GO TO 240
  8076.         CALL DBSQAD(T, BC, N, K, XX, X2, BQUAD, QQ)
  8077.   240   CONTINUE
  8078.         IF (I.EQ.1) GO TO 250
  8079.         CALL DBSPVD(T, K, ID, XX, ILEFT, LDC, C, QQ)
  8080.   250   CONTINUE
  8081.         IF (I.GT.2) GO TO 260
  8082.         CALL DBINTK(X, Y, T, N, K, BC, QQ, ADIF)
  8083.   260   CONTINUE
  8084.         IF (I.EQ.4) GO TO 270
  8085.         KNTOPT = LDC - 2
  8086.         IBCL = K - 2
  8087.         CALL DBINT4(X, Y, N, IBCL, ID, FBCL, FBCR, KNTOPT, T, BC, NN,
  8088.      *   KK, QQ)
  8089.   270   CONTINUE
  8090.         W(I) = -W(I)
  8091.   280 CONTINUE
  8092.       KNTOPT = 1
  8093.       X(1) = 1.0D0
  8094.       CALL DBINT4(X, Y, N, IBCL, IBCR, FBCL, FBCR, KNTOPT, T, BC, N, K,
  8095.      * QQ)
  8096.       CALL DBINTK(X, Y, T, N, K, BC, QQ, ADIF)
  8097.       X(1) = 0.0D0
  8098.       ATOL = 1.0D0
  8099.       KNTOPT = 3
  8100.       DO 290 I=1,3
  8101.         QQ(I) = -.30D0 + 0.10D0*(I-1)
  8102.         QQ(3+I) = 1.1D0 + 0.10D0*(I-1)
  8103.   290 CONTINUE
  8104.       QQ(1) = 1.0D0
  8105.       CALL DBINT4(X, Y, NDATA, 1, 1, FBCL, FBCR, 3, T, BC, N, K, QQ)
  8106.       CALL DBFQAD(DFB, T, BC, N, K, ID, X1, X2, ATOL, QUAD, IERR, QQ)
  8107.       INPPV = 1
  8108.       DO 310 I=1,5
  8109.         W(I) = -W(I)
  8110.         LXI = INT(W(1))
  8111.         K = INT(W(2))
  8112.         ID = INT(W(3))
  8113.         XX = W(4)
  8114.         LDC = INT(W(5))
  8115.         SPV = DPPVAL(LDC,C,XI,LXI,K,ID,XX,INPPV)
  8116.         CALL DPFQAD(DFB, LDC, C, XI, LXI, K, ID, XX, X2, TOL, QUAD,
  8117.      *   IERR)
  8118.         IF (I.EQ.3) GO TO 300
  8119.         CALL DPPQAD(LDC, C, XI, LXI, K, XX, X2, PQUAD)
  8120.   300   CONTINUE
  8121.         W(I) = -W(I)
  8122.   310 CONTINUE
  8123.       LDC = INT(W(5))
  8124.       CALL DPFQAD(DFB, LDC, C, XI, LXI, K, ID, X1, X2, ATOL, QUAD, IERR)
  8125. 3100   CONTINUE
  8126.       IF(IPASS.EQ.1.AND.KPRINT.GT.1) WRITE(LUN,99980)
  8127.       IF(IPASS.EQ.0.AND.KPRINT.NE.0) WRITE(LUN,99981)
  8128. 99980 FORMAT(/54H *****DBLE PREC B-SPLINE PACKAGE PASSED ALL TESTS*****)
  8129. 99981 FORMAT(/54H *****DBLE PREC B-SPLINE PACKAGE FAILED SOME TEST*****)
  8130.       RETURN
  8131. C
  8132. C
  8133.   330 CONTINUE
  8134.       IF(KPRINT.GE.2) WRITE (LUN,99995)
  8135. 99995 FORMAT (1X, 49HERROR IN QUADRATURE CHECK USING TWO SETS OF KNOTS)
  8136.       GO TO 90
  8137.   340 CONTINUE
  8138.       IF(KPRINT.GE.2) WRITE (LUN,99994)
  8139. 99994 FORMAT (1X, 47HCOMPARISONS FROM DBSPEV AND DBVALU DO NOT AGREE)
  8140.       GO TO 150
  8141.   350 CONTINUE
  8142.       IF(KPRINT.GE.2) WRITE (LUN,99993)
  8143. 99993 FORMAT (1X, 47HCOMPARISONS FROM DBSPEV AND DPPVAL DO NOT AGREE)
  8144.       GO TO 150
  8145.   360 CONTINUE
  8146.       IF(KPRINT.GE.2) WRITE (LUN,99992)
  8147. 99992 FORMAT (1X, 47HCOMPARISONS FROM DBSPEV AND DBSPVD DO NOT AGREE)
  8148.       GO TO 150
  8149.   380 CONTINUE
  8150.       IF(KPRINT.GE.2) WRITE (LUN,99990)
  8151. 99990 FORMAT (' ERROR TEST FOR INTERPOLATION BY DBINTK NOT SATISFIED')
  8152.       GO TO 200
  8153.       END
  8154. *DECK DCMPAR
  8155.       SUBROUTINE DCMPAR (ICNT, ITEST)
  8156. C***BEGIN PROLOGUE  DCMPAR
  8157. C***PURPOSE  Compare values in COMMON block DCHECK for quick check
  8158. C            routine DPFITT.
  8159. C***LIBRARY   SLATEC
  8160. C***TYPE      DOUBLE PRECISION (CMPARE-S, DCMPAR-D)
  8161. C***AUTHOR  (UNKNOWN)
  8162. C***ROUTINES CALLED  (NONE)
  8163. C***COMMON BLOCKS    DCHECK
  8164. C***REVISION HISTORY  (YYMMDD)
  8165. C   ??????  DATE WRITTEN
  8166. C   890921  Realigned order of variables in the COMMON block.
  8167. C           (WRB)
  8168. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  8169. C   920214  Minor improvements to code for readability.  (WRB)
  8170. C***END PROLOGUE  DCMPAR
  8171. C     .. Scalar Arguments ..
  8172.       INTEGER ICNT
  8173. C     .. Array Arguments ..
  8174.       INTEGER ITEST(9)
  8175. C     .. Scalars in Common ..
  8176.       DOUBLE PRECISION EPS, RP, SVEPS, TOL
  8177.       INTEGER IERP, IERR, NORD, NORDP
  8178. C     .. Arrays in Common ..
  8179.       DOUBLE PRECISION R(11)
  8180. C     .. Local Scalars ..
  8181.       DOUBLE PRECISION RPP, SS
  8182.       INTEGER IERPP, NRDP
  8183. C     .. Local Arrays ..
  8184.       INTEGER ITEMP(4)
  8185. C     .. Intrinsic Functions ..
  8186.       INTRINSIC ABS
  8187. C     .. Common blocks ..
  8188.       COMMON /DCHECK/ EPS, R, RP, SVEPS, TOL, NORDP, NORD, IERP, IERR
  8189. C***FIRST EXECUTABLE STATEMENT  DCMPAR
  8190.       ICNT = ICNT + 1
  8191.       ITEMP(1) = 0
  8192.       ITEMP(2) = 0
  8193.       ITEMP(3) = 0
  8194.       ITEMP(4) = 0
  8195.       SS = SVEPS - EPS
  8196.       NRDP = NORDP - NORD
  8197.       RPP = RP - R(11)
  8198.       IERPP = IERP - IERR
  8199.       IF (ABS(SS).LE.TOL .OR. ICNT.LE.2 .OR. ICNT.GE.6) ITEMP(1) = 1
  8200.       IF (ABS(NRDP) .EQ. 0) ITEMP(2) = 1
  8201.       IF (ICNT .EQ. 2) ITEMP(2) = 1
  8202.       IF (ABS(RPP) .LE. TOL) ITEMP(3) = 1
  8203.       IF (ABS(IERPP) .EQ. 0) ITEMP(4) = 1
  8204. C
  8205. C     Check to see if all four tests were good.
  8206. C     If so, set the test number equal to 1.
  8207. C
  8208.       ITEST(ICNT) = ITEMP(1)*ITEMP(2)*ITEMP(3)*ITEMP(4)
  8209.       RETURN
  8210.       END
  8211. *DECK DEG8CK
  8212.       SUBROUTINE DEG8CK (LUN, KPRINT, IPASS)
  8213. C***BEGIN PROLOGUE  DEG8CK
  8214. C***PURPOSE  Quick check for DEXINT and DGAUS8.
  8215. C***LIBRARY   SLATEC
  8216. C***TYPE      DOUBLE PRECISION (EG8CK-S, DEG8CK-D)
  8217. C***KEYWORDS  QUICK CHECK
  8218. C***AUTHOR  Amos, D. E., (SNLA)
  8219. C***DESCRIPTION
  8220. C
  8221. C   DEG8CK is a quick check routine for DEXINT and DGAUS8.  Exponential
  8222. C   integrals from DEXINT are checked against quadratures from DGAUS8.
  8223. C
  8224. C***ROUTINES CALLED  D1MACH, DEXINT, DFEIN, DGAUS8
  8225. C***COMMON BLOCKS    DFEINX
  8226. C***REVISION HISTORY  (YYMMDD)
  8227. C   800501  DATE WRITTEN
  8228. C   890718  Added check when testing error conditions.  (WRB)
  8229. C   890718  REVISION DATE from Version 3.2
  8230. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  8231. C   910708  Code revised to test error returns for all values of
  8232. C           KPRINT.  (WRB)
  8233. C   920206  Corrected argument list in CALL to DEXINT.  (WRB)
  8234. C***END PROLOGUE  DEG8CK
  8235.       COMMON /DFEINX/ X, A, FKM
  8236.       INTEGER I, ICASE, IE, IERR, II, IK, IPASS, IX, IY, K, KE, KK,
  8237.      *        KODE, KX, LUN, M, N, NM, NZ
  8238.       DOUBLE PRECISION A, ANS, ATOL, BB, EN, ER, EX, FKM, SIG, SUM,
  8239.      *                 TOL, T1, T2, X, XX, Y
  8240.       DOUBLE PRECISION D1MACH, DFEIN
  8241.       DIMENSION EN(4), Y(4), XX(5)
  8242.       LOGICAL FATAL
  8243.       EXTERNAL DFEIN
  8244. C***FIRST EXECUTABLE STATEMENT  DEG8CK
  8245.       IF (KPRINT .GE. 2) WRITE (LUN, 90000)
  8246.       IPASS=1
  8247.       TOL = SQRT(MAX(D1MACH(4),1.0D-18))
  8248.       DO 150 KODE=1,2
  8249.         IK = KODE - 1
  8250.         FKM = IK
  8251.         DO 140 N=1,25,8
  8252.           DO 130 M=1,4
  8253.             NM = N + M - 1
  8254.             DO 120 IX=1,25,8
  8255.               X = IX- 0.20D0
  8256.               CALL DEXINT(X, N, KODE, M, TOL, EN, NZ, IERR)
  8257.               KX = X+0.5D0
  8258.               IF (KX.EQ.0) KX = 1
  8259.               ICASE = 1
  8260.               A = N
  8261.               IF (KX.LE.N) GO TO 10
  8262.               ICASE = 2
  8263.               A = NM
  8264.               IF (KX.GE.NM) GO TO 10
  8265.               ICASE = 3
  8266.               A = KX
  8267.    10         CONTINUE
  8268.               SIG = 3.0D0/X
  8269.               T2 = 1.0D0
  8270.               SUM = 0.0D0
  8271.    20         CONTINUE
  8272.               T1 = T2
  8273.               T2 = T2 + SIG
  8274.               ATOL = TOL
  8275.               CALL DGAUS8(DFEIN, T1, T2, ATOL, ANS, IERR)
  8276.               SUM = SUM + ANS
  8277.               IF (ABS(ANS).LT.ABS(SUM)*TOL) GO TO 30
  8278.               GO TO 20
  8279.    30         CONTINUE
  8280.               EX = 1.0D0
  8281.               IF (KODE.EQ.1) EX = EXP(-X)
  8282.               BB = A
  8283.               IF (ICASE.NE.3) GO TO 40
  8284.               IY = KX - N + 1
  8285.               Y(IY) = SUM
  8286.               KE = M - IY
  8287.               IE = IY - 1
  8288.               KK = IY
  8289.               II = IY
  8290.               GO TO 60
  8291.    40         CONTINUE
  8292.               IF (ICASE.NE.2) GO TO 50
  8293.               Y(M) = SUM
  8294.               IF (M.EQ.1) GO TO 100
  8295.               IE = M - 1
  8296.               II = M
  8297.               GO TO 80
  8298.    50         CONTINUE
  8299.               Y(1) = SUM
  8300.               IF (M.EQ.1) GO TO 100
  8301.               KE = M - 1
  8302.               KK = 1
  8303.    60         CONTINUE
  8304. C
  8305. C             Forward recur
  8306. C
  8307.               DO 70 K=1,KE
  8308.                 Y(KK+1) = (EX-X*Y(KK))/BB
  8309.                 BB = BB + 1.0D0
  8310.                 KK = KK + 1
  8311.    70         CONTINUE
  8312.               IF (ICASE.NE.3) GO TO 100
  8313.    80         BB = A - 1.0D0
  8314. C
  8315. C             Backward recur
  8316. C
  8317.               DO 90 I=1,IE
  8318.                 Y(II-1) = (EX-BB*Y(II))/X
  8319.                 BB = BB - 1.0D0
  8320.                 II = II - 1
  8321.    90         CONTINUE
  8322.   100         CONTINUE
  8323.               DO 110 I=1,M
  8324.                 ER = ABS((Y(I)-EN(I))/Y(I))
  8325.                 IF (ER .GT. TOL) THEN
  8326.                    WRITE (LUN,90010)
  8327.                    IPASS = 0
  8328.                    GO TO 160
  8329.                 ENDIF
  8330.   110         CONTINUE
  8331.   120       CONTINUE
  8332.   130     CONTINUE
  8333.   140   CONTINUE
  8334.   150 CONTINUE
  8335. C
  8336. C     Trigger 6 error conditions.
  8337. C
  8338.   160 FATAL = .FALSE.
  8339. C
  8340.       IF (KPRINT .GE. 3) WRITE (LUN, 90020)
  8341.       XX(1) = 1.0D0
  8342.       XX(2) = 1.0D0
  8343.       XX(3) = 1.0D0
  8344.       XX(4) = 1.0D0
  8345.       XX(5) = 0.01D0
  8346.       DO 170 I=1,5
  8347.         XX(I) = -XX(I)
  8348.         K = XX(2)
  8349.         N = XX(3)
  8350.         M = XX(4)
  8351.         CALL DEXINT (XX(I), N, K, M, XX(5), EN, NZ, IERR)
  8352.         IF (IERR .NE. 1) THEN
  8353.            IPASS = 0
  8354.            FATAL = .TRUE.
  8355.            WRITE (LUN, 90030) I
  8356.         ENDIF
  8357.         XX(I) = -XX(I)
  8358.   170 CONTINUE
  8359.       X = 0.0D0
  8360.       TOL = 1.0D-2
  8361.       CALL DEXINT (X, 1, 1, 1, TOL, EN, NZ, IERR)
  8362.       IF (IERR .NE. 1) THEN
  8363.          IPASS = 0
  8364.          FATAL = .TRUE.
  8365.          WRITE (LUN, 90040)
  8366.       ENDIF
  8367.       IF (FATAL) THEN
  8368.          IF (KPRINT .GE. 2) THEN
  8369.             WRITE (LUN, 90070)
  8370.          ENDIF
  8371.       ELSE
  8372.          IF (KPRINT .GE. 3) THEN
  8373.             WRITE (LUN, 90080)
  8374.          ENDIF
  8375.       ENDIF
  8376. C
  8377.       IF(IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 90100)
  8378.       IF(IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 90110)
  8379.       RETURN
  8380. C
  8381. 90000 FORMAT ('1' / ' QUICK CHECK FOR DEXINT AND DGAUS8' /)
  8382. 90010 FORMAT (// ' ERROR IN DEG8CK COMPARISON TEST' /)
  8383. 90020 FORMAT (/ ' TRIGGER 6 ERROR CONDITIONS' /)
  8384. 90030 FORMAT (' Error occurred with DO index I =', I2)
  8385. 90040 FORMAT (' Error occurred with X = 0.0')
  8386. 90070 FORMAT (/' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  8387. 90080 FORMAT (/' ALL INCORRECT ARGUMENT TESTS PASSED')
  8388. 90100 FORMAT (/ ' *********DEXINT AND DGAUS8 PASSED ALL TESTS*********')
  8389. 90110 FORMAT (/ ' *********DEXINT OR DGAUS8 FAILED SOME TESTS*********')
  8390.       END
  8391. *DECK DEVCHK
  8392.       SUBROUTINE DEVCHK (LOUT, KPRINT, NPTS, XEV, FEV, DEV, FEV2, FAIL)
  8393. C***BEGIN PROLOGUE  DEVCHK
  8394. C***SUBSIDIARY
  8395. C***PURPOSE  Test evaluation accuracy of DCHFDV and DCHFEV for DPCHQ1.
  8396. C***LIBRARY   SLATEC (PCHIP)
  8397. C***TYPE      DOUBLE PRECISION (EVCHCK-S, DEVCHK-D)
  8398. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  8399. C***AUTHOR  Fritsch, F. N., (LLNL)
  8400. C***DESCRIPTION
  8401. C
  8402. C -------- CODE TO TEST EVALUATION ACCURACY OF DCHFDV AND DCHFEV -------
  8403. C
  8404. C     USING FUNCTION AND DERIVATIVE VALUES FROM A CUBIC (COMPUTED IN
  8405. C     DOUBLE PRECISION) AT NINT DIFFERENT (X1,X2) PAIRS:
  8406. C     1. CHECKS THAT DCHFDV AND DCHFEV BOTH REPRODUCE ENDPOINT VALUES.
  8407. C     2. EVALUATES AT NPTS POINTS, 10 OF WHICH ARE OUTSIDE THE INTERVAL
  8408. C        AND:
  8409. C        A. CHECKS ACCURACY OF DCHFDV FUNCTION AND DERIVATIVE VALUES
  8410. C           AGAINST EXACT VALUES.
  8411. C        B. CHECKS THAT RETURNED VALUES OF NEXT SUM TO 10.
  8412. C        C. CHECKS THAT FUNCTION VALUES FROM DCHFEV AGREE WITH THOSE
  8413. C           FROM DCHFDV.
  8414. C
  8415. C
  8416. C     FORTRAN INTRINSICS USED:  ABS, MAX, MIN.
  8417. C     FORTRAN LIBRARY ROUTINES USED:  SQRT, (READ), (WRITE).
  8418. C     SLATEC LIBRARY ROUTINES USED:  DCHFDV, DCHFEV, D1MACH, RAND.
  8419. C     OTHER ROUTINES USED:  DFDTRU.
  8420. C
  8421. C***ROUTINES CALLED  D1MACH, DCHFDV, DCHFEV, DFDTRU, RAND
  8422. C***REVISION HISTORY  (YYMMDD)
  8423. C   820601  DATE WRITTEN
  8424. C   820624  CONVERTED TO QUICK CHECK FOR SLATEC LIBRARY.
  8425. C   820630  1. MODIFIED DEFINITIONS OF RELATIVE ERROR AND TEST
  8426. C             TOLERANCES.
  8427. C           2. VARIOUS IMPROVEMENTS TO OUTPUT FORMATS.
  8428. C   820716  1. SET MACHEP VIA A CALL TO D1MACH.
  8429. C           2. CHANGED FROM FORTLIB'S RANF TO SLATEC'S RAND.
  8430. C   890628  1. Removed unnecessary IMPLICIT declaration.
  8431. C           2. Removed unnecessary variable NEV.
  8432. C           3. Other changes to reduce S.P./D.P. differences.
  8433. C   890629  Added RERR to DOUBLE PRECISION declaration.
  8434. C   890706  Cosmetic changes to prologue.  (WRB)
  8435. C   890831  Modified array declarations.  (WRB)
  8436. C   890911  Removed unnecessary intrinsics.  (WRB)
  8437. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  8438. C   900315  Revised prologue and improved some output formats.  (FNF)
  8439. C           Also moved formats to end to be consistent with other PCHIP
  8440. C           quick checks.
  8441. C   900316  Additional minor cosmetic changes.  (FNF)
  8442. C   900321  Changed name of DFTRUE to DFDTRU and made additional minor
  8443. C           cosmetic changes.  (FNF)
  8444. C   901130  Added 1P's to formats and revised some to reduce maximum
  8445. C           line length.  (FNF)
  8446. C   910708  Minor modifications in use of KPRINT.  (WRB)
  8447. C   910801  Added EXTERNAL statement for RAND due to problem on IBM
  8448. C           RS 6000.  (WRB)
  8449. C   910819  Changed argument to RAND function from a D.P. zero to a
  8450. C           S.P. zero.  (WRB)
  8451. C***END PROLOGUE  DEVCHK
  8452. C
  8453. C  Declare arguments.
  8454. C
  8455.       INTEGER  LOUT, KPRINT, NPTS
  8456.       DOUBLE PRECISION XEV(*), FEV(*), DEV(*), FEV2(*)
  8457.       LOGICAL  FAIL
  8458. C
  8459. C  DECLARATIONS.
  8460. C
  8461.       INTEGER  I, IERR, IINT, NEXT(2), NEXT2(2), NINT
  8462.       DOUBLE PRECISION
  8463.      *      AED, AED2, AEDMAX, AEDMIN, AEF, AEF2, AEFMAX, AEFMIN,
  8464.      *      CHECK(2), CHECKF(2), CHECKD(2), D1, D2, DERMAX, DTRUE, DX,
  8465.      *      EPS1, EPS2, F1, F2, FACT, FERMAX, FLOORD, FLOORF, FOUR,
  8466.      *      FTRUE, LEFT(3), MACHEP,
  8467.      *      ONE, RED, RED2, REDMAX, REDMIN, REF, REF2, REFMAX,
  8468.      *      REFMIN, RIGHT(3), SMALL, TEN, TOL1, TOL2,
  8469.      *      X1, X2, XADMAX, XADMIN, XAFMAX, XAFMIN, XRDMAX,
  8470.      *      XRDMIN, XRFMAX, XRFMIN, ZERO
  8471.       LOGICAL  FAILOC, FAILNX
  8472. C
  8473.       DOUBLE PRECISION  D1MACH
  8474. C       The following should stay REAL (no D.P. equivalent).
  8475.       REAL  RAND
  8476.       EXTERNAL  RAND
  8477. C
  8478. C  DEFINE RELATIVE ERROR WITH FLOOR.
  8479. C
  8480.       DOUBLE PRECISION  RERR, ERR, VALUE, FLOOR
  8481.       RERR(ERR,VALUE,FLOOR) = ERR / MAX(ABS(VALUE), FLOOR)
  8482. C
  8483. C  INITIALIZE.
  8484. C
  8485.       DATA  ZERO /0.D0/, ONE /1.D0/, FOUR /4.D0/, TEN /10.D0/
  8486.       DATA  SMALL  /1.0D-10/
  8487.       DATA  NINT /3/
  8488.       DATA   LEFT /-1.5D0, 2.0D-10, 1.0D0 /
  8489.       DATA  RIGHT / 2.5D0, 3.0D-10, 1.0D+8/
  8490. C
  8491. C***FIRST EXECUTABLE STATEMENT  DEVCHK
  8492.       MACHEP = D1MACH(4)
  8493.       EPS1 = FOUR*MACHEP
  8494.       EPS2 = TEN*MACHEP
  8495. C
  8496.       FAIL = .FALSE.
  8497. C
  8498.       IF (KPRINT .GE. 2)  WRITE (LOUT, 3000)
  8499. C
  8500. C  CYCLE OVER INTERVALS.
  8501. C
  8502.       DO 90  IINT = 1, NINT
  8503.       X1 =  LEFT(IINT)
  8504.       X2 = RIGHT(IINT)
  8505. C
  8506.       FACT = MAX(SQRT(X2-X1), ONE)
  8507.       TOL1 = EPS1 * FACT
  8508.       TOL2 = EPS2 * FACT
  8509. C
  8510. C  COMPUTE AND PRINT ENDPOINT VALUES.
  8511. C
  8512.       CALL DFDTRU (X1, F1, D1)
  8513.       CALL DFDTRU (X2, F2, D2)
  8514. C
  8515.       IF (KPRINT .GE. 3)  THEN
  8516.          IF (IINT .EQ. 1)  WRITE (LOUT, 2000)
  8517.          WRITE (LOUT, '(/)')
  8518.          WRITE (LOUT, 2001)  'X1', X1, 'X2', X2
  8519.          WRITE (LOUT, 2001)  'F1', F1, 'F2', F2
  8520.          WRITE (LOUT, 2001)  'D1', D1, 'D2', D2
  8521.       ENDIF
  8522. C
  8523.       IF (KPRINT .GE. 2)  WRITE (LOUT, 3001)  X1, X2
  8524. C
  8525. C  COMPUTE FLOORS FOR RELATIVE ERRORS.
  8526. C
  8527.       FLOORF = MAX( MIN(ABS(F1),ABS(F2)), SMALL)
  8528.       FLOORD = MAX( MIN(ABS(D1),ABS(D2)), SMALL)
  8529. C
  8530. C  CHECK REPRODUCTION OF ENDPOINT VALUES.
  8531. C
  8532.       XEV(1) = X1
  8533.       XEV(2) = X2
  8534. C     -----------------------------------------------------------
  8535.       CALL DCHFDV (X1, X2, F1, F2, D1, D2, 2, XEV, CHECKF, CHECKD,
  8536.      *            NEXT, IERR)
  8537. C     -----------------------------------------------------------
  8538.       AEF  = CHECKF(1)-F1
  8539.       REF  = RERR(AEF , F1, FLOORF)
  8540.       AEF2 = CHECKF(2)-F2
  8541.       REF2 = RERR(AEF2, F2, FLOORF)
  8542.       AED  = CHECKD(1)-D1
  8543.       RED  = RERR(AED , D1, FLOORD)
  8544.       AED2 = CHECKD(2)-D2
  8545.       RED2 = RERR(AED2, D2, FLOORD)
  8546. C
  8547.       FAILOC = MAX(ABS(REF),ABS(REF2),ABS(RED),ABS(RED2)) .GT. TOL1
  8548.       FAIL = FAIL .OR. FAILOC
  8549. C
  8550.       IF (KPRINT .GE. 3)  THEN
  8551.          WRITE (LOUT, 2002)  NEXT, AEF, AEF2, AED, AED2
  8552.          WRITE (LOUT, 2003)  REF, REF2, RED, RED2
  8553.       ENDIF
  8554. C
  8555.       IF (FAILOC .AND. (KPRINT.GE.2))  WRITE (LOUT, 3002)
  8556. C
  8557. C  DCHFEV SHOULD AGREE EXACTLY WITH DCHFDV.
  8558. C                     -------
  8559. C     --------------------------------------------------------------
  8560.       CALL DCHFEV (X1, X2, F1, F2, D1, D2, 2, XEV, CHECK, NEXT, IERR)
  8561. C     --------------------------------------------------------------
  8562.       FAILOC = (CHECK(1).NE.CHECKF(1)) .OR. (CHECK(2).NE.CHECKF(2))
  8563.       FAIL = FAIL .OR. FAILOC
  8564. C
  8565.       IF (FAILOC .AND. (KPRINT.GE.2))  WRITE (LOUT, 3003)
  8566. C
  8567. C  EVALUATE AT NPTS 'UNIFORMLY RANDOM' POINTS IN (X1,X2).
  8568. C     THIS VERSION EXTENDS EVALUATION DOMAIN BY ADDING 4 SUBINTERVALS
  8569. C     TO LEFT AND 6 TO RIGHT OF [X1,X2].
  8570. C
  8571.       DX = (X2-X1)/(NPTS-10)
  8572.       DO 20  I = 1, NPTS
  8573.          XEV(I) = (X1 + (I-5)*DX) + DX*RAND(0.0E0)
  8574.    20 CONTINUE
  8575. C     --------------------------------------------------------
  8576.       CALL DCHFDV (X1, X2, F1, F2, D1, D2, NPTS, XEV, FEV, DEV,
  8577.      *            NEXT, IERR)
  8578. C     --------------------------------------------------------
  8579.       IF (IERR .NE. 0)  THEN
  8580.          FAILOC = .TRUE.
  8581.          IF (KPRINT .GE. 2)  WRITE (LOUT, 4003)  IERR
  8582.       ELSE
  8583. C
  8584. C     CUMULATE LARGEST AND SMALLEST ERRORS FOR SUMMARY.
  8585. C
  8586.       DO 30  I = 1, NPTS
  8587.          CALL DFDTRU (XEV(I), FTRUE, DTRUE)
  8588.          AEF = FEV(I) - FTRUE
  8589.          REF = RERR(AEF, FTRUE, FLOORF)
  8590.          AED = DEV(I) - DTRUE
  8591.          RED = RERR(AED, DTRUE, FLOORD)
  8592. C
  8593.          IF (I .EQ. 1)  THEN
  8594. C            INITIALIZE.
  8595.             AEFMIN = AEF
  8596.             AEFMAX = AEF
  8597.             AEDMIN = AED
  8598.             AEDMAX = AED
  8599.             REFMIN = REF
  8600.             REFMAX = REF
  8601.             REDMIN = RED
  8602.             REDMAX = RED
  8603.             XAFMIN = XEV(1)
  8604.             XAFMAX = XEV(1)
  8605.             XADMIN = XEV(1)
  8606.             XADMAX = XEV(1)
  8607.             XRFMIN = XEV(1)
  8608.             XRFMAX = XEV(1)
  8609.             XRDMIN = XEV(1)
  8610.             XRDMAX = XEV(1)
  8611.          ELSE
  8612. C            SELECT.
  8613.             IF (AEF .LT. AEFMIN)  THEN
  8614.                AEFMIN = AEF
  8615.                XAFMIN = XEV(I)
  8616.             ELSE IF (AEF .GT. AEFMAX)  THEN
  8617.                AEFMAX = AEF
  8618.                XAFMAX = XEV(I)
  8619.             ENDIF
  8620.             IF (AED .LT. AEDMIN)  THEN
  8621.                AEDMIN = AED
  8622.                XADMIN = XEV(I)
  8623.             ELSE IF (AED .GT. AEDMAX)  THEN
  8624.                AEDMAX = AED
  8625.                XADMAX = XEV(I)
  8626.             ENDIF
  8627.             IF (REF .LT. REFMIN)  THEN
  8628.                REFMIN = REF
  8629.                XRFMIN = XEV(I)
  8630.             ELSE IF (REF .GT. REFMAX)  THEN
  8631.                REFMAX = REF
  8632.                XRFMAX = XEV(I)
  8633.             ENDIF
  8634.             IF (RED .LT. REDMIN)  THEN
  8635.                REDMIN = RED
  8636.                XRDMIN = XEV(I)
  8637.             ELSE IF (RED .GT. REDMAX)  THEN
  8638.                REDMAX = RED
  8639.                XRDMAX = XEV(I)
  8640.             ENDIF
  8641.          ENDIF
  8642.    30    CONTINUE
  8643. C
  8644.          FERMAX = MAX (ABS(REFMAX), ABS(REFMIN))
  8645.          DERMAX = MAX (ABS(REDMAX), ABS(REDMIN))
  8646. C
  8647.          FAILNX = (NEXT(1) + NEXT(2)) .NE. 10
  8648.          FAILOC = FAILNX .OR. (MAX(FERMAX, DERMAX) .GT. TOL2)
  8649.       ENDIF
  8650.       FAIL = FAIL .OR. FAILOC
  8651. C
  8652. C  PRINT SUMMARY.
  8653. C
  8654.       IF (KPRINT .GE. 3)  THEN
  8655.          WRITE (LOUT, 2004)  NPTS-10, NEXT
  8656. C
  8657.          WRITE (LOUT, 2005)  'MIN', AEFMIN, REFMIN, AEDMIN, REDMIN
  8658.          WRITE (LOUT, 2006) XAFMIN, XRFMIN, XADMIN, XRDMIN
  8659.          WRITE (LOUT, 2005)  'MAX', AEFMAX, REFMAX, AEDMAX, REDMAX
  8660.          WRITE (LOUT, 2006) XAFMAX, XRFMAX, XADMAX, XRDMAX
  8661.       ENDIF
  8662. C
  8663.       IF (KPRINT .GE. 2)  THEN
  8664.          IF (FAILOC) THEN
  8665.             IF (FERMAX .GT. TOL2)  WRITE (LOUT, 3006) 'F', FERMAX, TOL2
  8666.             IF (DERMAX .GT. TOL2)  WRITE (LOUT, 3006) 'D', DERMAX, TOL2
  8667.             IF (FAILNX)  WRITE (LOUT, 4006)  NEXT
  8668.          ELSE
  8669.             WRITE (LOUT, 5006)
  8670.          ENDIF
  8671.       ENDIF
  8672. C
  8673. C  CHECK THAT DCHFEV AGREES WITH DCHFDV.
  8674. C
  8675. C     -----------------------------------------------------------------
  8676.       CALL DCHFEV (X1, X2, F1, F2, D1, D2, NPTS, XEV, FEV2, NEXT2, IERR)
  8677. C     -----------------------------------------------------------------
  8678.       IF (IERR .NE. 0)  THEN
  8679.          FAILOC = .TRUE.
  8680.          IF (KPRINT .GE. 2)  WRITE (LOUT, 3007)  IERR
  8681.       ELSE
  8682.          AEFMAX = ABS(FEV2(1) - FEV(1))
  8683.          XAFMAX = XEV(1)
  8684.          DO 40  I = 2, NPTS
  8685.             AEF = ABS(FEV2(I) - FEV(I))
  8686.             IF (AEF .GT. AEFMAX)  THEN
  8687.                AEFMAX = AEF
  8688.                XAFMAX = XEV(I)
  8689.             ENDIF
  8690.    40    CONTINUE
  8691.          FAILNX = (NEXT2(1).NE.NEXT(1)) .OR. (NEXT2(2).NE.NEXT(2))
  8692.          FAILOC = FAILNX .OR. (AEFMAX.NE.ZERO)
  8693.          IF (KPRINT .GE. 2)  THEN
  8694.             IF (FAILOC)  THEN
  8695.                WRITE (LOUT, 3008)
  8696.                IF (AEFMAX.NE.ZERO)  WRITE (LOUT, 3009)  AEFMAX, XAFMAX
  8697.                IF (FAILNX)  WRITE (LOUT, 4009)  NEXT2, NEXT
  8698.             ELSE
  8699.                WRITE (LOUT, 5009)
  8700.             ENDIF
  8701.          ENDIF
  8702.       ENDIF
  8703. C
  8704.       FAIL = FAIL .OR. FAILOC
  8705. C
  8706. C  GO BACK FOR ANOTHER INTERVAL.
  8707. C
  8708.    90 CONTINUE
  8709. C
  8710.       RETURN
  8711. C
  8712. C  FORMATS.
  8713. C
  8714.  2000 FORMAT (/10X,'DCHFDV ACCURACY TEST')
  8715.  2001 FORMAT (10X,A2,' =',1P,D18.10,5X,A2,' =',D18.10)
  8716.  2002 FORMAT (/' ERRORS AT ENDPOINTS:',40X,'(NEXT =',2I3,')'
  8717.      *        // 1P,4X,'F1:',D13.5,4X,'F2:',D13.5,
  8718.      *              4X,'D1:',D13.5,4X,'D2:',D13.5)
  8719.  2003 FORMAT (1P,4(7X,D13.5))
  8720.  2004 FORMAT (/' ERRORS AT ',I5,' INTERIOR POINTS + 10 OUTSIDE:',
  8721.      *                15X,'(NEXT =',2I3,')'
  8722.      *        //30X,'FUNCTION',17X,'DERIVATIVE'
  8723.      *         /15X,2(11X,'ABS',9X,'REL') )
  8724.  2005 FORMAT (/5X,A3,'IMUM ERROR:  ',1P,2D12.4,2X,2D12.4)
  8725.  2006 FORMAT ( 5X,'LOCATED AT X =  ',1P,2D12.4,2X,2D12.4)
  8726.  3000 FORMAT (//10X,'DEVCHK RESULTS'/10X,'--------------')
  8727.  3001 FORMAT (/10X,'INTERVAL = (',1P,D12.5,',',D12.5,' ):' )
  8728.  3002 FORMAT (/' ***** DCHFDV FAILED TO REPRODUCE ENDPOINT VALUES.')
  8729.  3003 FORMAT (/' ***** DCHFEV DOES NOT AGREE WITH DCHFDV AT ENDPOINTS.')
  8730.  3006 FORMAT (/' ***** MAXIMUM RELATIVE ERROR IN ',A1,' =',1P,D12.5,','
  8731.      *        /        17X,'EXCEEDS TOLERANCE =',D12.5)
  8732.  3007 FORMAT (/' ***** ERROR ***** DCHFEV RETURNED IERR =',I5)
  8733.  3008 FORMAT (/' ***** DCHFEV DID NOT AGREE WITH DCHFDV:')
  8734.  3009 FORMAT (7X,'MAXIMUM DIFFERENCE ',1P,D12.5,
  8735.      *                '; OCCURRED AT X =',D12.5)
  8736.  4003 FORMAT (/' ***** ERROR ***** DCHFDV RETURNED IERR =',I5)
  8737.  4006 FORMAT (/' ***** REPORTED NEXT =',2I5,'   RATHER THAN    4    6')
  8738.  4009 FORMAT (7X,'REPORTED NEXT =',2I3,'   RATHER THAN ',2I3)
  8739.  5006 FORMAT (/' DCHFDV RESULTS OK.')
  8740.  5009 FORMAT (/' DCHFEV AGREES WITH DCHFDV.')
  8741. C------------- LAST LINE OF DEVCHK FOLLOWS -----------------------------
  8742.       END
  8743. *DECK DEVERK
  8744.       SUBROUTINE DEVERK (LOUT, KPRINT, FAIL)
  8745. C***BEGIN PROLOGUE  DEVERK
  8746. C***SUBSIDIARY
  8747. C***PURPOSE  Test error returns from DPCHIP evaluators for DPCHQ1.
  8748. C***LIBRARY   SLATEC (PCHIP)
  8749. C***TYPE      DOUBLE PRECISION (EVERCK-S, DEVERK-D)
  8750. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  8751. C***AUTHOR  Fritsch, F. N., (LLNL)
  8752. C***DESCRIPTION
  8753. C
  8754. C --------- CODE TO TEST ERROR RETURNS FROM DPCHIP EVALUATORS. ---------
  8755. C
  8756. C
  8757. C     FORTRAN LIBRARY ROUTINES USED:  (WRITE).
  8758. C     SLATEC LIBRARY ROUTINES USED:  DCHFDV, DCHFEV, DPCHFD, DPCHFE,
  8759. C                                    XERDMP, XGETF, XSETF.
  8760. C     OTHER ROUTINES USED:  COMP.
  8761. C
  8762. C***ROUTINES CALLED  COMP, DCHFDV, DCHFEV, DPCHFD, DPCHFE, XERDMP,
  8763. C                    XGETF, XSETF
  8764. C***REVISION HISTORY  (YYMMDD)
  8765. C   820601  DATE WRITTEN
  8766. C   820715  CONVERTED TO QUICK CHECK FOR SLATEC LIBRARY.
  8767. C   890207  ADDED CALLS TO ERROR HANDLER.
  8768. C   890316  Added call to XERDMP if KPRINT.GT.2 (FNF).
  8769. C   890706  Cosmetic changes to prologue.  (WRB)
  8770. C   890911  Removed unnecessary intrinsics.  (WRB)
  8771. C   891009  Removed unreferenced statement label.  (WRB)
  8772. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  8773. C   900309  Added COMP to list of routines called.  (FNF)
  8774. C   900315  Revised prologue and improved some output formats.  (FNF)
  8775. C   900316  Deleted INCFD tests because some compilers object to them,
  8776. C           and made additional minor cosmetic changes.  (FNF)
  8777. C   900322  Made miscellaneous cosmetic changes.  (FNF)
  8778. C   910708  Minor modifications in use of KPRINT.  (WRB)
  8779. C***END PROLOGUE  DEVERK
  8780. C
  8781. C  Declare arguments.
  8782. C
  8783.       INTEGER  LOUT, KPRINT
  8784.       LOGICAL  FAIL
  8785. C
  8786. C  DECLARATIONS.
  8787. C
  8788.       INTEGER  I, IERR, KONTRL, N, NERR, NEXT(2)
  8789.       DOUBLE PRECISION D(10), DUM, F(10), TEMP, X(10)
  8790.       LOGICAL  COMP, SKIP
  8791. C
  8792. C  INITIALIZE.
  8793. C
  8794.       PARAMETER (N = 10)
  8795. C***FIRST EXECUTABLE STATEMENT  DEVERK
  8796.       NERR = 0
  8797. C
  8798.       CALL XGETF (KONTRL)
  8799.       IF (KPRINT .LE. 2) THEN
  8800.          CALL XSETF (0)
  8801.       ELSE
  8802.          CALL XSETF (1)
  8803.       ENDIF
  8804. C
  8805.       IF (KPRINT .GE. 3)  WRITE (LOUT, 2000)
  8806.       IF (KPRINT .GE. 2)  WRITE (LOUT, 5000)
  8807. C
  8808. C  FIRST, TEST DCHFEV AND DCHFDV.
  8809. C
  8810.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-1)
  8811.       CALL DCHFEV (0.D0, 1.D0, 3.D0, 7.D0, 3.D0, 6.D0, 0, DUM, DUM,
  8812.      * NEXT, IERR)
  8813.       IF (.NOT. COMP (IERR, -1, LOUT, KPRINT) )  NERR = NERR + 1
  8814. C
  8815.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-2)
  8816.       CALL DCHFEV (1.D0, 1.D0, 3.D0, 7.D0, 3.D0, 6.D0, 1, DUM, DUM,
  8817.      * NEXT, IERR)
  8818.       IF (.NOT. COMP (IERR, -2, LOUT, KPRINT) )  NERR = NERR + 1
  8819. C
  8820.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-1)
  8821.       CALL DCHFDV (0.D0, 1.D0, 3.D0, 7.D0, 3.D0, 6.D0, 0, DUM, DUM,
  8822.      * DUM, NEXT, IERR)
  8823.       IF (.NOT. COMP (IERR, -1, LOUT, KPRINT) )  NERR = NERR + 1
  8824. C
  8825.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-2)
  8826.       CALL DCHFDV (1.D0, 1.D0, 3.D0, 7.D0, 3.D0, 6.D0, 1, DUM, DUM,
  8827.      * DUM, NEXT, IERR)
  8828.       IF (.NOT. COMP (IERR, -2, LOUT, KPRINT) )  NERR = NERR + 1
  8829. C
  8830. C  SET UP PCH DEFINITION.
  8831. C
  8832.       DO 10  I = 1, N
  8833.          X(I) = I
  8834.          F(I) = I + 2
  8835.          D(I) = 1.D0
  8836.    10 CONTINUE
  8837. C
  8838. C  SWAP POINTS 4 AND 7, SO X-ARRAY IS OUT OF ORDER.
  8839. C
  8840.       TEMP = X(4)
  8841.       X(4) = X(7)
  8842.       X(7) = TEMP
  8843. C
  8844. C  NOW, TEST DPCHFE AND DPCHFD.
  8845. C
  8846.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-1)
  8847.       SKIP = .FALSE.
  8848.       CALL DPCHFE (1, X, F, D, 1, SKIP, 0, DUM, DUM, IERR)
  8849.       IF (.NOT. COMP (IERR, -1, LOUT, KPRINT) )  NERR = NERR + 1
  8850. C
  8851.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-3)
  8852.       SKIP = .FALSE.
  8853.       CALL DPCHFE (N, X, F, D, 1, SKIP, 0, DUM, DUM, IERR)
  8854.       IF (.NOT. COMP (IERR, -3, LOUT, KPRINT) )  NERR = NERR + 1
  8855. C
  8856.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-4)
  8857.       SKIP = .TRUE.
  8858.       CALL DPCHFE (N, X, F, D, 1, SKIP, 0, DUM, DUM, IERR)
  8859.       IF (.NOT. COMP (IERR, -4, LOUT, KPRINT) )  NERR = NERR + 1
  8860. C
  8861.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-1)
  8862.       SKIP = .FALSE.
  8863.       CALL DPCHFD (1, X, F, D, 1, SKIP, 0, DUM, DUM, DUM, IERR)
  8864.       IF (.NOT. COMP (IERR, -1, LOUT, KPRINT) )  NERR = NERR + 1
  8865. C
  8866.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-3)
  8867.       SKIP = .FALSE.
  8868.       CALL DPCHFD (N, X, F, D, 1, SKIP, 0, DUM, DUM, DUM, IERR)
  8869.       IF (.NOT. COMP (IERR, -3, LOUT, KPRINT) )  NERR = NERR + 1
  8870. C
  8871.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-4)
  8872.       SKIP = .TRUE.
  8873.       CALL DPCHFD (N, X, F, D, 1, SKIP, 0, DUM, DUM, DUM, IERR)
  8874.       IF (.NOT. COMP (IERR, -4, LOUT, KPRINT) )  NERR = NERR + 1
  8875. C
  8876. C  SUMMARIZE RESULTS.
  8877. C
  8878.       IF (KPRINT .GT. 2)  CALL XERDMP
  8879.       IF (NERR .EQ. 0)  THEN
  8880.          FAIL = .FALSE.
  8881.          IF (KPRINT .GE. 2)  WRITE (LOUT, 5002)
  8882.       ELSE
  8883.          FAIL = .TRUE.
  8884.          IF (KPRINT .GE. 2)  WRITE (LOUT, 5003)  NERR
  8885.       ENDIF
  8886. C
  8887. C  TERMINATE.
  8888. C
  8889.       CALL XSETF (KONTRL)
  8890.       RETURN
  8891. C
  8892. C  FORMATS.
  8893. C
  8894.  2000 FORMAT ('1'//10X,'TEST ERROR RETURNS')
  8895.  5000 FORMAT (//10X,'DEVERK RESULTS'/10X,'--------------')
  8896.  5001 FORMAT (/' THIS CALL SHOULD RETURN IERR =',I3)
  8897.  5002 FORMAT (/' ALL ERROR RETURNS OK.')
  8898.  5003 FORMAT (//' ***** TROUBLE IN DEVERK *****'
  8899.      *        //5X,I5,' TESTS FAILED TO GIVE EXPECTED RESULTS.')
  8900. C------------- LAST LINE OF DEVERK FOLLOWS -----------------------------
  8901.       END
  8902. *DECK DEVPCK
  8903.       SUBROUTINE DEVPCK (LOUT, KPRINT, X, Y, F, FX, FY, XE, YE, FE, DE,
  8904.      +   FE2, FAIL)
  8905. C***BEGIN PROLOGUE  DEVPCK
  8906. C***SUBSIDIARY
  8907. C***PURPOSE  Test usage of increment argument in DPCHFD and DPCHFE for
  8908. C            DPCHQ1.
  8909. C***LIBRARY   SLATEC (PCHIP)
  8910. C***TYPE      DOUBLE PRECISION (EVPCCK-S, DEVPCK-D)
  8911. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  8912. C***AUTHOR  Fritsch, F. N., (LLNL)
  8913. C***DESCRIPTION
  8914. C
  8915. C ---- CODE TO TEST USAGE OF INCREMENT ARGUMENT IN DPCHFD AND DPCHFE ---
  8916. C
  8917. C     EVALUATES A BICUBIC FUNCTION AND ITS FIRST PARTIAL DERIVATIVES
  8918. C     ON A 4X6 MESH CONTAINED IN A 10X10 ARRAY.
  8919. C
  8920. C     INTERPOLATION OF THESE DATA ALONG MESH LINES IN EITHER DIMENSION
  8921. C     SHOULD AGREE WITH CORRECT FUNCTION WITHIN ROUNDOFF ERROR.
  8922. C
  8923. C     ARRAYS ARE ARGUMENTS ONLY TO ALLOW SHARING STORAGE WITH OTHER
  8924. C     TEST ROUTINES.
  8925. C
  8926. C     NOTE:  RUN WITH KPRINT=4 FOR FULL GORY DETAILS (10 PAGES WORTH).
  8927. C
  8928. C
  8929. C     FORTRAN INTRINSICS USED:  ABS.
  8930. C     FORTRAN LIBRARY ROUTINES USED:  (WRITE).
  8931. C     SLATEC LIBRARY ROUTINES USED:  DPCHFD, DPCHFE, D1MACH.
  8932. C
  8933. C***ROUTINES CALLED  D1MACH, DPCHFD, DPCHFE
  8934. C***REVISION HISTORY  (YYMMDD)
  8935. C   820601  DATE WRITTEN
  8936. C   820714  CONVERTED TO QUICK CHECK FOR SLATEC LIBRARY.
  8937. C   820715  1. CORRECTED SOME FORMATS.
  8938. C           2. ADDED CALL TO D1MACH TO SET MACHEP.
  8939. C   890406  1. Modified to make sure final elements of X and XE
  8940. C             agree, to avoid possible failure due to roundoff
  8941. C             error.
  8942. C           2. Added printout of TOL in case of failure.
  8943. C           3. Removed unnecessary IMPLICIT declaration.
  8944. C           4. Corrected a few S.P. constants to D.P.
  8945. C           5. Minor cosmetic changes.
  8946. C   890706  Cosmetic changes to prologue.  (WRB)
  8947. C   890911  Removed unnecessary intrinsics.  (WRB)
  8948. C   891004  Cosmetic changes to prologue.  (WRB)
  8949. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  8950. C   900315  Revised prologue and improved some output formats.  (FNF)
  8951. C   900316  Additional minor cosmetic changes.  (FNF)
  8952. C   900321  Made miscellaneous cosmetic changes.  (FNF)
  8953. C   901130  Made many changes to output:  (FNF)
  8954. C           1. Reduced amount of output for KPRINT=3.  (Now need to
  8955. C              use KPRINT=4 for full output.)
  8956. C           2. Added 1P's to formats and revised some to reduce maximum
  8957. C              line length.
  8958. C   910708  Minor modifications in use of KPRINT.  (WRB)
  8959. C***END PROLOGUE  DEVPCK
  8960. C
  8961. C  Declare arguments.
  8962. C
  8963.       INTEGER  LOUT, KPRINT
  8964.       LOGICAL  FAIL
  8965.       DOUBLE PRECISION
  8966.      *      X(10), Y(10), F(10,10), FX(10,10), FY(10,10),
  8967.      *      XE(51), YE(51), FE(51), DE(51), FE2(51)
  8968. C
  8969. C  DECLARATIONS.
  8970. C
  8971.       INTEGER  I, IER2, IERR, INC, J, K, NE, NERR, NMAX, NX, NY
  8972.       LOGICAL  FAILD, FAILE, FAILOC, SKIP
  8973.       DOUBLE PRECISION
  8974.      *      DERMAX, DERR, DTRUE, DX, FDIFF, FDIFMX, FERMAX, FERR,
  8975.      *      FTRUE, MACHEP, TOL, PDERMX, PDIFMX, PFERMX, ZERO
  8976.       DOUBLE PRECISION  D1MACH
  8977. C
  8978. C  DEFINE TEST FUNCTION AND DERIVATIVES.
  8979. C
  8980.       DOUBLE PRECISION  AX, AY, FCN, DFDX, DFDY
  8981.       FCN (AX,AY) =  AX*(AY*AY)*(AX*AX + 1.D0)
  8982.       DFDX(AX,AY) = (AY*AY)*(3.D0*AX*AX + 1.D0)
  8983.       DFDY(AX,AY) =   2.D0*AX*AY*(AX*AX + 1.D0)
  8984. C
  8985.       DATA  NMAX /10/,  NX /4/,  NY /6/
  8986.       DATA  NE /51/
  8987.       DATA  ZERO /0.D0/
  8988. C
  8989. C  INITIALIZE.
  8990. C
  8991. C***FIRST EXECUTABLE STATEMENT  DEVPCK
  8992.       MACHEP = D1MACH(4)
  8993. C       Following tolerance is looser than S.P. version to avoid
  8994. C       spurious failures on some systems.
  8995.       TOL = 25.D0*MACHEP
  8996. C
  8997.       FAIL = .FALSE.
  8998. C
  8999. C  SET UP 4-BY-6 MESH IN A 10-BY-10 ARRAY:
  9000. C     X =  0.25(0.25)1.   ;
  9001. C     Y = -0.75(0.5 )1.75 .
  9002. C
  9003.       DO 1  I = 1, NX-1
  9004.          X(I) = 0.25D0*I
  9005.     1 CONTINUE
  9006.       X(NX) = 1.D0
  9007.       DO 5  J = 1, NY
  9008.          Y(J) = 0.5D0*J - 1.25D0
  9009.          DO 4  I = 1, NX
  9010.              F(I,J) = FCN (X(I), Y(J))
  9011.             FX(I,J) = DFDX(X(I), Y(J))
  9012.             FY(I,J) = DFDY(X(I), Y(J))
  9013.     4    CONTINUE
  9014.     5 CONTINUE
  9015. C
  9016. C  SET UP EVALUATION POINTS:
  9017. C     XE =  0.(0.02)1. ;
  9018. C     YE = -2.(0.08)2. .
  9019. C
  9020.       DX = 1.D0/(NE-1)
  9021.       DO 8  K = 1, NE-1
  9022.          XE(K) = DX*(K-1)
  9023.          YE(K) = 4.D0*XE(K) - 2.D0
  9024.     8 CONTINUE
  9025.       XE(NE) = 1.D0
  9026.       YE(NE) = 2.D0
  9027. C
  9028.       IF (KPRINT .GE. 2)  WRITE (LOUT, 1000)
  9029.       IF (KPRINT .GE. 3)  WRITE (LOUT, 1001)
  9030. C
  9031. C  EVALUATE ON HORIZONTAL MESH LINES (Y FIXED, X RUNNING) ..............
  9032. C
  9033.       NERR = 0
  9034.       INC = 1
  9035.       SKIP = .FALSE.
  9036.       DO 20  J = 1, NY
  9037. C        --------------------------------------------------------------
  9038.          CALL DPCHFD (NX, X, F(1,J), FX(1,J), INC, SKIP, NE, XE, FE, DE,
  9039.      *               IERR)
  9040. C        --------------------------------------------------------------
  9041.          IF (KPRINT .GE. 3)
  9042.      *       WRITE (LOUT, 2000)  INC, 'J', J, 'Y', Y(J), IERR
  9043.          IF (IERR .LT. 0)  GO TO 15
  9044.          IF (KPRINT .GT. 3)  WRITE (LOUT, 2001)  'X'
  9045. C
  9046. C        DPCHFE SHOULD AGREE EXACTLY WITH DPCHFD.
  9047. C
  9048. C        -----------------------------------------------------------
  9049.          CALL DPCHFE (NX, X, F(1,J), FX(1,J), INC, SKIP, NE, XE, FE2,
  9050.      *               IER2)
  9051. C        -----------------------------------------------------------
  9052. C
  9053.          DO 10  K = 1, NE
  9054.             FTRUE =  FCN(XE(K), Y(J))
  9055.             FERR = FE(K) - FTRUE
  9056.             DTRUE = DFDX(XE(K), Y(J))
  9057.             DERR = DE(K) - DTRUE
  9058.             IF (KPRINT .GT. 3)
  9059.      *         WRITE (LOUT, 2002)  XE(K), FTRUE, FE(K), FERR,
  9060.      *                                    DTRUE, DE(K), DERR
  9061.             IF (K .EQ. 1)  THEN
  9062. C              INITIALIZE.
  9063.                FERMAX = ABS(FERR)
  9064.                PFERMX = XE(1)
  9065.                DERMAX = ABS(DERR)
  9066.                PDERMX = XE(1)
  9067.                FDIFMX = ABS(FE2(1) - FE(1))
  9068.                PDIFMX = XE(1)
  9069.             ELSE
  9070. C              SELECT.
  9071.                FERR = ABS(FERR)
  9072.                IF (FERR .GT. FERMAX)  THEN
  9073.                   FERMAX = FERR
  9074.                   PFERMX = XE(K)
  9075.                ENDIF
  9076.                DERR = ABS(DERR)
  9077.                IF (DERR .GT. DERMAX)  THEN
  9078.                   DERMAX = DERR
  9079.                   PDERMX = XE(K)
  9080.                ENDIF
  9081.                FDIFF = ABS(FE2(K) - FE(K))
  9082.                IF (FDIFF .GT. FDIFMX)  THEN
  9083.                   FDIFMX = FDIFF
  9084.                   PDIFMX = XE(K)
  9085.                ENDIF
  9086.             ENDIF
  9087.    10    CONTINUE
  9088. C
  9089.          FAILD = (FERMAX.GT.TOL) .OR. (DERMAX.GT.TOL)
  9090.          FAILE = FDIFMX .NE. ZERO
  9091.          FAILOC = FAILD .OR. FAILE .OR. (IERR.NE.13) .OR. (IER2.NE.IERR)
  9092. C
  9093.          IF (FAILOC .AND. (KPRINT.GE.2))
  9094.      *      WRITE (LOUT, 2003)  'J', J, 'Y', Y(J)
  9095. C
  9096.          IF ((KPRINT.GE.3) .OR. (FAILD.AND.(KPRINT.EQ.2)) )
  9097.      *      WRITE (LOUT, 2004)  FERMAX, PFERMX, DERMAX, PDERMX
  9098.          IF (FAILD .AND. (KPRINT.GE.2))  WRITE (LOUT, 2014)  TOL
  9099. C
  9100.          IF ((KPRINT.GE.3) .OR. (FAILE.AND.(KPRINT.EQ.2)) )
  9101.      *      WRITE (LOUT, 2005)  FDIFMX, PDIFMX
  9102. C
  9103.          IF ((IERR.NE.13) .AND. (KPRINT.GE.2))
  9104.      *      WRITE (LOUT, 2006)  'D', IERR, 13
  9105. C
  9106.          IF ((IER2.NE.IERR) .AND. (KPRINT.GE.2))
  9107.      *      WRITE (LOUT, 2006)  'E', IER2, IERR
  9108.          GO TO 19
  9109. C
  9110.    15    CONTINUE
  9111.          FAILOC = .TRUE.
  9112.          IF (KPRINT .GE. 2)  WRITE (LOUT, 3000) IERR
  9113. C
  9114.    19    CONTINUE
  9115.          IF (FAILOC)  NERR = NERR + 1
  9116.          FAIL = FAIL .OR. FAILOC
  9117.    20 CONTINUE
  9118. C
  9119.       IF (KPRINT .GE. 2)  THEN
  9120.          IF (NERR .GT. 0)  THEN
  9121.             WRITE (LOUT, 3001)  NERR, 'J'
  9122.          ELSE
  9123.             WRITE (LOUT, 4000)  'J'
  9124.          ENDIF
  9125.       ENDIF
  9126. C
  9127. C  EVALUATE ON VERTICAL MESH LINES (X FIXED, Y RUNNING) ................
  9128. C
  9129.       NERR = 0
  9130.       INC = NMAX
  9131.       SKIP = .FALSE.
  9132.       DO 40  I = 1, NX
  9133. C        --------------------------------------------------------------
  9134.          CALL DPCHFD (NY, Y, F(I,1), FY(I,1), INC, SKIP, NE, YE, FE, DE,
  9135.      *               IERR)
  9136. C        --------------------------------------------------------------
  9137.          IF (KPRINT .GE. 3)
  9138.      *       WRITE (LOUT, 2000)  INC, 'I', I, 'X', X(I), IERR
  9139.          IF (IERR .LT. 0)  GO TO 35
  9140.          IF (KPRINT .GT. 3)  WRITE (LOUT, 2001)  'Y'
  9141. C
  9142. C        DPCHFE SHOULD AGREE EXACTLY WITH DPCHFD.
  9143. C
  9144. C        -----------------------------------------------------------
  9145.          CALL DPCHFE (NY, Y, F(I,1), FY(I,1), INC, SKIP, NE, YE, FE2,
  9146.      *               IER2)
  9147. C        -----------------------------------------------------------
  9148. C
  9149.          DO 30  K = 1, NE
  9150.             FTRUE =  FCN(X(I), YE(K))
  9151.             FERR = FE(K) - FTRUE
  9152.             DTRUE = DFDY(X(I), YE(K))
  9153.             DERR = DE(K) - DTRUE
  9154.             IF (KPRINT .GT. 3)
  9155.      *         WRITE (LOUT, 2002)  YE(K), FTRUE, FE(K), FERR,
  9156.      *                                    DTRUE, DE(K), DERR
  9157.             IF (K .EQ. 1)  THEN
  9158. C              INITIALIZE.
  9159.                FERMAX = ABS(FERR)
  9160.                PFERMX = YE(1)
  9161.                DERMAX = ABS(DERR)
  9162.                PDERMX = YE(1)
  9163.                FDIFMX = ABS(FE2(1) - FE(1))
  9164.                PDIFMX = YE(1)
  9165.             ELSE
  9166. C              SELECT.
  9167.                FERR = ABS(FERR)
  9168.                IF (FERR .GT. FERMAX)  THEN
  9169.                   FERMAX = FERR
  9170.                   PFERMX = YE(K)
  9171.                ENDIF
  9172.                DERR = ABS(DERR)
  9173.                IF (DERR .GT. DERMAX)  THEN
  9174.                   DERMAX = DERR
  9175.                   PDERMX = YE(K)
  9176.                ENDIF
  9177.                FDIFF = ABS(FE2(K) - FE(K))
  9178.                IF (FDIFF .GT. FDIFMX)  THEN
  9179.                   FDIFMX = FDIFF
  9180.                   PDIFMX = YE(K)
  9181.                ENDIF
  9182.             ENDIF
  9183.    30    CONTINUE
  9184. C
  9185.          FAILD = (FERMAX.GT.TOL) .OR. (DERMAX.GT.TOL)
  9186.          FAILE = FDIFMX .NE. ZERO
  9187.          FAILOC = FAILD .OR. FAILE .OR. (IERR.NE.20) .OR. (IER2.NE.IERR)
  9188. C
  9189.          IF (FAILOC .AND. (KPRINT.GE.2))
  9190.      *      WRITE (LOUT, 2003)  'I', I, 'X', X(I)
  9191. C
  9192.          IF ((KPRINT.GE.3) .OR. (FAILD.AND.(KPRINT.EQ.2)) )
  9193.      *      WRITE (LOUT, 2004)  FERMAX, PFERMX, DERMAX, PDERMX
  9194.          IF (FAILD .AND. (KPRINT.GE.2))  WRITE (LOUT, 2014)  TOL
  9195. C
  9196.          IF ((KPRINT.GE.3) .OR. (FAILE.AND.(KPRINT.EQ.2)) )
  9197.      *      WRITE (LOUT, 2005)  FDIFMX, PDIFMX
  9198. C
  9199.          IF ((IERR.NE.20) .AND. (KPRINT.GE.2))
  9200.      *      WRITE (LOUT, 2006)  'D', IERR, 20
  9201. C
  9202.          IF ((IER2.NE.IERR) .AND. (KPRINT.GE.2))
  9203.      *      WRITE (LOUT, 2006)  'E', IER2, IERR
  9204.          GO TO 39
  9205. C
  9206.    35    CONTINUE
  9207.          FAILOC = .TRUE.
  9208.          IF (KPRINT .GE. 2)  WRITE (LOUT, 3000) IERR
  9209. C
  9210.    39    CONTINUE
  9211.          IF (FAILOC)  NERR = NERR + 1
  9212.          FAIL = FAIL .OR. FAILOC
  9213.    40 CONTINUE
  9214. C
  9215.       IF (KPRINT .GE. 2)  THEN
  9216.          IF (NERR .GT. 0)  THEN
  9217.             WRITE (LOUT, 3001)  NERR, 'I'
  9218.          ELSE
  9219.             WRITE (LOUT, 4000)  'I'
  9220.          ENDIF
  9221.       ENDIF
  9222. C
  9223. C  TERMINATE.
  9224. C
  9225.       RETURN
  9226. C
  9227. C  FORMATS.
  9228. C
  9229.  1000 FORMAT (//10X,'DEVPCK RESULTS'/10X,'--------------')
  9230.  1001 FORMAT ('1'//10X,'TEST DPCHFE AND DPCHFD')
  9231.  2000 FORMAT (//20X,'DPCHFD INCREMENT TEST -- INCFD = ',I2
  9232.      *        /15X,'ON ',A1,'-LINE ',I2,',  ',A1,' =',F8.4,
  9233.      *           '  --  IERR =',I3)
  9234.  2001 FORMAT ( /3X,A1,'E',10X,'F',8X,'FE',9X,'DIFF',
  9235.      *                    13X,'D',8X,'DE',9X,'DIFF')
  9236.  2002 FORMAT (F7.2,2(2X,2F10.5,1P,E15.5,0P))
  9237.  2003 FORMAT (/' ***** DPCHFD AND/OR DPCHFE FAILED ON ',A1,'-LINE ',I1,
  9238.      *                             ',  ',A1,' =',F8.4)
  9239.  2004 FORMAT (/19X,'  MAXIMUM ERROR IN FUNCTION =',1P,
  9240.      *                                   1P,D13.5,0P,' (AT',F6.2,'),'
  9241.      *        /33X,    'IN DERIVATIVE =',1P,D13.5,0P,' (AT',F6.2,').' )
  9242.  2005 FORMAT ( '  MAXIMUM DIFFERENCE BETWEEN DPCHFE AND DPCHFD =',
  9243.      *                                   1P,D13.5,0P,' (AT',F6.2,').' )
  9244.  2006 FORMAT (/'  DPCHF',A1,' RETURNED IERR = ',I2,' INSTEAD OF ',I2)
  9245.  2014 FORMAT ('  *** BOTH SHOULD BE .LE. TOL =',1P,D12.5,' ***')
  9246.  3000 FORMAT (//' ***** ERROR ***** DPCHFD RETURNED IERR =',I5//)
  9247.  3001 FORMAT (//' ***** ERROR ***** DPCHFD AND/OR DPCHFE FAILED ON',I2,
  9248.      *                                1X, A1,'-LINES.'//)
  9249.  4000 FORMAT (/' DPCHFD AND DPCHFE OK ON ',A1,'-LINES.')
  9250. C------------- LAST LINE OF DEVPCK FOLLOWS -----------------------------
  9251.       END
  9252. *DECK DF0C
  9253.       DOUBLE PRECISION FUNCTION DF0C (X)
  9254. C***BEGIN PROLOGUE  DF0C
  9255. C***PURPOSE  Subsidiary to
  9256. C***LIBRARY   SLATEC
  9257. C***AUTHOR  (UNKNOWN)
  9258. C***ROUTINES CALLED  (NONE)
  9259. C***REVISION HISTORY  (YYMMDD)
  9260. C   ??????  DATE WRITTEN
  9261. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9262. C***END PROLOGUE  DF0C
  9263.       DOUBLE PRECISION X
  9264. C***FIRST EXECUTABLE STATEMENT  DF0C
  9265.       DF0C = 1.D0/(X*X+1.D-4)
  9266.       RETURN
  9267.       END
  9268. *DECK DF0F
  9269.       DOUBLE PRECISION FUNCTION DF0F (X)
  9270. C***BEGIN PROLOGUE  DF0F
  9271. C***PURPOSE  Subsidiary to
  9272. C***LIBRARY   SLATEC
  9273. C***AUTHOR  (UNKNOWN)
  9274. C***ROUTINES CALLED  (NONE)
  9275. C***REVISION HISTORY  (YYMMDD)
  9276. C   ??????  DATE WRITTEN
  9277. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9278. C***END PROLOGUE  DF0F
  9279.       DOUBLE PRECISION X
  9280. C***FIRST EXECUTABLE STATEMENT  DF0F
  9281.       DF0F = 0.0D+00
  9282.       IF(X.NE.0.0D+00) DF0F = SIN(0.5D+02*X)/(X*SQRT(X))
  9283.       RETURN
  9284.       END
  9285. *DECK DF0O
  9286.       DOUBLE PRECISION FUNCTION DF0O (X)
  9287. C***BEGIN PROLOGUE  DF0O
  9288. C***PURPOSE  Subsidiary to
  9289. C***LIBRARY   SLATEC
  9290. C***AUTHOR  (UNKNOWN)
  9291. C***ROUTINES CALLED  (NONE)
  9292. C***REVISION HISTORY  (YYMMDD)
  9293. C   ??????  DATE WRITTEN
  9294. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9295. C***END PROLOGUE  DF0O
  9296.       DOUBLE PRECISION X
  9297. C***FIRST EXECUTABLE STATEMENT  DF0O
  9298.       DF0O = (0.2D+01*SIN(X))**14
  9299.       RETURN
  9300.       END
  9301. *DECK DF0S
  9302.       DOUBLE PRECISION FUNCTION DF0S (X)
  9303. C***BEGIN PROLOGUE  DF0S
  9304. C***PURPOSE  Subsidiary to
  9305. C***LIBRARY   SLATEC
  9306. C***AUTHOR  (UNKNOWN)
  9307. C***ROUTINES CALLED  (NONE)
  9308. C***REVISION HISTORY  (YYMMDD)
  9309. C   ??????  DATE WRITTEN
  9310. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9311. C***END PROLOGUE  DF0S
  9312.       DOUBLE PRECISION X
  9313. C***FIRST EXECUTABLE STATEMENT  DF0S
  9314.       DF0S = 0.0D+00
  9315.       IF(X.NE.0.0D+00) DF0S = 0.1D+01/SQRT(X)
  9316.       RETURN
  9317.       END
  9318. *DECK DF0WS
  9319.       DOUBLE PRECISION FUNCTION DF0WS (X)
  9320. C***BEGIN PROLOGUE  DF0WS
  9321. C***PURPOSE  Subsidiary to
  9322. C***LIBRARY   SLATEC
  9323. C***AUTHOR  (UNKNOWN)
  9324. C***ROUTINES CALLED  (NONE)
  9325. C***REVISION HISTORY  (YYMMDD)
  9326. C   ??????  DATE WRITTEN
  9327. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9328. C***END PROLOGUE  DF0WS
  9329.       DOUBLE PRECISION X
  9330. C***FIRST EXECUTABLE STATEMENT  DF0WS
  9331.       DF0WS  = SIN(0.1D+02*X)
  9332.       RETURN
  9333.       END
  9334. *DECK DF1C
  9335.       DOUBLE PRECISION FUNCTION DF1C (X)
  9336. C***BEGIN PROLOGUE  DF1C
  9337. C***PURPOSE  Subsidiary to
  9338. C***LIBRARY   SLATEC
  9339. C***AUTHOR  (UNKNOWN)
  9340. C***ROUTINES CALLED  (NONE)
  9341. C***REVISION HISTORY  (YYMMDD)
  9342. C   ??????  DATE WRITTEN
  9343. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9344. C***END PROLOGUE  DF1C
  9345.       DOUBLE PRECISION X
  9346. C***FIRST EXECUTABLE STATEMENT  DF1C
  9347.       DF1C = 0.0D+00
  9348.       IF(X.NE.0.33D+00) DF1C = (X-0.5D+00)*ABS(X-0.33D+00)**(-0.9D+00)
  9349.       RETURN
  9350.       END
  9351. *DECK DF1F
  9352.       DOUBLE PRECISION FUNCTION DF1F (X)
  9353. C***BEGIN PROLOGUE  DF1F
  9354. C***PURPOSE  Subsidiary to
  9355. C***LIBRARY   SLATEC
  9356. C***AUTHOR  (UNKNOWN)
  9357. C***ROUTINES CALLED  (NONE)
  9358. C***REVISION HISTORY  (YYMMDD)
  9359. C   ??????  DATE WRITTEN
  9360. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9361. C***END PROLOGUE  DF1F
  9362.       DOUBLE PRECISION X,X1,Y
  9363. C***FIRST EXECUTABLE STATEMENT  DF1F
  9364.       X1 = X+0.1D+01
  9365.       DF1F = 0.5D+01/X1/X1
  9366.       Y = 0.5D+01/X1
  9367.       IF(Y .GT. 3.1415926535897932D0) DF1F = 0.0D0
  9368.       RETURN
  9369.       END
  9370. *DECK DF1G
  9371.       DOUBLE PRECISION FUNCTION DF1G (X)
  9372. C***BEGIN PROLOGUE  DF1G
  9373. C***PURPOSE  Subsidiary to
  9374. C***LIBRARY   SLATEC
  9375. C***AUTHOR  (UNKNOWN)
  9376. C***ROUTINES CALLED  (NONE)
  9377. C***REVISION HISTORY  (YYMMDD)
  9378. C   ??????  DATE WRITTEN
  9379. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9380. C***END PROLOGUE  DF1G
  9381.       DOUBLE PRECISION PI,X
  9382.       DATA PI /3.1415926535897932D0/
  9383. C***FIRST EXECUTABLE STATEMENT  DF1G
  9384.       DF1G = 2.0D0/(2.0D0+SIN(10.0D0*PI*X))
  9385.       RETURN
  9386.       END
  9387. *DECK DF1N
  9388.       DOUBLE PRECISION FUNCTION DF1N (X)
  9389. C***BEGIN PROLOGUE  DF1N
  9390. C***PURPOSE  Subsidiary to
  9391. C***LIBRARY   SLATEC
  9392. C***AUTHOR  (UNKNOWN)
  9393. C***ROUTINES CALLED  (NONE)
  9394. C***REVISION HISTORY  (YYMMDD)
  9395. C   ??????  DATE WRITTEN
  9396. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9397. C***END PROLOGUE  DF1N
  9398.       DOUBLE PRECISION X
  9399. C***FIRST EXECUTABLE STATEMENT  DF1N
  9400.       DF1N=1.0D0/(X**4+X**2+1.0D0)
  9401.       RETURN
  9402.       END
  9403. *DECK DF1O
  9404.       DOUBLE PRECISION FUNCTION DF1O (X)
  9405. C***BEGIN PROLOGUE  DF1O
  9406. C***PURPOSE  Subsidiary to
  9407. C***LIBRARY   SLATEC
  9408. C***AUTHOR  (UNKNOWN)
  9409. C***ROUTINES CALLED  (NONE)
  9410. C***REVISION HISTORY  (YYMMDD)
  9411. C   ??????  DATE WRITTEN
  9412. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9413. C***END PROLOGUE  DF1O
  9414.       DOUBLE PRECISION X
  9415. C***FIRST EXECUTABLE STATEMENT  DF1O
  9416.       DF1O = 0.1D+01
  9417.       IF(X.GT.0.31415926535897932D+01) DF1O = 0.0D+00
  9418.       RETURN
  9419.       END
  9420. *DECK DF1P
  9421.       DOUBLE PRECISION FUNCTION DF1P (X)
  9422. C***BEGIN PROLOGUE  DF1P
  9423. C***PURPOSE  Subsidiary to
  9424. C***LIBRARY   SLATEC
  9425. C***AUTHOR  (UNKNOWN)
  9426. C***ROUTINES CALLED  (NONE)
  9427. C***REVISION HISTORY  (YYMMDD)
  9428. C   ??????  DATE WRITTEN
  9429. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9430. C***END PROLOGUE  DF1P
  9431.       DOUBLE PRECISION ALFA1,ALFA2,P1,P2,X,D1,D2
  9432. C***FIRST EXECUTABLE STATEMENT  DF1P
  9433. C  P1 = 1/7, P2 = 2/3
  9434.       DATA P1/0.1428571428571428D+00/
  9435.       DATA P2/0.6666666666666667D+00/
  9436.       ALFA1 = -0.25D0
  9437.       ALFA2 = -0.5D0
  9438.       D1=ABS(X-P1)
  9439.       D2=ABS(X-P2)
  9440.       DF1P = 0.0D+00
  9441.       IF(D1.NE.0.0D+00.AND.D2.NE.0.0D+00) DF1P = D1**ALFA1+D2**ALFA2
  9442.       RETURN
  9443.       END
  9444. *DECK DF1S
  9445.       DOUBLE PRECISION FUNCTION DF1S (X)
  9446. C***BEGIN PROLOGUE  DF1S
  9447. C***PURPOSE  Subsidiary to
  9448. C***LIBRARY   SLATEC
  9449. C***AUTHOR  (UNKNOWN)
  9450. C***ROUTINES CALLED  (NONE)
  9451. C***REVISION HISTORY  (YYMMDD)
  9452. C   ??????  DATE WRITTEN
  9453. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9454. C***END PROLOGUE  DF1S
  9455.       DOUBLE PRECISION X
  9456. C***FIRST EXECUTABLE STATEMENT  DF1S
  9457.       DF1S = 0.2D+01/(0.2D+01+SIN(0.314159D+02*X))
  9458.       RETURN
  9459.       END
  9460. *DECK DF1WS
  9461.       DOUBLE PRECISION FUNCTION DF1WS (X)
  9462. C***BEGIN PROLOGUE  DF1WS
  9463. C***PURPOSE  Subsidiary to
  9464. C***LIBRARY   SLATEC
  9465. C***AUTHOR  (UNKNOWN)
  9466. C***ROUTINES CALLED  (NONE)
  9467. C***REVISION HISTORY  (YYMMDD)
  9468. C   ??????  DATE WRITTEN
  9469. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9470. C***END PROLOGUE  DF1WS
  9471.       DOUBLE PRECISION X
  9472. C***FIRST EXECUTABLE STATEMENT  DF1WS
  9473.       DF1WS = 0.00D+00
  9474.       IF(X-0.33D+00 .NE. 0.00D+00) DF1WS=ABS(X-0.33D+00)**(-0.999D+00)
  9475.       RETURN
  9476.       END
  9477. *DECK DF2G
  9478.       DOUBLE PRECISION FUNCTION DF2G (X)
  9479. C***BEGIN PROLOGUE  DF2G
  9480. C***PURPOSE  Subsidiary to
  9481. C***LIBRARY   SLATEC
  9482. C***AUTHOR  (UNKNOWN)
  9483. C***ROUTINES CALLED  (NONE)
  9484. C***REVISION HISTORY  (YYMMDD)
  9485. C   ??????  DATE WRITTEN
  9486. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9487. C***END PROLOGUE  DF2G
  9488.       DOUBLE PRECISION X
  9489. C***FIRST EXECUTABLE STATEMENT  DF2G
  9490.       DF2G = X*SIN(0.3D+02*X)*COS(0.5D+02*X)
  9491.       RETURN
  9492.       END
  9493. *DECK DF2N
  9494.       DOUBLE PRECISION FUNCTION DF2N (X)
  9495. C***BEGIN PROLOGUE  DF2N
  9496. C***PURPOSE  Subsidiary to
  9497. C***LIBRARY   SLATEC
  9498. C***AUTHOR  (UNKNOWN)
  9499. C***ROUTINES CALLED  (NONE)
  9500. C***REVISION HISTORY  (YYMMDD)
  9501. C   ??????  DATE WRITTEN
  9502. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9503. C***END PROLOGUE  DF2N
  9504.       DOUBLE PRECISION X
  9505. C***FIRST EXECUTABLE STATEMENT  DF2N
  9506.       DF2N=X**(-0.9D+00)
  9507.       RETURN
  9508.       END
  9509. *DECK DF2O
  9510.       DOUBLE PRECISION FUNCTION DF2O (X)
  9511. C***BEGIN PROLOGUE  DF2O
  9512. C***PURPOSE  Subsidiary to
  9513. C***LIBRARY   SLATEC
  9514. C***AUTHOR  (UNKNOWN)
  9515. C***ROUTINES CALLED  (NONE)
  9516. C***REVISION HISTORY  (YYMMDD)
  9517. C   ??????  DATE WRITTEN
  9518. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9519. C***END PROLOGUE  DF2O
  9520.       DOUBLE PRECISION X
  9521. C***FIRST EXECUTABLE STATEMENT  DF2O
  9522.       DF2O = 0.0D+00
  9523.       IF(X.NE.0.0D+00) DF2O = 0.1D+01/(X*X*SQRT(X))
  9524.       RETURN
  9525.       END
  9526. *DECK DF2P
  9527.       DOUBLE PRECISION FUNCTION DF2P (X)
  9528. C***BEGIN PROLOGUE  DF2P
  9529. C***PURPOSE  Subsidiary to
  9530. C***LIBRARY   SLATEC
  9531. C***AUTHOR  (UNKNOWN)
  9532. C***ROUTINES CALLED  (NONE)
  9533. C***REVISION HISTORY  (YYMMDD)
  9534. C   ??????  DATE WRITTEN
  9535. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9536. C***END PROLOGUE  DF2P
  9537.       DOUBLE PRECISION X
  9538. C***FIRST EXECUTABLE STATEMENT  DF2P
  9539.       DF2P = SIN(0.314159D+03*X)/(0.314159D+01*X)
  9540.       RETURN
  9541.       END
  9542. *DECK DF2S
  9543.       DOUBLE PRECISION FUNCTION DF2S (X)
  9544. C***BEGIN PROLOGUE  DF2S
  9545. C***PURPOSE  Subsidiary to
  9546. C***LIBRARY   SLATEC
  9547. C***AUTHOR  (UNKNOWN)
  9548. C***ROUTINES CALLED  (NONE)
  9549. C***REVISION HISTORY  (YYMMDD)
  9550. C   ??????  DATE WRITTEN
  9551. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9552. C***END PROLOGUE  DF2S
  9553.       DOUBLE PRECISION X
  9554. C***FIRST EXECUTABLE STATEMENT  DF2S
  9555.       DF2S = 0.1D+03
  9556.       IF(X.NE.0.0D+00) DF2S = SIN(0.314159D+03*X)/(0.314159D+01*X)
  9557.       RETURN
  9558.       END
  9559. *DECK DF3G
  9560.       DOUBLE PRECISION FUNCTION DF3G (X)
  9561. C***BEGIN PROLOGUE  DF3G
  9562. C***PURPOSE  Subsidiary to
  9563. C***LIBRARY   SLATEC
  9564. C***AUTHOR  (UNKNOWN)
  9565. C***ROUTINES CALLED  (NONE)
  9566. C***REVISION HISTORY  (YYMMDD)
  9567. C   ??????  DATE WRITTEN
  9568. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9569. C***END PROLOGUE  DF3G
  9570.       DOUBLE PRECISION X
  9571. C***FIRST EXECUTABLE STATEMENT  DF3G
  9572.       DF3G=ABS(X-0.33D+00)**(-.90D+00)
  9573.       RETURN
  9574.       END
  9575. *DECK DF3P
  9576.       DOUBLE PRECISION FUNCTION DF3P (X)
  9577. C***BEGIN PROLOGUE  DF3P
  9578. C***PURPOSE  Subsidiary to
  9579. C***LIBRARY   SLATEC
  9580. C***AUTHOR  (UNKNOWN)
  9581. C***ROUTINES CALLED  (NONE)
  9582. C***REVISION HISTORY  (YYMMDD)
  9583. C   ??????  DATE WRITTEN
  9584. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9585. C***END PROLOGUE  DF3P
  9586.       DOUBLE PRECISION X
  9587. C***FIRST EXECUTABLE STATEMENT  DF3P
  9588.       DF3P = 0.1D+01
  9589.       IF(X.GT.0.31415926535897932D+01) DF3P = 0.0D+00
  9590.       RETURN
  9591.       END
  9592. *DECK DF3S
  9593.       DOUBLE PRECISION FUNCTION DF3S (X)
  9594. C***BEGIN PROLOGUE  DF3S
  9595. C***PURPOSE  Subsidiary to
  9596. C***LIBRARY   SLATEC
  9597. C***AUTHOR  (UNKNOWN)
  9598. C***ROUTINES CALLED  (NONE)
  9599. C***REVISION HISTORY  (YYMMDD)
  9600. C   ??????  DATE WRITTEN
  9601. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9602. C***END PROLOGUE  DF3S
  9603.       DOUBLE PRECISION X
  9604. C***FIRST EXECUTABLE STATEMENT  DF3S
  9605.       DF3S = 0.1D+01
  9606.       IF(X.GT.0.31415926535897932D+01) DF3S = 0.0D+00
  9607.       RETURN
  9608.       END
  9609. *DECK DF4P
  9610.       DOUBLE PRECISION FUNCTION DF4P (X)
  9611. C***BEGIN PROLOGUE  DF4P
  9612. C***PURPOSE  Subsidiary to
  9613. C***LIBRARY   SLATEC
  9614. C***AUTHOR  (UNKNOWN)
  9615. C***ROUTINES CALLED  (NONE)
  9616. C***REVISION HISTORY  (YYMMDD)
  9617. C   ??????  DATE WRITTEN
  9618. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9619. C***END PROLOGUE  DF4P
  9620.       DOUBLE PRECISION X
  9621. C***FIRST EXECUTABLE STATEMENT  DF4P
  9622.       DF4P = 0.0D+00
  9623.       IF(X.GT.0.0D+00) DF4P = 0.1D+01/(X*SQRT(X))
  9624.       RETURN
  9625.       END
  9626. *DECK DF4S
  9627.       DOUBLE PRECISION FUNCTION DF4S (X)
  9628. C***BEGIN PROLOGUE  DF4S
  9629. C***PURPOSE  Subsidiary to
  9630. C***LIBRARY   SLATEC
  9631. C***AUTHOR  (UNKNOWN)
  9632. C***ROUTINES CALLED  (NONE)
  9633. C***REVISION HISTORY  (YYMMDD)
  9634. C   ??????  DATE WRITTEN
  9635. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9636. C***END PROLOGUE  DF4S
  9637.       DOUBLE PRECISION X
  9638. C***FIRST EXECUTABLE STATEMENT  DF4S
  9639.       DF4S = 0.00D+00
  9640.       IF(X-0.33D+00 .NE. 0.00D+00) DF4S=ABS(X-0.33D+00)**(-0.999D+00)
  9641.       RETURN
  9642.       END
  9643. *DECK DF5S
  9644.       DOUBLE PRECISION FUNCTION DF5S (X)
  9645. C***BEGIN PROLOGUE  DF5S
  9646. C***PURPOSE  Subsidiary to
  9647. C***LIBRARY   SLATEC
  9648. C***AUTHOR  (UNKNOWN)
  9649. C***ROUTINES CALLED  (NONE)
  9650. C***REVISION HISTORY  (YYMMDD)
  9651. C   ??????  DATE WRITTEN
  9652. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9653. C***END PROLOGUE  DF5S
  9654.       DOUBLE PRECISION X
  9655. C***FIRST EXECUTABLE STATEMENT  DF5S
  9656.       DF5S = 0.0D+00
  9657.       IF(X.NE.0.0D+00) DF5S = 1.0D+00/(X*SQRT(X))
  9658.       RETURN
  9659.       END
  9660. *DECK DFB
  9661.       DOUBLE PRECISION FUNCTION DFB (X)
  9662. C***BEGIN PROLOGUE  DFB
  9663. C***PURPOSE  Subsidiary to
  9664. C***LIBRARY   SLATEC
  9665. C***AUTHOR  (UNKNOWN)
  9666. C***ROUTINES CALLED  (NONE)
  9667. C***REVISION HISTORY  (YYMMDD)
  9668. C   ??????  DATE WRITTEN
  9669. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9670. C***END PROLOGUE  DFB
  9671.       DOUBLE PRECISION X
  9672. C***FIRST EXECUTABLE STATEMENT  DFB
  9673.       DFB = 1.0D0
  9674.       RETURN
  9675.       END
  9676. *DECK DFCN1
  9677.       SUBROUTINE DFCN1 (IFLAG, M, N, X, FVEC, FJAC, LDFJAC)
  9678. C***BEGIN PROLOGUE  DFCN1
  9679. C***PURPOSE
  9680. C***LIBRARY   SLATEC
  9681. C***KEYWORDS  QUICK CHECK
  9682. C***AUTHOR  (UNKNOWN)
  9683. C***DESCRIPTION
  9684. C
  9685. C     SUBROUTINE WHICH EVALUATES THE FUNCTION FOR TEST
  9686. C     PROGRAM USED IN QUICK CHECK OF SNLS1E.
  9687. C     NUMERICAL APPROXIMATION OF JACOBIAN IS USED.
  9688. C
  9689. C***ROUTINES CALLED  (NONE)
  9690. C***REVISION HISTORY  (YYMMDD)
  9691. C   ??????  DATE WRITTEN
  9692. C   890911  Removed unnecessary intrinsics.  (WRB)
  9693. C   890911  REVISION DATE from Version 3.2
  9694. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9695. C***END PROLOGUE  DFCN1
  9696.       DOUBLE PRECISION X,FVEC,FJAC,TWO,TEMP
  9697.       DIMENSION X(*),FVEC(*)
  9698.       DATA TWO/2.D0/
  9699. C***FIRST EXECUTABLE STATEMENT  DFCN1
  9700.       IF(IFLAG.NE.1) RETURN
  9701.       DO 100 I=1,M
  9702.       TEMP=I
  9703.       FVEC(I)=TWO+TWO*TEMP-EXP(TEMP*X(1))-EXP(TEMP*X(2))
  9704.   100 CONTINUE
  9705.       RETURN
  9706.       END
  9707. *DECK DFCN2
  9708.       SUBROUTINE DFCN2 (IFLAG, M, N, X, FVEC, FJAC, LDFJAC)
  9709. C***BEGIN PROLOGUE  DFCN2
  9710. C***PURPOSE
  9711. C***LIBRARY   SLATEC
  9712. C***KEYWORDS  QUICK CHECK
  9713. C***AUTHOR  (UNKNOWN)
  9714. C***DESCRIPTION
  9715. C
  9716. C     SUBROUTINE TO EVALUATE FUNCTION AND FULL JACOBIAN
  9717. C     FOR TEST PROBLEM IN QUICK CHECK OF SNLS1E.
  9718. C
  9719. C***ROUTINES CALLED  (NONE)
  9720. C***REVISION HISTORY  (YYMMDD)
  9721. C   ??????  DATE WRITTEN
  9722. C   890911  Removed unnecessary intrinsics.  (WRB)
  9723. C   890911  REVISION DATE from Version 3.2
  9724. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9725. C***END PROLOGUE  DFCN2
  9726.       DOUBLE PRECISION X,FVEC,FJAC,TWO,TEMP
  9727.       DIMENSION X(*),FVEC(*),FJAC(LDFJAC,*)
  9728.       DATA TWO/2.D0/
  9729.       IF(IFLAG.EQ.0) RETURN
  9730. C***FIRST EXECUTABLE STATEMENT  DFCN2
  9731. C
  9732. C      SHOULD WE EVALUATE FUNCTION OR JACOBIAN
  9733. C
  9734.       IF(IFLAG.NE.1) GO TO 150
  9735. C
  9736. C      EVALUATE FUNCTIONS
  9737. C
  9738.       DO 100 I=1,M
  9739.       TEMP=I
  9740.       FVEC(I)=TWO+TWO*TEMP-EXP(TEMP*X(1))-EXP(TEMP*X(2))
  9741.   100 CONTINUE
  9742.       RETURN
  9743. C
  9744. C      EVALUATE JACOBIAN
  9745. C
  9746. 150   CONTINUE
  9747.       IF(IFLAG.NE.2) RETURN
  9748.       DO 200 I=1,M
  9749.       TEMP=I
  9750.       FJAC(I,1)=-TEMP*EXP(TEMP*X(1))
  9751.       FJAC(I,2)=-TEMP*EXP(TEMP*X(2))
  9752.   200 CONTINUE
  9753.       RETURN
  9754.       END
  9755. *DECK DFCN3
  9756.       SUBROUTINE DFCN3 (IFLAG, M, N, X, FVEC, FJROW, NROW)
  9757. C***BEGIN PROLOGUE  DFCN3
  9758. C***PURPOSE
  9759. C***LIBRARY   SLATEC
  9760. C***KEYWORDS  QUICK CHECK
  9761. C***AUTHOR  (UNKNOWN)
  9762. C***DESCRIPTION
  9763. C
  9764. C     SUBROUTINE TO EVALUATE THE JACOBIAN, ONE ROW AT A TIME, FOR
  9765. C     TEST PROBLEM USED IN QUICK CHECK OF SNLS1E.
  9766. C
  9767. C***ROUTINES CALLED  (NONE)
  9768. C***REVISION HISTORY  (YYMMDD)
  9769. C   ??????  DATE WRITTEN
  9770. C   890911  Removed unnecessary intrinsics.  (WRB)
  9771. C   890911  REVISION DATE from Version 3.2
  9772. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9773. C***END PROLOGUE  DFCN3
  9774.       DOUBLE PRECISION X,FVEC,FJROW,TWO,TEMP
  9775.       DIMENSION X(*),FVEC(*),FJROW(*)
  9776.       DATA TWO/2.D0/
  9777. C***FIRST EXECUTABLE STATEMENT  DFCN3
  9778.       IF(IFLAG.EQ.0) RETURN
  9779. C
  9780. C      SHOULD WE EVALUATE FUNCTIONS OR JACOBIAN.
  9781. C
  9782.       IF(IFLAG.NE.1) GO TO 150
  9783. C
  9784. C      EVALUATE FUNCTIONS.
  9785. C
  9786.       DO 100 I=1,M
  9787.       TEMP=I
  9788.       FVEC(I)=TWO+TWO*TEMP-EXP(TEMP*X(1))-EXP(TEMP*X(2))
  9789.   100 CONTINUE
  9790.       RETURN
  9791. C
  9792. C     EVALUATE ONE ROW OF JACOBIAN.
  9793. C
  9794. 150   CONTINUE
  9795.       IF(IFLAG.NE.3) RETURN
  9796.       TEMP=NROW
  9797.       FJROW(1)=-TEMP*EXP(TEMP*X(1))
  9798.       FJROW(2)=-TEMP*EXP(TEMP*X(2))
  9799.       RETURN
  9800.       END
  9801. *DECK DFCQX
  9802.       SUBROUTINE DFCQX (LUN, KPRINT, IPASS)
  9803. C***BEGIN PROLOGUE  DFCQX
  9804. C***PURPOSE  Quick check for DFC.
  9805. C***LIBRARY   SLATEC
  9806. C***TYPE      DOUBLE PRECISION (FCQX-S, DFCQX-D)
  9807. C***KEYWORDS  QUICK CHECK
  9808. C***AUTHOR  Hanson, R. J., (SNLA)
  9809. C***DESCRIPTION
  9810. C
  9811. C     QUICK CHECK SUBPROGRAM FOR THE SUBROUTINE DFC.
  9812. C
  9813. C     FIT DISCRETE DATA BY AN S-SHAPED CURVE. EVALUATE THE FITTED CURVE,
  9814. C     ITS FIRST TWO DERIVATIVES, AND PROBABLE ERROR CURVE.
  9815. C
  9816. C     USE SUBPROGRAM DFC TO OBTAIN THE CONSTRAINED CUBIC B-SPLINE
  9817. C     REPRESENTATION OF THE CURVE.
  9818. C
  9819. C     THE VALUES OF THE COEFFICIENTS OF THE B-SPLINE AS COMPUTED
  9820. C     BY DFC AND THE VALUES OF THE FITTED CURVE AS COMPUTED BY DBVALU
  9821. C     IN THE DE BOOR PACKAGE ARE TESTED FOR ACCURACY WITH THE EXPECTED
  9822. C     VALUES.  SEE EXAMPLE PROGRAM SAND78-1291, PP. 22-27.
  9823. C
  9824. C     THE DIMENSIONS IN THE FOLLOWING ARRAYS ARE AS SMALL
  9825. C     AS POSSIBLE FOR THE PROBLEM BEING SOLVED.
  9826. C
  9827. C***ROUTINES CALLED  D1MACH, DBVALU, DCOPY, DCV, DFC, DMOUT, DVOUT,
  9828. C                    IVOUT
  9829. C***REVISION HISTORY  (YYMMDD)
  9830. C   780801  DATE WRITTEN
  9831. C   890718  Changed references from DBVLUE to DBVALU.  (WRB)
  9832. C   890911  Removed unnecessary intrinsics.  (WRB)
  9833. C   891004  Changed computation of XVAL.  (WRB)
  9834. C   891004  REVISION DATE from Version 3.2
  9835. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  9836. C   901010  Restructured using IF-THEN-ELSE-ENDIF, modified tolerances
  9837. C           to use R1MACH(4) rather than R1MACH(3) and cleaned up
  9838. C           FORMATs.  (RWC)
  9839. C***END PROLOGUE  DFCQX
  9840.       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
  9841.       DIMENSION XDATA(9), YDATA(9), SDDATA(9), BKPT(13), XCONST(11),
  9842.      *   YCONST(11), COEFF(9), V(51,5), W(529), WORK(12), CHECK(51),
  9843.      *   COEFCK(9)
  9844.       INTEGER ICNT, IPASS, ITEST(38), NDERIV(11), IW(30)
  9845. C
  9846.       DATA XDATA(1),XDATA(2),XDATA(3),XDATA(4),XDATA(5),XDATA(6),
  9847.      +     XDATA(7),XDATA(8),XDATA(9)/0.15D0,0.27D0,0.33D0,0.40D0,
  9848.      +     0.43D0,0.47D0,0.53D0,0.58D0,0.63D0/
  9849.       DATA YDATA(1),YDATA(2),YDATA(3),YDATA(4),YDATA(5),YDATA(6),
  9850.      +     YDATA(7),YDATA(8),YDATA(9)/0.025D0,0.05D0,0.13D0,0.27D0,
  9851.      +     0.37D0,0.47D0,0.64D0,0.77D0,0.87D0/
  9852.       DATA SDDATA(1)/0.015D0/,NDATA/9/,NORD/4/,NBKPT/13/,LAST/10/
  9853.       DATA BKPT(1),BKPT(2),BKPT(3),BKPT(4),BKPT(5),BKPT(6),BKPT(7),
  9854.      +     BKPT(8),BKPT(9),BKPT(10),BKPT(11),BKPT(12),BKPT(13)/-0.6D0,
  9855.      +     -0.4D0,-0.2D0,0.D0,0.2D0,0.4D0,0.6D0,0.8D0,0.9D0,1.0D0,1.1D0,
  9856.      +     1.2D0,1.3D0/
  9857. C
  9858. C     STORE THE DATA TO BE USED TO CHECK THE ACCURACY OF THE
  9859. C     COMPUTED RESULTS.  SEE SAND78-1291, P.26.
  9860. C
  9861.       DATA COEFCK(1),COEFCK(2),COEFCK(3),COEFCK(4),COEFCK(5),
  9862.      1     COEFCK(6),COEFCK(7),COEFCK(8),COEFCK(9)/  1.186380846D-13,
  9863.      2          -2.826166426D-14, -4.333929094D-15,  1.722113311D-01,
  9864.      3           9.421965984D-01,  9.684708719D-01,  9.894902905D-01,
  9865.      4           1.005254855D+00,  9.894902905D-01/
  9866.       DATA CHECK(1), CHECK(2), CHECK(3), CHECK(4), CHECK(5),
  9867.      1     CHECK(6), CHECK(7), CHECK(8), CHECK(9)/
  9868.      2     2.095830752D-16, 2.870188850D-05, 2.296151081D-04,
  9869.      3     7.749509897D-04, 1.836920865D-03, 3.587736064D-03,
  9870.      4     6.199607918D-03, 9.844747759D-03, 1.469536692D-02/
  9871.       DATA CHECK(10), CHECK(11), CHECK(12), CHECK(13), CHECK(14),
  9872.      1     CHECK(15), CHECK(16), CHECK(17), CHECK(18)/
  9873.      2     2.092367672D-02, 2.870188851D-02, 3.824443882D-02,
  9874.      3     4.993466504D-02, 6.419812979D-02, 8.146039566D-02,
  9875.      4     1.021470253D-01, 1.266835812D-01, 1.554956261D-01/
  9876.       DATA CHECK(19), CHECK(20), CHECK(21), CHECK(22), CHECK(23),
  9877.      1     CHECK(24), CHECK(25), CHECK(26), CHECK(27)/
  9878.      2     1.890087225D-01, 2.276484331D-01, 2.718403204D-01,
  9879.      3     3.217163150D-01, 3.762338189D-01, 4.340566020D-01,
  9880.      4     4.938484342D-01, 5.542730855D-01, 6.139943258D-01/
  9881.       DATA CHECK(28), CHECK(29), CHECK(30), CHECK(31), CHECK(32),
  9882.      1     CHECK(33), CHECK(34), CHECK(35), CHECK(36)/
  9883.      2     6.716759250D-01, 7.259816530D-01, 7.755752797D-01,
  9884.      3     8.191205752D-01, 8.556270903D-01, 8.854875002D-01,
  9885.      4     9.094402609D-01, 9.282238286D-01, 9.425766596D-01/
  9886.       DATA CHECK(37), CHECK(38), CHECK(39), CHECK(40), CHECK(41),
  9887.      1     CHECK(42), CHECK(43), CHECK(44), CHECK(45)/
  9888.      2     9.532372098D-01, 9.609439355D-01, 9.664352927D-01,
  9889.      3     9.704497377D-01, 9.737257265D-01, 9.768786393D-01,
  9890.      4     9.800315521D-01, 9.831844649D-01, 9.863373777D-01/
  9891.       DATA CHECK(46), CHECK(47), CHECK(48), CHECK(49), CHECK(50),
  9892.      1     CHECK(51)/       9.894902905D-01, 9.926011645D-01,
  9893.      2     9.954598055D-01, 9.978139804D-01, 9.994114563D-01,
  9894.      3     1.000000000D+00/
  9895. C***FIRST EXECUTABLE STATEMENT  DFCQX
  9896. C
  9897. C     BROADCAST SDDATA(1) VALUE TO ALL OF SDDATA(*).
  9898. C
  9899.       CALL DCOPY(NDATA,SDDATA,0,SDDATA,1)
  9900.       ZERO = 0.D0
  9901.       ONE = 1.D0
  9902.       NDEG = NORD-1
  9903. C
  9904. C     WRITE THE VARIOUS CONSTRAINTS FOR
  9905. C     THE FITTED CURVE.
  9906. C
  9907.       NCONST = 0
  9908.       T = BKPT(NORD)
  9909. C
  9910. C     CONSTRAIN FUNCTION TO BE ZERO AT LEFT-MOST BREAKPOINT.
  9911. C
  9912.       NCONST = NCONST+1
  9913.       XCONST(NCONST) = T
  9914.       YCONST(NCONST) = ZERO
  9915.       NDERIV(NCONST) = 2+4*0
  9916. C
  9917. C     CONSTRAIN FIRST DERIVATIVE TO BE
  9918. C     NONNEGATIVE AT LEFT-MOST BREAKPOINT.
  9919. C
  9920.       NCONST = NCONST+1
  9921.       XCONST(NCONST) = T
  9922.       YCONST(NCONST) = ZERO
  9923.       NDERIV(NCONST) = 1+4*1
  9924. C
  9925. C     CONSTRAIN SECOND DERIVATIVES TO BE
  9926. C     NONNEGATIVE AT LEFT SET OF BREAKPOINTS.
  9927. C
  9928.       DO 10 I = 1, 3
  9929.          L = NDEG+I
  9930.          T = BKPT(L)
  9931.          NCONST=NCONST+1
  9932.          XCONST(NCONST) = T
  9933.          YCONST(NCONST) = ZERO
  9934.          NDERIV(NCONST) = 1+4*2
  9935.    10 CONTINUE
  9936. C
  9937. C     CONSTRAIN FUNCTION VALUE AT RIGHT-MOST
  9938. C     BREAKPOINT TO BE ONE.
  9939. C
  9940.       NCONST = NCONST+1
  9941.       T = BKPT(LAST)
  9942.       XCONST(NCONST) = T
  9943.       YCONST(NCONST) = ONE
  9944.       NDERIV(NCONST) = 2+4*0
  9945. C
  9946. C     CONSTRAIN SLOPE TO AGREE AT LEFT AND
  9947. C     RIGHT-MOST BREAKPOINTS.
  9948. C
  9949.       NCONST = NCONST+1
  9950.       XCONST(NCONST) = BKPT(NORD)
  9951.       YCONST(NCONST) = BKPT(LAST)
  9952.       NDERIV(NCONST) = 3+4*1
  9953. C
  9954. C     CONSTRAIN SECOND DERIVATIVES TO BE
  9955. C     NONPOSITIVE AT RIGHT SET OF BREAKPOINTS.
  9956. C
  9957.       DO 20 I = 1, 4
  9958.          NCONST = NCONST+1
  9959.          L = LAST-4+I
  9960.          XCONST(NCONST) = BKPT(L)
  9961.          YCONST(NCONST) = ZERO
  9962.          NDERIV(NCONST) = 0+4*2
  9963.    20 CONTINUE
  9964. C
  9965.       IF (KPRINT.GE.2) WRITE (LUN,1000)
  9966.  1000 FORMAT ('1TEST OF SUBROUTINE DFC/')
  9967.       ICNT = 1
  9968.       IDIGIT = -4
  9969. C
  9970.       IF (KPRINT.GE.3) THEN
  9971.          CALL DVOUT (NBKPT, BKPT, '('' ARRAY OF KNOTS.'')', IDIGIT)
  9972.          CALL DVOUT (NDATA, XDATA, '('' INDEP. VAR. VALUES'')',
  9973.      *      IDIGIT)
  9974.          CALL DVOUT (NDATA, YDATA, '('' DEPEND. VAR. VALUES'')', IDIGIT)
  9975.          CALL DVOUT (NDATA, SDDATA, '('' DEPEND. VAR. UNCERTAINTY'')',
  9976.      *      IDIGIT)
  9977. C
  9978.          CALL DVOUT (NCONST, XCONST, '('' INDEP. VAR. CONST. VALS.'')',
  9979.      *      IDIGIT)
  9980.          CALL DVOUT (NCONST, YCONST, '('' CONST. VALUES'')', IDIGIT)
  9981.          CALL IVOUT (NCONST, NDERIV, '('' CONST. INDICATOR'')', IDIGIT)
  9982.       ENDIF
  9983. C
  9984. C     DECLARE AMOUNT OF WORKING STORAGE ALLOCATED TO DFC.
  9985. C
  9986.       IW(1) = 529
  9987.       IW(2) = 30
  9988. C
  9989. C     SET MODE TO INDICATE A NEW PROBLEM
  9990. C     AND REQUEST THE VARIANCE FUNCTION.
  9991. C
  9992.       MODE = 2
  9993. C
  9994. C     OBTAIN THE COEFFICIENTS OF THE B-SPLINE.
  9995. C
  9996.       CALL DFC(NDATA,XDATA,YDATA,SDDATA,
  9997.      1        NORD,NBKPT,BKPT,
  9998.      2        NCONST,XCONST,YCONST,NDERIV,
  9999.      3        MODE,
  10000.      4        COEFF,
  10001.      5        W,IW)
  10002. C
  10003. C     CHECK COEFFICIENTS
  10004. C
  10005.       TOL = MAX(7.0D0*SQRT(D1MACH(4)),1.D-8)
  10006.       DO 40 I = 1, NDATA
  10007.          DIFF = ABS(COEFF(I)-COEFCK(I))
  10008.          IF (DIFF .GT. TOL) GO TO 50
  10009.    40 CONTINUE
  10010. C
  10011.       ITEST(ICNT) = 1
  10012.       IF (KPRINT.GE.3) WRITE (LUN,1001)
  10013.  1001 FORMAT (/' DFC PASSED TEST 1')
  10014.       GO TO 60
  10015. C
  10016.    50 ITEST(ICNT) = 0
  10017.       IF (KPRINT.GE.2) WRITE (LUN,1002)
  10018.  1002 FORMAT (/' DFC FAILED TEST 1')
  10019. C
  10020.    60 K = ITEST(ICNT)
  10021.       IF (KPRINT.NE.2 .OR. K.EQ.0) THEN
  10022.          IF (KPRINT.GE.2) THEN
  10023.             CALL DVOUT (NDATA, COEFCK,
  10024.      *     '(/'' PREDICTED COEFFICIENTS OF THE B-SPLINE FROM SAMPLE'')',
  10025.      *         IDIGIT)
  10026.             CALL DVOUT (NDATA, COEFF,
  10027.      *         '(/'' COEFFICIENTS OF THE B-SPLINE COMPUTED BY DFC'')',
  10028.      *         IDIGIT)
  10029.          ENDIF
  10030.       ENDIF
  10031. C
  10032.       ICNT=ICNT+1
  10033. C
  10034. C     COMPUTE VALUE, FIRST TWO DERIVS., AND PROBABLE UNCERTAINTY.
  10035. C
  10036.       N = NBKPT-NORD
  10037.       NVAL = 51
  10038.       DO 90 I = 1, NVAL
  10039. C
  10040. C        THE FUNCTION DBVALU( ) IS IN THE DE BOOR B-SPLINE PACKAGE.
  10041. C
  10042.          XVAL = DBLE(I-1)/(NVAL-1)
  10043.          II = 1
  10044.          DO 80 J = 1, 3
  10045.             V(I,J+1) = DBVALU(BKPT,COEFF,N,NORD,J-1,XVAL,II,WORK)
  10046.    80    CONTINUE
  10047.          V(I,1) = XVAL
  10048. C
  10049. C        THE VARIANCE FUNCTION DCV IS A COMPANION SUBPROGRAM TO DFC.
  10050. C
  10051.          V(I,5) = SQRT(DCV(XVAL,NDATA,NCONST,NORD,NBKPT,BKPT,W))
  10052.    90 CONTINUE
  10053. C
  10054.       DO 100 I = 1, NVAL
  10055.          DIFF = ABS(V(I,2)-CHECK(I))
  10056.          IF (DIFF .GT. TOL) GO TO 110
  10057.   100 CONTINUE
  10058. C
  10059.       ITEST(ICNT) = 1
  10060.       IF (KPRINT.GE.3) WRITE (LUN,1003)
  10061.  1003 FORMAT (/' DFC (AND DBVALU) PASSED TEST 2')
  10062.       GO TO 120
  10063. C
  10064.   110 ITEST(ICNT) = 0
  10065.       IF (KPRINT.GE.2) WRITE (LUN,1004)
  10066.  1004 FORMAT (/' DFC (AND DBVALU) FAILED TEST 2')
  10067. C
  10068.   120 K = ITEST(ICNT)
  10069.       IF (KPRINT.NE.2 .OR. K.EQ.0) THEN
  10070.          IF (KPRINT.GE.2) THEN
  10071. C
  10072. C           PRINT THESE VALUES.
  10073. C
  10074.             CALL DMOUT (NVAL, 5, NVAL, V,
  10075.      1         '(''1'',15X,''X'',10X,''FNCN'',8X,''1ST D'',7X,''2ND D'',
  10076.      *         7X, ''ERROR'')', IDIGIT)
  10077.             WRITE (LUN,1005)
  10078.  1005       FORMAT (/' VALUES SHOULD CORRESPOND TO THOSE IN ',
  10079.      *         'SAND78-1291, P. 26')
  10080.          ENDIF
  10081.       ENDIF
  10082. C
  10083. C     CHECK ERROR PROCESSOR
  10084. C
  10085.       IF (KPRINT.GE.2) THEN
  10086.          WRITE (LUN,1006)
  10087.  1006    FORMAT (/ ' 6 ERROR MESSAGES EXPECTED')
  10088.          CALL DFC(NDATA,XDATA,YDATA,SDDATA,0,NBKPT,BKPT,NCONST,XCONST,
  10089.      1           YCONST,NDERIV,MODE,COEFF,W,IW)
  10090.          CALL DFC(NDATA,XDATA,YDATA,SDDATA,NORD,0,BKPT,NCONST,XCONST,
  10091.      1           YCONST,NDERIV,MODE,COEFF,W,IW)
  10092.          CALL DFC(-1,XDATA,YDATA,SDDATA,NORD,NBKPT,BKPT,NCONST,XCONST,
  10093.      1           YCONST,NDERIV,MODE,COEFF,W,IW)
  10094.          MMODE = 0
  10095.          CALL DFC(NDATA,XDATA,YDATA,SDDATA,NORD,NBKPT,BKPT,NCONST,
  10096.      1           XCONST,YCONST,NDERIV,MMODE,COEFF,W,IW)
  10097.          IW(1) = 10
  10098.          CALL DFC(NDATA,XDATA,YDATA,SDDATA,NORD,NBKPT,BKPT,NCONST,
  10099.      1           XCONST,YCONST,NDERIV,MODE,COEFF,W,IW)
  10100.          IW(1) = 529
  10101.          IW(2) = 2
  10102.          CALL DFC(NDATA,XDATA,YDATA,SDDATA,NORD,NBKPT,BKPT,NCONST,
  10103.      1           XCONST,YCONST,NDERIV,MODE,COEFF,W,IW)
  10104.       ENDIF
  10105. C
  10106.       IP = 1
  10107.         DO 150 I = 1, ICNT
  10108.            IP = IP*ITEST(I)
  10109.   150   CONTINUE
  10110. C
  10111.       IPASS = IP
  10112.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,1007)
  10113.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,1008)
  10114.       RETURN
  10115. C
  10116.  1007 FORMAT (/' ****************DFC PASSED ALL TESTS*****************')
  10117.  1008 FORMAT (/' ***************DFC FAILED SOME TESTS*****************')
  10118.       END
  10119. *DECK DFDEQC
  10120.       SUBROUTINE DFDEQC (T, U, UPRIME, RPAR, IPAR)
  10121. C***BEGIN PROLOGUE  DFDEQC
  10122. C***SUBSIDIARY
  10123. C***PURPOSE  Derivative evaluator for DDEPAC quick checks.
  10124. C***LIBRARY   SLATEC
  10125. C***TYPE      DOUBLE PRECISION (FDEQC-S, DFDEQC-D)
  10126. C***AUTHOR  Chow, Jeff, (LANL)
  10127. C***ROUTINES CALLED  (NONE)
  10128. C***REVISION HISTORY  (YYMMDD)
  10129. C   810801  DATE WRITTEN
  10130. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  10131. C   900415  Name changed from DDF to DFDEQC.  (WRB)
  10132. C***END PROLOGUE  DFDEQC
  10133. C
  10134. C     Declare arguments.
  10135. C
  10136.       INTEGER IPAR(*)
  10137.       DOUBLE PRECISION RPAR(*), T, U(*), UPRIME(*)
  10138. C
  10139. C     Declare local variables.
  10140. C
  10141.       DOUBLE PRECISION R, RSQ, R3
  10142. C***FIRST EXECUTABLE STATEMENT  DFDEQC
  10143.       RSQ = U(1)*U(1) + U(2)*U(2)
  10144.       R = SQRT(RSQ)
  10145.       R3 = RSQ*R
  10146.       UPRIME(1) = U(3)
  10147.       UPRIME(2) = U(4)
  10148.       UPRIME(3) = -(U(1)/R3)
  10149.       UPRIME(4) = -(U(2)/R3)
  10150.       RETURN
  10151.       END
  10152. *DECK DFDTRU
  10153.       SUBROUTINE DFDTRU (X, F, D)
  10154. C***BEGIN PROLOGUE  DFDTRU
  10155. C***SUBSIDIARY
  10156. C***PURPOSE  Compute exact function values for DEVCHK.
  10157. C***LIBRARY   SLATEC (PCHIP)
  10158. C***TYPE      DOUBLE PRECISION (FDTRUE-S, DFDTRU-D)
  10159. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  10160. C***AUTHOR  Fritsch, F. N., (LLNL)
  10161. C***DESCRIPTION
  10162. C
  10163. C        COMPUTE EXACT FUNCTION VALUES IN DOUBLE PRECISION.
  10164. C
  10165. C                   F(X) = X*(X+1)*(X-2)
  10166. C
  10167. C***ROUTINES CALLED  (NONE)
  10168. C***REVISION HISTORY  (YYMMDD)
  10169. C   820601  DATE WRITTEN
  10170. C   890618  REVISION DATE from Version 3.2
  10171. C   890706  Cosmetic changes to prologue.  (WRB)
  10172. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  10173. C   900315  Revised prologue.  (FNF)
  10174. C   900316  Deleted variables ONE and TWO.  (FNF)
  10175. C   900321  Changed name of d.p. version from DFTRUE to DFDTRU.
  10176. C***END PROLOGUE  DFDTRU
  10177.       DOUBLE PRECISION  X, F, D
  10178.       DOUBLE PRECISION  FACT1, FACT2, XX
  10179. C
  10180. C***FIRST EXECUTABLE STATEMENT  DFDTRU
  10181.       XX = X
  10182.       FACT1 = XX + 1
  10183.       FACT2 = XX - 2
  10184.       F = XX * FACT1 * FACT2
  10185.       D = FACT1*FACT2 + XX*(FACT1 + FACT2)
  10186. C
  10187.       RETURN
  10188. C------------- LAST LINE OF DFDTRU FOLLOWS -----------------------------
  10189.       END
  10190. *DECK DFEIN
  10191.       DOUBLE PRECISION FUNCTION DFEIN (T)
  10192. C***BEGIN PROLOGUE  DFEIN
  10193. C***PURPOSE  Subsidiary to DEG8CK.
  10194. C***LIBRARY   SLATEC
  10195. C***AUTHOR  (UNKNOWN)
  10196. C***ROUTINES CALLED  (NONE)
  10197. C***COMMON BLOCKS    DFEINX
  10198. C***REVISION HISTORY  (YYMMDD)
  10199. C   ??????  DATE WRITTEN
  10200. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  10201. C***END PROLOGUE  DFEIN
  10202.       COMMON /DFEINX/ X, A, FKM
  10203.       DOUBLE PRECISION X, A, FKM, T, ALN
  10204. C***FIRST EXECUTABLE STATEMENT  DFEIN
  10205.       ALN = (FKM-T)*X - A*LOG(T)
  10206.       DFEIN = EXP(ALN)
  10207.       RETURN
  10208.       END
  10209. *DECK DFMAT
  10210.       SUBROUTINE DFMAT (X, Y, YP)
  10211. C***BEGIN PROLOGUE  DFMAT
  10212. C***PURPOSE  Subsidiary to
  10213. C***LIBRARY   SLATEC
  10214. C***AUTHOR  (UNKNOWN)
  10215. C***ROUTINES CALLED  (NONE)
  10216. C***COMMON BLOCKS    DSAVEX
  10217. C***REVISION HISTORY  (YYMMDD)
  10218. C   ??????  DATE WRITTEN
  10219. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  10220. C***END PROLOGUE  DFMAT
  10221.       DOUBLE PRECISION X,Y,YP,XSAVE,TERM,TANX
  10222.       DIMENSION Y(*),YP(*)
  10223.       COMMON /DSAVEX/ XSAVE, TERM
  10224. C***FIRST EXECUTABLE STATEMENT  DFMAT
  10225.       YP(1) = Y(2)
  10226.       IF (X .EQ. XSAVE) GO TO 10
  10227.       XSAVE=X
  10228.       TANX= TAN(X/57.2957795130823D0)
  10229.       TERM= 3.0D0/TANX+2.0D0*TANX
  10230.    10 YP(2) = -TERM*Y(2)-0.7D0*Y(1)
  10231.       RETURN
  10232.       END
  10233. *DECK DFNCK
  10234.       SUBROUTINE DFNCK (LUN, KPRINT, IPASS)
  10235. C***BEGIN PROLOGUE  DFNCK
  10236. C***PURPOSE  Quick check for the double precision Fullerton
  10237. C            special functions.
  10238. C***LIBRARY   SLATEC
  10239. C***KEYWORDS  QUICK CHECK
  10240. C***AUTHOR  Boland, W. Robert, (LANL)
  10241. C           Chow, Jeff, (LANL)
  10242. C***DESCRIPTION
  10243. C
  10244. C     This subroutine does a quick check for the double precision
  10245. C     routines in the Fullerton special function library.
  10246. C
  10247. C     Parameter list-
  10248. C
  10249. C     LUN      input integer value to designate the external
  10250. C              device unit for message output
  10251. C     KPRINT   input integer value to specify amount of
  10252. C              printing to be done by quick check
  10253. C     IPASS    output value indicating whether tests passed or
  10254. C              failed
  10255. C
  10256. C***ROUTINES CALLED  D1MACH, D9ATN1, D9LN2R, DACOSH, DAI, DAIE, DASINH,
  10257. C                    DATANH, DBESI0, DBESI1, DBESJ0, DBESJ1, DBESK0,
  10258. C                    DBESK1, DBESKS, DBESY0, DBESY1, DBETA, DBETAI, DBI,
  10259. C                    DBIE, DBINOM, DBSI0E, DBSI1E, DBSK0E, DBSK1E,
  10260. C                    DBSKES, DCBRT, DCHU, DCOSDG, DCOT, DDAWS, DE1, DEI,
  10261. C                    DERF, DEXPRL, DFAC, DGAMI, DGAMIC, DGAMIT, DGAMMA,
  10262. C                    DGAMR, DLI, DLNREL, DPOCH, DPOCH1, DPSI, DSINDG,
  10263. C                    DSPENC
  10264. C***REVISION HISTORY  (YYMMDD)
  10265. C   800801  DATE WRITTEN
  10266. C   891115  REVISION DATE from Version 3.2
  10267. C   891120  Checks of remainder of FNLIB routines added and code
  10268. C           reorganized.  (WRB)
  10269. C   900330  Prologue converted to Version 4.0 format.  (BAB)
  10270. C   900727  Added EXTERNAL statement.  (WRB)
  10271. C***END PROLOGUE  DFNCK
  10272.       INTEGER I,LUN,KPRINT,IPASS
  10273.       DOUBLE PRECISION D1MACH,
  10274.      +                 Y(105),V(105),ERRMAX,ERRTOL,ABSERR,RELERR,
  10275.      +                 D9ATN1,D9LN2R,DACOSH,DAI,DAIE,DASINH,DATANH,
  10276.      +                 DBESI0,DBESI1,DBESJ0,DBESJ1,DBESK0,DBESK1,
  10277.      +                 DBESY0,DBESY1,DBETA,DBETAI,DBI,DBIE,DBINOM,
  10278.      +                 DBSI0E,DBSI1E,DBSK0E,DBSK1E,DCBRT,DCHU,DCOSDG,
  10279.      +                 DCOT,DDAWS,DE1,DEI,DERF,DEXPRL,DFAC,DGAMI,DGAMIC,
  10280.      +                 DGAMIT,DGAMMA,DGAMR,DLI,DLNREL,DPOCH,DPOCH1,DPSI,
  10281.      +                 DSINDG,DSPENC
  10282.       EXTERNAL DCOT, DERF, DGAMMA
  10283. C
  10284. C     Correct values through different calculations are stored in V(*)
  10285. C
  10286.       DATA V(  1) / .8344518000 0000000000 0000000000 D+09/
  10287.       DATA V(  2) / .2250829575 1200000000 0000000000 D+13/
  10288.       DATA V(  3) / .1307674368 0000000000 0000000000 D+13/
  10289.       DATA V(  4) / .8222838654 1779228177 2556288000 D+34/
  10290.       DATA V(  5) /-.2000000000 0000000000 0000000000 D+01/
  10291.       DATA V(  6) / .9983407900 0000000000 0000000000 D+02/
  10292.       DATA V(  7) / .8660254037 8443864676 3723170753 D+00/
  10293.       DATA V(  8) /-.7071067811 8654752440 0844362105 D+00/
  10294.       DATA V(  9) / .6420926159 3433070300 6419986594 D+00/
  10295.       DATA V( 10) /-.1830487721 7124519192 6801943897 D+01/
  10296.       DATA V( 11) /-.2908191279 9355107028 5950148310 D+00/
  10297.       DATA V( 12) /-.1116064102 7573868712 2866817478 D+00/
  10298.       DATA V( 13) / .5000000000 0000000000 0000000000 D+00/
  10299.       DATA V( 14) / .7071067811 8654752440 0844362105 D+00/
  10300.       DATA V( 15) / .1371498381 4723363824 3285631505 D+00/
  10301.       DATA V( 16) /-.1000000500 0003333335 8333416027 D-05/
  10302.       DATA V( 17) / .1001251042 3180339898 4880296644 D+01/
  10303.       DATA V( 18) / .9950166250 8319464260 9402280122 D+00/
  10304.       DATA V( 19) / .2437208648 6531505582 4104923715 D+00/
  10305.       DATA V( 20) / .1931471805 5994530941 7232121458 D+00/
  10306.       DATA V( 21) / .1111122222 3333344444 0000000000 D+00/
  10307.       DATA V( 22) / .3141592653 5900000000 0000000000 D+01/
  10308.       DATA V( 23) / .9983407900 0000000000 0000000000 D-01/
  10309.       DATA V( 24) /-.1194763217 0000000000 0000000000 D+01/
  10310.       DATA V( 25) /-.1111122222 3333344444 0000000000 D+00/
  10311.       DATA V( 26) / .2646652412 0000000000 0000000000 D+01/
  10312.       DATA V( 27) /-.3786710430 6108797672 7207184637 D+00/
  10313.       DATA V( 28) / .1045163780 1174927848 4458888919 D+01/
  10314.       DATA V( 29) / .5597735947 7616081174 6795939295 D+00/
  10315.       DATA V( 30) / .1000195824 0663265190 1909339800 D+00/
  10316.       DATA V( 31) / .4542199048 6317357992 0523812663 D+00/
  10317.       DATA V( 32) / .1895117816 3559367554 6652093433 D+01/
  10318.       DATA V( 33) / .5822405264 6501250590 2656320160 D+00/
  10319.       DATA V( 34) / .1644934066 8482264364 7241516665 D+01/
  10320.       DATA V( 35) / .8862269254 5275801364 9083741687 D+00/
  10321.       DATA V( 36) /-.3141592653 5897932384 6264338328 D+01/
  10322.       DATA V( 37) / .3183098861 8379067153 7767526733 D+00/
  10323.       DATA V( 38) / .8823957200 2038009055 0940262394 D-06/
  10324.       DATA V( 39) /-.2820947917 7387814347 4039725759 D+00/
  10325.       DATA V( 40) / .1875000000 0000000000 0000000000 D+01/
  10326.       DATA V( 41) / .5135166683 8205029558 4635612122 D-01/
  10327.       DATA V( 42) / .5987500000 0000000000 0000000000 D+02/
  10328.       DATA V( 43) / .1570796326 7948966192 3132169164 D+01/
  10329.       DATA V( 44) / .7550061690 3746404275 1871235437 D-03/
  10330.       DATA V( 45) / .4227843350 9846713939 3487909918 D+00/
  10331.       DATA V( 46) / .2303001034 2976863752 7259355045 D+01/
  10332.       DATA V( 47) / .9998566182 6372370688 5830759463 D+00/
  10333.       DATA V( 48) / .8882907071 8395673587 8281870759 D+00/
  10334.       DATA V( 49) / .1353352832 3661269189 3999494971 D+00/
  10335.       DATA V( 50) / .3469303062 9580145617 0933128256 D-03/
  10336.       DATA V( 51) / .7869386805 7473315279 2400930048 D+00/
  10337.       DATA V( 52) / .6316733917 7525812329 1222663623 D-01/
  10338.       DATA V( 53) / .3812815664 6177091614 9261183171 D+00/
  10339.       DATA V( 54) / .2656250000 0000000000 0000000000 D+00/
  10340.       DATA V( 55) / .5204998778 1304653768 2746653770 D+00/
  10341.       DATA V( 56) / .8883882317 0170776406 9578446749 D+00/
  10342.       DATA V( 57) / .4244363835 0202229593 4042352455 D+00/
  10343.       DATA V( 58) / .3370006597 4209342338 3019719632 D+00/
  10344.       DATA V( 59) /-.1775967713 1433830434 7397013056 D+00/
  10345.       DATA V( 60) / .2238907791 4123566805 1827454628 D+00/
  10346.       DATA V( 61) /-.3275791375 9146522203 7734321812 D+00/
  10347.       DATA V( 62) / .5767248077 5687338720 2448242187 D+00/
  10348.       DATA V( 63) / .5103756726 4974511959 6606592612 D+00/
  10349.       DATA V( 64) /-.3085176252 4903378007 3648984210 D+00/
  10350.       DATA V( 65) / .1478631433 9122684480 1050675510 D+00/
  10351.       DATA V( 66) /-.1070324315 4093754688 8370772230 D+00/
  10352.       DATA V( 67) / .2279585302 3360672674 3720444020 D+01/
  10353.       DATA V( 68) / .2723987182 3604446894 5442320700 D+02/
  10354.       DATA V( 69) / .1590636854 6373290633 8225442450 D+01/
  10355.       DATA V( 70) / .2433564214 2450527199 1430504400 D+02/
  10356.       DATA V( 71) / .1138938727 4953343565 2719574910 D+00/
  10357.       DATA V( 72) / .3691098334 0425942747 3526100740 D-02/
  10358.       DATA V( 73) / .1398658818 1652242728 4598806997 D+00/
  10359.       DATA V( 74) / .4044613445 4521642083 6502183700 D-02/
  10360.       DATA V( 75) / .3085083225 5367103953 3384319255 D+00/
  10361.       DATA V( 76) / .1835408126 0932835307 3650751820 D+00/
  10362.       DATA V( 77) / .1639722669 4454235692 6122903850 D+00/
  10363.       DATA V( 78) / .2152692892 4893765915 8505143243 D+00/
  10364.       DATA V( 79) / .8415682150 7077141791 9124867127 D+00/
  10365.       DATA V( 80) / .5478075643 1351898686 8201568700 D+00/
  10366.       DATA V( 81) / .6002738587 8831258293 6045656600 D+00/
  10367.       DATA V( 82) / .1033476847 0686885731 7535710603 D+01/
  10368.       DATA V( 83) / .8862269254 5275801364 9083741000 D+00/
  10369.       DATA V( 84) / .1329340388 1791370204 7362561200 D+01/
  10370.       DATA V( 85) / .2880237507 7214635443 5952215970 D+01/
  10371.       DATA V( 86) / .5604991216 3979286993 1128243359 D+00/
  10372.       DATA V( 87) / .6725989459 6775144391 7353892000 D+00/
  10373.       DATA V( 88) / .9640584892 2044373628 1540578570 D+00/
  10374.       DATA V( 89) / .4610685044 4789455843 9575873876 D+00/
  10375.       DATA V( 90) / .9221370088 9578911687 9151747751 D+00/
  10376.       DATA V( 91) / .2316936064 8083348976 9125254500 D+00/
  10377.       DATA V( 92) / .1572592338 0470489995 2660465400 D-01/
  10378.       DATA V( 93) / .2932771591 2994736245 0897433147 D+00/
  10379.       DATA V( 94) / .2193222051 2871206086 2850888400 D+00/
  10380.       DATA V( 95) / .8542770431 0315549330 0048798776 D+00/
  10381.       DATA V( 96) / .1878941503 7478950009 0933504950 D+01/
  10382.       DATA V( 97) / .6748924111 1563021286 5414309867 D+00/
  10383.       DATA V( 98) / .4647504801 9609251501 9775411670 D+00/
  10384.       DATA V( 99) / .2499999999 9999999999 9999999880 D+00/
  10385.       DATA V(100) / .7350086093 0037774536 9706799000 D+00/
  10386.       DATA V(101) / .4069617876 5067297974 2685260000 D+00/
  10387.       DATA V(102) / .4482566692 9158295391 6931735480 D+00/
  10388.       DATA V(103) / .5963473623 2319407434 1078499290 D+00/
  10389.       DATA V(104) / .7573420861 2217595345 4414369190 D+00/
  10390.       DATA V(105) / .7578721561 4131210604 3351240000 D+00/
  10391. C***FIRST EXECUTABLE STATEMENT  DFNCK
  10392. C
  10393. C     Compute functional values
  10394. C
  10395. C     Exercise routines in Category C1.
  10396. C
  10397.       Y(  1) = DBINOM(35,12)
  10398.       Y(  2) = DBINOM(50,15)
  10399.       Y(  3) = DFAC(15)
  10400.       Y(  4) = DFAC(31)
  10401. C
  10402. C     Exercise routines in Category C2
  10403. C
  10404.       Y(  5) = DCBRT(-8.D0)
  10405.       Y(  6) = DCBRT(.9950306243 6570396447 5039000000 D6)
  10406. C
  10407. C     Exercise routines in Category C4A.
  10408. C
  10409.       Y(  7) = DCOSDG(30.D0)
  10410.       Y(  8) = DCOSDG(135.D0)
  10411.       Y(  9) = DCOT(1.D0)
  10412.       Y( 10) = DCOT(-.5D0)
  10413.       Y( 11) = D9ATN1(.5D0)
  10414.       Y( 12) = D9ATN1(2.D0)
  10415.       Y( 13) = DSINDG(30.D0)
  10416.       Y( 14) = DSINDG(135.D0)
  10417. C
  10418. C     Exercise routines in Category C4B.
  10419. C
  10420.       Y( 15) = DLNREL(.147D0)
  10421.       Y( 16) = DLNREL(-.1D-5)
  10422.       Y( 17) = DEXPRL(.25D-2)
  10423.       Y( 18) = DEXPRL(-.1D-1)
  10424.       Y( 19) = D9LN2R(.5D0)
  10425.       Y( 20) = D9LN2R(1.D0)
  10426. C
  10427. C     Exercise routines in Category C4C.
  10428. C
  10429.       Y( 21) = DACOSH(.1006179316 4909482374 7218929626 D1)
  10430.       Y( 22) = DACOSH(.1159195327 5523908462 8557897777 D2)
  10431.       Y( 23) = DASINH(.1000000001 0129514521 1538706587 D0)
  10432.       Y( 24) = DASINH(-.1499999999 4824063412 4264852207 D1)
  10433.       Y( 25) = DATANH(-.1106572080 4138399806 6515207788 D0)
  10434.       Y( 26) = DATANH(.9899999999 9279130066 3084082410 D0)
  10435. C
  10436. C     Exercise routines in Category C5.
  10437. C
  10438.       Y( 27) = DLI(.5D0)
  10439.       Y( 28) = DLI(2.D0)
  10440.       Y( 29) = DE1(.5D0)
  10441.       Y( 30) = DE1(1.5D0)
  10442.       Y( 31) = DEI(.5D0)
  10443.       Y( 32) = DEI(1.D0)
  10444.       Y( 33) = DSPENC(.5D0)
  10445.       Y( 34) = DSPENC(1.D0)
  10446.       Y( 35) = DGAMMA(1.5D0)
  10447.       Y( 36) = DGAMMA(-.5D0)*DGAMMA(1.5D0)
  10448.       Y( 37) = DGAMR(-1.5D0)*DGAMR(2.5D0)
  10449.       Y( 38) = DGAMR(10.5D0)
  10450. C
  10451. C     Exercise routines in Category C7A.
  10452. C
  10453.       Y( 39) = DPOCH(-.5D0,1.5D0)
  10454.       Y( 40) = DPOCH(.5D0,3.D0)
  10455.       Y( 41) = DPOCH1(.5D0,2.5D0)
  10456.       Y( 42) = DPOCH1(10.5D0,2.D0)
  10457. C
  10458. C     Exercise routines in Category C7B.
  10459. C
  10460.       Y( 43) = DBETA(.5D0,1.5D0)
  10461.       Y( 44) = DBETA(5.5D0,5.5D0)
  10462. C
  10463. C     Exercise routines in Category C7C.
  10464. C
  10465.       Y( 45) = DPSI(2.D0)
  10466.       Y( 46) = DPSI(10.5D0)
  10467. C
  10468. C     Exercise routines in Category C7E.
  10469. C
  10470.       Y( 47) = DGAMI(1.D0,8.85D0)
  10471.       Y( 48) = DGAMI(2.D0,3.75D0)
  10472.       Y( 49) = DGAMIC(1.D0,2.D0)
  10473.       Y( 50) = DGAMIC(2.D0,10.4D0)
  10474.       Y( 51) = DGAMIT(1.D0,.5D0)
  10475.       Y( 52) = DGAMIT(2.D0,3.75D0)
  10476. C
  10477. C     Exercise routines in Category C7F.
  10478. C
  10479.       Y( 53) = DBETAI(.5D0,2.D0,1.5D0)
  10480.       Y( 54) = DBETAI(.25D0,1.5D0,2.D0)
  10481. C
  10482. C     Exercise routines in Category C8A.
  10483. C
  10484.       Y( 55) = DERF(.5D0)
  10485.       Y( 56) = DERF(1.125D0)
  10486. C
  10487. C     Exercise routines in Category C8C.
  10488. C
  10489.       Y( 57) = DDAWS(.5D0)
  10490.       Y( 58) = DDAWS(1.84D0)
  10491. C
  10492. C     Exercise routines in Category C10A1.
  10493. C
  10494.       Y( 59) = DBESJ0(5.D0)
  10495.       Y( 60) = DBESJ0(2.D0)
  10496.       Y( 61) = DBESJ1(5.D0)
  10497.       Y( 62) = DBESJ1(2.D0)
  10498.       Y( 63) = DBESY0(2.D0)
  10499.       Y( 64) = DBESY0(5.D0)
  10500.       Y( 65) = DBESY1(5.D0)
  10501.       Y( 66) = DBESY1(2.D0)
  10502. C
  10503. C     Exercise routines in Category C10B1.
  10504. C
  10505.       Y( 67) = DBESI0(2.D0)
  10506.       Y( 68) = DBESI0(5.D0)
  10507.       Y( 69) = DBESI1(2.D0)
  10508.       Y( 70) = DBESI1(5.D0)
  10509.       Y( 71) = DBESK0(2.D0)
  10510.       Y( 72) = DBESK0(5.D0)
  10511.       Y( 73) = DBESK1(2.D0)
  10512.       Y( 74) = DBESK1(5.D0)
  10513.       Y( 75) = DBSI0E(2.D0)
  10514.       Y( 76) = DBSI0E(5.D0)
  10515.       Y( 77) = DBSI1E(5.D0)
  10516.       Y( 78) = DBSI1E(2.D0)
  10517.       Y( 79) = DBSK0E(2.D0)
  10518.       Y( 80) = DBSK0E(5.D0)
  10519.       Y( 81) = DBSK1E(5.D0)
  10520.       Y( 82) = DBSK1E(2.D0)
  10521. C
  10522. C     Exercise routines in Category C10B3.
  10523. C
  10524.       CALL DBSKES(.5D0,2.D0,3,Y(83))
  10525.       CALL DBSKES(.5D0,5.D0,3,Y(86))
  10526.       CALL DBESKS(.5D0,1.D0,2,Y(89))
  10527. C
  10528. C     Exercise routines in Category C10D.
  10529. C
  10530.       Y( 91) = DAI(.5D0)
  10531.       Y( 92) = DAI(2.5D0)
  10532.       Y( 93) = DAIE(.5D0)
  10533.       Y( 94) = DAIE(2.5D0)
  10534.       Y( 95) = DBI(.5D0)
  10535.       Y( 96) = DBI(1.5D0)
  10536.       Y( 97) = DBIE(.5D0)
  10537.       Y( 98) = DBIE(2.5D0)
  10538. C
  10539. C     Exercise routines in Category C11.
  10540. C
  10541.       Y( 99) = DCHU(1.D0,2.D0,4.D0)
  10542.       Y(100) = DCHU(5.D0/6.D0,5.D0/3.D0,4.D0/3.D0)
  10543.       Y(101) = DCHU(.75D0,.75D0,2.5D0)
  10544.       Y(102) = DCHU(1.D0,1.D0,1.5D0)
  10545.       Y(103) = DCHU(1.D0,1.D0,1.D0)
  10546.       Y(104) = DCHU(1.D0,1.D0,-LOG(.5D0))
  10547.       Y(105) = DCHU(.5D0,.5D0,1.D0)
  10548. C
  10549. C   Check for possible errors
  10550. C
  10551.       ERRMAX = D1MACH(4)
  10552.       ERRTOL = SQRT(ERRMAX)
  10553.       DO 10 I = 1,105
  10554.         ABSERR = ABS(V(I)-Y(I))
  10555.         RELERR = ABSERR/ABS(V(I))
  10556.         ERRMAX = MAX(RELERR,ERRMAX)
  10557.         IF (RELERR.GT.ERRTOL .AND. KPRINT.GE.2)
  10558.      +      WRITE (LUN,620) I,RELERR,ABSERR
  10559.    10 CONTINUE
  10560.       IPASS = 0
  10561.       IF (ERRMAX.LE.ERRTOL) IPASS = 1
  10562.       IF (IPASS.NE.0 .AND. KPRINT.GE.2) WRITE (LUN,610)
  10563.       RETURN
  10564.   610 FORMAT (' Double precision Fullerton special function ',
  10565.      +        ' routines o.k.')
  10566.   620 FORMAT (' For I  = ', I3, '  test fails with RELERR  = ',
  10567.      +        D38.30, '  and ABSERR  = ', D38.30)
  10568.       END
  10569. *DECK DFQD1
  10570.       DOUBLE PRECISION FUNCTION DFQD1 (X)
  10571. C***BEGIN PROLOGUE  DFQD1
  10572. C***SUBSIDIARY
  10573. C***PURPOSE  Function evaluator for DQNC79 and DGAUS8 quick checks.
  10574. C***LIBRARY   SLATEC
  10575. C***TYPE      DOUBLE PRECISION (FQD1-S, DFQD1-D)
  10576. C***AUTHOR  Boland, W. Robert, (LANL)
  10577. C***SEE ALSO  DQG8TS, DQN79Q
  10578. C***ROUTINES CALLED  (NONE)
  10579. C***REVISION HISTORY  (YYMMDD)
  10580. C   920229  DATE WRITTEN
  10581. C***END PROLOGUE  DFQD1
  10582. C     .. Scalar Arguments ..
  10583.       DOUBLE PRECISION X
  10584. C     .. Intrinsic Functions ..
  10585.       INTRINSIC SQRT
  10586. C***FIRST EXECUTABLE STATEMENT  DFQD1
  10587.       DFQD1 = 0.0D0
  10588.       IF (X .GT. 0.0D0) THEN
  10589.         DFQD1 = 1.0D0/SQRT(X)
  10590.       ENDIF
  10591.       RETURN
  10592.       END
  10593. *DECK DFQD2
  10594.       DOUBLE PRECISION FUNCTION DFQD2 (X)
  10595. C***BEGIN PROLOGUE  DFQD2
  10596. C***SUBSIDIARY
  10597. C***PURPOSE  Function evaluator for DQNC79 and DGAUS8 quick checks.
  10598. C***LIBRARY   SLATEC
  10599. C***TYPE      DOUBLE PRECISION (FQD2-S, DFQD2-D)
  10600. C***AUTHOR  Boland, W. Robert, (LANL)
  10601. C***SEE ALSO  DQG8TS, DQN79Q
  10602. C***ROUTINES CALLED  (NONE)
  10603. C***REVISION HISTORY  (YYMMDD)
  10604. C   920229  DATE WRITTEN
  10605. C***END PROLOGUE  DFQD2
  10606. C     .. Scalar Arguments ..
  10607.       DOUBLE PRECISION X
  10608. C     .. Intrinsic Functions ..
  10609.       INTRINSIC COS,EXP
  10610. C***FIRST EXECUTABLE STATEMENT  DFQD2
  10611.       DFQD2 = EXP(X)*COS(10.0D0*X)
  10612.       RETURN
  10613.       END
  10614. *DECK DFZTST
  10615.       SUBROUTINE DFZTST (LUN, KPRINT, IPASS)
  10616. C***BEGIN PROLOGUE  DFZTST
  10617. C***PURPOSE  Quick check for DFZERO.
  10618. C***LIBRARY   SLATEC
  10619. C***TYPE      DOUBLE PRECISION (FZTEST-S, DFZTST-D)
  10620. C***AUTHOR  Boland, W. Robert, (LANL)
  10621. C***ROUTINES CALLED  D1MACH, DFZERO, XERCLR, XGETF, XSETF
  10622. C***REVISION HISTORY  (YYMMDD)
  10623. C   920212  DATE WRITTEN
  10624. C***END PROLOGUE  DFZTST
  10625. C     .. Scalar Arguments ..
  10626.       INTEGER IPASS, KPRINT, LUN
  10627. C     .. Local Scalars ..
  10628.       INTEGER IFLAG, KONTRL
  10629.       DOUBLE PRECISION AE, B, C, PI, R, RE, TOL
  10630.       LOGICAL FATAL
  10631. C     .. External Functions ..
  10632.       DOUBLE PRECISION D1MACH
  10633.       EXTERNAL D1MACH
  10634. C     .. External Subroutines ..
  10635.       EXTERNAL DFZERO, XERCLR, XGETF, XSETF
  10636. C     .. Intrinsic Functions ..
  10637.       DOUBLE PRECISION DSIN, DTAN
  10638.       INTRINSIC ABS, ATAN, DSIN, DTAN, MAX, SQRT
  10639. C***FIRST EXECUTABLE STATEMENT  DFZTST
  10640.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  10641.       IPASS = 1
  10642.       PI = 4.0D0 *ATAN(1.0D0)
  10643.       RE = 1.0D-10
  10644.       AE = 1.0D-10
  10645.       TOL = MAX(1.0D-9,SQRT(D1MACH(4)))
  10646. C
  10647. C     Set up and solve example problem
  10648. C
  10649.       B = 0.1D0
  10650.       C = 4.0D0
  10651.       R = C - B
  10652.       CALL DFZERO (DSIN, B, C, R, RE, AE, IFLAG)
  10653. C
  10654. C     See if test was passed.
  10655. C
  10656.       IF (ABS(B-PI).LE.TOL .AND. ABS(C-PI).LE.TOL) THEN
  10657.         IF (KPRINT .GE. 3) WRITE (LUN, 9010) 'PASSED', B, C, IFLAG
  10658.       ELSE
  10659.         IPASS = 0
  10660.         IF (KPRINT .GE. 2) WRITE (LUN, 9010) 'FAILED', B, C, IFLAG
  10661.       ENDIF
  10662. C
  10663. C     Trigger 2 error conditions
  10664. C
  10665.       CALL XGETF (KONTRL)
  10666.       IF (KPRINT .LE. 2) THEN
  10667.          CALL XSETF (0)
  10668.       ELSE
  10669.          CALL XSETF (1)
  10670.       ENDIF
  10671.       FATAL = .FALSE.
  10672.       CALL XERCLR
  10673. C
  10674.       IF (KPRINT .GE. 3) WRITE (LUN,9020)
  10675.       B = 1.0D0
  10676. C
  10677. C     IFLAG=3 (Singular point)
  10678. C
  10679.       C = 2.0D0
  10680.       R = 0.5D0*(B+C)
  10681.       CALL DFZERO (DTAN, B, C, B, RE, AE, IFLAG)
  10682.       IF (IFLAG .NE. 3) THEN
  10683.         IPASS = 0
  10684.         FATAL = .TRUE.
  10685.         IF (KPRINT .GE. 2) WRITE (LUN,9030) IFLAG, 2
  10686.       ENDIF
  10687. C
  10688. C     IFLAG=4 (No sign change)
  10689. C
  10690.       B = -3.0D0
  10691.       C = -0.1D0
  10692.       R = 0.5D0*(B+C)
  10693.       CALL DFZERO (DSIN, B, C, R, RE, AE, IFLAG)
  10694.       IF (IFLAG .NE. 4) THEN
  10695.         IPASS = 0
  10696.         FATAL = .TRUE.
  10697.         IF (KPRINT .GE. 2) WRITE (LUN,9030) IFLAG, 4
  10698.       ENDIF
  10699. C
  10700.       CALL XERCLR
  10701. C
  10702.       CALL XSETF (KONTRL)
  10703.       IF (FATAL) THEN
  10704.         IF (KPRINT .GE. 2) THEN
  10705.           WRITE (LUN, 9040)
  10706.         ENDIF
  10707.       ELSE
  10708.         IF (KPRINT .GE. 3) THEN
  10709.           WRITE (LUN, 9050)
  10710.         ENDIF
  10711.       ENDIF
  10712. C
  10713.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,9060)
  10714.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,9070)
  10715.       RETURN
  10716.  9000 FORMAT ('1' / ' DFZERO QUICK CHECK')
  10717.  9010 FORMAT (' Accuracy test ', A /
  10718.      +        ' Example problem results:  (answer = PI),  B =', F20.14,
  10719.      +        ' C =', F20.14 / ' IFLAG =', I2)
  10720.  9020 FORMAT (/ ' IFLAG 3 and 4 tests')
  10721.  9030 FORMAT (/' IFLAG test FAILED.  IFLAG =', I2, ', but should ',
  10722.      +        'have been', I2)
  10723.  9040 FORMAT (/ ' At least IFLAG test failed')
  10724.  9050 FORMAT (/ ' All IFLAG tests passed')
  10725.  9060 FORMAT (/' ***************DFZERO PASSED ALL TESTS**************')
  10726.  9070 FORMAT (/' ***************DFZERO FAILED SOME TESTS*************')
  10727.       END
  10728. *DECK DGEQC
  10729.       SUBROUTINE DGEQC (LUN, KPRINT, NERR)
  10730. C***BEGIN PROLOGUE  DGEQC
  10731. C***PURPOSE  Quick check for DGEFS.
  10732. C***LIBRARY   SLATEC
  10733. C***TYPE      DOUBLE PRECISION (SGEQC-S, DGEQC-D, CGEQC-C)
  10734. C***KEYWORDS  QUICK CHECK
  10735. C***AUTHOR  Jacobsen, Nancy, (LANL)
  10736. C***DESCRIPTION
  10737. C
  10738. C   Let A*X=B be a DOUBLE PRECISION linear system where the
  10739. C   matrix is of the proper type for the Linpack subroutines
  10740. C   being called.  The values of A and B and the pre-computed
  10741. C   values of BXEX (the solution vector) are given in DATA
  10742. C   statements.  The computed test results for X are compared to
  10743. C   the stored pre-computed values.  Failure of the test occurs
  10744. C   when there is less than 80% agreement between the absolute
  10745. C   values.  There are 2 tests - one for the normal case and one
  10746. C   for the singular case.  A message is printed indicating
  10747. C   whether each subroutine has passed or failed for each case.
  10748. C
  10749. C   On return, NERR (INTEGER type) contains the total count of
  10750. C   all failures detected.
  10751. C
  10752. C***ROUTINES CALLED  D1MACH, DGEFS
  10753. C***REVISION HISTORY  (YYMMDD)
  10754. C   801022  DATE WRITTEN
  10755. C   891009  Removed unreferenced statement label.  (WRB)
  10756. C   891009  REVISION DATE from Version 3.2
  10757. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  10758. C   920601  Code reworked and TYPE section added.  (RWC, WRB)
  10759. C***END PROLOGUE  DGEQC
  10760. C     .. Scalar Arguments ..
  10761.       INTEGER KPRINT, LUN, NERR
  10762. C     .. Local Scalars ..
  10763.       DOUBLE PRECISION ERRCMP, ERRMAX
  10764.       INTEGER I, IND, ITASK, J, KPROG, LDA, N
  10765. C     .. Local Arrays ..
  10766.       DOUBLE PRECISION A(5,4), ATEMP(5,4), B(4), BTEMP(4), BXEX(4),
  10767.      +                 WORK(20)
  10768.       INTEGER IWORK(4)
  10769.       CHARACTER LIST(2)*4
  10770. C     .. External Functions ..
  10771.       DOUBLE PRECISION D1MACH
  10772.       EXTERNAL D1MACH
  10773. C     .. External Subroutines ..
  10774.       EXTERNAL DGEFS
  10775. C     .. Intrinsic Functions ..
  10776.       INTRINSIC ABS, MAX
  10777. C     .. Data statements ..
  10778.       DATA A /5.0D0,  1.0D0,  0.3D0, 2.1D0, 0.0D0,
  10779.      +       -1.0D0, -0.5D0,  1.0D0, 1.0D0, 0.0D0,
  10780.      +        4.5D0, -1.0D0, -1.7D0, 2.0D0, 0.0D0,
  10781.      +        0.5D0,  2.0D0,  0.6D0, 1.3D0, 0.0D0/
  10782.       DATA B /0.0D0, 3.5D0, 3.6D0, 2.4D0/
  10783.       DATA BXEX /0.10D+01, 0.10D+01, -0.10D+01, 0.10D+01/
  10784.       DATA LIST /'GEFS', 'GEIR'/
  10785. C***FIRST EXECUTABLE STATEMENT  DGEQC
  10786.       N = 4
  10787.       LDA = 5
  10788.       NERR = 0
  10789.       ERRCMP = D1MACH(4)**0.8D0
  10790.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  10791. C
  10792.       KPROG = 1
  10793. C
  10794. C     First test case - normal
  10795. C
  10796.       ITASK = 1
  10797.       DO 100 I=1,N
  10798.         BTEMP(I) = B(I)
  10799.   100 CONTINUE
  10800.       DO 120 J=1,N
  10801.         DO 110 I=1,N
  10802.           ATEMP(I,J) = A(I,J)
  10803.   110   CONTINUE
  10804.   120 CONTINUE
  10805.       CALL DGEFS (ATEMP, LDA, N, BTEMP, ITASK, IND, WORK, IWORK)
  10806.       IF (IND .LT. 0) THEN
  10807.         IF (KPRINT .GE. 2) WRITE (LUN, FMT=9020) LIST(KPROG), IND
  10808.         NERR = NERR + 1
  10809.       ENDIF
  10810. C
  10811. C     Calculate error for first test
  10812. C
  10813.       ERRMAX = 0.0D0
  10814. C
  10815.       DO 130 I=1,N
  10816.         ERRMAX = MAX(ERRMAX,ABS(BTEMP(I)-BXEX(I)))
  10817.   130 CONTINUE
  10818.       IF (ERRCMP .GT. ERRMAX) THEN
  10819.         IF (KPRINT .GE. 3) WRITE (LUN, FMT=9010) LIST(KPROG)
  10820.       ELSE
  10821.         IF (KPRINT .GE. 2) WRITE (LUN, FMT=9020) LIST(KPROG), ERRMAX
  10822.         NERR = NERR + 1
  10823.       ENDIF
  10824. C
  10825. C     Second test case - singular matrix
  10826. C
  10827.       ITASK = 1
  10828.       DO 140 I=1,N
  10829.         BTEMP(I) = B(I)
  10830.   140 CONTINUE
  10831.       DO 160 J=1,N
  10832.         DO 150 I=1,N
  10833.           ATEMP(I,J) = A(I,J)
  10834.   150   CONTINUE
  10835.   160 CONTINUE
  10836.       DO 170 J=1,N
  10837.         ATEMP(1,J) = 0.0D0
  10838.   170 CONTINUE
  10839.       CALL DGEFS (ATEMP, LDA, N, BTEMP, ITASK, IND,  WORK, IWORK)
  10840.       IF (IND .EQ. -4) THEN
  10841.         IF (KPRINT .GE. 3) WRITE (LUN, FMT=9030) LIST(KPROG)
  10842.       ELSE
  10843.         IF (KPRINT .GE. 2) WRITE (LUN, FMT=9040) LIST(KPROG), IND
  10844.         NERR = NERR + 1
  10845.       ENDIF
  10846. C
  10847.       IF (KPRINT.GE.3 .AND. NERR.EQ.0) WRITE (LUN,9050)
  10848.       IF (KPRINT.GE.2 .AND. NERR.NE.0) WRITE (LUN,9060)
  10849.       RETURN
  10850. C
  10851.  9000 FORMAT (//, 2X, 'DGEFS Quick Check' /)
  10852.  9010 FORMAT (/, 5X, 'D', A, ' Normal test PASSED')
  10853.  9020 FORMAT (/, 5X, 'D', A, ' Test FAILED, MAX ABS(ERROR) is', E13.5)
  10854.  9030 FORMAT (/, 5X, 'D', A, ' Singular test PASSED')
  10855.  9040 FORMAT (/, 5X, 'D', A, ' Singular test FAILED, IND=', I3)
  10856.  9050 FORMAT (/, 2X, 'DGEFS Quick Check PASSED' /)
  10857.  9060 FORMAT (/, 2X, 'SGEFS and SGEIR Quick Check FAILED' /)
  10858.       END
  10859. *DECK DGVEC
  10860.       SUBROUTINE DGVEC (X, G)
  10861. C***BEGIN PROLOGUE  DGVEC
  10862. C***PURPOSE  Subsidiary to
  10863. C***LIBRARY   SLATEC
  10864. C***AUTHOR  (UNKNOWN)
  10865. C***ROUTINES CALLED  (NONE)
  10866. C***REVISION HISTORY  (YYMMDD)
  10867. C   ??????  DATE WRITTEN
  10868. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  10869. C***END PROLOGUE  DGVEC
  10870.       DOUBLE PRECISION X,G
  10871.       DIMENSION G(*)
  10872. C***FIRST EXECUTABLE STATEMENT  DGVEC
  10873.       G(1) = 0.0D0
  10874.       G(2) = 1.0D0+COS(X)
  10875.       RETURN
  10876.       END
  10877. *DECK DJAC
  10878.       SUBROUTINE DJAC (T, U, PD, NROWPD, RPAR, IPAR)
  10879. C***BEGIN PROLOGUE  DJAC
  10880. C***SUBSIDIARY
  10881. C***PURPOSE  Evaluate Jacobian for DDEBDF quick check.
  10882. C***LIBRARY   SLATEC
  10883. C***TYPE      DOUBLE PRECISION (JAC-S, DJAC-D)
  10884. C***AUTHOR  Chow, Jeff (LANL)
  10885. C***ROUTINES CALLED  (NONE)
  10886. C***REVISION HISTORY  (YYMMDD)
  10887. C   810801  DATE WRITTEN
  10888. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  10889. C   900415  Minor clean-up of prologue and code and name changed from
  10890. C           DDJAC to DJAC.  (WRB)
  10891. C***END PROLOGUE  DJAC
  10892.       INTEGER IPAR, NROWPD
  10893.       DOUBLE PRECISION PD, R, R5, RPAR, RSQ, T, U, U1SQ, U2SQ, U1U2
  10894.       DIMENSION U(*), PD(NROWPD,*), RPAR(*), IPAR(*)
  10895. C***FIRST EXECUTABLE STATEMENT  DJAC
  10896.       U1SQ = U(1)*U(1)
  10897.       U2SQ = U(2)*U(2)
  10898.       U1U2 = U(1)*U(2)
  10899.       RSQ = U1SQ + U2SQ
  10900.       R = SQRT(RSQ)
  10901.       R5 = RSQ*RSQ*R
  10902.       PD(3,1) = (3.D0*U1SQ - RSQ)/R5
  10903.       PD(4,1) = 3.D0*U1U2/R5
  10904.       PD(3,2) = PD(4,1)
  10905.       PD(4,2) = (3.D0*U2SQ - RSQ)/R5
  10906.       PD(1,3) = 1.D0
  10907.       PD(2,4) = 1.D0
  10908.       RETURN
  10909.       END
  10910. *DECK DLSEIT
  10911.       SUBROUTINE DLSEIT (LUN, KPRINT, IPASS)
  10912. C***BEGIN PROLOGUE  DLSEIT
  10913. C***PURPOSE  Quick check for DLSEI.
  10914. C***LIBRARY   SLATEC
  10915. C***TYPE      DOUBLE PRECISION (LSEIQX-S, DLSEIT-D)
  10916. C***KEYWORDS  QUICK CHECK
  10917. C***AUTHOR  Hanson, R. J., (SNLA)
  10918. C           Haskell, Karen, (SNLA)
  10919. C***DESCRIPTION
  10920. C
  10921. C     THE SAMPLE PROBLEM SOLVED IS FROM A PAPER BY J. STOER, IN
  10922. C     SIAM JOURNAL OF NUM. ANAL., JUNE 1971.
  10923. C
  10924. C***ROUTINES CALLED  D1MACH, DAXPY, DCOPY, DDOT, DLSEI, DNRM2, DVOUT
  10925. C***REVISION HISTORY  (YYMMDD)
  10926. C   790216  DATE WRITTEN
  10927. C   890618  REVISION DATE from Version 3.2
  10928. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  10929. C   901010  Restructured using IF-THEN-ELSE-ENDIF, modified tolerances
  10930. C           to use R1MACH(4) rather than R1MACH(3) and cleaned up
  10931. C           FORMATs.  (RWC)
  10932. C***END PROLOGUE  DLSEIT
  10933.       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
  10934.       DIMENSION D(11,6), IP(17), WORK(105), F(6), PRGOPT(4)
  10935.       DIMENSION X(5), H(5), SOL(5), A(6,5), G(5,5), ERR(5)
  10936. C
  10937. C     DEFINE THE DATA ARRAYS FOR THE EXAMPLE.  THE ARRAY A( )
  10938. C     CONTAINS THE LEAST SQUARES EQUATIONS.  (THERE ARE NO EQUALITY
  10939. C     CONSTRAINTS IN THIS EXAMPLE).
  10940. C
  10941.       DATA A(1,1),A(1,2),A(1,3),A(1,4),A(1,5)
  10942.      *     /-74.0D0,80.0D0,18.0D0,-11.0D0,-4.0D0/
  10943.       DATA A(2,1),A(2,2),A(2,3),A(2,4),A(2,5)
  10944.      *     /14.0D0,-69.0D0,21.0D0,28.0D0,0.0D0/
  10945.       DATA A(3,1),A(3,2),A(3,3),A(3,4),A(3,5)
  10946.      *     /66.0D0,-72.0D0,-5.0D0,7.0D0,1.0D0/
  10947.       DATA A(4,1),A(4,2),A(4,3),A(4,4),A(4,5)
  10948.      *     /-12.0D0,66.0D0,-30.0D0,-23.0D0,3.0D0/
  10949.       DATA A(5,1),A(5,2),A(5,3),A(5,4),A(5,5)
  10950.      *     /3.0D0,8.0D0,-7.0D0,-4.0D0,1.0D0/
  10951.       DATA A(6,1),A(6,2),A(6,3),A(6,4),A(6,5)
  10952.      *     /4.0D0,-12.0D0,4.0D0,4.0D0,0.0D0/
  10953. C
  10954. C     THE ARRAY G( ) CONTAINS THE INEQUALITY CONSTRAINT EQUATIONS,
  10955. C     WRITTEN IN THE SENSE
  10956. C     (ROW VECTOR)*(SOLUTION VECTOR) .GE. (GIVEN VALUE).
  10957. C
  10958.       DATA G(1,1),G(1,2),G(1,3),G(1,4),G(1,5)
  10959.      *     /-1.0D0,-1.0D0,-1.0D0,-1.0D0,-1.0D0/
  10960.       DATA G(2,1),G(2,2),G(2,3),G(2,4),G(2,5)
  10961.      *     /10.0D0,10.0D0,-3.0D0,5.0D0,4.0D0/
  10962.       DATA G(3,1),G(3,2),G(3,3),G(3,4),G(3,5)
  10963.      *     /-8.0D0,1.0D0,-2.0D0,-5.0D0,3.0D0/
  10964.       DATA G(4,1),G(4,2),G(4,3),G(4,4),G(4,5)
  10965.      *     /8.0D0,-1.0D0,2.0D0,5.0D0,-3.0D0/
  10966.       DATA G(5,1),G(5,2),G(5,3),G(5,4),G(5,5)
  10967.      *     /-4.0D0,-2.0D0,3.0D0,-5.0D0,1.0D0/
  10968. C
  10969. C     DEFINE THE LEAST SQUARES RIGHT-SIDE VECTOR.
  10970. C
  10971.       DATA F(1),F(2),F(3),F(4),F(5),F(6)
  10972.      *     /-5.0D0,-9.0D0,708.0D0,4165.0D0,-13266.0D0,8409.0D0/
  10973. C
  10974. C     DEFINE THE INEQUALITY CONSTRAINT RIGHT-SIDE VECTOR.
  10975. C
  10976.       DATA H(1),H(2),H(3),H(4),H(5)
  10977.      *     /-5.0D0,20.0D0,-40.0D0,11.0D0,-30.0D0/
  10978. C
  10979. C     DEFINE THE VECTOR THAT IS THE KNOWN SOLUTION.
  10980. C
  10981.       DATA SOL(1),SOL(2),SOL(3),SOL(4),SOL(5)
  10982.      *     /1.0D0,2.0D0,-1.0D0,3.0D0,-4.0D0/
  10983. C***FIRST EXECUTABLE STATEMENT  DLSEIT
  10984. C
  10985. C     DEFINE THE MATRIX DIMENSIONS, NUMBER OF LEAST SQUARES EQUATIONS,
  10986. C     NUMBER OF EQUALITY CONSTRAINTS, TOTAL NUMBER OF
  10987. C     EQUATIONS, AND NUMBER OF VARIABLES.  SET ME=0 TO INDICATE
  10988. C     THERE ARE NO EQUALITY CONSTRAINTS.
  10989. C
  10990.       MDD = 11
  10991.       MDA = 6
  10992.       MDG = 5
  10993.       MA = 6
  10994.       MG = 5
  10995.       M = MA + MG
  10996.       N = 5
  10997.       ME = 0
  10998. C
  10999.       NP1 = N + 1
  11000.       MEP1 = ME + 1
  11001.       MEAP1 = ME + MA + 1
  11002. C
  11003. C     COPY THE PROBLEM MATRICES
  11004. C
  11005.       DO 10 I = 1, N
  11006. C
  11007. C        COPY THE I-TH COL OF THE INEQUALITY CONSTRAINT MATRIX INTO
  11008. C        THE WORK ARRAY.
  11009. C
  11010.          CALL DCOPY(MG, G(1,I), 1, D(MEAP1,I), 1)
  11011. C
  11012. C        COPY THE I-TH COL OF THE LEAST SQUARES MATRIX INTO THE WORK
  11013. C        ARRAY.
  11014. C
  11015.          CALL DCOPY(MA, A(1,I), 1, D(MEP1,I), 1)
  11016.    10 CONTINUE
  11017. C
  11018. C     COPY THE RIGHT-SIDE VECTORS INTO THE WORK ARRAY IN COMPATIBLE
  11019. C     ORDER.
  11020. C
  11021.       CALL DCOPY(MG, H, 1, D(MEAP1,NP1), 1)
  11022.       CALL DCOPY(MA, F, 1, D(MEP1,NP1),  1)
  11023. C
  11024.       IF (KPRINT.GE.2) WRITE (LUN,99999)
  11025. C
  11026. C     USE DEFAULT PROGRAM OPTIONS IN DLSEI, AND SET MATRIX-VECTOR
  11027. C     PRINTING ACCURACY PARAMETERS.
  11028. C
  11029.       PRGOPT(1) = 1
  11030.       IDIGIT = -4
  11031.       JDIGIT = -11
  11032. C
  11033. C     COMPUTE RESIDUAL NORM OF KNOWN LEAST SQUARES SOLN.
  11034. C     (TO BE USED TO CHECK COMPUTED RESIDUAL NORM = RNORML.)
  11035. C
  11036.       DO 20 I = 1, MA
  11037.          WORK(I) = DDOT(N,D(I,1),MDD,SOL,1) - F(I)
  11038.    20 CONTINUE
  11039.       RESNRM = DNRM2(MA,WORK,1)
  11040. C
  11041. C     CALL DLSEI TO GET SOLN IN X(*), LEAST SQUARES RESIDUAL IN RNORML.
  11042. C
  11043.       CALL DLSEI(D, MDD, ME, MA, MG, N, PRGOPT, X, RNORME, RNORML, MODE,
  11044.      *   WORK, IP)
  11045. C
  11046. C     COMPUTE REL. ERROR IN PROBLEM VARIABLE SOLN. AND RESIDUAL
  11047. C     NORM COMPUTATION.
  11048. C
  11049.       TNORM = DNRM2(N,SOL,1)
  11050.       CALL DCOPY(N, SOL, 1, ERR, 1)
  11051.       CALL DAXPY(N, -1.0D0, X, 1, ERR, 1)
  11052.       CNORM = DNRM2(N, ERR, 1)
  11053.       RELERR = CNORM/TNORM
  11054.       RELNRM = (RESNRM-RNORML)/RESNRM
  11055. C
  11056.       IF (RELERR .LE. 70.0D0*SQRT(D1MACH(4)) .AND.
  11057.      *    RELNRM .LT.  5.0D0*D1MACH(4)) THEN
  11058.          IPASS = 1
  11059.          IF (KPRINT.GE.3) WRITE (LUN,99998)
  11060.       ELSE
  11061.          IPASS = 0
  11062.          IF (KPRINT.GE.2) WRITE (LUN,99997) RELERR, RELNRM
  11063.       ENDIF
  11064. C
  11065. C        PRINT OUT KNOWN SOLUTION AND COMPUTED SOLUTION
  11066. C
  11067.       IF (KPRINT.GE.3) THEN
  11068.          CALL DVOUT(N, ERR,
  11069.      *      '('' RESIDUALS FROM KNOWN LEAST SQUARES SOLN'')', IDIGIT)
  11070.          CALL DVOUT(N, X, '(/'' SOLN COMPUTED BY DLSEI.'')', JDIGIT)
  11071.       ENDIF
  11072. C
  11073.       IF (KPRINT.GE.2) THEN
  11074.          IF (.NOT.(KPRINT.EQ.2 .AND. IPASS.NE.0)) THEN
  11075. C
  11076. C           PRINT OUT THE KNOWN AND COMPUTED RESIDUAL NORMS
  11077. C
  11078.             CALL DVOUT(1, RESNRM,
  11079.      *         '(/'' RESIDUAL NORM OF KNOWN LEAST SQUARES SOLN'')',
  11080.      *         JDIGIT)
  11081.             CALL DVOUT(1, RNORML, '(/'' RES NORM COMPUTED BY DLSEI.'')',
  11082.      *         JDIGIT)
  11083. C
  11084. C           PRINT OUT THE COMPUTED SOLUTION RELATIVE ERROR
  11085. C
  11086.             CALL DVOUT(1, RELERR, '(/'' COMPUTED SOLN REL. ERROR'')',
  11087.      *         IDIGIT)
  11088. C
  11089. C           PRINT OUT THE COMPUTED RELATIVE ERROR IN RESIDUAL NORM
  11090. C
  11091.             CALL DVOUT(1, RELNRM,
  11092.      *         '(/'' COMPUTED REL. ERROR IN RESIDUAL NORM'')', IDIGIT)
  11093.          ENDIF
  11094.       ENDIF
  11095. C
  11096. C     CHECK CALLS TO ERROR PROCESSOR
  11097. C
  11098.       IF (KPRINT.GE.2) THEN
  11099.          WRITE (LUN,99996)
  11100.          CALL DLSEI(D, 0, ME, MA, MG, N, PRGOPT, X, RNORME, RNORML,
  11101.      *      MODE, WORK, IP)
  11102.          PRGOPT(1) = -1
  11103.          CALL DLSEI(D, MDD, ME, MA, MG, N, PRGOPT, X, RNORME, RNORML,
  11104.      *      MODE, WORK, IP)
  11105.       ENDIF
  11106. C
  11107.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,99995)
  11108.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,99994)
  11109.       RETURN
  11110. C
  11111. 99994 FORMAT (/' ****************DLSEI FAILED SOME TESTS**************')
  11112. 99995 FORMAT (/' ****************DLSEI PASSED ALL TESTS***************')
  11113. 99996 FORMAT (/ ' 2 ERROR MESSAGES EXPECTED')
  11114. 99997 FORMAT (/' DLSEI FAILED TEST'/' RELERR = ',1P,D20.6/' RELNRM = ',
  11115.      *        D20.6)
  11116. 99998 FORMAT (/' DLSEI PASSED TEST')
  11117. 99999 FORMAT ('1TEST OF SUBROUTINE DLSEI')
  11118.       END
  11119. *DECK DNLS1Q
  11120.       SUBROUTINE DNLS1Q (LUN, KPRINT, IPASS)
  11121. C***BEGIN PROLOGUE  DNLS1Q
  11122. C***PURPOSE  Quick check for DNLS1E, DNLS1, and DCOV.
  11123. C***LIBRARY   SLATEC
  11124. C***KEYWORDS  QUICK CHECK
  11125. C***AUTHOR  (UNKNOWN)
  11126. C***DESCRIPTION
  11127. C
  11128. C     THIS SUBROUTINE PERFORMS A QUICK CHECK ON THE SUBROUTINES DNLS1E
  11129. C     (AND DNLS1) AND DCOV.
  11130. C
  11131. C***ROUTINES CALLED  D1MACH, DCOV, DENORM, DFCN1, DFCN2, DFCN3, DFDJC3,
  11132. C                    DNLS1E, PASS
  11133. C***REVISION HISTORY  (YYMMDD)
  11134. C   ??????  DATE WRITTEN
  11135. C   890911  Removed unnecessary intrinsics.  (WRB)
  11136. C   890911  REVISION DATE from Version 3.2
  11137. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  11138. C***END PROLOGUE  DNLS1Q
  11139.       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
  11140.       INTEGER ICNT, ITEST(8)
  11141.       DIMENSION X(2),FVEC(10),FJAC(10,2),FJROW(2),WA(40),IW(2),FJTJ(3)
  11142.       EXTERNAL DFCN1,DFCN2,DFCN3
  11143. C***FIRST EXECUTABLE STATEMENT  DNLS1Q
  11144.       INFOS=1
  11145.       FNORMS=0.11151779D+02
  11146.       M=10
  11147.       N=2
  11148.       LWA=40
  11149.       LDFJAC=10
  11150.       NPRINT=-1
  11151.       IFLAG=1
  11152.       ZERO=0.D0
  11153.       ONE=1.D0
  11154.       TOL=MAX(SQRT(40.D0*D1MACH(4)),1.D-12)
  11155.       TOL2=SQRT(TOL)
  11156.       IF (KPRINT.GE.2) WRITE(LUN,1000)
  11157. C
  11158. C     OPTION=2, THE FULL JACOBIAN IS STORED AND THE USER PROVIDES THE
  11159. C     JACOBIAN.
  11160.       IOPT=2
  11161.       X(1)=3.D-1
  11162.       X(2)=4.D-1
  11163.       CALL DNLS1E(DFCN2,IOPT,M,N,X,FVEC,TOL,NPRINT,INFO,
  11164.      * IW,WA,LWA)
  11165.       ICNT=1
  11166.       FNORM=DENORM(M,FVEC)
  11167.       ITEST(ICNT)=0
  11168.       IF ((INFO.EQ.INFOS) .AND. (ABS(FNORM-FNORMS)/FNORMS.LE.TOL2))
  11169.      * ITEST(ICNT)=1
  11170.       IF (KPRINT.EQ.0) GO TO 15
  11171.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  11172.      * WRITE(LUN,1010) INFOS,FNORMS,INFO,FNORM
  11173.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11174.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  11175.    15 CONTINUE
  11176. C
  11177. C     FORM JAC-TRANSPOSE*JAC
  11178.       SIGMA=FNORM*FNORM/(M-N)
  11179.       IFLAG = 2
  11180.       CALL DFCN2(IFLAG,M,N,X,FVEC,FJAC,LDFJAC)
  11181.       DO 10 I=1,3
  11182.    10 FJTJ(I)=ZERO
  11183.       DO 11 I=1,M
  11184.       FJTJ(1)=FJTJ(1)+FJAC(I,1)**2
  11185.       FJTJ(2)=FJTJ(2)+FJAC(I,1)*FJAC(I,2)
  11186.       FJTJ(3)=FJTJ(3)+FJAC(I,2)**2
  11187.    11 CONTINUE
  11188. C
  11189. C     CALCULATE COVARIANCE MATRIX
  11190.       CALL DCOV(DFCN2,IOPT,M,N,X,FVEC,FJAC,LDFJAC,INFO,
  11191.      *WA(1),WA(N+1),WA(2*N+1),WA(3*N+1))
  11192. C
  11193. C     FORM JAC-TRANSPOSE*JAC * COVARIANCE MATRIX
  11194. C     (SHOULD = SIGMA*I)
  11195.       TEMP1=(FJTJ(1)*FJAC(1,1)+FJTJ(2)*FJAC(1,2))/SIGMA
  11196.       TEMP2=(FJTJ(1)*FJAC(1,2)+FJTJ(2)*FJAC(2,2))/SIGMA
  11197.       TEMP3=(FJTJ(2)*FJAC(1,2)+FJTJ(3)*FJAC(2,2))/SIGMA
  11198.       ICNT=5
  11199.       ITEST(ICNT)=0
  11200.       IF (INFO.EQ.INFOS .AND. ABS(TEMP1-ONE).LT.TOL2 .AND.
  11201.      * ABS(TEMP2).LT.TOL2 .AND. ABS(TEMP3-ONE).LT.TOL2)
  11202.      *ITEST(ICNT)=1
  11203.       IF (KPRINT.EQ.0) GO TO 20
  11204.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  11205.      * WRITE(LUN,1020) INFOS,INFO,TEMP1,TEMP2,TEMP3
  11206.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11207.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  11208. C
  11209. C     OPTION=1, THE FULL JACOBIAN IS STORED AND THE CODE APPROXIMATES
  11210. C     THE JACOBIAN.
  11211. 20    IOPT=1
  11212.       X(1)=3.D-1
  11213.       X(2)=4.D-1
  11214.       CALL DNLS1E(DFCN1,IOPT,M,N,X,FVEC,TOL,NPRINT,INFO,
  11215.      * IW,WA,LWA)
  11216.       ICNT=2
  11217.       FNORM=DENORM(M,FVEC)
  11218.       ITEST(ICNT)=0
  11219.       IF ((INFO.EQ.INFOS).AND.(ABS(FNORM-FNORMS)/FNORMS.LE.TOL2))
  11220.      * ITEST(ICNT)=1
  11221.       IF (KPRINT.EQ.0) GO TO 25
  11222.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  11223.      * WRITE(LUN,1010) INFOS,FNORMS,INFO,FNORM
  11224.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11225.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  11226.    25 CONTINUE
  11227. C
  11228. C     FORM JAC-TRANSPOSE*JAC
  11229.       SIGMA=FNORM*FNORM/(M-N)
  11230.       IFLAG = 1
  11231.       CALL DFDJC3(DFCN1,M,N,X,FVEC,FJAC,LDFJAC,IFLAG,ZERO,WA)
  11232.       DO 26 I=1,3
  11233.    26 FJTJ(I)=ZERO
  11234.       DO 27 I=1,M
  11235.       FJTJ(1)=FJTJ(1)+FJAC(I,1)**2
  11236.       FJTJ(2)=FJTJ(2)+FJAC(I,1)*FJAC(I,2)
  11237.       FJTJ(3)=FJTJ(3)+FJAC(I,2)**2
  11238.    27 CONTINUE
  11239. C
  11240. C     CALCULATE COVARIANCE MATRIX
  11241.       CALL DCOV(DFCN1,IOPT,M,N,X,FVEC,FJAC,LDFJAC,INFO,
  11242.      *WA(1),WA(N+1),WA(2*N+1),WA(3*N+1))
  11243. C
  11244. C     FORM JAC-TRANSPOSE*JAC * COVARIANCE MATRIX
  11245. C     (SHOULD = SIGMA*I)
  11246.       TEMP1=(FJTJ(1)*FJAC(1,1)+FJTJ(2)*FJAC(1,2))/SIGMA
  11247.       TEMP2=(FJTJ(1)*FJAC(1,2)+FJTJ(2)*FJAC(2,2))/SIGMA
  11248.       TEMP3=(FJTJ(2)*FJAC(1,2)+FJTJ(3)*FJAC(2,2))/SIGMA
  11249.       ICNT=6
  11250.       ITEST(ICNT)=0
  11251.       IF (INFO.EQ.INFOS .AND. ABS(TEMP1-ONE).LT.TOL2 .AND.
  11252.      * ABS(TEMP2).LT.TOL2 .AND. ABS(TEMP3-ONE).LT.TOL2)
  11253.      *ITEST(ICNT)=1
  11254.       IF (KPRINT.EQ.0) GO TO 30
  11255.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  11256.      * WRITE(LUN,1020) INFOS,INFO,TEMP1,TEMP2,TEMP3
  11257.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11258.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  11259. C
  11260. C     OPTION=3, THE FULL JACOBIAN IS NOT STORED ONLY THE PRODUCT OF THE
  11261. C     JACOBIAN TRANSPOSE AND JACOBIAN IS STORED. THE USER PROVIDES THE
  11262. C     THE JACOBIAN ONE ROW AT A TIME.
  11263. 30    IOPT=3
  11264.       X(1)=3.D-1
  11265.       X(2)=4.D-1
  11266.       CALL DNLS1E(DFCN3,IOPT,M,N,X,FVEC,TOL,NPRINT,INFO,
  11267.      * IW,WA,LWA)
  11268.       ICNT=3
  11269.       FNORM=DENORM(M,FVEC)
  11270.       ITEST(ICNT)=0
  11271.       IF ((INFO.EQ.INFOS).AND.(ABS(FNORM-FNORMS)/FNORMS.LE.TOL2))
  11272.      * ITEST(ICNT)=1
  11273.       IF (KPRINT.EQ.0) GO TO 35
  11274.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  11275.      * WRITE(LUN,1010) INFOS,FNORMS,INFO,FNORM
  11276.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11277.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  11278.    35 CONTINUE
  11279. C
  11280. C     FORM JAC-TRANSPOSE*JAC
  11281.       SIGMA=FNORM*FNORM/(M-N)
  11282.       DO 36 I=1,3
  11283.    36 FJTJ(I)=ZERO
  11284.       IFLAG=3
  11285.       DO 37 I=1,M
  11286.       CALL DFCN3(IFLAG,M,N,X,FVEC,FJROW,I)
  11287.       FJTJ(1)=FJTJ(1)+FJROW(1)**2
  11288.       FJTJ(2)=FJTJ(2)+FJROW(1)*FJROW(2)
  11289.       FJTJ(3)=FJTJ(3)+FJROW(2)**2
  11290.    37 CONTINUE
  11291. C
  11292. C     CALCULATE COVARIANCE MATRIX
  11293.       CALL DCOV(DFCN3,IOPT,M,N,X,FVEC,FJAC,LDFJAC,INFO,
  11294.      *WA(1),WA(N+1),WA(2*N+1),WA(3*N+1))
  11295. C
  11296. C     FORM JAC-TRANSPOSE*JAC * COVARIANCE MATRIX
  11297. C     (SHOULD = SIGMA*I)
  11298.       TEMP1=(FJTJ(1)*FJAC(1,1)+FJTJ(2)*FJAC(1,2))/SIGMA
  11299.       TEMP2=(FJTJ(1)*FJAC(1,2)+FJTJ(2)*FJAC(2,2))/SIGMA
  11300.       TEMP3=(FJTJ(2)*FJAC(1,2)+FJTJ(3)*FJAC(2,2))/SIGMA
  11301.       ICNT=7
  11302.       ITEST(ICNT)=0
  11303.       IF (INFO.EQ.INFOS .AND. ABS(TEMP1-ONE).LT.TOL2 .AND.
  11304.      * ABS(TEMP2).LT.TOL2 .AND. ABS(TEMP3-ONE).LT.TOL2)
  11305.      *ITEST(ICNT)=1
  11306.       IF (KPRINT.EQ.0) GO TO 40
  11307.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  11308.      * WRITE(LUN,1020) INFOS,INFO,TEMP1,TEMP2,TEMP3
  11309.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11310.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  11311. C
  11312. C     TEST IMPROPER INPUT PARAMETERS
  11313. 40    LWA=35
  11314.       IOPT=2
  11315.       X(1)=3.D-1
  11316.       X(2)=4.D-1
  11317.       CALL DNLS1E(DFCN2,IOPT,M,N,X,FVEC,TOL,NPRINT,INFO,
  11318.      * IW,WA,LWA)
  11319.       ICNT=4
  11320.       ITEST(ICNT)=0
  11321.       IF (INFO.EQ.0) ITEST(ICNT)=1
  11322.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11323.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  11324.       ITEST(8)=1
  11325.       IF(KPRINT.LT.3) GO TO 999
  11326.       M=0
  11327.       CALL DCOV(DFCN2,IOPT,M,N,X,FVEC,FJAC,LDFJAC,INFO,
  11328.      *WA(1),WA(N+1),WA(2*N+1),WA(3*N+1))
  11329.       ICNT=8
  11330.       ITEST(ICNT)=0
  11331.       IF (INFO.EQ.0) ITEST(ICNT)=1
  11332.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11333.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  11334. C
  11335. C     SET IPASS
  11336. 999   IPASS=ITEST(1)*ITEST(2)*ITEST(3)*ITEST(4)
  11337.       IPASS=IPASS*ITEST(5)*ITEST(6)*ITEST(7)*ITEST(8)
  11338.       RETURN
  11339. 1000  FORMAT(1H1,19H DNLS1E QUICK CHECK/)
  11340. 1010  FORMAT(41H EXPECTED VALUE OF INFO AND RESIDUAL NORM,I5,D20.9/
  11341.      *       41H RETURNED VALUE OF INFO AND RESIDUAL NORM,I5,D20.9/)
  11342.  1020 FORMAT(36H EXPECTED AND RETURNED VALUE OF INFO,I5,10X,I5/
  11343.      *56H RETURNED PRODUCT OF (J-TRANS*J)*COVARIANCE MATRIX/SIGMA/
  11344.      *41H (SHOULD = THE IDENTITY -- 1.0, 0.0, 1.0)/3D20.9/)
  11345.       END
  11346. *DECK DNSQQK
  11347.       SUBROUTINE DNSQQK (LUN, KPRINT, IPASS)
  11348. C***BEGIN PROLOGUE  DNSQQK
  11349. C***PURPOSE  Quick check for DNSQE and DNSQ.
  11350. C***LIBRARY   SLATEC
  11351. C***TYPE      DOUBLE PRECISION (SNSQQK-S, DNSQQK-D)
  11352. C***KEYWORDS  QUICK CHECK
  11353. C***AUTHOR  (UNKNOWN)
  11354. C***DESCRIPTION
  11355. C
  11356. C   This subroutine performs a quick check on the subroutine DNSQE
  11357. C   (and DNSQ).
  11358. C
  11359. C***ROUTINES CALLED  D1MACH, DENORM, DNSQE, DQFCN2, DQJAC2, PASS
  11360. C***REVISION HISTORY  (YYMMDD)
  11361. C   ??????  DATE WRITTEN
  11362. C   890618  REVISION DATE from Version 3.2
  11363. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  11364. C   920310  Code cleaned up and TYPE section added.  (RWC, WRB)
  11365. C***END PROLOGUE  DNSQQK
  11366. C     .. Scalar Arguments ..
  11367.       INTEGER IPASS, KPRINT, LUN
  11368. C     .. Local Scalars ..
  11369.       DOUBLE PRECISION FNORM, FNORMS, TOL
  11370.       INTEGER ICNT, INFO, INFOS, IOPT, LWA, N, NPRINT
  11371. C     .. Local Arrays ..
  11372.       DOUBLE PRECISION FVEC(2), WA(19), X(2)
  11373.       INTEGER ITEST(3)
  11374. C     .. External Functions ..
  11375.       DOUBLE PRECISION D1MACH, DENORM
  11376.       EXTERNAL D1MACH, DENORM
  11377. C     .. External Subroutines ..
  11378.       EXTERNAL DNSQE, DQFCN2, DQJAC2, PASS
  11379. C     .. Intrinsic Functions ..
  11380.       INTRINSIC SQRT
  11381. C***FIRST EXECUTABLE STATEMENT  DNSQQK
  11382.       INFOS = 1
  11383.       FNORMS = 0.0D0
  11384.       N = 2
  11385.       LWA = 19
  11386.       NPRINT = -1
  11387.       TOL = SQRT(D1MACH(4))
  11388.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  11389. C
  11390. C     Option 1, the user provides the Jacobian.
  11391. C
  11392.       IOPT = 1
  11393.       X(1) = -1.2D0
  11394.       X(2) = 1.0D0
  11395.       CALL DNSQE (DQFCN2,DQJAC2,IOPT,N,X,FVEC,TOL,NPRINT,INFO,WA,LWA)
  11396.       ICNT = 1
  11397.       FNORM = DENORM(N,FVEC)
  11398.       ITEST(ICNT) = 0
  11399.       IF ((INFO.EQ.INFOS) .AND. (FNORM-FNORMS.LE.TOL)) ITEST(ICNT) = 1
  11400. C
  11401.       IF (KPRINT .NE. 0) THEN
  11402.          IF ((KPRINT.GE.2 .AND. ITEST(ICNT).NE.1) .OR. KPRINT.GE.3)
  11403.      +       WRITE (LUN,9010) INFOS,FNORMS,INFO,FNORM
  11404.          IF ((KPRINT.GE.2) .OR. (KPRINT.EQ.1 .AND. ITEST(ICNT).NE.1))
  11405.      +       CALL PASS (LUN, ICNT, ITEST(ICNT))
  11406.       ENDIF
  11407. C
  11408. C     Option 2, the code approximates the Jacobian.
  11409. C
  11410.       IOPT = 2
  11411.       X(1) = -1.2D0
  11412.       X(2) = 1.0D0
  11413.       CALL DNSQE (DQFCN2,DQJAC2,IOPT,N,X,FVEC,TOL,NPRINT,INFO,WA,LWA)
  11414.       ICNT = 2
  11415.       FNORM = DENORM(N,FVEC)
  11416.       ITEST(ICNT) = 0
  11417.       IF ((INFO.EQ.INFOS) .AND. (FNORM-FNORMS.LE.TOL)) ITEST(ICNT) = 1
  11418. C
  11419.       IF (KPRINT .NE. 0) THEN
  11420.          IF (KPRINT.GE.3 .OR. (KPRINT.GE.2.AND.ITEST(ICNT).NE.1))
  11421.      +       WRITE (LUN,9010) INFOS, FNORMS, INFO, FNORM
  11422.          IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11423.      +       CALL PASS (LUN, ICNT, ITEST(ICNT))
  11424.       ENDIF
  11425. C
  11426. C     Test improper input parameters.
  11427. C
  11428.       LWA = 15
  11429.       IOPT = 1
  11430.       X(1) = -1.2D0
  11431.       X(2) = 1.0D0
  11432.       CALL DNSQE (DQFCN2,DQJAC2,IOPT,N,X,FVEC,TOL,NPRINT,INFO,WA,LWA)
  11433.       ICNT = 3
  11434.       ITEST(ICNT) = 0
  11435.       IF (INFO .EQ. 0) ITEST(ICNT) = 1
  11436.       IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  11437.      +    CALL PASS (LUN, ICNT, ITEST(ICNT))
  11438. C
  11439. C     Set IPASS.
  11440. C
  11441.       IPASS = ITEST(1)*ITEST(2)*ITEST(3)
  11442.       IF (KPRINT.GE.1 .AND. IPASS.NE.1) WRITE (LUN,9020)
  11443.       IF (KPRINT.GE.2 .AND. IPASS.EQ.1) WRITE (LUN,9030)
  11444.       RETURN
  11445.  9000 FORMAT ('1' / '  DNSQE QUICK CHECK'/)
  11446.  9010 FORMAT (' EXPECTED VALUE OF INFO AND RESIDUAL NORM', I5, D20.5 /
  11447.      +        ' RETURNED VALUE OF INFO AND RESIDUAL NORM', I5, D20.5 /)
  11448.  9020 FORMAT (/' **********WARNING -- DNSQE/DNSQ FAILED SOME TESTS****',
  11449.      +        '******')
  11450.  9030 FORMAT (/' ----------DNSQE/DNSQ PASSED ALL TESTS----------')
  11451.       END
  11452. *DECK DPCHQ1
  11453.       SUBROUTINE DPCHQ1 (LUN, KPRINT, IPASS)
  11454. C***BEGIN PROLOGUE  DPCHQ1
  11455. C***PURPOSE  Test the PCHIP evaluators DCHFDV, DCHFEV, DPCHFD, DPCHFE.
  11456. C***LIBRARY   SLATEC (PCHIP)
  11457. C***TYPE      DOUBLE PRECISION (PCHQK1-S, DPCHQ1-D)
  11458. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  11459. C***AUTHOR  Fritsch, F. N., (LLNL)
  11460. C***DESCRIPTION
  11461. C
  11462. C             DPCHIP QUICK CHECK NUMBER 1
  11463. C
  11464. C     TESTS THE EVALUATORS:  DCHFDV, DCHFEV, DPCHFD, DPCHFE.
  11465. C *Usage:
  11466. C
  11467. C        INTEGER  LUN, KPRINT, IPASS
  11468. C
  11469. C        CALL DPCHQ1 (LUN, KPRINT, IPASS)
  11470. C
  11471. C *Arguments:
  11472. C
  11473. C     LUN   :IN  is the unit number to which output is to be written.
  11474. C
  11475. C     KPRINT:IN  controls the amount of output, as specified in the
  11476. C                SLATEC Guidelines.
  11477. C
  11478. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  11479. C                IPASS=0 indicates one or more tests failed.
  11480. C
  11481. C *Description:
  11482. C
  11483. C   This routine carries out three tests of the PCH evaluators:
  11484. C     DEVCHK tests the single-cubic evaluators.
  11485. C     DEVPCK tests the full PCH evaluators.
  11486. C     DEVERK exercises the error returns in all evaluators.
  11487. C
  11488. C***ROUTINES CALLED  DEVCHK, DEVERK, DEVPCK
  11489. C***REVISION HISTORY  (YYMMDD)
  11490. C   820601  DATE WRITTEN
  11491. C   890306  Changed IPASS to the more accurate name IFAIL.  (FNF)
  11492. C   890307  Removed conditional on call to DEVERK.
  11493. C   890706  Cosmetic changes to prologue.  (WRB)
  11494. C   891004  Correction in prologue.  (WRB)
  11495. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  11496. C   900309  Added DEVERK to list of routines called.  (FNF)
  11497. C   900314  Improved some output formats.
  11498. C   900315  Revised prologue and improved some output formats.  (FNF)
  11499. C   900316  Additional minor cosmetic changes.  (FNF)
  11500. C   900321  Removed IFAIL from call sequence for SLATEC standards and
  11501. C           made miscellaneous cosmetic changes.  (FNF)
  11502. C***END PROLOGUE  DPCHQ1
  11503. C
  11504. C  Declare arguments.
  11505. C
  11506.       INTEGER  LUN, KPRINT, IPASS
  11507. C
  11508. C  DECLARE LOCAL VARIABLES.
  11509. C
  11510.       INTEGER  I1, I2, I3, I4, I5, I6, I7, I8, I9, IFAIL, NPTS
  11511.       DOUBLE PRECISION  WORK (4000)
  11512.       LOGICAL  FAIL
  11513. C
  11514. C***FIRST EXECUTABLE STATEMENT  DPCHQ1
  11515.       IF (KPRINT .GE. 2)  WRITE (LUN, 1000)
  11516. C
  11517. C  TEST DCHFDV AND DCHFEV.
  11518. C
  11519.       IFAIL = 0
  11520.       NPTS = 1000
  11521.       I1 = 1  + NPTS
  11522.       I2 = I1 + NPTS
  11523.       I3 = I2 + NPTS
  11524.       CALL DEVCHK (LUN, KPRINT, NPTS, WORK(1), WORK(I1), WORK(I2),
  11525.      *                                          WORK(I3), FAIL)
  11526.       IF (FAIL)  IFAIL = IFAIL + 1
  11527. C
  11528. C  TEST DPCHFD AND DPCHFE.
  11529. C
  11530.       I1 = 1  +  10
  11531.       I2 = I1 +  10
  11532.       I3 = I2 + 100
  11533.       I4 = I3 + 100
  11534.       I5 = I4 + 100
  11535.       I6 = I5 +  51
  11536.       I7 = I6 +  51
  11537.       I8 = I7 +  51
  11538.       I9 = I8 +  51
  11539.       CALL DEVPCK (LUN, KPRINT, WORK(1), WORK(I1), WORK(I2), WORK(I3),
  11540.      *             WORK(I4), WORK(I5), WORK(I6), WORK(I7), WORK(I8),
  11541.      *             WORK(I9), FAIL)
  11542.       IF (FAIL)  IFAIL = IFAIL + 2
  11543. C
  11544. C  TEST ERROR RETURNS.
  11545. C
  11546.       CALL DEVERK (LUN, KPRINT, FAIL)
  11547.       IF (FAIL)  IFAIL = IFAIL + 4
  11548. C
  11549. C  PRINT SUMMARY AND TERMINATE.
  11550. C     At this point, IFAIL has the following value:
  11551. C        IFAIL = 0  IF ALL TESTS PASSED.
  11552. C        IFAIL BETWEEN 1 AND 7 IS THE SUM OF:
  11553. C           IFAIL=1  IF SINGLE CUBIC  TEST FAILED. (SEE DEVCHK OUTPUT.)
  11554. C           IFAIL=2  IF DPCHFD/DPCHFE TEST FAILED. (SEE DEVPCK OUTPUT.)
  11555. C           IFAIL=4  IF ERROR RETURN  TEST FAILED. (SEE DEVERK OUTPUT.)
  11556. C
  11557.       IF ((KPRINT.GE.2).AND.(IFAIL.NE.0))  WRITE (LUN, 3001)  IFAIL
  11558. C
  11559.       IF (IFAIL.EQ.0)  THEN
  11560.          IPASS = 1
  11561.          IF (KPRINT.GE.2) WRITE(LUN,99998)
  11562.       ELSE
  11563.          IPASS = 0
  11564.          IF (KPRINT.GE.1) WRITE(LUN,99999)
  11565.       ENDIF
  11566. C
  11567.       RETURN
  11568. C
  11569. C  FORMATS.
  11570. C
  11571.  1000 FORMAT ('1'/' ------------ DPCHIP QUICK CHECK OUTPUT',
  11572.      .        ' ------------')
  11573.  3001 FORMAT (/' *** TROUBLE ***',I5,' EVALUATION TESTS FAILED.')
  11574. 99998 FORMAT (/' ------------ DPCHIP PASSED  ALL EVALUATION TESTS',
  11575.      .        ' ------------')
  11576. 99999 FORMAT (/' ************ DPCHIP FAILED SOME EVALUATION TESTS',
  11577.      .        ' ************')
  11578. C------------- LAST LINE OF DPCHQ1 FOLLOWS -----------------------------
  11579.       END
  11580. *DECK DPCHQ2
  11581.       SUBROUTINE DPCHQ2 (LUN, KPRINT, IPASS)
  11582. C***BEGIN PROLOGUE  DPCHQ2
  11583. C***PURPOSE  Test the PCHIP integrators DPCHIA and DPCHID.
  11584. C***LIBRARY   SLATEC (PCHIP)
  11585. C***TYPE      DOUBLE PRECISION (PCHQK2-S, DPCHQ2-D)
  11586. C***KEYWORDS  PCHIP INTEGRATOR QUICK CHECK
  11587. C***AUTHOR  Fritsch, F. N., (LLNL)
  11588. C***DESCRIPTION
  11589. C
  11590. C             DPCHIP QUICK CHECK NUMBER 2
  11591. C
  11592. C     TESTS THE INTEGRATORS:  DPCHIA, DPCHID.
  11593. C *Usage:
  11594. C
  11595. C        INTEGER  LUN, KPRINT, IPASS
  11596. C
  11597. C        CALL DPCHQ2 (LUN, KPRINT, IPASS)
  11598. C
  11599. C *Arguments:
  11600. C
  11601. C     LUN   :IN  is the unit number to which output is to be written.
  11602. C
  11603. C     KPRINT:IN  controls the amount of output, as specified in the
  11604. C                SLATEC Guidelines.
  11605. C
  11606. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  11607. C                IPASS=0 indicates one or more tests failed.
  11608. C
  11609. C *Description:
  11610. C
  11611. C   This routine constructs data from a cubic, integrates it with DPCHIA
  11612. C   and compares the results with the correct answer.
  11613. C   Since DPCHIA calls DPCHID, this tests both integrators.
  11614. C
  11615. C***ROUTINES CALLED  D1MACH, DPCHIA
  11616. C***REVISION HISTORY  (YYMMDD)
  11617. C   820601  DATE WRITTEN
  11618. C   890306  Changed IPASS to the more accurate name IFAIL.  (FNF)
  11619. C   890316  1. Removed IMPLICIT statement.                  (FNF)
  11620. C           2. Eliminated unnecessary variable N1.          (FNF)
  11621. C           3. Miscellaneous cosmetic changes.              (FNF)
  11622. C   891004  Cosmetic changes to prologue.  (WRB)
  11623. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  11624. C   900314  Improved some output formats.  (FNF)
  11625. C   900315  Revised prologue and improved some output formats.  (FNF)
  11626. C   900316  Additional minor cosmetic changes.  (FNF)
  11627. C   900321  Removed IFAIL from call sequence for SLATEC standards and
  11628. C           made miscellaneous cosmetic changes.  (FNF)
  11629. C   900323  Corrected list of routines called.  (FNF)
  11630. C   901130  Added 1P's to formats; changed to allow KPRINT.gt.3.  (FNF)
  11631. C   910708  Minor modifications in use of KPRINT.  (WRB)
  11632. C***END PROLOGUE  DPCHQ2
  11633. C
  11634. C  Declare arguments.
  11635. C
  11636.       INTEGER  LUN, KPRINT, IPASS
  11637. C
  11638. C  DECLARE VARIABLES.
  11639. C
  11640.       INTEGER  I, IEREXP(17), IERR, IFAIL, N, NPAIRS
  11641.       DOUBLE PRECISION
  11642.      *      A(17), B(17), CALC, D(7), ERRMAX, ERROR, F(7), MACHEP,
  11643.      *      ONE, THREE, THRQTR, TOL, TRUE, TWO, X(7)
  11644.       LOGICAL  FAIL, SKIP
  11645. C
  11646. C  DECLARE EXTERNALS.
  11647. C
  11648.       DOUBLE PRECISION  DPCHIA, D1MACH
  11649. C
  11650. C  DEFINE TEST FUNCTIONS.
  11651. C
  11652.       DOUBLE PRECISION AX, FCN, DERIV, ANTDER
  11653.       FCN(AX) = THREE*AX*AX*(AX-TWO)
  11654.       DERIV(AX) = THREE*AX*(TWO*(AX-TWO) + AX)
  11655.       ANTDER(AX) = AX**3 * (THRQTR*AX - TWO)
  11656. C
  11657. C  INITIALIZE.
  11658. C
  11659.       DATA  THRQTR /0.75D0/,  ONE /1.D0/,  TWO /2.D0/,  THREE /3.D0/
  11660.       DATA  N /7/
  11661.       DATA  X /-4.D0, -2.D0, -0.9D0, 0.D0, 0.9D0, 2.D0, 4.D0/
  11662.       DATA  NPAIRS /17/
  11663.       DATA  A /-3.0D0, 3.0D0,-0.5D0,-0.5D0,-0.5D0,-4.0D0,-4.0D0, 3.0D0,
  11664.      *  -5.0D0,-5.0D0,-6.0D0, 6.0D0,-1.5D0,-1.5D0,-3.0D0, 3.0D0, 0.5D0/
  11665.       DATA  B / 3.0D0,-3.0D0, 1.0D0, 2.0D0, 5.0D0,-0.5D0, 4.0D0, 5.0D0,
  11666.      *  -3.0D0, 5.0D0,-5.0D0, 5.0D0,-0.5D0,-1.0D0,-2.5D0, 3.5D0, 0.5D0/
  11667.       DATA  IEREXP /0,0,0,0,2,0,0,2,1,3,3,3,0,0,0,0,0/
  11668. C
  11669. C  SET PASS/FAIL TOLERANCE.
  11670. C
  11671. C***FIRST EXECUTABLE STATEMENT  DPCHQ2
  11672.       MACHEP = D1MACH(4)
  11673.       TOL = 100.D0*MACHEP
  11674. C
  11675. C  SET UP PCH FUNCTION DEFINITION.
  11676. C
  11677.       DO 10  I = 1, N
  11678.          F(I) =   FCN(X(I))
  11679.          D(I) = DERIV(X(I))
  11680.    10 CONTINUE
  11681. C
  11682.       IF (KPRINT .GE. 3)  WRITE (LUN, 1000)  (X(I), F(I), D(I), I=1,N)
  11683.       IF (KPRINT .GE. 2)  WRITE (LUN, 1001)
  11684. C
  11685. C  LOOP OVER (A,B)-PAIRS.
  11686. C
  11687.       IF (KPRINT .GE. 3)  WRITE (LUN, 2000)
  11688. C
  11689.       IFAIL = 0
  11690. C
  11691.       SKIP = .FALSE.
  11692.       DO 20  I = 1, NPAIRS
  11693. C               ---------------------------------------------
  11694.          CALC = DPCHIA (N, X, F, D, 1, SKIP, A(I), B(I), IERR)
  11695. C               ---------------------------------------------
  11696.          IF (IERR .GE. 0)  THEN
  11697.             FAIL = IERR .NE. IEREXP(I)
  11698.             TRUE = ANTDER(B(I)) - ANTDER(A(I))
  11699.             ERROR = CALC - TRUE
  11700.             IF (KPRINT .GE. 3)  THEN
  11701.                IF (FAIL)  THEN
  11702.                  WRITE (LUN, 2001) A(I), B(I), IERR, TRUE, CALC, ERROR,
  11703.      *                                          IEREXP(I)
  11704.                ELSE
  11705.                  WRITE (LUN, 2002) A(I), B(I), IERR, TRUE, CALC, ERROR
  11706.                ENDIF
  11707.             ENDIF
  11708. C
  11709.             ERROR = ABS(ERROR) / MAX(ONE, ABS(TRUE))
  11710.             IF (FAIL .OR. (ERROR.GT.TOL))  IFAIL = IFAIL + 1
  11711.             IF (I .EQ. 1)  THEN
  11712.                ERRMAX = ERROR
  11713.             ELSE
  11714.                ERRMAX = MAX(ERRMAX, ERROR)
  11715.             ENDIF
  11716.          ELSE
  11717.             IF (KPRINT .GE. 3)  WRITE (LUN, 2002)  A(I), B(I), IERR
  11718.             IFAIL = IFAIL + 1
  11719.          ENDIF
  11720.    20 CONTINUE
  11721. C
  11722. C  PRINT SUMMARY.
  11723. C
  11724.       IF (KPRINT .GE. 2)  THEN
  11725.          WRITE (LUN, 2003)  ERRMAX, TOL
  11726.          IF (IFAIL .NE. 0)  WRITE (LUN, 3001)  IFAIL
  11727.       ENDIF
  11728. C
  11729. C  TERMINATE.
  11730. C
  11731.       IF (IFAIL.EQ.0)  THEN
  11732.          IPASS = 1
  11733.          IF (KPRINT.GE.2) WRITE(LUN,99998)
  11734.       ELSE
  11735.          IPASS = 0
  11736.          IF (KPRINT.GE.1) WRITE(LUN,99999)
  11737.       ENDIF
  11738. C
  11739.       RETURN
  11740. C
  11741. C  FORMATS.
  11742. C
  11743.  1000 FORMAT ('1'//10X,'TEST DPCHIP INTEGRATORS'
  11744.      *           // 5X,'DATA:' //11X,'X',9X,'F',9X,'D'
  11745.      *            /(5X,3F10.3) )
  11746.  1001 FORMAT (//10X,'DPCHQ2 RESULTS'/10X,'--------------')
  11747.  2000 FORMAT (// 5X,'TEST RESULTS:'
  11748.      *        //'    A     B    ERR     TRUE',16X,'CALC',15X,'ERROR')
  11749.  2001 FORMAT (2F6.1,I5,1P,2D20.10,D15.5,'  (',I1,') *****' )
  11750.  2002 FORMAT (2F6.1,I5,1P,2D20.10,D15.5)
  11751.  2003 FORMAT (/'  MAXIMUM RELATIVE ERROR IS:',1P,D15.5,
  11752.      *                       ',   TOLERANCE:',1P,D15.5)
  11753.  3001 FORMAT (/' *** TROUBLE ***',I5,' INTEGRATION TESTS FAILED.')
  11754. 99998 FORMAT (/' ------------ DPCHIP PASSED  ALL INTEGRATION TESTS',
  11755.      .        ' ------------')
  11756. 99999 FORMAT (/' ************ DPCHIP FAILED SOME INTEGRATION TESTS',
  11757.      .        ' ************')
  11758. C------------- LAST LINE OF DPCHQ2 FOLLOWS -----------------------------
  11759.       END
  11760. *DECK DPCHQ3
  11761.       SUBROUTINE DPCHQ3 (LUN, KPRINT, IPASS)
  11762. C***BEGIN PROLOGUE  DPCHQ3
  11763. C***PURPOSE  Test the PCHIP interpolators DPCHIC, DPCHIM, DPCHSP.
  11764. C***LIBRARY   SLATEC (PCHIP)
  11765. C***TYPE      DOUBLE PRECISION (PCHQK3-S, DPCHQ3-D)
  11766. C***KEYWORDS  PCHIP INTERPOLATOR QUICK CHECK
  11767. C***AUTHOR  Fritsch, F. N., (LLNL)
  11768. C***DESCRIPTION
  11769. C
  11770. C             DPCHIP QUICK CHECK NUMBER 3
  11771. C
  11772. C     TESTS THE INTERPOLATORS:  DPCHIC, DPCHIM, DPCHSP.
  11773. C *Usage:
  11774. C
  11775. C        INTEGER  LUN, KPRINT, IPASS
  11776. C
  11777. C        CALL DPCHQ3 (LUN, KPRINT, IPASS)
  11778. C
  11779. C *Arguments:
  11780. C
  11781. C     LUN   :IN  is the unit number to which output is to be written.
  11782. C
  11783. C     KPRINT:IN  controls the amount of output, as specified in the
  11784. C                SLATEC Guidelines.
  11785. C
  11786. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  11787. C                IPASS=0 indicates one or more tests failed.
  11788. C
  11789. C *Description:
  11790. C
  11791. C   This routine interpolates a constructed data set with all three
  11792. C   DPCHIP interpolators and compares the results with those obtained
  11793. C   on a Cray X/MP.  Two different values of the DPCHIC parameter SWITCH
  11794. C   are used.
  11795. C
  11796. C *Remarks:
  11797. C     1. The Cray results are given only to nine significant figures,
  11798. C        so don't expect them to match to more.
  11799. C     2. The results will depend to some extent on the accuracy of
  11800. C        the EXP function.
  11801. C
  11802. C***ROUTINES CALLED  COMP, D1MACH, DPCHIC, DPCHIM, DPCHSP
  11803. C***REVISION HISTORY  (YYMMDD)
  11804. C   900309  DATE WRITTEN
  11805. C   900314  Converted to a subroutine and added a SLATEC 4.0 prologue.
  11806. C   900315  Revised prologue and improved some output formats.  (FNF)
  11807. C   900316  Made TOLD machine-dependent and added extra output when
  11808. C           KPRINT=3.  (FNF)
  11809. C   900320  Added E0's to DATA statement for X to reduce single/double
  11810. C           differences, and other minor cosmetic changes.
  11811. C   900320  Converted to double precision.
  11812. C   900321  Removed IFAIL from call sequence for SLATEC standards and
  11813. C           made miscellaneous cosmetic changes.  (FNF)
  11814. C   900322  Minor changes to reduce single/double differences.  (FNF)
  11815. C   900530  Tolerance (TOLD) and argument to DPCHIC changed.  (WRB)
  11816. C   900802  Modified TOLD formula and constants in DPCHIC calls to
  11817. C           correct DPCHQ3 failures.  (FNF)
  11818. C   901130  Several significant changes:  (FNF)
  11819. C           1. Changed comparison between DPCHIM and DPCHIC to only
  11820. C              require agreement to machine precision.
  11821. C           2. Revised to print more output when KPRINT=3.
  11822. C           3. Added 1P's to formats.
  11823. C   910708  Minor modifications in use of KPRINT.  (WRB)
  11824. C***END PROLOGUE  DPCHQ3
  11825. C
  11826. C*Internal Notes:
  11827. C
  11828. C     TOLD is used to compare with stored Cray results.  Its value
  11829. C          should be consistent with significance of stored values.
  11830. C     TOLZ is used for cases in which exact equality is expected.
  11831. C     TOL  is used for cases in which agreement to machine precision
  11832. C          is expected.
  11833. C**End
  11834. C
  11835. C  Declare arguments.
  11836. C
  11837.       INTEGER  LUN, KPRINT, IPASS
  11838.       LOGICAL  COMP
  11839.       DOUBLE PRECISION  D1MACH
  11840. C
  11841. C  Declare variables.
  11842. C
  11843.       INTEGER  I, IC(2), IERR, IFAIL, N, NBAD, NBADZ, NWK
  11844.       PARAMETER  (N = 9,  NWK = 2*N)
  11845.       DOUBLE PRECISION  D(N), DC(N), DC5, DC6, DM(N), DS(N), ERR, F(N),
  11846.      .                MONE, TOL, TOLD, TOLZ, VC(2), X(N), WK(NWK), ZERO
  11847.       PARAMETER  (ZERO = 0.0D0,  MONE = -1.0D0)
  11848.       CHARACTER*6  RESULT
  11849. C
  11850. C  Initialize.
  11851. C
  11852. C       Data.
  11853.       DATA  IC /0, 0/
  11854.       DATA  X /-2.2D0,-1.2D0,-1.0D0,-0.5D0,-0.01D0, 0.5D0, 1.0D0,
  11855.      .          2.0D0, 2.2D0/
  11856. C
  11857. C       Results generated on Cray X/MP (9 sign. figs.)
  11858.       DATA  DM / 0.            , 3.80027352D-01, 7.17253009D-01,
  11859.      .           5.82014161D-01, 0.            ,-5.68208031D-01,
  11860.      .          -5.13501618D-01,-7.77910977D-02,-2.45611117D-03/
  11861.       DATA  DC5,DC6 / 1.76950158D-02,-5.69579814D-01/
  11862.       DATA  DS /-5.16830792D-02, 5.71455855D-01, 7.40530225D-01,
  11863.      .           7.63864934D-01, 1.92614386D-02,-7.65324380D-01,
  11864.      .          -7.28209035D-01,-7.98445427D-02,-2.85983446D-02/
  11865. C
  11866. C***FIRST EXECUTABLE STATEMENT  DPCHQ3
  11867.       IFAIL = 0
  11868. C
  11869. C        Set tolerances.
  11870.       TOL  = 10*D1MACH(4)
  11871.       TOLD = MAX( 1.0D-7, 10*TOL )
  11872.       TOLZ = ZERO
  11873. C
  11874.       IF (KPRINT .GE. 3)  WRITE (LUN, 1000)
  11875.       IF (KPRINT .GE. 2)  WRITE (LUN, 1002)
  11876. C
  11877. C  Set up data.
  11878. C
  11879.       DO 10  I = 1, N
  11880.          F(I) = EXP(-X(I)**2)
  11881.    10 CONTINUE
  11882. C
  11883.       IF (KPRINT .GE. 3)  THEN
  11884.          DO 12  I = 1, 4
  11885.             WRITE (LUN, 1010)  X(I), F(I), DM(I), DS(I)
  11886.    12    CONTINUE
  11887.             WRITE (LUN, 1011)  X(5), F(5), DM(5), DC5, DS(5)
  11888.             WRITE (LUN, 1011)  X(6), F(6), DM(6), DC6, DS(6)
  11889.          DO 15  I = 7, N
  11890.             WRITE (LUN, 1010)  X(I), F(I), DM(I), DS(I)
  11891.    15    CONTINUE
  11892.       ENDIF
  11893. C
  11894. C  Test DPCHIM.
  11895. C
  11896.       IF (KPRINT.GE.3)  WRITE (LUN, 2000) 'IM'
  11897. C     --------------------------------
  11898.       CALL DPCHIM (N, X, F, D, 1, IERR)
  11899. C     --------------------------------
  11900. C        Expect IERR=1 (one monotonicity switch).
  11901.       IF ( KPRINT.GE.3 )  WRITE (LUN, 2001) 1
  11902.       IF ( .NOT.COMP (IERR, 1, LUN, KPRINT) )  THEN
  11903.          IFAIL = IFAIL + 1
  11904.       ELSE
  11905.          IF ( KPRINT.GE.3 )  WRITE (LUN, 2002)
  11906.          NBAD = 0
  11907.          NBADZ = 0
  11908.          DO 20  I = 1, N
  11909.             RESULT = '  OK'
  11910. C             D-values should agree with stored values.
  11911. C               (Zero values should agree exactly.)
  11912.             IF ( DM(I).EQ.ZERO )  THEN
  11913.                ERR = ABS( D(I) )
  11914.                IF ( ERR.GT.TOLZ )  THEN
  11915.                   NBADZ = NBADZ + 1
  11916.                   RESULT = '**BADZ'
  11917.                ENDIF
  11918.             ELSE
  11919.                ERR = ABS( (D(I)-DM(I))/DM(I) )
  11920.                IF ( ERR.GT.TOLD )  THEN
  11921.                   NBAD = NBAD + 1
  11922.                   RESULT = '**BAD'
  11923.                ENDIF
  11924.             ENDIF
  11925.             IF (KPRINT.GE.3)
  11926.      *         WRITE (LUN, 2003)  I, X(I), D(I), ERR, RESULT
  11927.    20    CONTINUE
  11928.          IF ( (NBADZ.NE.0).OR.(NBAD.NE.0) )  THEN
  11929.             IFAIL = IFAIL + 1
  11930.             IF ((NBADZ.NE.0).AND.(KPRINT.GE.2))
  11931.      *         WRITE (LUN, 2004)  NBAD
  11932.             IF ((NBAD.NE.0).AND.(KPRINT.GE.2))
  11933.      *         WRITE (LUN, 2005)  NBAD, 'IM', TOLD
  11934.          ELSE
  11935.             IF (KPRINT.GE.3)  WRITE (LUN, 2006)  'IM'
  11936.          ENDIF
  11937.       ENDIF
  11938. C
  11939. C  Test DPCHIC -- options set to reproduce DPCHIM.
  11940. C
  11941.       IF (KPRINT.GE.3)  WRITE (LUN, 2000) 'IC'
  11942. C     --------------------------------------------------------
  11943.       CALL DPCHIC (IC, VC, ZERO, N, X, F, DC, 1, WK, NWK, IERR)
  11944. C     --------------------------------------------------------
  11945. C        Expect IERR=0 .
  11946.       IF ( KPRINT.GE.3 )  WRITE (LUN, 2001) 0
  11947.       IF ( .NOT.COMP (IERR, 0, LUN, KPRINT) )  THEN
  11948.          IFAIL = IFAIL + 1
  11949.       ELSE
  11950.          IF ( KPRINT.GE.3 )  WRITE (LUN, 2002)
  11951.          NBAD = 0
  11952.          DO 30  I = 1, N
  11953.             RESULT = '  OK'
  11954. C           D-values should agree exactly with those computed by DPCHIM.
  11955. C            (To be generous, will only test to machine precision.)
  11956.             ERR = ABS( D(I)-DC(I) )
  11957.             IF ( ERR.GT.TOL )  THEN
  11958.                NBAD = NBAD + 1
  11959.                RESULT = '**BAD'
  11960.             ENDIF
  11961.             IF (KPRINT.GE.3)
  11962.      *         WRITE (LUN, 2003)  I, X(I), DC(I), ERR, RESULT
  11963.    30    CONTINUE
  11964.          IF ( NBAD.NE.0 )  THEN
  11965.             IFAIL = IFAIL + 1
  11966.             IF (KPRINT.GE.2)  WRITE (LUN, 2005)  NBAD, 'IC', TOL
  11967.          ELSE
  11968.             IF (KPRINT.GE.3)  WRITE (LUN, 2006)  'IC'
  11969.          ENDIF
  11970.       ENDIF
  11971. C
  11972. C  Test DPCHIC -- default nonzero switch derivatives.
  11973. C
  11974.       IF (KPRINT.GE.3)  WRITE (LUN, 2000) 'IC'
  11975. C     -------------------------------------------------------
  11976.       CALL DPCHIC (IC, VC, MONE, N, X, F, D, 1, WK, NWK, IERR)
  11977. C     -------------------------------------------------------
  11978. C        Expect IERR=0 .
  11979.       IF ( KPRINT.GE.3 )  WRITE (LUN, 2001) 0
  11980.       IF ( .NOT.COMP (IERR, 0, LUN, KPRINT) )  THEN
  11981.          IFAIL = IFAIL + 1
  11982.       ELSE
  11983.          IF ( KPRINT.GE.3 )  WRITE (LUN, 2002)
  11984.          NBAD = 0
  11985.          NBADZ = 0
  11986.          DO 40  I = 1, N
  11987.             RESULT = '  OK'
  11988. C            D-values should agree exactly with those computed in
  11989. C            previous call, except at points 5 and 6.
  11990.             IF ( (I.LT.5).OR.(I.GT.6) )  THEN
  11991.                ERR = ABS( D(I)-DC(I) )
  11992.                IF ( ERR.GT.TOLZ )  THEN
  11993.                   NBADZ = NBADZ + 1
  11994.                   RESULT = '**BADA'
  11995.                ENDIF
  11996.             ELSE
  11997.                IF ( I.EQ.5 )  THEN
  11998.                   ERR = ABS( (D(I)-DC5)/DC5 )
  11999.                ELSE
  12000.                   ERR = ABS( (D(I)-DC6)/DC6 )
  12001.                ENDIF
  12002.                IF ( ERR.GT.TOLD )  THEN
  12003.                   NBAD = NBAD + 1
  12004.                   RESULT = '**BAD'
  12005.                ENDIF
  12006.             ENDIF
  12007.             IF (KPRINT.GE.3)
  12008.      *         WRITE (LUN, 2003)  I, X(I), D(I), ERR, RESULT
  12009.    40    CONTINUE
  12010.          IF ( (NBADZ.NE.0).OR.(NBAD.NE.0) )  THEN
  12011.             IFAIL = IFAIL + 1
  12012.             IF ((NBADZ.NE.0).AND.(KPRINT.GE.2))
  12013.      *         WRITE (LUN, 2007)  NBAD
  12014.             IF ((NBAD.NE.0).AND.(KPRINT.GE.2))
  12015.      *         WRITE (LUN, 2005)  NBAD, 'IC', TOLD
  12016.          ELSE
  12017.             IF (KPRINT.GE.3)  WRITE (LUN, 2006)  'IC'
  12018.          ENDIF
  12019.       ENDIF
  12020. C
  12021. C  Test DPCHSP.
  12022. C
  12023.       IF (KPRINT.GE.3)  WRITE (LUN, 2000) 'SP'
  12024. C     -------------------------------------------------
  12025.       CALL DPCHSP (IC, VC, N, X, F, D, 1, WK, NWK, IERR)
  12026. C     -------------------------------------------------
  12027. C        Expect IERR=0 .
  12028.       IF ( KPRINT.GE.3 )  WRITE (LUN, 2001) 0
  12029.       IF ( .NOT.COMP (IERR, 0, LUN, KPRINT) )  THEN
  12030.          IFAIL = IFAIL + 1
  12031.       ELSE
  12032.          IF ( KPRINT.GE.3 )  WRITE (LUN, 2002)
  12033.          NBAD = 0
  12034.          DO 50  I = 1, N
  12035.             RESULT = '  OK'
  12036. C             D-values should agree with stored values.
  12037.             ERR = ABS( (D(I)-DS(I))/DS(I) )
  12038.             IF ( ERR.GT.TOLD )  THEN
  12039.                NBAD = NBAD + 1
  12040.                RESULT = '**BAD'
  12041.             ENDIF
  12042.             IF (KPRINT.GE.3)
  12043.      *         WRITE (LUN, 2003)  I, X(I), D(I), ERR, RESULT
  12044.    50    CONTINUE
  12045.          IF ( NBAD.NE.0 )  THEN
  12046.             IFAIL = IFAIL + 1
  12047.             IF (KPRINT.GE.2)  WRITE (LUN, 2005)  NBAD, 'SP', TOLD
  12048.          ELSE
  12049.             IF (KPRINT.GE.3)  WRITE (LUN, 2006)  'SP'
  12050.          ENDIF
  12051.       ENDIF
  12052. C
  12053. C  PRINT SUMMARY AND TERMINATE.
  12054. C
  12055.       IF ((KPRINT.GE.2).AND.(IFAIL.NE.0))  WRITE (LUN, 3001)  IFAIL
  12056. C
  12057.       IF (IFAIL.EQ.0)  THEN
  12058.          IPASS = 1
  12059.          IF (KPRINT.GE.2) WRITE(LUN,99998)
  12060.       ELSE
  12061.          IPASS = 0
  12062.          IF (KPRINT.GE.1) WRITE(LUN,99999)
  12063.       ENDIF
  12064. C
  12065.       RETURN
  12066. C
  12067. C  FORMATS.
  12068. C
  12069.  1000 FORMAT ('1'//10X,'TEST DPCHIP INTERPOLATORS'
  12070.      .           // 5X,'DATA:'
  12071.      .            /39X,'---------- EXPECTED D-VALUES ----------'
  12072.      .            /12X,'X',9X,'F',18X,'DM',13X,'DC',13X,'DS')
  12073.  1002 FORMAT (//10X,'DPCHQ3 RESULTS'/10X,'--------------')
  12074.  1010 FORMAT (5X,F10.2,1P,D15.5,4X,D15.5,15X,D15.5)
  12075.  1011 FORMAT (5X,F10.2,1P,D15.5,4X,3D15.5)
  12076.  2000 FORMAT (/5X,'DPCH',A2,' TEST:')
  12077.  2001 FORMAT (15X,'EXPECT  IERR =',I5)
  12078.  2002 FORMAT (/9X,'I',7X,'X',9X,'D',13X,'ERR')
  12079.  2003 FORMAT (5X,I5,F10.2,1P,2D15.5,2X,A)
  12080.  2004 FORMAT (/'    **',I5,' DPCHIM RESULTS FAILED TO BE EXACTLY ZERO.')
  12081.  2005 FORMAT (/'    **',I5,' DPCH',A2,' RESULTS FAILED TOLERANCE TEST.',
  12082.      *                     '  TOL =',1P,D10.3)
  12083.  2006 FORMAT (/5X,'  ALL DPCH',A2,' RESULTS OK.')
  12084.  2007 FORMAT (/'    **',I5,' DPCHIC RESULTS FAILED TO AGREE WITH',
  12085.      *                      ' PREVIOUS CALL.')
  12086.  3001 FORMAT (/' *** TROUBLE ***',I5,' INTERPOLATION TESTS FAILED.')
  12087. 99998 FORMAT (/' ------------ DPCHIP PASSED  ALL INTERPOLATION TESTS',
  12088.      .        ' ------------')
  12089. 99999 FORMAT (/' ************ DPCHIP FAILED SOME INTERPOLATION TESTS',
  12090.      .        ' ************')
  12091. C------------- LAST LINE OF DPCHQ3 FOLLOWS -----------------------------
  12092.       END
  12093. *DECK DPCHQ4
  12094.       SUBROUTINE DPCHQ4 (LUN, KPRINT, IPASS)
  12095. C***BEGIN PROLOGUE  DPCHQ4
  12096. C***PURPOSE  Test the PCHIP monotonicity checker DPCHCM.
  12097. C***LIBRARY   SLATEC (PCHIP)
  12098. C***TYPE      DOUBLE PRECISION (PCHQK4-S, DPCHQ4-D)
  12099. C***KEYWORDS  PCHIP MONOTONICITY CHECKER QUICK CHECK
  12100. C***AUTHOR  Fritsch, F. N., (LLNL)
  12101. C***DESCRIPTION
  12102. C
  12103. C             DPCHIP QUICK CHECK NUMBER 4
  12104. C
  12105. C     TESTS THE MONOTONICITY CHECKER:  DPCHCM.
  12106. C *Usage:
  12107. C
  12108. C        INTEGER  LUN, KPRINT, IPASS
  12109. C
  12110. C        CALL DPCHQ4 (LUN, KPRINT, IPASS)
  12111. C
  12112. C *Arguments:
  12113. C
  12114. C     LUN   :IN  is the unit number to which output is to be written.
  12115. C
  12116. C     KPRINT:IN  controls the amount of output, as specified in the
  12117. C                SLATEC Guidelines.
  12118. C
  12119. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  12120. C                IPASS=0 indicates one or more tests failed.
  12121. C
  12122. C *Description:
  12123. C
  12124. C   This routine tests a constructed data set with three different
  12125. C   INCFD settings and compares with the expected results.  It then
  12126. C   runs a special test to check for bug in overall monotonicity found
  12127. C   in DPCHMC.  Finally, it reverses the data and repeats all tests.
  12128. C
  12129. C***ROUTINES CALLED  DPCHCM
  12130. C***REVISION HISTORY  (YYMMDD)
  12131. C   890208  DATE WRITTEN
  12132. C   890306  Changed LOUT to LUN and added it to call list.  (FNF)
  12133. C   890316  Removed DATA statements to suit new quick check standards.
  12134. C   890410  Changed PCHMC to PCHCM.
  12135. C   890410  Added a SLATEC 4.0 format prologue.
  12136. C   900314  Changed name from PCHQK3 to PCHQK4 and improved some output
  12137. C           formats.
  12138. C   900315  Revised prologue and improved some output formats.  (FNF)
  12139. C   900320  Converted to double precision.
  12140. C   900321  Removed IFAIL from call sequence for SLATEC standards and
  12141. C           made miscellaneous cosmetic changes.  (FNF)
  12142. C   900322  Added declarations so all variables are declared.  (FNF)
  12143. C   910708  Minor modifications in use of KPRINT.  (WRB)
  12144. C***END PROLOGUE  DPCHQ4
  12145. C
  12146. C*Internal Notes:
  12147. C
  12148. C     Data set-up is done via assignment statements to avoid modifying
  12149. C     DATA-loaded arrays, as required by the 1989 SLATEC Guidelines.
  12150. C     Run with KPRINT=3 to display the data.
  12151. C**End
  12152. C
  12153. C  Declare arguments.
  12154. C
  12155.       INTEGER  LUN, KPRINT, IPASS
  12156. C
  12157. C  DECLARE VARIABLES.
  12158. C
  12159.       INTEGER  MAXN, MAXN2, MAXN3, NB
  12160.       PARAMETER  (MAXN = 16,  MAXN2 = 8,  MAXN3 = 6,  NB = 7)
  12161.       INTEGER  I, IERR, IFAIL, INCFD, ISMEX1(MAXN), ISMEX2(MAXN2),
  12162.      .         ISMEX3(MAXN3), ISMEXB(NB), ISMON(MAXN), K, N, NS(3)
  12163.       DOUBLE PRECISION  D(MAXN), DB(NB), F(MAXN), FB(NB), X(MAXN)
  12164.       LOGICAL  SKIP
  12165. C
  12166. C  DEFINE EXPECTED RESULTS.
  12167. C
  12168.       DATA  ISMEX1 / 1, 1,-1, 1, 1,-1, 1, 1,-1, 1, 1,-1, 1, 1,-1, 2/
  12169.       DATA  ISMEX2 / 1, 2, 2, 1, 2, 2, 1, 2/
  12170.       DATA  ISMEX3 / 1, 1, 1, 1, 1, 1/
  12171.       DATA  ISMEXB / 1, 3, 1, -1, -3, -1, 2/
  12172. C
  12173. C  DEFINE TEST DATA.
  12174. C
  12175.       DATA  NS /16, 8, 6/
  12176. C
  12177. C       Define X, F, D.
  12178. C***FIRST EXECUTABLE STATEMENT  DPCHQ4
  12179.       DO 1  I = 1, MAXN
  12180.          X(I) = I
  12181.          D(I) = 0.D0
  12182.     1 CONTINUE
  12183.       DO 2  I = 2, MAXN, 3
  12184.          D(I) = 2.D0
  12185.     2 CONTINUE
  12186.       DO 3  I = 1, 3
  12187.          F(I) = X(I)
  12188.          F(I+ 3) = F(I  ) + 1.D0
  12189.          F(I+ 6) = F(I+3) + 1.D0
  12190.          F(I+ 9) = F(I+6) + 1.D0
  12191.          F(I+12) = F(I+9) + 1.D0
  12192.     3 CONTINUE
  12193.       F(16) = 6.D0
  12194. C       Define FB, DB.
  12195.       FB(1) = 0.D0
  12196.       FB(2) = 2.D0
  12197.       FB(3) = 3.D0
  12198.       FB(4) = 5.D0
  12199.       DB(1) = 1.D0
  12200.       DB(2) = 3.D0
  12201.       DB(3) = 3.D0
  12202.       DB(4) = 0.D0
  12203.       DO 4  I = 1, 3
  12204.          FB(NB-I+1) =  FB(I)
  12205.          DB(NB-I+1) = -DB(I)
  12206.     4 CONTINUE
  12207. C
  12208. C  INITIALIZE.
  12209. C
  12210.       IFAIL = 0
  12211. C
  12212.       IF (KPRINT .GE. 3)  THEN
  12213.          WRITE (LUN, 1000)
  12214.          DO 10  I = 1, NB
  12215.             WRITE (LUN, 1001)  I, X(I), F(I), D(I), FB(I), DB(I)
  12216.    10    CONTINUE
  12217.          DO 20  I = NB+1, MAXN
  12218.             WRITE (LUN, 1001)  I, X(I), F(I), D(I)
  12219.    20    CONTINUE
  12220.       ENDIF
  12221.       IF (KPRINT .GE. 2)  WRITE (LUN, 1002)
  12222. C
  12223. C  TRANSFER POINT FOR SECOND SET OF TESTS.
  12224. C
  12225.    25 CONTINUE
  12226. C
  12227. C  Loop over a series of values of INCFD.
  12228. C
  12229.       DO 30  INCFD = 1, 3
  12230.          N = NS(INCFD)
  12231.          SKIP = .FALSE.
  12232. C        -------------------------------------------------
  12233.          CALL DPCHCM (N, X, F, D, INCFD, SKIP, ISMON, IERR)
  12234. C        -------------------------------------------------
  12235.          IF (KPRINT.GE.3)
  12236.      .      WRITE (LUN, 2000)  INCFD, IERR, (ISMON(I), I=1,N)
  12237.          IF ( IERR.NE.0 )  THEN
  12238.             IFAIL = IFAIL + 1
  12239.             IF (KPRINT.GE.3)  WRITE (LUN,2001)
  12240.          ELSE
  12241.             DO 29  I = 1, N
  12242.                IF (INCFD.EQ.1)  THEN
  12243.                   IF ( ISMON(I).NE.ISMEX1(I) )  THEN
  12244.                      IFAIL = IFAIL + 1
  12245.                      IF (KPRINT.GE.3)
  12246.      .                  WRITE (LUN, 2002)  (ISMEX1(K),K=1,N)
  12247.                      GO TO 30
  12248.                   ENDIF
  12249.                ELSE IF (INCFD.EQ.2) THEN
  12250.                   IF ( ISMON(I).NE.ISMEX2(I) )  THEN
  12251.                      IFAIL = IFAIL + 1
  12252.                      IF (KPRINT.GE.3)
  12253.      .                  WRITE (LUN, 2002)  (ISMEX2(K),K=1,N)
  12254.                      GO TO 30
  12255.                   ENDIF
  12256.                ELSE
  12257.                   IF ( ISMON(I).NE.ISMEX3(I) )  THEN
  12258.                      IFAIL = IFAIL + 1
  12259.                      IF (KPRINT.GE.3)
  12260.      .                  WRITE (LUN, 2002)  (ISMEX3(K),K=1,N)
  12261.                      GO TO 30
  12262.                   ENDIF
  12263.                ENDIF
  12264.    29       CONTINUE
  12265.          ENDIF
  12266.    30 CONTINUE
  12267. C
  12268. C  Test for -1,3,1 bug.
  12269. C
  12270.       SKIP = .FALSE.
  12271. C     ------------------------------------------------
  12272.       CALL DPCHCM (NB, X, FB, DB, 1, SKIP, ISMON, IERR)
  12273. C     ------------------------------------------------
  12274.       IF (KPRINT.GE.3)
  12275.      .   WRITE (LUN, 2030)  IERR, (ISMON(I), I=1,NB)
  12276.       IF ( IERR.NE.0 )  THEN
  12277.          IFAIL = IFAIL + 1
  12278.          IF (KPRINT.GE.3)  WRITE (LUN,2001)
  12279.       ELSE
  12280.          DO 34  I = 1, NB
  12281.             IF ( ISMON(I).NE.ISMEXB(I) )  THEN
  12282.                IFAIL = IFAIL + 1
  12283.                IF (KPRINT.GE.3)
  12284.      .            WRITE (LUN, 2002)  (ISMEXB(K),K=1,NB)
  12285.                GO TO 35
  12286.             ENDIF
  12287.    34    CONTINUE
  12288.       ENDIF
  12289.    35 CONTINUE
  12290. C
  12291.       IF (F(1).LT.0.)  GO TO 90
  12292. C
  12293. C  Change sign and do again.
  12294. C
  12295.       DO 40  I = 1, MAXN
  12296.          F(I) = -F(I)
  12297.          D(I) = -D(I)
  12298.          IF ( ISMEX1(I).NE.2 )  ISMEX1(I) = -ISMEX1(I)
  12299.    40 CONTINUE
  12300.       DO 42  I = 1, MAXN2
  12301.          IF ( ISMEX2(I).NE.2 )  ISMEX2(I) = -ISMEX2(I)
  12302.    42 CONTINUE
  12303.       DO 43  I = 1, MAXN3
  12304.          IF ( ISMEX3(I).NE.2 )  ISMEX3(I) = -ISMEX3(I)
  12305.    43 CONTINUE
  12306.       DO 50  I = 1, NB
  12307.          FB(I) = -FB(I)
  12308.          DB(I) = -DB(I)
  12309.          IF ( ISMEXB(I).NE.2 )  ISMEXB(I) = -ISMEXB(I)
  12310.    50 CONTINUE
  12311.       GO TO 25
  12312. C
  12313. C  PRINT SUMMARY AND TERMINATE.
  12314. C
  12315.    90 CONTINUE
  12316.       IF ((KPRINT.GE.2).AND.(IFAIL.NE.0))  WRITE (LUN, 3001)  IFAIL
  12317. C
  12318.       IF (IFAIL.EQ.0)  THEN
  12319.          IPASS = 1
  12320.          IF (KPRINT.GE.2) WRITE(LUN,99998)
  12321.       ELSE
  12322.          IPASS = 0
  12323.          IF (KPRINT.GE.1) WRITE(LUN,99999)
  12324.       ENDIF
  12325. C
  12326.       RETURN
  12327. C
  12328. C  FORMATS.
  12329. C
  12330.  1000 FORMAT ('1'//10X,'TEST DPCHIP MONOTONICITY CHECKER'
  12331.      *           // 5X,'DATA:'
  12332.      .           // 9X,'I',4X,'X',5X,'F',5X,'D',5X,'FB',4X,'DB')
  12333.  1001 FORMAT (5X,I5,5F6.1)
  12334.  1002 FORMAT (//10X,'DPCHQ4 RESULTS'/10X,'--------------')
  12335.  2000 FORMAT (/4X,'INCFD =',I2,':  IERR =',I3/15X,'ISMON =',16I3)
  12336.  2001 FORMAT (' *** Failed -- bad IERR value.')
  12337.  2002 FORMAT (' *** Failed -- expect:',16I3)
  12338.  2030 FORMAT (/4X,' Bug test:  IERR =',I3/15X,'ISMON =',7I3)
  12339.  3001 FORMAT (/' *** TROUBLE ***',I5,' MONOTONICITY TESTS FAILED.')
  12340. 99998 FORMAT (/' ------------ DPCHIP PASSED  ALL MONOTONICITY TESTS',
  12341.      .        ' ------------')
  12342. 99999 FORMAT (/' ************ DPCHIP FAILED SOME MONOTONICITY TESTS',
  12343.      .        ' ************')
  12344. C------------- LAST LINE OF DPCHQ4 FOLLOWS -----------------------------
  12345.       END
  12346. *DECK DPFITT
  12347.       SUBROUTINE DPFITT (LUN, KPRINT, IPASS)
  12348. C***BEGIN PROLOGUE  DPFITT
  12349. C***PURPOSE  Quick check for DPOLFT, DPCOEF and DP1VLU.
  12350. C***LIBRARY   SLATEC
  12351. C***TYPE      DOUBLE PRECISION (PFITQX-S, DPFITT-D)
  12352. C***AUTHOR  (UNKNOWN)
  12353. C***ROUTINES CALLED  D1MACH, DCMPAR, DP1VLU, DPCOEF, DPOLFT, PASS,
  12354. C                    XERCLR, XGETF, XSETF
  12355. C***COMMON BLOCKS    DCHECK
  12356. C***REVISION HISTORY  (YYMMDD)
  12357. C   ??????  DATE WRITTEN
  12358. C   890911  Removed unnecessary intrinsics.  (WRB)
  12359. C   890921  Realigned order of variables in the COMMON block.
  12360. C           (WRB)
  12361. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  12362. C   900911  Test problem changed and cosmetic changes to code.  (WRB)
  12363. C   901205  Changed usage of D1MACH(3) to D1MACH(4) and modified the
  12364. C           FORMATs.  (RWC)
  12365. C   910708  Minor modifications in use of KPRINT.  (WRB)
  12366. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  12367. C   900911  Test problem changed and cosmetic changes to code.  (WRB)
  12368. C   920214  Code restructured to test for all values of KPRINT and to
  12369. C           provide more PASS/FAIL information.  (WRB)
  12370. C***END PROLOGUE  DPFITT
  12371. C     .. Scalar Arguments ..
  12372.       INTEGER IPASS, KPRINT, LUN
  12373. C     .. Scalars in Common ..
  12374.       DOUBLE PRECISION EPS, RP, SVEPS, TOL
  12375.       INTEGER IERP, IERR, NORD, NORDP
  12376. C     .. Arrays in Common ..
  12377.       DOUBLE PRECISION R(11)
  12378. C     .. Local Scalars ..
  12379.       DOUBLE PRECISION YFIT
  12380.       INTEGER I, ICNT, M, MAXORD
  12381. C     .. Local Arrays ..
  12382.       DOUBLE PRECISION A(97), TC(5), W(11), X(11), Y(11), YP(5)
  12383.       INTEGER ITEST(9)
  12384. C     .. External Functions ..
  12385.       DOUBLE PRECISION D1MACH
  12386.       EXTERNAL D1MACH
  12387. C     .. External Subroutines ..
  12388.       EXTERNAL DCMPAR, PASS, DPCOEF, DPOLFT, DP1VLU
  12389. C     .. Intrinsic Functions ..
  12390.       INTRINSIC ABS, SQRT
  12391. C     .. Common blocks ..
  12392.       COMMON /DCHECK/ EPS, R, RP, SVEPS, TOL, NORDP, NORD, IERP, IERR
  12393. C***FIRST EXECUTABLE STATEMENT  DPFITT
  12394.       IF (KPRINT .GE. 2) WRITE (LUN,FMT=9000)
  12395. C
  12396. C     Initialize variables for testing passage or failure of tests
  12397. C
  12398.       DO 100 I = 1,9
  12399.         ITEST(I) = 0
  12400.   100 CONTINUE
  12401.       ICNT = 0
  12402.       TOL = SQRT(D1MACH(4))
  12403.       M = 11
  12404.       DO 110 I = 1,M
  12405.         X(I) = I - 6
  12406.         Y(I) = X(I)**4
  12407.   110 CONTINUE
  12408. C
  12409. C     Test DPOLFT
  12410. C     Input EPS is negative - specified level
  12411. C
  12412.       W(1) = -1.0D0
  12413.       EPS = -0.01D0
  12414.       SVEPS = EPS
  12415.       MAXORD = 8
  12416.       NORDP = 4
  12417.       RP = 625.0D0
  12418.       IERP = 1
  12419.       CALL DPOLFT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  12420. C
  12421. C     See if test passed
  12422. C
  12423.       CALL DCMPAR (ICNT, ITEST)
  12424. C
  12425. C     Check for suppression of printing.
  12426. C
  12427.       IF (KPRINT .EQ. 0) GO TO 130
  12428.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 130
  12429.       WRITE (LUN,FMT=9010)
  12430.       WRITE (LUN,FMT=9020)
  12431.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 120
  12432.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  12433.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  12434. C
  12435. C     Send message indicating passage or failure of test
  12436. C
  12437.   120 CALL PASS (LUN, ICNT, ITEST(ICNT))
  12438. C
  12439. C     Input EPS is negative - computed level
  12440. C
  12441.   130 EPS = -1.0D0
  12442.       SVEPS = EPS
  12443.       CALL DPOLFT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  12444. C
  12445. C     See if test passed
  12446. C
  12447.       CALL DCMPAR (ICNT, ITEST)
  12448. C
  12449. C     Check for suppression of printing.
  12450. C
  12451.       IF (KPRINT .EQ. 0) GO TO 150
  12452.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 150
  12453.       WRITE (LUN,FMT=9050)
  12454.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 140
  12455.       WRITE (LUN,FMT=9060) MAXORD
  12456.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  12457.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  12458. C
  12459. C     Send message indicating passage or failure of test
  12460. C
  12461.   140 CALL PASS (LUN, ICNT, ITEST(ICNT))
  12462. C
  12463. C     Input EPS is zero
  12464. C
  12465.   150 W(1) = -1.0D0
  12466.       EPS = 0.0D0
  12467.       SVEPS = EPS
  12468.       NORDP = 5
  12469.       MAXORD = 5
  12470.       CALL DPOLFT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  12471. C
  12472. C     See if test passed
  12473. C
  12474.       CALL DCMPAR (ICNT, ITEST)
  12475. C
  12476. C     Check for suppression of printing.
  12477. C
  12478.       IF (KPRINT .EQ. 0) GO TO 170
  12479.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 170
  12480.       WRITE (LUN,FMT=9070)
  12481.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 160
  12482.       WRITE (LUN,FMT=9060) MAXORD
  12483.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  12484.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  12485. C
  12486. C     Send message indicating passage or failure of test
  12487. C
  12488.   160 CALL PASS (LUN, ICNT, ITEST(ICNT))
  12489. C
  12490. C     Input EPS is positive
  12491. C
  12492.   170 IERP = 1
  12493.       NORDP = 4
  12494.       EPS = 75.0D0*D1MACH(4)
  12495.       SVEPS = EPS
  12496.       CALL DPOLFT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  12497. C
  12498. C     See if test passed
  12499. C
  12500.       CALL DCMPAR (ICNT, ITEST)
  12501. C
  12502. C     Check for suppression of printing.
  12503. C
  12504.       IF (KPRINT .EQ. 0) GO TO 190
  12505.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 190
  12506.       WRITE (LUN,FMT=9080)
  12507.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 180
  12508.       WRITE (LUN,FMT=9060) MAXORD
  12509.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  12510.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  12511. C
  12512. C     Send message indicating passage or failure of test
  12513. C
  12514.   180 CALL PASS (LUN, ICNT, ITEST(ICNT))
  12515. C
  12516. C     Improper input
  12517. C
  12518.   190 IERP = 2
  12519.       M = -2
  12520. C
  12521. C     Check for suppression of printing.
  12522. C
  12523.       CALL XGETF (KONTRL)
  12524.       IF (KPRINT .LE. 2) THEN
  12525.          CALL XSETF (0)
  12526.       ELSE
  12527.          CALL XSETF (1)
  12528.       ENDIF
  12529.       CALL XERCLR
  12530. C
  12531.       IF (KPRINT .GE. 3) WRITE (LUN,9090)
  12532.       CALL DPOLFT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  12533. C
  12534. C     See if test passed
  12535. C
  12536.       ICNT = ICNT + 1
  12537.       IF (IERR .EQ. 2) THEN
  12538.         ITEST(ICNT) = 1
  12539.         IF (KPRINT .GE. 3) THEN
  12540.           WRITE (LUN, 9100) 'PASSED', IERR
  12541.         ENDIF
  12542.       ELSE
  12543.         IF (KPRINT .GE. 2) THEN
  12544.           WRITE (LUN, 9100) 'FAILED', IERR
  12545.         ENDIF
  12546.       ENDIF
  12547. C
  12548. C     Check for suppression of printing.
  12549. C
  12550.       IF (KPRINT .EQ. 0) GO TO 210
  12551.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 210
  12552.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 200
  12553. C
  12554. C     Send message indicating passage or failure of test
  12555. C
  12556.   200 CALL PASS (LUN, ICNT, ITEST(ICNT))
  12557. C
  12558.       CALL XERCLR
  12559.       CALL XSETF (KONTRL)
  12560. C
  12561. C     MAXORD too small to meet RMS error
  12562. C
  12563.   210 M = 11
  12564.       W(1) = -1.0D0
  12565.       EPS = 5.0D0*D1MACH(4)
  12566.       SVEPS = EPS
  12567.       RP = 553.0D0
  12568.       MAXORD = 2
  12569.       IERP = 3
  12570.       NORDP = 2
  12571.       CALL DPOLFT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  12572. C
  12573. C     See if test passed
  12574. C
  12575.       CALL DCMPAR (ICNT, ITEST)
  12576. C
  12577. C     Check for suppression of printing.
  12578. C
  12579.       IF (KPRINT .EQ. 0) GO TO 230
  12580.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 230
  12581.       WRITE (LUN,FMT=9110)
  12582.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 220
  12583.       WRITE (LUN,FMT=9060) MAXORD
  12584.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  12585.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  12586. C
  12587. C     Send message indicating passage or failure of test
  12588. C
  12589.   220 CALL PASS (LUN, ICNT, ITEST(ICNT))
  12590. C
  12591. C     MAXORD too small to meet statistical test
  12592. C
  12593.   230 NORDP = 4
  12594.       IERP = 4
  12595.       RP = 625.0D0
  12596.       EPS = -0.01D0
  12597.       SVEPS = EPS
  12598.       MAXORD = 5
  12599.       CALL DPOLFT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  12600. C
  12601. C     See if test passed
  12602. C
  12603.       CALL DCMPAR (ICNT, ITEST)
  12604. C
  12605. C     Check for suppression of printing.
  12606. C
  12607.       IF (KPRINT .EQ. 0) GO TO 250
  12608.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 250
  12609.       WRITE (LUN,FMT=9120)
  12610.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 240
  12611.       WRITE (LUN,FMT=9060) MAXORD
  12612.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  12613.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  12614. C
  12615. C     Send message indicating passage or failure of test
  12616. C
  12617.   240 CALL PASS (LUN, ICNT, ITEST(ICNT))
  12618. C
  12619. C     Test DPCOEF
  12620. C
  12621.   250 MAXORD = 6
  12622.       EPS = 0.0D0
  12623.       SVEPS = EPS
  12624.       Y(6) = 1.0D0
  12625.       DO 260 I = 1,M
  12626.         W(I) = 1.0D0/(Y(I)**2)
  12627.   260 CONTINUE
  12628.       Y(6) = 0.0D0
  12629.       CALL DPOLFT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  12630.       CALL DPCOEF (4, 5.0D0, TC, A)
  12631. C
  12632. C     See if test passed
  12633. C
  12634.       ICNT = ICNT + 1
  12635.       IF (ABS(R(11)-TC(1)) .LE. TOL) ITEST(ICNT) = 1
  12636. C
  12637. C     Check for suppression of printing
  12638. C
  12639.       IF (KPRINT .EQ. 0) GO TO 280
  12640.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 280
  12641.       WRITE (LUN,FMT=9130)
  12642.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 270
  12643.       WRITE (LUN,FMT=9140) R(11),TC(1)
  12644. C
  12645. C     Send message indicating passage or failure of test
  12646. C
  12647.   270 CALL PASS (LUN, ICNT, ITEST(ICNT))
  12648. C
  12649. C     Test DP1VLU
  12650. C     Normal call
  12651. C
  12652.   280 CALL DP1VLU (6, 0, X(8), YFIT, YP, A)
  12653. C
  12654. C     See if test passed
  12655. C
  12656.       ICNT = ICNT + 1
  12657.       IF (ABS(R(8)-YFIT) .LE. TOL) ITEST(ICNT) = 1
  12658. C
  12659. C     Check for suppression of printing
  12660. C
  12661.       IF (KPRINT .EQ. 0) GO TO 300
  12662.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 300
  12663.       WRITE (LUN,FMT=9150)
  12664.       WRITE (LUN,FMT=9160)
  12665.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 290
  12666.       WRITE (LUN,FMT=9170) X(8),R(8),YFIT
  12667. C
  12668. C     Send message indicating passage or failure of test
  12669. C
  12670.   290 CALL PASS (LUN, ICNT, ITEST(ICNT))
  12671. C
  12672. C     Check to see if all tests passed
  12673. C
  12674.   300 IPASS = 1
  12675.       DO 310 I = 1,9
  12676.         IPASS = IPASS*ITEST(I)
  12677.   310 CONTINUE
  12678. C
  12679.       IF (IPASS.EQ.1 .AND. KPRINT.GE.3) WRITE (LUN,FMT=9180)
  12680.       IF (IPASS.EQ.0 .AND. KPRINT.GE.2) WRITE (LUN,FMT=9190)
  12681.       RETURN
  12682. C
  12683.  9000 FORMAT ('1' / 'Test DPOLFT, DPCOEF and DP1VLU')
  12684.  9010 FORMAT (' Exercise DPOLFT')
  12685.  9020 FORMAT (' Input EPS is negative - specified significance level')
  12686.  9030 FORMAT (' Input EPS =  ', E15.8, '   correct order =  ', I3,
  12687.      +        '   R(1) = ', E15.8, '   IERR = ', I1)
  12688.  9040 FORMAT (' Output EPS = ', E15.8, '   computed order = ', I3,
  12689.      +        '   R(1) = ', E15.8, '   IERR = ', I1)
  12690.  9050 FORMAT (/ ' Input EPS is negative - computed significance level')
  12691.  9060 FORMAT (' Maximum order = ', I2)
  12692.  9070 FORMAT (/ ' Input EPS is zero')
  12693.  9080 FORMAT (/ ' Input EPS is positive')
  12694.  9090 FORMAT (/ ' Invalid input')
  12695.  9100 FORMAT (' DPOLFT incorrect argument test ', A /
  12696.      +        ' IERR should be 2.  It is ', I4)
  12697.  9110 FORMAT (/ ' Cannot meet RMS error requirement')
  12698.  9120 FORMAT (/ ' Cannot satisfy statistical test')
  12699.  9130 FORMAT (/ ' Exercise DPCOEF')
  12700.  9140 FORMAT (/ ' For C=1.0, correct coefficient = ', E15.8,
  12701.      +        '   computed = ', E15.8)
  12702.  9150 FORMAT (/ ' Exercise DP1VLU')
  12703.  9160 FORMAT (' Normal execution')
  12704.  9170 FORMAT (' For X = ', F5.2, '   correct P(X) = ', E15.8,
  12705.      +        '    P(X) from DP1VLU = ', E15.8)
  12706.  9180 FORMAT (/' ***************DPOLFT PASSED ALL TESTS***************')
  12707.  9190 FORMAT (/' ***************DPOLFT FAILED SOME TESTS**************')
  12708.       END
  12709. *DECK DPLPQX
  12710.       SUBROUTINE DPLPQX (LUN, KPRINT, IPASS)
  12711. C***BEGIN PROLOGUE  DPLPQX
  12712. C***PURPOSE  Quick check for DSPLP.
  12713. C***LIBRARY   SLATEC
  12714. C***TYPE      DOUBLE PRECISION (SPLPQX-S, DPLPQX-D)
  12715. C***AUTHOR  (UNKNOWN)
  12716. C***ROUTINES CALLED  DCOPY, DSPLP, DUSRMT, PASS
  12717. C***REVISION HISTORY  (YYMMDD)
  12718. C   ??????  DATE WRITTEN
  12719. C   890911  Removed unnecessary intrinsics.  (WRB)
  12720. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  12721. C   901013  Added additional printout on failure.  (RWC)
  12722. C***END PROLOGUE  DPLPQX
  12723.       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
  12724.       EXTERNAL DUSRMT
  12725.       INTEGER ICNT, IND(60), IBASIS(60), IPASS, IWORK(900), ISOLN(14)
  12726.       DOUBLE PRECISION COSTS(37)
  12727.       DOUBLE PRECISION PRGOPT(50), DATTRV(210), BL(60), BU(60)
  12728.       DOUBLE PRECISION PRIMAL(60), DUALS(60)
  12729.       DOUBLE PRECISION WORK(800)
  12730.       DOUBLE PRECISION D(14,37)
  12731.       DOUBLE PRECISION ZERO
  12732.       INTEGER MRELAS,NVARS,INFO,LW,LIW
  12733. C***FIRST EXECUTABLE STATEMENT  DPLPQX
  12734.       IF(KPRINT.GE.2) WRITE(LUN,999)
  12735.   999 FORMAT ('1 DSPLP QUICK CHECK')
  12736.       ICNT=1
  12737.       ZERO = 0.0D0
  12738.       IPASS=0
  12739. C     DEFINE WORKING ARRAY LENGTHS
  12740.       LIW = 900
  12741.       LW = 800
  12742.       MRELAS = 14
  12743.       NVARS = 37
  12744. C     DEFINE THE ARRAY COSTS(*) FOR THE OBJECTIVE FUNCTION
  12745.       COSTS(1) = 1.030D0
  12746.       COSTS(2) = 0.985D0
  12747.       COSTS(3) = 0.997D0
  12748.       COSTS(4) = 1.036D0
  12749.       COSTS(5) = 1.005D0
  12750.       COSTS(6) = 0.980D0
  12751.       COSTS(7) = 1.004D0
  12752.       COSTS(8) = 0.993D0
  12753.       COSTS(9) = 1.018D0
  12754.       COSTS(10) = 0.947D0
  12755.       COSTS(11) = 0.910D0
  12756.       COSTS(12) = 1.028D0
  12757.       COSTS(13) = 0.957D0
  12758.       COSTS(14) = 1.025D0
  12759.       COSTS(15) = 1.036D0
  12760.       COSTS(16) = 1.060D0
  12761.       COSTS(17) = 0.954D0
  12762.       COSTS(18) = 0.891D0
  12763.       COSTS(19) = 0.921D0
  12764.       COSTS(20) = 1.040D0
  12765.       COSTS(21) = 0.912D0
  12766.       COSTS(22) = 0.926D0
  12767.       COSTS(23) = 1.000D0
  12768.       COSTS(24) = 0.000D0
  12769.       COSTS(25) = 0.000D0
  12770.       COSTS(26) = 0.000D0
  12771.       COSTS(27) = 0.000D0
  12772.       COSTS(28) = 0.000D0
  12773.       COSTS(29) = 0.000D0
  12774.       COSTS(30) = 0.000D0
  12775.       COSTS(31) = 0.000D0
  12776.       COSTS(32) = 0.000D0
  12777.       COSTS(33) = 0.000D0
  12778.       COSTS(34) = 0.000D0
  12779.       COSTS(35) = 0.000D0
  12780.       COSTS(36) = 0.000D0
  12781.       COSTS(37) = 0.000D0
  12782. C     PLACE THE NONZERO INFORMATION ABOUT THE MATRIX IN DATTRV(*)
  12783.       CALL DCOPY(14*37, ZERO, 0, D, 1)
  12784.       D(1,1) = 1.04000D0
  12785.       D(1,23) = 1.00000D0
  12786.       D(1,24) = -1.00000D0
  12787.       D(2,6) = 0.04125D0
  12788.       D(2,7) = 0.05250D0
  12789.       D(2,17) = 0.04875D0
  12790.       D(2,24) = 1.00000D0
  12791.       D(2,25) = -1.00000D0
  12792.       D(3,8) = 0.05625D0
  12793.       D(3,9) = 0.06875D0
  12794.       D(3,11) = 0.02250D0
  12795.       D(3,25) = 1.00000D0
  12796.       D(3,26) = -1.00000D0
  12797.       D(4,2) = 1.04000D0
  12798.       D(4,3) = 1.05375D0
  12799.       D(4,5) = 1.06125D0
  12800.       D(4,12) = 0.08000D0
  12801.       D(4,16) = 0.09375D0
  12802.       D(4,18) = 0.03750D0
  12803.       D(4,19) = 0.04625D0
  12804.       D(4,20) = 0.08125D0
  12805.       D(4,22) = 0.05250D0
  12806.       D(4,26) = 1.00000D0
  12807.       D(4,27) = -1.00000D0
  12808.       D(5,10) = 0.04375D0
  12809.       D(5,27) = 1.00000D0
  12810.       D(5,28) = -1.00000D0
  12811.       D(6,4) = 1.05875D0
  12812.       D(6,13) = 0.04500D0
  12813.       D(6,14) = 0.06375D0
  12814.       D(6,15) = 0.06625D0
  12815.       D(6,21) = 0.05000D0
  12816.       D(6,28) = 1.00000D0
  12817.       D(6,29) = -1.00000D0
  12818.       D(7,6) = 1.04125D0
  12819.       D(7,7) = 1.05250D0
  12820.       D(7,8) = 1.05625D0
  12821.       D(7,9) = 1.06875D0
  12822.       D(7,11) = 0.02250D0
  12823.       D(7,17) = 0.04875D0
  12824.       D(7,29) = 1.00000D0
  12825.       D(7,30) = -1.00000D0
  12826.       D(8,10) = 1.04375D0
  12827.       D(8,12) = 0.08000D0
  12828.       D(8,13) = 0.04500D0
  12829.       D(8,14) = 0.06375D0
  12830.       D(8,15) = 0.06625D0
  12831.       D(8,16) = 0.09375D0
  12832.       D(8,18) = 0.03750D0
  12833.       D(8,19) = 0.04625D0
  12834.       D(8,20) = 0.08125D0
  12835.       D(8,21) = 0.05000D0
  12836.       D(8,22) = 0.05250D0
  12837.       D(8,30) = 1.00000D0
  12838.       D(8,31) = -1.00000D0
  12839.       D(9,11) = 1.02250D0
  12840.       D(9,17) = 0.04875D0
  12841.       D(9,31) = 1.00000D0
  12842.       D(9,32) = -1.00000D0
  12843.       D(10,12) = 1.08000D0
  12844.       D(10,13) = 1.04500D0
  12845.       D(10,14) = 1.06375D0
  12846.       D(10,15) = 1.06625D0
  12847.       D(10,16) = 1.09375D0
  12848.       D(10,18) = 0.03750D0
  12849.       D(10,19) = 0.04625D0
  12850.       D(10,20) = 0.08125D0
  12851.       D(10,21) = 0.05000D0
  12852.       D(10,22) = 0.05250D0
  12853.       D(10,32) = 1.00000D0
  12854.       D(10,33) = -1.00000D0
  12855.       D(11,17) = 1.04875D0
  12856.       D(11,33) = 1.00000D0
  12857.       D(11,34) = -1.00000D0
  12858.       D(12,18) = 1.03750D0
  12859.       D(12,19) = 1.04625D0
  12860.       D(12,20) = 1.08125D0
  12861.       D(12,21) = 1.05000D0
  12862.       D(12,22) = 0.05250D0
  12863.       D(12,34) = 1.00000D0
  12864.       D(12,35) = -1.00000D0
  12865.       D(13,35) = 1.00000D0
  12866.       D(13,36) = -1.00000D0
  12867.       D(14,22) = 1.05250D0
  12868.       D(14,36) = 1.00000D0
  12869.       D(14,37) = -1.00000D0
  12870.       KOUNT = 1
  12871.       DO 20 MM=1,NVARS
  12872.         DATTRV(KOUNT) = -MM
  12873.         DO 10 KK=1,MRELAS
  12874.           IF (D(KK,MM).EQ.ZERO) GO TO 10
  12875.           KOUNT = KOUNT + 1
  12876.           DATTRV(KOUNT) = KK
  12877.           KOUNT = KOUNT + 1
  12878.           DATTRV(KOUNT) = D(KK,MM)
  12879.    10   CONTINUE
  12880.         KOUNT = KOUNT + 1
  12881.    20 CONTINUE
  12882.       DATTRV(KOUNT) = ZERO
  12883. C     NON-NEGATIVITY CONSTRAINT
  12884.       DO 30 IC=1,NVARS
  12885.         BL(IC) = ZERO
  12886.         IND(IC) = 3
  12887.         BU(IC) = 10000000.000D0
  12888.    30 CONTINUE
  12889. C     LE CONSTRAINTS
  12890.       DO 40 IV=1,MRELAS
  12891.         IVV = IV + NVARS
  12892.         IND(IVV) = 3
  12893.         BL(IVV) = 100.00000D0
  12894.         BU(IVV) = 100000000.00000D0
  12895.    40 CONTINUE
  12896.       PRGOPT(01) = 18
  12897.       PRGOPT(02) = 59
  12898.       PRGOPT(03) = 0
  12899.       PRGOPT(04) = 1
  12900.       PRGOPT(05) = 3
  12901.       PRGOPT(06) = 8
  12902.       PRGOPT(07) = 10
  12903.       PRGOPT(08) = 11
  12904.       PRGOPT(09) = 16
  12905.       PRGOPT(10) = 17
  12906.       PRGOPT(11) = 21
  12907.       PRGOPT(12) = 22
  12908.       PRGOPT(13) = 24
  12909.       PRGOPT(14) = 25
  12910.       PRGOPT(15) = 27
  12911.       PRGOPT(16) = 28
  12912.       PRGOPT(17) = 35
  12913.       PRGOPT(18) = 21
  12914.       PRGOPT(19) = 51
  12915.       PRGOPT(20) = 0
  12916.       PRGOPT(21) = 1
  12917.       CALL DSPLP(DUSRMT, MRELAS, NVARS, COSTS, PRGOPT, DATTRV, BL,
  12918.      * BU, IND, INFO, PRIMAL, DUALS, IBASIS, WORK, LW, IWORK, LIW)
  12919. C
  12920. C     LOOK FOR THE KNOWN BASIS AT THE SOLN., NOW IS ISOLN(*).
  12921. C
  12922.       DO 50 I=1,MRELAS
  12923.          ISOLN(I) = PRGOPT(I+3)
  12924.    50 CONTINUE
  12925. C
  12926.       IPASS = 1
  12927.       DO 70 J=1,MRELAS
  12928.          DO 60 I=1,MRELAS
  12929.             IF (ISOLN(I).EQ.IBASIS(J)) GO TO 70
  12930.    60    CONTINUE
  12931.          IPASS = 0
  12932.          GO TO 80
  12933.    70 CONTINUE
  12934. C
  12935.    80 IF (KPRINT.GE.2) WRITE (LUN, 99997) (ISOLN(I), IBASIS(I),
  12936.      *   I=1,MRELAS)
  12937. C
  12938.       IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.IPASS.NE.1))
  12939.      *   CALL PASS (LUN, ICNT, IPASS)
  12940. C
  12941. C     HERE IPASS=0 IF CODE FAILED QUICK CHECK;
  12942. C               =1 IF CODE PASSED QUICK CHECK.
  12943. C
  12944.       IF (KPRINT.GE.1 .AND. IPASS.NE.1) WRITE (LUN,99999)
  12945.       IF (KPRINT.GE.2 .AND. IPASS.EQ.1) WRITE (LUN,99998)
  12946.       RETURN
  12947. C
  12948. 99997 FORMAT (/'     ISOLN    IBASIS'/(2I10))
  12949. 99998 FORMAT (/' ************ DSPLP PASSED ALL TESTS ****************')
  12950. 99999 FORMAT (/' ************ DSPLP FAILED SOME TESTS ***************')
  12951.       END
  12952. *DECK DPNTCK
  12953.       SUBROUTINE DPNTCK (LUN, KPRINT, IPASS)
  12954. C***BEGIN PROLOGUE  DPNTCK
  12955. C***PURPOSE  Quick check for DPLINT, DPOLCF and DPOLVL
  12956. C***LIBRARY   SLATEC
  12957. C***TYPE      DOUBLE PRECISION (PNTCHK-S, DPNTCK-D)
  12958. C***KEYWORDS  QUICK CHECK
  12959. C***AUTHOR  Boland, W. Robert, (LANL)
  12960. C***ROUTINES CALLED  D1MACH, DPLINT, DPOLCF, DPOLVL, NUMXER, XERCLR,
  12961. C                    XGETF, XSETF
  12962. C***REVISION HISTORY  (YYMMDD)
  12963. C   920212  DATE WRITTEN
  12964. C***END PROLOGUE  DPNTCK
  12965. C     .. Scalar Arguments ..
  12966.       INTEGER IPASS, KPRINT, LUN
  12967. C     .. Local Scalars ..
  12968.       DOUBLE PRECISION TOL, YF
  12969.       INTEGER I, IERR, KONTRL, N, NERR
  12970.       LOGICAL FATAL
  12971. C     .. Local Arrays ..
  12972.       DOUBLE PRECISION C(6), D(6), DCHK(6), W(12), X(6), XCHK(6), Y(6)
  12973. C     .. External Functions ..
  12974.       DOUBLE PRECISION D1MACH
  12975.       INTEGER NUMXER
  12976.       EXTERNAL D1MACH, NUMXER
  12977. C     .. External Subroutines ..
  12978.       EXTERNAL DPOLCF, DPLINT, DPOLVL, XERCLR, XGETF, XSETF
  12979. C     .. Intrinsic Functions ..
  12980.       INTRINSIC ABS, SQRT
  12981. C     .. Data statements ..
  12982.       DATA X / 1.0D0, 2.0D0, 3.0D0, -1.0D0, -2.0D0, -3.0D0 /
  12983.       DATA Y / 0.0D0, 9.0D0, 64.0D0, 0.0D0, 9.0D0, 64.0D0 /
  12984.       DATA XCHK / 1.0D0, 0.0D0, -2.0D0, 0.0D0, 1.0D0, 0.0D0 /
  12985.       DATA DCHK / 1.0D0, 0.0D0, -4.0D0, 0.0D0, 24.0D0, 0.0D0 /
  12986. C***FIRST EXECUTABLE STATEMENT  DPNTCK
  12987.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  12988. C
  12989. C     Initialize variables for tests.
  12990. C
  12991.       TOL = SQRT(D1MACH(4))
  12992.       IPASS = 1
  12993.       N = 6
  12994. C
  12995. C     Set up polynomial test.
  12996. C
  12997.       CALL DPLINT (N, X, Y, C)
  12998.       CALL DPOLCF (0.0D0, N, X, C, D, W)
  12999. C
  13000. C     Check to see if DPOLCF test passed.
  13001. C
  13002.       FATAL = .FALSE.
  13003.       DO 110 I = 1,N
  13004.         IF (ABS(D(I)-XCHK(I)) .GT. TOL) THEN
  13005.           IPASS = 0
  13006.           FATAL = .TRUE.
  13007.         ENDIF
  13008.   110 CONTINUE
  13009.       IF (FATAL) THEN
  13010.         IF (KPRINT .GE. 2) WRITE (LUN, 9010) 'FAILED', (D(I), I = 1,N)
  13011.       ELSE
  13012.         IF (KPRINT .GE. 3) WRITE (LUN, 9010) 'PASSED', (D(I), I = 1,N)
  13013.       ENDIF
  13014. C
  13015. C     Test DPOLVL.
  13016. C
  13017.       CALL DPOLVL (5, 0.0D0, YF, D, N, X, C, W, IERR)
  13018.       IF (ABS(DCHK(1)-YF) .LE. TOL) THEN
  13019.         IF (KPRINT .GE. 3) WRITE (LUN, 9020) 'PASSED', YF,(D(I),I=1,5)
  13020.       ELSE
  13021.         IPASS = 0
  13022.         IF (KPRINT .GE. 2) WRITE (LUN, 9020) 'FAILED', YF,(D(I),I=1,5)
  13023.       ENDIF
  13024. C
  13025.       FATAL = .FALSE.
  13026.       DO 120 I = 1,5
  13027.         IF (ABS(DCHK(I+1)-D(I)) .GT. TOL) THEN
  13028.           IPASS = 0
  13029.           FATAL = .TRUE.
  13030.         ENDIF
  13031.   120 CONTINUE
  13032. C
  13033. C     Trigger 2 error conditions
  13034. C
  13035.       CALL XGETF (KONTRL)
  13036.       IF (KPRINT .LE. 2) THEN
  13037.          CALL XSETF (0)
  13038.       ELSE
  13039.          CALL XSETF (1)
  13040.       ENDIF
  13041.       FATAL = .FALSE.
  13042.       CALL XERCLR
  13043. C
  13044.       IF (KPRINT .GE. 3) WRITE (LUN,9030)
  13045.       CALL DPLINT (0, X, Y, C)
  13046.       IF (NUMXER(NERR) .NE. 2) THEN
  13047.         IPASS = 0
  13048.         FATAL = .TRUE.
  13049.       ENDIF
  13050.       CALL XERCLR
  13051. C
  13052.       X(1) = -1.0D0
  13053.       CALL DPLINT (N, X, Y, C)
  13054.       IF (NUMXER(NERR) .NE. 2) THEN
  13055.         IPASS = 0
  13056.         FATAL = .TRUE.
  13057.       ENDIF
  13058.       CALL XERCLR
  13059. C
  13060.       CALL XSETF (KONTRL)
  13061.       IF (FATAL) THEN
  13062.         IF (KPRINT .GE. 2) THEN
  13063.           WRITE (LUN, 9040)
  13064.         ENDIF
  13065.       ELSE
  13066.         IF (KPRINT .GE. 3) THEN
  13067.           WRITE (LUN, 9050)
  13068.         ENDIF
  13069.       ENDIF
  13070. C
  13071.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,9080)
  13072.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,9090)
  13073.       RETURN
  13074. C
  13075.  9000 FORMAT ('1' / ' Test DPLINT, DPOLCF and DPOLVL')
  13076.  9010 FORMAT (/ 'DPOLCF ', A, ' test' /
  13077.      +        ' Taylor coefficients for the quintic should be' /
  13078.      +        6X, '1.000', 5X, '0.000', 4X, '-2.000', 5X, '0.000', 5X,
  13079.      +        '1.000', 5X, '0.000' /
  13080.      +        ' Taylor coefficients from DPOLCF are' / 1X, 6F10.3 /)
  13081.  9020 FORMAT (' Derivative test ', A /
  13082.      +        ' The derivatives of the polynomial at zero as ',
  13083.      +        'computed by DPOLVL are' / 1X, 6F10.3 /)
  13084.  9030 FORMAT (/' 2 Error messages expected')
  13085.  9040 FORMAT (/ ' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  13086.  9050 FORMAT (/ ' ALL INCORRECT ARGUMENT TESTS PASSED')
  13087.  9080 FORMAT (/' ****************DPLINT PASSED ALL TESTS**************')
  13088.  9090 FORMAT (/' ***************DPLINT FAILED SOME TESTS**************')
  13089.       END
  13090. *DECK DPRIN
  13091.       SUBROUTINE DPRIN (LUN, NUM1, KPRINT, IP, EXACT, RESULT, ABSERR,
  13092.      +   NEVAL, IERV, LIERV)
  13093. C***BEGIN PROLOGUE  DPRIN
  13094. C***SUBSIDIARY
  13095. C***PURPOSE  Subsidiary to CDQAG, CDQAG, CDQAGI, CDQAGP, CDQAGS, CDQAWC,
  13096. C            CDQAWF, CDQAWO, CDQAWS, and CDQNG.
  13097. C***LIBRARY   SLATEC
  13098. C***AUTHOR  Piessens, Robert
  13099. C             Applied Mathematics and Programming Division
  13100. C             K. U. Leuven
  13101. C           de Doncker, Elise
  13102. C             Applied Mathematics and Programming Division
  13103. C             K. U. Leuven
  13104. C***DESCRIPTION
  13105. C
  13106. C   This program is called by the (double precision) Quadpack quick
  13107. C   check routines for printing out their messages.
  13108. C
  13109. C***ROUTINES CALLED  (NONE)
  13110. C***REVISION HISTORY  (YYMMDD)
  13111. C   811027  DATE WRITTEN
  13112. C   890831  Modified array declarations.  (WRB)
  13113. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13114. C   910627  Code completely rewritten.  (WRB)
  13115. C***END PROLOGUE  DPRIN
  13116. C     .. Scalar Arguments ..
  13117.       DOUBLE PRECISION ABSERR, EXACT, RESULT
  13118.       INTEGER IP, KPRINT, LIERV, LUN, NEVAL, NUM1
  13119. C     .. Array Arguments ..
  13120.       INTEGER IERV(*)
  13121. C     .. Local Scalars ..
  13122.       DOUBLE PRECISION ERROR
  13123.       INTEGER IER, K
  13124. C     .. Intrinsic Functions ..
  13125.       INTRINSIC ABS
  13126. C***FIRST EXECUTABLE STATEMENT  DPRIN
  13127.       IER = IERV(1)
  13128.       ERROR = ABS(EXACT-RESULT)
  13129. C
  13130.       IF (KPRINT .GE. 2) THEN
  13131.         IF (IP.EQ.1) THEN
  13132.           IF (KPRINT .GE. 3) THEN
  13133. C
  13134. C           Write PASS message.
  13135. C
  13136.             WRITE (UNIT=LUN, FMT=9000) NUM1
  13137.           ENDIF
  13138.         ELSE
  13139. C
  13140. C         Write failure messages.
  13141. C
  13142.           WRITE (UNIT=LUN, FMT=9010) NUM1
  13143.           IF (NUM1 .EQ. 0) WRITE (UNIT=LUN, FMT=9020)
  13144.           IF (NUM1 .GT. 0) WRITE (UNIT=LUN, FMT=9030) NUM1
  13145.           IF (LIERV .GT. 1) WRITE (UNIT=LUN, FMT=9040) (IERV(K),
  13146.      +                      K=2,LIERV)
  13147.           IF (NUM1 .EQ. 6) WRITE (UNIT=LUN, FMT=9050)
  13148.           WRITE (UNIT=LUN, FMT=9060)
  13149.           WRITE (UNIT=LUN, FMT=9070)
  13150.           IF (NUM1 .NE. 5) THEN
  13151.             WRITE (UNIT=LUN, FMT=9080) EXACT,RESULT,ERROR,ABSERR,IER,
  13152.      +                                 NEVAL
  13153.           ELSE
  13154.             WRITE (LUN,FMT=9090) RESULT,ABSERR,IER,NEVAL
  13155.           ENDIF
  13156.         ENDIF
  13157.       ENDIF
  13158. C
  13159.       RETURN
  13160. C
  13161.  9000 FORMAT (' TEST ON IER = ', I2, ' PASSED')
  13162.  9010 FORMAT (' TEST ON IER = ', I1, ' FAILED.')
  13163.  9020 FORMAT (' WE MUST HAVE IER = 0, ERROR.LE.ABSERR AND ABSERR.LE',
  13164.      +        '.MAX(EPSABS,EPSREL*ABS(EXACT))')
  13165.  9030 FORMAT (' WE MUST HAVE IER = ', I1)
  13166.  9040 FORMAT (' OR IER =     ', 8(I1,2X))
  13167.  9050 FORMAT (' RESULT, ABSERR, NEVAL AND EVENTUALLY LAST SHOULD BE',
  13168.      +        ' ZERO')
  13169.  9060 FORMAT (' WE HAVE   ')
  13170.  9070 FORMAT (7X, 'EXACT', 11X, 'RESULT', 6X, 'ERROR', 4X, 'ABSERR',
  13171.      +        4X, 'IER     NEVAL', /, ' ', 42X,
  13172.      +        '(EST.ERR.)(FLAG)(NO F-EVAL)')
  13173.  9080 FORMAT (' ', 2(D15.7,1X), 2(D9.2,1X), I4, 4X, I6)
  13174.  9090 FORMAT (5X, 'INFINITY', 4X, D15.7, 11X, D9.2, I5, 4X, I6)
  13175.       END
  13176. *DECK DQCGLS
  13177.       SUBROUTINE DQCGLS (LUN, KPRINT, IPASS)
  13178. C***BEGIN PROLOGUE  DQCGLS
  13179. C***PURPOSE  Quick check for DGLSS.
  13180. C***LIBRARY   SLATEC
  13181. C***TYPE      DOUBLE PRECISION (QCGLSS-S, DQCGLS-D)
  13182. C***AUTHOR  Voorhees, E. A., (LANL)
  13183. C***DESCRIPTION
  13184. C
  13185. C      QUICK CHECK SUBROUTINE  DQCGLS  TESTS THE EXECUTION
  13186. C      OF THE GENERAL LINEAR SYSTEM SOLVER, DGLSS .  THE
  13187. C      DGLSS  SUBROUTINE PACKAGE WAS WRITTEN BY T. MANTEUFFEL
  13188. C      (LANL).
  13189. C
  13190. C      A TITLE LINE AND A SUMMARY LINE ARE ALWAYS OUTPUTTED
  13191. C      BY DQCGLS.  THE SUMMARY LINE GIVES A COUNT OF THE
  13192. C      NUMBER OF PROBLEMS DETECTED DURING THE TEST.
  13193. C
  13194. C      THE REAL QUANTITIES FOR THE COMPUTED SOLUTION VECTOR
  13195. C      X  AND THE CORRESPONDING  RNORM  ARE COMPARED AGAINST
  13196. C      STORED VALUES.  DISAGREEMENT OCCURS IF A DIFFERENCE
  13197. C      IS SQRT(D1MACH(4) OR MORE.  THE RETURNED VALUE (INTEGER)
  13198. C      OF  INFO  IS ALSO CHECKED.  FOUR CASES ARE RUN, TWO
  13199. C      INVOLVING  LLSIA  AND TWO INVOLVING  ULSIA .
  13200. C
  13201. C      DQCGLS REQUIRES NO INPUT ARGUMENTS.  ON RETURN, NERR
  13202. C      (INTEGER TYPE) CONTAINS THE COUNT OF THE NUMBER OF
  13203. C      PROBLEMS DETECTED BY  QCGLSS .
  13204. C
  13205. C***ROUTINES CALLED  D1MACH, DGLSS
  13206. C***REVISION HISTORY  (YYMMDD)
  13207. C   811026  DATE WRITTEN
  13208. C   850601  REVISION DATE from Version 3.2
  13209. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13210. C   901010  Restructured using IF-THEN-ELSE-ENDIF, cleaned up FORMATs,
  13211. C           including removing an illegal character from column 1, and
  13212. C           editorial changes.  (RWC)
  13213. C***END PROLOGUE  DQCGLS
  13214. C
  13215.       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
  13216.       DIMENSION AA(4,4,2),A(4,4),BB(4,2),B(4),XX(4,4)
  13217.       DIMENSION WORK(50)
  13218.       CHARACTER*1 LIST(2)
  13219.       INTEGER INF(4),NERR,KPROG,KCASE
  13220.       INTEGER IWORK(20),INFO,LUN
  13221.       DATA AA/1.D0,.5D0,1.D0,.25D0,0.D0,2.D0,0.D0,1.D0,2.D0,-1.D0,
  13222.      11.D0,0.D0,0.D0,0.D0,0.D0,0.D0,1.D0,2.D0,-1.D0,0.D0,0.D0,1.D0,
  13223.      22.D0,0.D0,-1.D0,0.D0,1.D0,0.D0,1.D0,0.D0,1.D0,0.D0/
  13224.       DATA BB/3.D0,1.5D0,2.D0,1.25D0,1.D0,3.D0,3.D0,0.D0/
  13225.       DATA XX/.9999999999999787D0,1.000000000000007D0,
  13226.      1 1.000000000000007D0,0.D0,.8095238095238102D0,
  13227.      2 1.047619047619044D0,1.095238095238081D0,0.D0,
  13228.      3 .7777777777777857D0,1.444444444444429D0,.3333333333333393D0,
  13229.      4 .5555555555555500D0,
  13230.      5 .3333333333333321D0,0.0D0,-.3333333333333286D0,
  13231.      6 .3333333333333286D0/
  13232.       DATA INF/0,1,0,2/
  13233.       DATA LIST/'L', 'U'/
  13234. C***FIRST EXECUTABLE STATEMENT  DQCGLS
  13235.       INFO = 0
  13236.       NERR = 0
  13237.       R = MAX(SQRT(D1MACH(4)),1.D-12)
  13238.       IF (KPRINT.GE.2) WRITE(LUN,800)
  13239.       DO 60 KPROG=1,2
  13240.          DO 50 KCASE=1,2
  13241. C
  13242. C           FORM BASIC MATRIX  A  AND VECTOR  B .  (CASE 1)
  13243. C
  13244.             DO 10  I=1,4
  13245.                DO 5  J=1,4
  13246.                   A(I,J) = AA(I,J,KPROG)
  13247.     5          CONTINUE
  13248.                B(I) = BB(I,KPROG)
  13249.    10       CONTINUE
  13250. C
  13251. C           MAKE 3 ROWS IDENTICAL FOR CASE 2.
  13252. C
  13253.             IF (KCASE .NE. 1) THEN
  13254.                DO 20  I=2,3
  13255.                   DO 15  J=1,4
  13256.                      A(I,J) = A(1,J)
  13257.    15             CONTINUE
  13258.                   B(I) = B(1)
  13259.    20          CONTINUE
  13260.             ENDIF
  13261. C
  13262. C           SOLVE FOR VECTOR  X .
  13263. C
  13264.             INFO = 0
  13265.             IF (KPROG .EQ. 1) CALL DGLSS(A,4,4,3,B,4,1,RNORM,WORK,50,
  13266.      1         IWORK,20,INFO)
  13267.             IF (KPROG .EQ. 2) CALL DGLSS(A,4,3,4,B,4,1,RNORM,WORK,50,
  13268.      1         IWORK,20,INFO)
  13269. C
  13270. C           TEST COMPUTED  X , RNORM , AND  INFO .
  13271. C
  13272.             KK = 2*(KPROG - 1) + KCASE
  13273.             DELMAX = 0.0D0
  13274.             DO 30  I=1,4
  13275.                DELX = ABS(B(I)-XX(I,KK))
  13276.                DELMAX = MAX(DELMAX,DELX)
  13277.    30       CONTINUE
  13278. C
  13279.             IF (KPRINT.GE.3) WRITE (LUN,701) LIST(KPROG),KCASE,DELMAX
  13280.             IF (DELMAX .GE. R) THEN
  13281.                NERR = NERR + 1
  13282.                IF(KPRINT.GE.2) WRITE(LUN,801) LIST(KPROG),KCASE,DELMAX
  13283.             ENDIF
  13284. C
  13285.             IF (KPRINT.GE.3) WRITE (LUN,702) LIST(KPROG),KCASE,RNORM
  13286.             IF (RNORM .GE. R) THEN
  13287.                NERR = NERR + 1
  13288.                IF (KPRINT.GE.2) WRITE (LUN,802) LIST(KPROG),KCASE,RNORM
  13289.             ENDIF
  13290.             IF (KPRINT.GE.3) WRITE (LUN,703) LIST(KPROG),KCASE,INFO,
  13291.      *         INF(KK)
  13292.             IF (INFO .NE. INF(KK)) THEN
  13293.                NERR = NERR + 1
  13294.                IF (KPRINT.GE.2) WRITE (LUN,803) LIST(KPROG),KCASE,INFO,
  13295.      *            INF(KK)
  13296.             ENDIF
  13297.    50    CONTINUE
  13298.    60 CONTINUE
  13299. C
  13300. C     SUMMARY PRINT
  13301. C
  13302.       IPASS=0
  13303.       IF (NERR.EQ.0) IPASS=1
  13304.       IF (NERR.NE.0 .AND. KPRINT.NE.0) WRITE (LUN,804) NERR
  13305.       IF (NERR.EQ.0 .AND. KPRINT.GT.1) WRITE (LUN,805)
  13306.       RETURN
  13307. C
  13308.   703 FORMAT (3X, A, 'LSIA, CASE ', I1, '.  INFO=', I1, ' (SHOULD = ',
  13309.      1   I1, ')'/)
  13310.   804 FORMAT (/' **** DQCGLS DETECTED A TOTAL OF ', I2,
  13311.      1   ' PROBLEMS WITH DGLSS. ****'/)
  13312.   805 FORMAT ('     DQCGLS DETECTED NO PROBLEMS WITH DGLSS.'/)
  13313.   801 FORMAT ('   PROBLEM WITH ', A, 'LSIA, CASE ', I1,
  13314.      1   '.  MAX ABS ERROR OF', D11.4/)
  13315.   800 FORMAT(/' *  DQCGLS - QUICK CHECK FOR DGLSS (DLLSIA AND DULSIA)'/)
  13316.   701 FORMAT (3X, A, 'LSIA, CASE ', I1, '.  MAX ABS ERROR OF', D11.4/)
  13317.   702 FORMAT (3X, A, 'LSIA, CASE ', I1, '.  RNORM IS ', D11.4/)
  13318.   802 FORMAT ('   PROBLEM WITH ', A, 'LSIA, CASE ', I1,
  13319.      1   '.  RNORM (TOO LARGE) IS', D11.4/)
  13320.   803 FORMAT ('   PROBLEM WITH ', A, 'LSIA, CASE ', I1, '.  INFO=', I1,
  13321.      1   ' (SHOULD = ', I1, ')'/)
  13322.       END
  13323. *DECK DQCK
  13324.       SUBROUTINE DQCK (LUN, KPRINT, NERR)
  13325. C***BEGIN PROLOGUE  DQCK
  13326. C***PURPOSE  Quick check for DPOFS AND DNBFS.
  13327. C***LIBRARY   SLATEC
  13328. C***KEYWORDS  QUICK CHECK
  13329. C***AUTHOR  Voorhees, E. A., (LANL)
  13330. C***DESCRIPTION
  13331. C
  13332. C    QUICK CHECK SUBROUTINE DQCK TESTS THE EXECUTION OF THE
  13333. C    SLATEC SUBROUTINES DPOFS AND DNBFS.
  13334. C    A TITLE LINE AND A SUMMARY LINE ARE ALWAYS OUTPUTTED.
  13335. C
  13336. C    THE SUMMARY LINE GIVES A COUNT OF THE NUMBER OF
  13337. C    PROBLEMS ENCOUNTERED IN THE TEST IF ANY EXIST.  DQCK
  13338. C    CHECKS COMPUTED VS. EXACT SOLUTIONS TO AGREE TO
  13339. C    WITHIN 0.8 TIMES THE WORD LENGTH OF THE COMPUTER
  13340. C    (1.6 IF DOUBLE PRECISION) FOR CASE 1.  DQCK ALSO
  13341. C    TESTS ERROR HANDLING BY THE SUBROUTINE (CALLS TO
  13342. C    XERMSG (DQCK SETS IFLAG/KONTRL TO 0))
  13343. C    USING A SINGULAR MATRIX FOR CASE 2.  EACH EXECUTION
  13344. C    PROBLEM DETECTED BY DQCK RESULTS IN AN ADDITIONAL
  13345. C    EXPLANATORY LINE OF OUTPUT.
  13346. C
  13347. C    DQCK REQUIRES NO INPUT ARGUMENTS.
  13348. C    ON RETURN, NERR (INTEGER TYPE) CONTAINS THE TOTAL COUNT
  13349. C    OF ALL PROBLEMS DETECTED BY DQCK.
  13350. C
  13351. C***ROUTINES CALLED  D1MACH, DNBFS, DPOFS
  13352. C***REVISION HISTORY  (YYMMDD)
  13353. C   801002  DATE WRITTEN
  13354. C   890911  Removed unnecessary intrinsics.  (WRB)
  13355. C   890911  REVISION DATE from Version 3.2
  13356. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13357. C   901009  Restructured using IF-THEN-ELSE-ENDIF, cleaned up FORMATs,
  13358. C           including removing an illegal character from column 1, and
  13359. C           editorial changes.  (RWC)
  13360. C***END PROLOGUE  DQCK
  13361.       DOUBLE PRECISION A(4,4),AT(5,4),ABE(5,7),ABET(5,7),B(4),BT(4),
  13362.      1 C(4),WORK(35),SIGN,D1MACH
  13363.       REAL R,DELX,DELMAX
  13364.       CHARACTER*4 LIST(2)
  13365.       INTEGER LDA,N,ML,MU,IND,IWORK(4),NERR,I,J,J1,J2,JD,MLP,K,KCASE,
  13366.      1 KPROG
  13367.       DATA A/5.0D0,4.0D0,1.0D0,1.0D0,4.0D0,5.0D0,1.0D0,1.0D0,
  13368.      1 1.0D0,1.0D0,4.0D0,2.0D0,1.0D0,1.0D0,2.0D0,4.0D0/
  13369.       DATA LIST/'POFS', 'NBFS'/
  13370. C***FIRST EXECUTABLE STATEMENT  DQCK
  13371.       IF (KPRINT.GE.3) WRITE (LUN,800)
  13372.       LDA = 5
  13373.       N = 4
  13374.       ML = 2
  13375.       MU = 1
  13376.       JD = 2*ML+MU+1
  13377.       NERR = 0
  13378.       R = D1MACH(4)**0.8E0
  13379. C
  13380. C     COMPUTE C VECTOR.
  13381. C
  13382.       SIGN = 1.0D0
  13383.       DO 10 I=1,N
  13384.          C(I) = SIGN/I
  13385.          SIGN = -SIGN
  13386.    10 CONTINUE
  13387. C
  13388. C     CASE 1 FOR WELL-CONDITIONED MATRIX, CASE 2 FOR SINGULAR MATRIX.
  13389. C
  13390.       DO 170 KCASE=1,2
  13391.          DO 140 KPROG=1,2
  13392. C           SET VECTOR B TO ZERO.
  13393.             DO 11 I=1,N
  13394.                B(I) = 0.0D0
  13395.    11       CONTINUE
  13396. C
  13397. C           FORM VECTOR B FOR NON-BANDED.
  13398. C
  13399.             IF (KPROG.EQ.1) THEN
  13400.                DO 13 I=1,N
  13401.                   DO 12 J=1,N
  13402.                      B(I) = B(I)+A(I,J)*C(J)
  13403.    12             CONTINUE
  13404.    13          CONTINUE
  13405.             ELSE
  13406. C
  13407. C              FORM ABE(NB ARRAY) FROM MATRIX A
  13408. C              AND FORM VECTOR B FOR BANDED.
  13409. C
  13410.                DO 30 J=1,JD
  13411.                   DO 20 I=1,N
  13412.                      ABE(I,J) = 0.0D0
  13413.    20             CONTINUE
  13414.    30          CONTINUE
  13415. C
  13416.                MLP = ML+1
  13417.                DO 50 I=1,N
  13418.                   J1 = MAX(1,I-ML)
  13419.                   J2 = MIN(N,I+MU)
  13420.                   DO 40 J=J1,J2
  13421.                      K = J-I+MLP
  13422.                      ABE(I,K) = A(I,J)
  13423.                      B(I) = B(I)+(A(I,J)*C(J))
  13424.    40             CONTINUE
  13425.    50          CONTINUE
  13426.             ENDIF
  13427. C
  13428. C           FORM BT FROM B, AT FROM A, AND ABET FROM ABE.
  13429. C
  13430.             DO 60 I=1,N
  13431.                BT(I) = B(I)
  13432.                DO 58 J=1,N
  13433.                   AT(I,J) = A(I,J)
  13434.    58          CONTINUE
  13435.    60       CONTINUE
  13436. C
  13437.             DO 80 J=1,JD
  13438.                DO 70 I=1,N
  13439.                   ABET(I,J) = ABE(I,J)
  13440.    70          CONTINUE
  13441.    80       CONTINUE
  13442. C
  13443. C           MAKE AT AND ABET SINGULAR FOR CASE  =  2
  13444. C
  13445.             IF (KCASE.EQ.2) THEN
  13446.                DO 88 J=1,N
  13447.                   AT(1,J) = 0.0D0
  13448.    88          CONTINUE
  13449. C
  13450.                DO 90 J=1,JD
  13451.                   ABET(1,J) = 0.0D0
  13452.    90          CONTINUE
  13453.             ENDIF
  13454. C
  13455. C           SOLVE FOR X
  13456. C
  13457.             IF (KPROG.EQ.1) CALL DPOFS (AT,LDA,N,BT,1,IND,WORK)
  13458.             IF (KPROG.EQ.2) CALL DNBFS (ABET,LDA,N,ML,MU,BT,1,IND,WORK,
  13459.      *         IWORK)
  13460. C
  13461. C           COMPARE EXACT AND COMPUTED SOLUTIONS FOR CASE 1
  13462. C
  13463.             IF (KCASE.EQ.1) THEN
  13464.                DELMAX = 0.0E0
  13465.                DO 110 I=1,N
  13466.                   DELX = ABS(BT(I)-C(I))
  13467.                   DELMAX = MAX(DELMAX,DELX)
  13468.   110          CONTINUE
  13469. C
  13470.                IF (R.LE.DELMAX) THEN
  13471.                   NERR = NERR+1
  13472.                   WRITE (LUN,801) LIST(KPROG),KCASE,DELMAX
  13473.                ENDIF
  13474.             ELSE
  13475. C
  13476. C              CHECK CONTROL FOR SINGULAR MATRIX FOR CASE 2
  13477. C
  13478.                IF (IND.NE.-4) THEN
  13479.                   NERR = NERR+1
  13480.                   WRITE (LUN,802) LIST(KPROG),KCASE,IND
  13481.                ENDIF
  13482.             ENDIF
  13483.   140    CONTINUE
  13484.   170 CONTINUE
  13485. C
  13486. C     SUMMARY PRINT
  13487. C
  13488.       IF (NERR.NE.0) WRITE (LUN,803) NERR
  13489.       IF (KPRINT.GE.2 .AND. NERR.EQ.0) WRITE (LUN,804)
  13490.       RETURN
  13491. C
  13492.   800 FORMAT (/' *    DQCK - QUICK CHECK FOR  DPOFS AND DNBFS'/)
  13493.   801 FORMAT ('   PROBLEM WITH D', A, ', CASE ', I1,
  13494.      1   '.  MAX ABS ERROR OF', E11.4/)
  13495.   802 FORMAT ('   PROBLEM WITH D', A, ', CASE ', I1, '.  IND = ', I2,
  13496.      1   ' INSTEAD OF -4'/)
  13497.   803 FORMAT (/' **** DQCK DETECTED A TOTAL OF ', I2,' PROBLEMS. ****'/)
  13498.   804 FORMAT ('     DQCK DETECTED NO PROBLEMS.'/)
  13499.       END
  13500. *DECK DQCKIN
  13501.       SUBROUTINE DQCKIN (LUN, KPRINT, IPASS)
  13502. C***BEGIN PROLOGUE  DQCKIN
  13503. C***PURPOSE  Quick check for DBSKIN.
  13504. C***LIBRARY   SLATEC
  13505. C***KEYWORDS  QUICK CHECK
  13506. C***AUTHOR  Amos, D. E., (SNLA)
  13507. C***DESCRIPTION
  13508. C
  13509. C     ABSTRACT     * A DOUBLE PRECISION ROUTINE *
  13510. C     DQCKIN IS A QUICK CHECK ROUTINE WHICH EXERCISES THE MAJOR
  13511. C     LOOPS IN SUBROUTINE DBSKIN (X,N,KODE,M,Y,NZ,IERR) FOR BICKLEY
  13512. C     FUNCTIONS KI(J,X).  MORE PRECISELY, DQCKIN DOES CONSISTENCY CHECKS
  13513. C     ON THE OUTPUT FROM DBSKIN BY COMPARING SINGLE EVALUATIONS (M=1)
  13514. C     AGAINST SELECTED MEMBERS OF SEQUENCES WHICH ARE GENERATED BY
  13515. C     RECURSION.  IF THE RELATIVE ERROR IS LESS THAN 1000 TIMES UNIT
  13516. C     ROUND OFF, THEN THE TEST IS PASSED - IF NOT, THEN X, THE VALUES
  13517. C     TO BE COMPARED, THE RELATIVE ERROR AND PARAMETERS KODE, N, M AND K
  13518. C     ARE WRITTEN ON LOGICAL UNIT 6 WHERE K IS THE MEMBER OF THE
  13519. C     SEQUENCE OF LENGTH M WHICH FAILED THE TEST.  THAT IS, THE INDEX
  13520. C     OF THE FUNCTION WHICH FAILED THE TEST IS J=N+K-1.  UNDERFLOW
  13521. C     TESTS ARE MADE AND ERROR CONDITIONS ARE TRIGGERED.
  13522. C
  13523. C     FUNCTIONS I1MACH AND D1MACH MUST BE INITIALIZED ACCORDING TO THE
  13524. C     PROLOGUE IN EACH FUNCTION FOR THE MACHINE ENVIRONMENT BEFORE
  13525. C     DQCKIN OR DBSKIN CAN BE EXECUTED.  FIFTEEN MACHINE ENVIRONMENTS
  13526. C     CAN BE DEFINED IN I1MACH AND D1MACH.
  13527. C
  13528. C***ROUTINES CALLED  D1MACH, DBSKIN, I1MACH
  13529. C***REVISION HISTORY  (YYMMDD)
  13530. C   820601  DATE WRITTEN
  13531. C   890911  Removed unnecessary intrinsics.  (WRB)
  13532. C   890911  REVISION DATE from Version 3.2
  13533. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13534. C***END PROLOGUE  DQCKIN
  13535.       INTEGER I, IERR, IFLG, IX, I1M12, J, K, KODE, LUN, M, MDEL, MM,
  13536.      * N, NDEL, NN
  13537.       INTEGER I1MACH
  13538.       DOUBLE PRECISION AIX, ER, TOL, V, X, XINC, Y
  13539.       DOUBLE PRECISION D1MACH
  13540.       DIMENSION V(1), Y(10)
  13541. C***FIRST EXECUTABLE STATEMENT  DQCKIN
  13542.       TOL = 1000.0D0*MAX(D1MACH(4),1.0D-18)
  13543.       IFLG = 0
  13544.       IF(KPRINT.GE.3)WRITE (LUN,99999)
  13545. 99999 FORMAT (1H1//35H QUICK CHECK DIAGNOSTICS FOR DBSKIN//)
  13546.       DO 70 KODE=1,2
  13547.         N = 0
  13548.         DO 60 NN=1,7
  13549.           M = 1
  13550.           DO 50 MM=1,4
  13551.             X = 0.0D0
  13552.             DO 40 IX=1,6
  13553.               IF (N.EQ.0 .AND. IX.EQ.1) GO TO 30
  13554.               CALL DBSKIN(X, N, KODE, M, Y, NZ, IERR)
  13555.               DO 20 K=1,M,2
  13556.                 J = N + K - 1
  13557.                 CALL DBSKIN(X, J, KODE, 1, V, NZ, IERR)
  13558.                 ER = ABS((V(1)-Y(K))/V(1))
  13559.                 IF (ER.LE.TOL) GO TO 20
  13560.                 IF (IFLG.NE.0) GO TO 10
  13561.                 IF(KPRINT.GE.2)WRITE (LUN,99998)
  13562. 99998           FORMAT (8X, 1HX, 13X, 4HV(1), 11X, 4HY(K), 9X, 6HREL ER,
  13563.      *           1HR, 5X, 4HKODE, 3X, 1HN, 4X, 1HM, 4X, 1HK)
  13564.    10           CONTINUE
  13565.                 IFLG = IFLG + 1
  13566.                 IF(KPRINT.GE.2)
  13567.      *          WRITE (LUN,99997) X, V(1), Y(K), ER, KODE, N, M, K
  13568. 99997           FORMAT (4E15.6, 4I5)
  13569.                 IF (IFLG.GT.200) GO TO 130
  13570.    20         CONTINUE
  13571.    30         CONTINUE
  13572.               AIX = 2*IX - 3
  13573.               XINC = MAX(1.0D0,AIX)
  13574.               X = X + XINC
  13575.    40       CONTINUE
  13576.             MDEL = MAX(1,MM-1)
  13577.             M = M + MDEL
  13578.    50     CONTINUE
  13579.           NDEL = MAX(1,2*N-2)
  13580.           N = N + NDEL
  13581.    60   CONTINUE
  13582.    70 CONTINUE
  13583. C-----------------------------------------------------------------------
  13584. C     TEST UNDERFLOW
  13585. C-----------------------------------------------------------------------
  13586.       KODE = 1
  13587.       M = 10
  13588.       N = 10
  13589.       I1M12 = I1MACH(15)
  13590.       X = -2.302D0*D1MACH(5)*I1M12
  13591.       CALL DBSKIN(X, N, KODE, M, Y, NZ, IERR)
  13592.       IF (NZ.EQ.M) GO TO 80
  13593.       IF(KPRINT.GE.2)WRITE (LUN,99996)
  13594. 99996 FORMAT (//30H NZ IN UNDERFLOW TEST IS NOT 1//)
  13595.       IFLG = IFLG + 1
  13596.       GO TO 110
  13597.    80 CONTINUE
  13598.       DO 90 I=1,M
  13599.         IF (Y(I).NE.0.0D0) GO TO 100
  13600.    90 CONTINUE
  13601.       GO TO 110
  13602.   100 CONTINUE
  13603.       IFLG = IFLG + 1
  13604.       IF(KPRINT.GE.2)WRITE (LUN,99995)
  13605. 99995 FORMAT (//43H SOME Y VALUE IN UNDERFLOW TEST IS NOT ZERO//)
  13606.   110 CONTINUE
  13607.       IF (IFLG.NE.0.OR.KPRINT.LT.3) GO TO 120
  13608.       WRITE (LUN,99994)
  13609. 99994 FORMAT (//16H QUICK CHECKS OK//)
  13610.   120 CONTINUE
  13611.       IPASS=0
  13612.       IF(IFLG.EQ.0)IPASS=1
  13613.       RETURN
  13614.   130 CONTINUE
  13615.       IF(KPRINT.GE.2)WRITE (LUN,99992)
  13616. 99992 FORMAT (//52H PROCESSING OF MAIN LOOPS TERMINATED BECAUSE THE NUM,
  13617.      * 36HBER OF DIAGNOSTIC PRINTS EXCEEDS 200//)
  13618.       IPASS=0
  13619.       IF(IFLG.EQ.0)IPASS=1
  13620.       RETURN
  13621.       END
  13622. *DECK DQCPSI
  13623.       SUBROUTINE DQCPSI (LUN, KPRINT, IPASS)
  13624. C***BEGIN PROLOGUE  DQCPSI
  13625. C***PURPOSE  Quick check for DPSIFN.
  13626. C***LIBRARY   SLATEC
  13627. C***KEYWORDS  QUICK CHECK
  13628. C***AUTHOR  Amos, D. E., (SNLA)
  13629. C***DESCRIPTION
  13630. C
  13631. C     ABSTRACT  * A DOUBLE PRECISION ROUTINE *
  13632. C     DQCPSI IS A QUICK CHECK ROUTINE WHICH EXERCISES THE MAJOR
  13633. C     LOOPS IN SUBROUTINE DPSIFN(X,N,KODE,M,ANS,NZ,IERR) FOR DERIVATIVES
  13634. C     OF THE PSI FUNCTION.  FOR N=0, THE PSI FUNCTIONS ARE CALCULATED
  13635. C     EXPLICITLY AND CHECKED AGAINST EVALUATIONS FROM DPSIFN. FOR
  13636. C     N.GT.0, CONSISTENCY CHECKS ARE MADE BY COMPARING A SEQUENCE
  13637. C     AGAINST SINGLE EVALUATIONS OF DPSIFN, ONE AT A TIME.
  13638. C     IF THE RELATIVE ERROR IS LESS THAN 1000 TIMES THE MAXIMUM OF
  13639. C     UNIT ROUNDOFF AND 1.0D-18, THEN THE TEST IS PASSED--IF NOT,
  13640. C     THEN X, THE VALUES TO BE COMPARED, THE RELATIVE ERROR AND
  13641. C     PARAMETERS KODE AND N ARE WRITTEN ON LOGICAL UNIT 6 WHERE N IS
  13642. C     THE ORDER OF THE DERIVATIVE AND KODE IS A SELECTION PARAMETER
  13643. C     DEFINED IN THE PROLOGUE TO DPSIFN.
  13644. C
  13645. C     FUNCTIONS I1MACH AND D1MACH MUST BE INITIALIZED ACCORDING TO THE
  13646. C     PROLOGUE IN EACH FUNCTION FOR THE MACHINE ENVIRONMENT BEFORE
  13647. C     DQCPSI OR DPSIFN CAN BE EXECUTED.
  13648. C
  13649. C***ROUTINES CALLED  D1MACH, DPSIFN
  13650. C***REVISION HISTORY  (YYMMDD)
  13651. C   820601  DATE WRITTEN
  13652. C   890911  Removed unnecessary intrinsics.  (WRB)
  13653. C   890911  REVISION DATE from Version 3.2
  13654. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13655. C***END PROLOGUE  DQCPSI
  13656.       INTEGER I, IERR, IFLG, IX, KODE, LUN, M, N, NM, NN, NZ
  13657.       DOUBLE PRECISION ER, EULER, PSI1, PSI2, R1M4, S, TOL, X
  13658.       DOUBLE PRECISION D1MACH
  13659.       DIMENSION PSI1(3), PSI2(20)
  13660.       DATA EULER /0.5772156649015328606D0/
  13661. C***FIRST EXECUTABLE STATEMENT  DQCPSI
  13662.       R1M4 = D1MACH(4)
  13663.       TOL = 1000.0D0*MAX(R1M4,1.0D-18)
  13664.       IF(KPRINT.GE.3)WRITE (LUN,99999)
  13665. 99999 FORMAT (1H1//35H QUICK CHECK DIAGNOSTICS FOR DPSIFN//)
  13666. C-----------------------------------------------------------------------
  13667. C     CHECK PSI(I) AND PSI(I-0.5), I=1,2,...
  13668. C-----------------------------------------------------------------------
  13669.       IFLG = 0
  13670.       N = 0
  13671.       DO 50 KODE=1,2
  13672.         DO 40 M=1,2
  13673.           S = -EULER + (M-1)*(-2.0D0*LOG(2.0D0))
  13674.           X = 1.0D0 - (M-1)*0.5D0
  13675.           DO 30 I=1,20
  13676.             CALL DPSIFN(X, N, KODE, 1, PSI2, NZ, IERR)
  13677.             PSI1(1) = -S + (KODE-1)*LOG(X)
  13678.             ER = ABS((PSI1(1)-PSI2(1))/PSI1(1))
  13679.             IF (ER.LE.TOL) GO TO 20
  13680.             IF (IFLG.NE.0) GO TO 10
  13681.             IF(KPRINT.GE.2)WRITE (LUN,99998)
  13682. 99998       FORMAT (8X, 1HX, 13X, 4HPSI1, 11X, 4HPSI2, 9X, 7HREL ERR,
  13683.      *       5X, 4HKODE, 3X, 1HN)
  13684.    10       CONTINUE
  13685.             IFLG = IFLG + 1
  13686.             IF(KPRINT.GE.2)
  13687.      *      WRITE (LUN,99997) X, PSI1(1), PSI2(I), ER, KODE, N
  13688. 99997       FORMAT (4E15.6, 2I5)
  13689.             IF (IFLG.GT.200) GO TO 150
  13690.    20       CONTINUE
  13691.             S = S + 1.0D0/X
  13692.             X = X + 1.0D0
  13693.    30     CONTINUE
  13694.    40   CONTINUE
  13695.    50 CONTINUE
  13696. C-----------------------------------------------------------------------
  13697. C     CHECK SMALL X.LT.UNIT ROUNDOFF
  13698. C-----------------------------------------------------------------------
  13699.       KODE = 1
  13700.       X = TOL/10000.0D0
  13701.       N = 1
  13702.       CALL DPSIFN(X, N, KODE, 1, PSI2, NZ, IERR)
  13703.       PSI1(1) = X**(-N-1)
  13704.       ER = ABS((PSI1(1)-PSI2(1))/PSI1(1))
  13705.       IF (ER.LE.TOL) GO TO 70
  13706.       IF (IFLG.NE.0) GO TO 60
  13707.       IF(KPRINT.GE.2)WRITE (LUN,99998)
  13708.    60 CONTINUE
  13709.       IFLG = IFLG + 1
  13710.       IF(KPRINT.GE.2)
  13711.      * WRITE (LUN,99997) X, PSI1(1), PSI2(1), ER, KODE, N
  13712.    70 CONTINUE
  13713. C-----------------------------------------------------------------------
  13714. C     CONSISTENCY TESTS FOR N.GE.0
  13715. C-----------------------------------------------------------------------
  13716.       DO 130 KODE=1,2
  13717.         DO 120 M=1,5
  13718.           DO 110 N=1,16,5
  13719.             NN = N - 1
  13720.             X = 0.1D0
  13721.             DO 100 IX=1,25,2
  13722.               X = X + 1.0D0
  13723.               CALL DPSIFN(X, NN, KODE, M, PSI2, NZ, IERR)
  13724.               DO 90 I=1,M
  13725.                 NM = NN + I - 1
  13726.                 CALL DPSIFN(X, NM, KODE, 1, PSI1, NZ, IERR)
  13727.                 ER = ABS((PSI2(I)-PSI1(1))/PSI1(1))
  13728.                 IF (ER.LT.TOL) GO TO 90
  13729.                 IF (IFLG.NE.0) GO TO 80
  13730.                 IF(KPRINT.GE.2)WRITE (LUN,99998)
  13731.    80           CONTINUE
  13732.                 IFLG = IFLG + 1
  13733.                 IF(KPRINT.GE.2)
  13734.      *          WRITE (LUN,99997) X, PSI1(1), PSI2(I), ER, KODE, NM
  13735.    90         CONTINUE
  13736.   100       CONTINUE
  13737.   110     CONTINUE
  13738.   120   CONTINUE
  13739.   130 CONTINUE
  13740.       IF (IFLG.NE.0.OR.KPRINT.LT.3) GO TO 140
  13741.       WRITE (LUN,99996)
  13742. 99996 FORMAT (//16H QUICK CHECKS OK//)
  13743.   140 CONTINUE
  13744.       IPASS=0
  13745.       IF(IFLG.EQ.0)IPASS=1
  13746.       RETURN
  13747.   150 CONTINUE
  13748.       IF(KPRINT.GE.2)WRITE (LUN,99994)
  13749. 99994 FORMAT (//52H PROCESSING OF MAIN LOOPS TERMINATED BECAUSE THE NUM,
  13750.      * 36HBER OF DIAGNOSTIC PRINTS EXCEEDS 200//)
  13751.       IPASS=0
  13752.       IF(IFLG.EQ.0)IPASS=1
  13753.       RETURN
  13754.       END
  13755. *DECK DQFCN2
  13756.       SUBROUTINE DQFCN2 (N, X, FVEC, IFLAG)
  13757. C***BEGIN PROLOGUE  DQFCN2
  13758. C***PURPOSE
  13759. C***LIBRARY   SLATEC
  13760. C***KEYWORDS  QUICK CHECK
  13761. C***AUTHOR  (UNKNOWN)
  13762. C***DESCRIPTION
  13763. C
  13764. C     SUBROUTINE WHICH EVALUATES THE FUNCTION FOR TEST
  13765. C     PROGRAM USED IN QUICK CHECK OF DNSQE.
  13766. C
  13767. C***ROUTINES CALLED  (NONE)
  13768. C***REVISION HISTORY  (YYMMDD)
  13769. C   ??????  DATE WRITTEN
  13770. C   890831  Modified array declarations.  (WRB)
  13771. C   890831  REVISION DATE from Version 3.2
  13772. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13773. C***END PROLOGUE  DQFCN2
  13774.       INTEGER IFLAG, N
  13775.       DOUBLE PRECISION FVEC(*), X(*)
  13776. C***FIRST EXECUTABLE STATEMENT  DQFCN2
  13777.       FVEC(1) = 1.0D0 - X(1)
  13778.       FVEC(2) = 1.0D1*(X(2) - X(1)**2)
  13779.       RETURN
  13780.       END
  13781. *DECK DQG8TS
  13782.       SUBROUTINE DQG8TS (LUN, KPRINT, IPASS)
  13783. C***BEGIN PROLOGUE  DQG8TS
  13784. C***PURPOSE  Quick check for DGAUS8.
  13785. C***LIBRARY   SLATEC
  13786. C***TYPE      DOUBLE PRECISION (QG8TST-S, DQG8TS-D)
  13787. C***AUTHOR  (UNKNOWN)
  13788. C***ROUTINES CALLED  D1MACH, DFQD1, DFQD2, DGAUS8, XGETF, XSETF
  13789. C***REVISION HISTORY  (YYMMDD)
  13790. C   ??????  DATE WRITTEN
  13791. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13792. C   901205  Changed usage of D1MACH(3) to D1MACH(4).  (RWC)
  13793. C   910501  Added PURPOSE and TYPE records.  (WRB)
  13794. C   910708  Minor modifications in use of KPRINT.  (WRB)
  13795. C   920213  Code restructured to test DGAUS8 for all values of KPRINT,
  13796. C           second accuracy test added and testing of error returns
  13797. C           revised.  (WRB)
  13798. C***END PROLOGUE  DQG8TS
  13799. C     .. Scalar Arguments ..
  13800.       INTEGER IPASS, KPRINT, LUN
  13801. C     .. Local Scalars ..
  13802.       INTEGER IERR
  13803.       DOUBLE PRECISION A, ANS, B, COR, ERR, REQ, TOL
  13804.       LOGICAL FATAL
  13805. C     .. External Functions ..
  13806.       DOUBLE PRECISION D1MACH, DFQD1, DFQD2
  13807.       EXTERNAL D1MACH, DFQD1, DFQD2
  13808. C     .. External Subroutines ..
  13809.       EXTERNAL DGAUS8, XGETF, XSETF
  13810. C     .. Intrinsic Functions ..
  13811.       INTRINSIC ABS, MAX, SQRT
  13812. C***FIRST EXECUTABLE STATEMENT  DQG8TS
  13813.       IF (KPRINT .GE. 2) WRITE (LUN,FMT=9000)
  13814. C
  13815. C     Initialize variables for testing.
  13816. C
  13817.       TOL = SQRT(D1MACH(4))
  13818.       IPASS = 1
  13819. C
  13820. C     First accuracy test.
  13821. C
  13822.       A = 1.0D0
  13823.       B = 4.0D0
  13824.       ERR = TOL/100.0D0
  13825.       CALL DGAUS8 (DFQD1, A, B, ERR, ANS, IERR)
  13826.       COR = 2.0D0
  13827.       IF (ABS(ANS-COR).LE.TOL .AND. IERR.EQ.1) THEN
  13828.         IF (KPRINT .GE. 3)
  13829.      +    WRITE (LUN, 9010) 'PASSED', A, B, ANS, COR, ERR, IERR
  13830.       ELSE
  13831.         IPASS = 0
  13832.         IF (KPRINT .GE. 2)
  13833.      +    WRITE (LUN, 9010) 'FAILED', A, B, ANS, COR, ERR, IERR
  13834.       ENDIF
  13835. C
  13836. C     Second accuracy test.
  13837. C
  13838.       A = 0.0D0
  13839.       B = 4.0D0*ATAN(1.0D0)
  13840.       ERR = TOL/100.0D0
  13841.       CALL DGAUS8 (DFQD2, A, B, ERR, ANS, IERR)
  13842.       COR = (EXP(B)-1.0D0)/101.0D0
  13843.       IF (ABS(ANS-COR).LE.TOL .AND. IERR.EQ.1) THEN
  13844.         IF (KPRINT .GE. 3)
  13845.      +    WRITE (LUN, 9010) 'PASSED', A, B, ANS, COR, ERR, IERR
  13846.       ELSE
  13847.         IPASS = 0
  13848.         IF (KPRINT .GE. 2)
  13849.      +    WRITE (LUN, 9010) 'FAILED', A, B, ANS, COR, ERR, IERR
  13850.       ENDIF
  13851. C
  13852. C     Test error returns.
  13853. C
  13854.       CALL XGETF (KONTRL)
  13855.       IF (KPRINT .LE. 2) THEN
  13856.          CALL XSETF (0)
  13857.       ELSE
  13858.          CALL XSETF (1)
  13859.       ENDIF
  13860.       FATAL = .FALSE.
  13861. C
  13862.       IF (KPRINT .GE. 3) WRITE (LUN,FMT=9030)
  13863. C
  13864. C     Test with a discontinuous integrand and a tight error tolerance.
  13865. C
  13866.       A = 0.0D0
  13867.       B = 1.0D0
  13868.       COR = 2.0D0
  13869.       ERR = 100.0D0*D1MACH(4)
  13870.       REQ = ERR
  13871.       CALL DGAUS8 (DFQD1, A, B, ERR, ANS, IERR)
  13872. C
  13873. C     See if test passed.
  13874. C
  13875.       IF (IERR .EQ. 2) THEN
  13876.         IF (KPRINT .GE. 3)
  13877.      +    WRITE (LUN,FMT=9040) 'PASSED', REQ, ANS, IERR, ERR, COR
  13878.       ELSE
  13879.         IF (KPRINT .GE. 2)
  13880.      +    WRITE (LUN,FMT=9040) 'FAILED', REQ, ANS, IERR, ERR, COR
  13881.         IPASS = 0
  13882.         FATAL = .TRUE.
  13883.       ENDIF
  13884. C
  13885. C     Test DGAUS8 with A and B nearly equal.
  13886. C
  13887.       A = 2.0D0
  13888.       B = A*(1.0D0+D1MACH(4))
  13889.       COR = 0.0D0
  13890.       ERR = TOL
  13891. C
  13892.       CALL DGAUS8 (DFQD1, A, B, ERR, ANS, IERR)
  13893. C
  13894. C     Check to see if test passed.
  13895. C
  13896.       IF (IERR.EQ.-1 .AND. ANS.EQ.0.0D0) THEN
  13897.         IF (KPRINT .GE. 3) WRITE (LUN,9050) 'PASSED'
  13898.       ELSE
  13899.         IPASS = 0
  13900.         FATAL = .TRUE.
  13901.         IF (KPRINT .GE. 2) WRITE (LUN,9050) 'FAILED'
  13902.       ENDIF
  13903. C
  13904.       CALL XSETF (KONTRL)
  13905.       IF (FATAL) THEN
  13906.          IF (KPRINT .GE. 2) THEN
  13907.             WRITE (LUN, 9060)
  13908.          ENDIF
  13909.       ELSE
  13910.          IF (KPRINT .GE. 3) THEN
  13911.             WRITE (LUN, 9070)
  13912.          ENDIF
  13913.       ENDIF
  13914. C
  13915.       IF (IPASS.EQ.1 .AND. KPRINT.GE.3) WRITE (LUN,FMT=9080)
  13916.       IF (IPASS.EQ.0 .AND. KPRINT.GE.2) WRITE (LUN,FMT=9090)
  13917.       RETURN
  13918. C
  13919.  9000 FORMAT ('1' / ' DGAUS8 Quick Check')
  13920.  9010 FORMAT (/ ' Accuracy test of DGAUS8 ', A /
  13921.      +        ' A = ', F10.5, '   B = ', F10.5 /
  13922.      +        ' Computed result = ', D14.7, '   Exact result = ',
  13923.      +        D14.7 /
  13924.      +        ' Tolerance = ', D14.7, '   IERR = ', I2 /)
  13925.  9030 FORMAT (/ ' Test error returns' /
  13926.      +        ' 2 error messages expected' /)
  13927.  9040 FORMAT (' Test of DGAUS8 ', A /
  13928.      +        ' REQ =', D10.2, 5X, 'ANS =', D20.13, 5X, 'IERR =', I2,
  13929.      +        5X, 'should be 2' /
  13930.      +        ' ERR =', D10.2, ' CORRECT =' ,D20.13 /)
  13931.  9050 FORMAT (' Test of A and B nearly equal ', A)
  13932.  9060 FORMAT (/ ' At least one incorrect argument test FAILED')
  13933.  9070 FORMAT (/ ' All incorrect argument tests PASSED')
  13934.  9080 FORMAT (/,' ***************DGAUS8 PASSED ALL TESTS**************')
  13935.  9090 FORMAT (/,' ***************DGAUS8 FAILED SOME TESTS*************')
  13936.       END
  13937. *DECK DQJAC2
  13938.       SUBROUTINE DQJAC2 (N, X, FVEC, FJAC, LDFJAC, IFLAG)
  13939. C***BEGIN PROLOGUE  DQJAC2
  13940. C***PURPOSE
  13941. C***LIBRARY   SLATEC
  13942. C***KEYWORDS  QUICK CHECK
  13943. C***AUTHOR  (UNKNOWN)
  13944. C***DESCRIPTION
  13945. C
  13946. C     SUBROUTINE TO EVALUATE THE FULL JACOBIAN FOR TEST PROBLEM USED
  13947. C     IN QUICK CHECK OF DNSQE.
  13948. C
  13949. C***ROUTINES CALLED  (NONE)
  13950. C***REVISION HISTORY  (YYMMDD)
  13951. C   ??????  DATE WRITTEN
  13952. C   890831  Modified array declarations.  (WRB)
  13953. C   890831  REVISION DATE from Version 3.2
  13954. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13955. C***END PROLOGUE  DQJAC2
  13956.       INTEGER IFLAG, LDFJAC, N
  13957.       DOUBLE PRECISION FJAC(LDFJAC,*), FVEC(*), X(*)
  13958. C***FIRST EXECUTABLE STATEMENT  DQJAC2
  13959.       FJAC(1,1) = -1.0D0
  13960.       FJAC(1,2) = 0.0D0
  13961.       FJAC(2,1) = -2.0D1*X(1)
  13962.       FJAC(2,2) = 1.0D1
  13963.       RETURN
  13964.       END
  13965. *DECK DQN79Q
  13966.       SUBROUTINE DQN79Q (LUN, KPRINT, IPASS)
  13967. C***BEGIN PROLOGUE  DQN79Q
  13968. C***PURPOSE  Quick check for DQNC79.
  13969. C***LIBRARY   SLATEC
  13970. C***TYPE      DOUBLE PRECISION (QN79QX-S, DQN79Q-D)
  13971. C***AUTHOR  (UNKNOWN)
  13972. C***ROUTINES CALLED  D1MACH, DFQD1, DFQD2, DQNC79, XGETF, XSETF
  13973. C***REVISION HISTORY  (YYMMDD)
  13974. C   ??????  DATE WRITTEN
  13975. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  13976. C   901205  Changed usage of D1MACH(3) to D1MACH(4).  (RWC)
  13977. C   910501  Added PURPOSE and TYPE records.  (WRB)
  13978. C   910708  Minor modifications in use of KPRINT.  (WRB)
  13979. C   920213  Code restructured to test DQNC79 for all values of KPRINT,
  13980. C           second accuracy test added and testing of error returns
  13981. C           revised.  (WRB)
  13982. C***END PROLOGUE  DQN79Q
  13983. C     .. Scalar Arguments ..
  13984.       INTEGER IPASS, KPRINT, LUN
  13985. C     .. Local Scalars ..
  13986.       INTEGER IERR, KONTRL, NFCT
  13987.       DOUBLE PRECISION A, ANS, B, COR, ERR, REQ, TOL
  13988.       LOGICAL FATAL
  13989. C     .. External Functions ..
  13990.       DOUBLE PRECISION D1MACH, DFQD1, DFQD2
  13991.       EXTERNAL D1MACH, DFQD1, DFQD2
  13992. C     .. External Subroutines ..
  13993.       EXTERNAL DQNC79, XGETF, XSETF
  13994. C     .. Intrinsic Functions ..
  13995.       INTRINSIC ABS, MAX, SQRT
  13996. C***FIRST EXECUTABLE STATEMENT  DQN79Q
  13997.       IF (KPRINT .GE. 2) WRITE (LUN,FMT=9000)
  13998. C
  13999. C     Initialize variables for testing.
  14000. C
  14001.       TOL = SQRT(D1MACH(4))
  14002.       IPASS = 1
  14003. C
  14004. C     First accuracy test.
  14005. C
  14006.       A = 1.0D0
  14007.       B = 4.0D0
  14008.       ERR = TOL/100.0D0
  14009.       CALL DQNC79 (DFQD1, A, B, ERR, ANS, IERR, NFCT)
  14010.       COR = 2.0D0
  14011.       IF (ABS(ANS-COR).LE.TOL .AND. IERR.EQ.1) THEN
  14012.         IF (KPRINT .GE. 3)
  14013.      +    WRITE (LUN, 9010) 'PASSED', A, B, ANS, COR, ERR, IERR, NFCT
  14014.       ELSE
  14015.         IPASS = 0
  14016.         IF (KPRINT .GE. 2)
  14017.      +    WRITE (LUN, 9010) 'FAILED', A, B, ANS, COR, ERR, IERR, NFCT
  14018.       ENDIF
  14019. C
  14020. C     Second accuracy test.
  14021. C
  14022.       A = 0.0D0
  14023.       B = 4.0D0*ATAN(1.0D0)
  14024.       ERR = TOL/10.0D0
  14025.       CALL DQNC79 (DFQD2, A, B, ERR, ANS, IERR, NFCT)
  14026.       COR = (EXP(B)-1.0D0)/101.0D0
  14027.       IF (ABS(ANS-COR).LE.TOL .AND. IERR.EQ.1) THEN
  14028.         IF (KPRINT .GE. 3)
  14029.      +    WRITE (LUN, 9010) 'PASSED', A, B, ANS, COR, ERR, IERR, NFCT
  14030.       ELSE
  14031.         IPASS = 0
  14032.         IF (KPRINT .GE. 2)
  14033.      +    WRITE (LUN, 9010) 'FAILED', A, B, ANS, COR, ERR, IERR, NFCT
  14034.       ENDIF
  14035. C
  14036. C     Test error returns.
  14037. C
  14038.       CALL XGETF (KONTRL)
  14039.       IF (KPRINT .LE. 2) THEN
  14040.          CALL XSETF (0)
  14041.       ELSE
  14042.          CALL XSETF (1)
  14043.       ENDIF
  14044.       FATAL = .FALSE.
  14045. C
  14046.       IF (KPRINT .GE. 3) WRITE (LUN,FMT=9030)
  14047. C
  14048. C     Test with a discontinuous integrand and a tight error tolerance.
  14049. C
  14050.       A = 0.0D0
  14051.       B = 1.0D0
  14052.       COR = 2.0D0
  14053.       ERR = 100.0D0*D1MACH(4)
  14054.       REQ = ERR
  14055.       CALL DQNC79 (DFQD1, A, B, ERR, ANS, IERR, NFCT)
  14056. C
  14057. C     See if test passed.
  14058. C
  14059.       IF (IERR .EQ. 2) THEN
  14060.         IF (KPRINT .GE. 3)
  14061.      +    WRITE (LUN,FMT=9040) 'PASSED', REQ, ANS, IERR, ERR, COR
  14062.       ELSE
  14063.         IF (KPRINT .GE. 2)
  14064.      +    WRITE (LUN,FMT=9040) 'FAILED', REQ, ANS, IERR, ERR, COR
  14065.         IPASS = 0
  14066.         FATAL = .TRUE.
  14067.       ENDIF
  14068. C
  14069. C     Test DQNC79 with A and B nearly equal.
  14070. C
  14071.       A = 2.0D0
  14072.       B = A*(1.0D0+D1MACH(4))
  14073.       COR = 0.0D0
  14074.       ERR = TOL
  14075. C
  14076.       CALL DQNC79 (DFQD1, A, B, ERR, ANS, IERR, NFCT)
  14077. C
  14078. C     Check to see if test passed.
  14079. C
  14080.       IF (IERR.EQ.-1 .AND. ANS.EQ.0.0D0) THEN
  14081.         IF (KPRINT .GE. 3) WRITE (LUN,9050) 'PASSED'
  14082.       ELSE
  14083.         IPASS = 0
  14084.         FATAL = .TRUE.
  14085.         IF (KPRINT .GE. 2) WRITE (LUN,9050) 'FAILED'
  14086.       ENDIF
  14087. C
  14088.       CALL XSETF (KONTRL)
  14089.       IF (FATAL) THEN
  14090.          IF (KPRINT .GE. 2) THEN
  14091.             WRITE (LUN, 9060)
  14092.          ENDIF
  14093.       ELSE
  14094.          IF (KPRINT .GE. 3) THEN
  14095.             WRITE (LUN, 9070)
  14096.          ENDIF
  14097.       ENDIF
  14098. C
  14099.       IF (IPASS.EQ.1 .AND. KPRINT.GE.3) WRITE (LUN,FMT=9080)
  14100.       IF (IPASS.EQ.0 .AND. KPRINT.GE.2) WRITE (LUN,FMT=9090)
  14101.       RETURN
  14102. C
  14103.  9000 FORMAT ('1' / ' DQNC79 Quick Check')
  14104.  9010 FORMAT (/ ' Accuracy test of DQNC79 ', A /
  14105.      +        ' A = ', F10.5, '   B = ', F10.5 /
  14106.      +        ' Computed result = ', D14.7, '   Exact result = ',
  14107.      +        D14.7 /
  14108.      +        ' Tolerance = ', D14.7, '   IERR = ', I2,
  14109.      +        '   Number of function evals = ', I5 /)
  14110.  9030 FORMAT (/ ' Test error returns' /
  14111.      +        ' 2 error messages expected' /)
  14112.  9040 FORMAT (' Test of DQNC79 ', A /
  14113.      +        ' REQ =', D10.2, 5X, 'ANS =', D20.13, 5X, 'IERR =', I2,
  14114.      +        5X, 'should be 2' /
  14115.      +        ' ERR =', D10.2, ' CORRECT =' ,D20.13 /)
  14116.  9050 FORMAT (' Test of A and B nearly equal ', A)
  14117.  9060 FORMAT (/ ' At least one incorrect argument test FAILED')
  14118.  9070 FORMAT (/ ' All incorrect argument tests PASSED')
  14119.  9080 FORMAT (/' ***************DQNC79 PASSED ALL TESTS***************')
  14120.  9090 FORMAT (/' ***************DQNC79 FAILED SOME TESTS**************')
  14121.       END
  14122. *DECK DSOSFN
  14123.       DOUBLE PRECISION FUNCTION DSOSFN (X, K)
  14124. C***BEGIN PROLOGUE  DSOSFN
  14125. C***PURPOSE  Function evaluator for DSOS quick check.
  14126. C***LIBRARY   SLATEC
  14127. C***KEYWORDS  QUICK CHECK
  14128. C***AUTHOR  Watts, H. A., (SNLA)
  14129. C***DESCRIPTION
  14130. C
  14131. C     FUNCTION WHICH EVALUATES THE FUNCTIONS, ONE AT A TIME,
  14132. C     FOR TEST PROGRAM USED IN QUICK CHECK OF DSOS.
  14133. C
  14134. C***ROUTINES CALLED  (NONE)
  14135. C***REVISION HISTORY  (YYMMDD)
  14136. C   801001  DATE WRITTEN
  14137. C   890618  REVISION DATE from Version 3.2
  14138. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14139. C***END PROLOGUE  DSOSFN
  14140.       INTEGER K
  14141.       DOUBLE PRECISION X(2)
  14142. C***FIRST EXECUTABLE STATEMENT  DSOSFN
  14143.       IF (K .EQ. 1) DSOSFN = 1.0D0 - X(1)
  14144.       IF (K .EQ. 2) DSOSFN = 1.0D1*(X(2) - X(1)**2)
  14145.       RETURN
  14146.       END
  14147. *DECK DSOSQX
  14148.       SUBROUTINE DSOSQX (LUN, KPRINT, IPASS)
  14149. C***BEGIN PROLOGUE  DSOSQX
  14150. C***PURPOSE  Quick check for DSOS.
  14151. C***LIBRARY   SLATEC
  14152. C***TYPE      DOUBLE PRECISION (SOSNQX-S, DSOSQX-D)
  14153. C***KEYWORDS  QUICK CHECK
  14154. C***AUTHOR  Watts, H. A., (SNLA)
  14155. C***DESCRIPTION
  14156. C
  14157. C   This subroutine performs a quick check on the subroutine DSOS.
  14158. C
  14159. C***ROUTINES CALLED  D1MACH, DNRM2, DSOS, DSOSFN, PASS
  14160. C***REVISION HISTORY  (YYMMDD)
  14161. C   801001  DATE WRITTEN
  14162. C   890618  REVISION DATE from Version 3.2
  14163. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14164. C   920310  Code cleaned up and TYPE section added.  (RWC, WRB)
  14165. C***END PROLOGUE  DSOSQX
  14166. C     .. Scalar Arguments ..
  14167.       INTEGER IPASS, KPRINT, LUN
  14168. C     .. Local Scalars ..
  14169.       DOUBLE PRECISION AER, FNORM, FNORMS, RER, TOLF
  14170.       INTEGER ICNT, IFLAG, IFLAGS, LIW, LWA, N
  14171. C     .. Local Arrays ..
  14172.       DOUBLE PRECISION FVEC(2), WA(17), X(2)
  14173.       INTEGER ITEST(2), IW(6)
  14174. C     .. External Functions ..
  14175.       DOUBLE PRECISION D1MACH, DNRM2, DSOSFN
  14176.       EXTERNAL D1MACH, DNRM2, DSOSFN
  14177. C     .. External Subroutines ..
  14178.       EXTERNAL DSOS, PASS
  14179. C     .. Intrinsic Functions ..
  14180.       INTRINSIC SQRT
  14181. C***FIRST EXECUTABLE STATEMENT  DSOSQX
  14182.       IFLAGS = 3
  14183.       FNORMS = 0.0D0
  14184.       N = 2
  14185.       LWA = 17
  14186.       LIW = 6
  14187.       TOLF = SQRT(D1MACH(4))
  14188.       RER = SQRT(D1MACH(4))
  14189.       AER = 0.0D0
  14190.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  14191. C
  14192. C     Test the code with proper input values.
  14193. C
  14194.       IFLAG = 0
  14195.       X(1) = -1.2D0
  14196.       X(2) = 1.0D0
  14197.       CALL DSOS (DSOSFN,N,X,RER,AER,TOLF,IFLAG,WA,LWA,IW,LIW)
  14198.       ICNT = 1
  14199.       FVEC(1) = DSOSFN(X,1)
  14200.       FVEC(2) = DSOSFN(X,2)
  14201.       FNORM = DNRM2(N,FVEC,1)
  14202.       ITEST(ICNT) = 0
  14203.       IF (IFLAG.LE.IFLAGS .AND. FNORM-FNORMS.LE.RER) ITEST(ICNT) = 1
  14204. C
  14205.       IF (KPRINT .NE. 0) THEN
  14206.          IF (KPRINT.GE.3 .OR. (KPRINT.GE.2.AND.ITEST(ICNT).NE.1))
  14207.      +       WRITE (LUN,9010) IFLAGS,FNORMS,IFLAG,FNORM
  14208.          IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  14209.      +       CALL PASS (LUN,ICNT,ITEST(ICNT))
  14210.       ENDIF
  14211. C
  14212. C     Test improper input parameters.
  14213. C
  14214.       LWA = 15
  14215.       IFLAG = 0
  14216.       X(1) = -1.2D0
  14217.       X(2) = 1.0D0
  14218.       CALL DSOS (DSOSFN,N,X,RER,AER,TOLF,IFLAG,WA,LWA,IW,LIW)
  14219.       ICNT = 2
  14220.       ITEST(ICNT) = 0
  14221.       IF (IFLAG .EQ. 9) ITEST(ICNT) = 1
  14222.       IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  14223.      +    CALL PASS (LUN,ICNT,ITEST(ICNT))
  14224. C
  14225. C     Set IPASS.
  14226. C
  14227.       IPASS = ITEST(1)*ITEST(2)
  14228.       IF (KPRINT.GE.1 .AND. IPASS.NE.1) WRITE (LUN,9020)
  14229.       IF (KPRINT.GE.2 .AND. IPASS.EQ.1) WRITE (LUN,9030)
  14230.       RETURN
  14231.  9000 FORMAT ('1' / '  DSOS QUICK CHECK' /)
  14232.  9010 FORMAT (' EXPECTED VALUE OF IFLAG AND RESIDUAL NORM', I5, D20.5 /
  14233.      +        ' RETURNED VALUE OF IFLAG AND RESIDUAL NORM', I5, D20.5 /)
  14234.  9020 FORMAT (/' **********WARNING -- DSOS FAILED SOME TESTS**********')
  14235.  9030 FORMAT (/' ----------DSOS PASSED ALL TESTS----------')
  14236.       END
  14237. *DECK DT0
  14238.       DOUBLE PRECISION FUNCTION DT0 (X)
  14239. C***BEGIN PROLOGUE  DT0
  14240. C***PURPOSE  Subsidiary to
  14241. C***LIBRARY   SLATEC
  14242. C***AUTHOR  (UNKNOWN)
  14243. C***ROUTINES CALLED  DF0S
  14244. C***REVISION HISTORY  (YYMMDD)
  14245. C   ??????  DATE WRITTEN
  14246. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14247. C***END PROLOGUE  DT0
  14248.       DOUBLE PRECISION A,B,DF0S,X,X1,Y
  14249. C***FIRST EXECUTABLE STATEMENT  DT0
  14250.       A = 0.0D+00
  14251.       B = 0.1D+01
  14252.       X1 = X+0.1D+01
  14253.       Y = (B-A)/X1+A
  14254.       DT0 = (B-A)*DF0S(Y)/X1/X1
  14255.       RETURN
  14256.       END
  14257. *DECK DT1
  14258.       DOUBLE PRECISION FUNCTION DT1 (X)
  14259. C***BEGIN PROLOGUE  DT1
  14260. C***PURPOSE  Subsidiary to
  14261. C***LIBRARY   SLATEC
  14262. C***AUTHOR  (UNKNOWN)
  14263. C***ROUTINES CALLED  DF1S
  14264. C***REVISION HISTORY  (YYMMDD)
  14265. C   ??????  DATE WRITTEN
  14266. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14267. C***END PROLOGUE  DT1
  14268.       DOUBLE PRECISION A,B,DF1S,X,X1,Y
  14269. C***FIRST EXECUTABLE STATEMENT  DT1
  14270.       A = 0.0D+00
  14271.       B = 0.1D+01
  14272.       X1 = X+0.1D+01
  14273.       Y = (B-A)/X1+A
  14274.       DT1 = (B-A)*DF1S(Y)/X1/X1
  14275.       RETURN
  14276.       END
  14277. *DECK DT2
  14278.       DOUBLE PRECISION FUNCTION DT2 (X)
  14279. C***BEGIN PROLOGUE  DT2
  14280. C***PURPOSE  Subsidiary to
  14281. C***LIBRARY   SLATEC
  14282. C***AUTHOR  (UNKNOWN)
  14283. C***ROUTINES CALLED  DF2S
  14284. C***REVISION HISTORY  (YYMMDD)
  14285. C   ??????  DATE WRITTEN
  14286. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14287. C***END PROLOGUE  DT2
  14288.       DOUBLE PRECISION A,B,DF2S,X,X1,Y
  14289. C***FIRST EXECUTABLE STATEMENT  DT2
  14290.       A = 0.1D+00
  14291.       B = 0.1D+01
  14292.       X1 = X+0.1D+01
  14293.       Y = (B-A)/X1+A
  14294.       DT2 = (B-A)*DF2S(Y)/X1/X1
  14295.       RETURN
  14296.       END
  14297. *DECK DT3
  14298.       DOUBLE PRECISION FUNCTION DT3 (X)
  14299. C***BEGIN PROLOGUE  DT3
  14300. C***PURPOSE  Subsidiary to
  14301. C***LIBRARY   SLATEC
  14302. C***AUTHOR  (UNKNOWN)
  14303. C***ROUTINES CALLED  DF3S
  14304. C***REVISION HISTORY  (YYMMDD)
  14305. C   ??????  DATE WRITTEN
  14306. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14307. C***END PROLOGUE  DT3
  14308.       DOUBLE PRECISION A,B,DF3S,X,X1,Y
  14309. C***FIRST EXECUTABLE STATEMENT  DT3
  14310.       A = 0.0D+00
  14311.       B = 0.5D+01
  14312.       X1 = X+0.1D+01
  14313.       Y = (B-A)/X1+A
  14314.       DT3 = (B-A)*DF3S(Y)/X1/X1
  14315.       RETURN
  14316.       END
  14317. *DECK DT4
  14318.       DOUBLE PRECISION FUNCTION DT4 (X)
  14319. C***BEGIN PROLOGUE  DT4
  14320. C***PURPOSE  Subsidiary to
  14321. C***LIBRARY   SLATEC
  14322. C***AUTHOR  (UNKNOWN)
  14323. C***ROUTINES CALLED  DF4S
  14324. C***REVISION HISTORY  (YYMMDD)
  14325. C   ??????  DATE WRITTEN
  14326. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14327. C***END PROLOGUE  DT4
  14328.       DOUBLE PRECISION A,B,DF4S,X,X1,Y
  14329. C***FIRST EXECUTABLE STATEMENT  DT4
  14330.       A = 0.0D+00
  14331.       B = 0.1D+01
  14332.       X1 = X+0.1D+01
  14333.       Y = (B-A)/X1+A
  14334.       DT4 = (B-A)*DF4S(Y)/X1/X1
  14335.       RETURN
  14336.       END
  14337. *DECK DT5
  14338.       DOUBLE PRECISION FUNCTION DT5 (X)
  14339. C***BEGIN PROLOGUE  DT5
  14340. C***PURPOSE  Subsidiary to
  14341. C***LIBRARY   SLATEC
  14342. C***AUTHOR  (UNKNOWN)
  14343. C***ROUTINES CALLED  DF5S
  14344. C***REVISION HISTORY  (YYMMDD)
  14345. C   ??????  DATE WRITTEN
  14346. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14347. C***END PROLOGUE  DT5
  14348.       DOUBLE PRECISION A,B,DF5S,X,X1,Y
  14349. C***FIRST EXECUTABLE STATEMENT  DT5
  14350.       A = 0.0D+00
  14351.       B = 0.1D+01
  14352.       X1 = X+0.1D+01
  14353.       Y = (B-A)/X1+A
  14354.       DT5 = (B-A)*DF5S(Y)/X1/X1
  14355.       RETURN
  14356.       END
  14357. *DECK DTEST
  14358.       SUBROUTINE DTEST (LEN, DCOMP, DTRUE, DSIZE, DFAC, KPRINT)
  14359. C***BEGIN PROLOGUE  DTEST
  14360. C***PURPOSE  Compare arrays DCOMP and DTRUE.
  14361. C***LIBRARY   SLATEC
  14362. C***TYPE      DOUBLE PRECISION (STEST-S, DTEST-D)
  14363. C***KEYWORDS  QUICK CHECK
  14364. C***AUTHOR  Lawson, C. L., (JPL)
  14365. C***DESCRIPTION
  14366. C
  14367. C   This subroutine compares arrays DCOMP and DTRUE of length LEN to
  14368. C   see if the term by term differences, multiplied by DFAC, are
  14369. C   negligible.  In the case of a significant difference, appropriate
  14370. C   messages are written.
  14371. C
  14372. C***ROUTINES CALLED  D1MACH
  14373. C***COMMON BLOCKS    COMBLA
  14374. C***REVISION HISTORY  (YYMMDD)
  14375. C   741210  DATE WRITTEN
  14376. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14377. C   900820  Modified IF test to use function DDIFF and made cosmetic
  14378. C           changes to routine.  (WRB)
  14379. C   901005  Removed usage of DDIFF in favour of D1MACH.  (RWC)
  14380. C   910501  Added TYPE record.  (WRB)
  14381. C   920211  Code restructured and information added to the DESCRIPTION
  14382. C           section.  (WRB)
  14383. C***END PROLOGUE  DTEST
  14384.       DOUBLE PRECISION DCOMP(*), DTRUE(*), DSIZE(*), DFAC, DD,
  14385.      +       RELEPS, D1MACH
  14386.       LOGICAL PASS
  14387.       COMMON /COMBLA/ NPRINT, ICASE, N, INCX, INCY, MODE, PASS
  14388.       SAVE RELEPS
  14389.       DATA RELEPS /0.0D0/
  14390. C***FIRST EXECUTABLE STATEMENT  DTEST
  14391.       IF (RELEPS .EQ. 0.0D0) RELEPS = D1MACH(4)
  14392.       DO 100 I = 1,LEN
  14393.         DD = ABS(DCOMP(I)-DTRUE(I))
  14394.         IF (DFAC*DD .GT. ABS(DSIZE(I))*RELEPS) THEN
  14395. C
  14396. C         Here DCOMP(I) is not close to DTRUE(I).
  14397. C
  14398.           IF (PASS) THEN
  14399. C
  14400. C           Print FAIL message and header.
  14401. C
  14402.             PASS = .FALSE.
  14403.             IF (KPRINT .GE. 3) THEN
  14404.               WRITE (NPRINT,9000)
  14405.               WRITE (NPRINT,9010)
  14406.             ENDIF
  14407.           ENDIF
  14408.           IF (KPRINT .GE. 3) WRITE (NPRINT,9020) ICASE, N, INCX, INCY,
  14409.      +                       MODE, I, DCOMP(I), DTRUE(I), DD, DSIZE(I)
  14410.         ENDIF
  14411.   100 CONTINUE
  14412.       RETURN
  14413.  9000 FORMAT ('+', 39X, 'FAIL')
  14414.  9010 FORMAT ('0CASE  N INCX INCY MODE  I', 29X, 'COMP(I)', 29X,
  14415.      +        'TRUE(I)', 2X, 'DIFFERENCE', 5X, 'SIZE(I)' / 1X)
  14416.  9020 FORMAT (1X, I4, I3, 3I5, I3, 2D36.18, 2D12.4)
  14417.       END
  14418. *DECK DUIVP
  14419.       SUBROUTINE DUIVP (X, Y, YP)
  14420. C***BEGIN PROLOGUE  DUIVP
  14421. C***PURPOSE  Dummy routine for DBVSUP quick check.
  14422. C***LIBRARY   SLATEC
  14423. C***TYPE      DOUBLE PRECISION (UIVP-S, DUIVP-D)
  14424. C***KEYWORDS  QUICK CHECK
  14425. C***AUTHOR  Watts, H. A., (SNLA)
  14426. C***DESCRIPTION
  14427. C
  14428. C   This routine is never called;  it is here to prevent loaders from
  14429. C   complaining about undefined externals while testing DBVSUP.
  14430. C
  14431. C***ROUTINES CALLED  (NONE)
  14432. C***REVISION HISTORY  (YYMMDD)
  14433. C   750601  DATE WRITTEN
  14434. C   890618  REVISION DATE from Version 3.2
  14435. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14436. C   920401  Variables declaration and TYPE sections added.  (WRB)
  14437. C***END PROLOGUE  DUIVP
  14438. C     .. Scalar Arguments ..
  14439.       DOUBLE PRECISION X
  14440. C     .. Array Arguments ..
  14441.       DOUBLE PRECISION Y(*), YP(*)
  14442. C***FIRST EXECUTABLE STATEMENT  DUIVP
  14443.       STOP
  14444.       END
  14445. *DECK DUVEC
  14446.       SUBROUTINE DUVEC (X, Y, YP)
  14447. C***BEGIN PROLOGUE  DUVEC
  14448. C***PURPOSE  Dummy routine for DBVSUP quick check.
  14449. C***LIBRARY   SLATEC
  14450. C***TYPE      DOUBLE PRECISION (UVEC-S, DUVEC-D)
  14451. C***KEYWORDS  QUICK CHECK
  14452. C***AUTHOR  Watts, H. A., (SNLA)
  14453. C***DESCRIPTION
  14454. C
  14455. C   This routine is never called;  it is here to prevent loaders from
  14456. C   complaining about undefined externals while testing DBVSUP.
  14457. C
  14458. C***ROUTINES CALLED  (NONE)
  14459. C***REVISION HISTORY  (YYMMDD)
  14460. C   750601  DATE WRITTEN
  14461. C   890618  REVISION DATE from Version 3.2
  14462. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14463. C   920401  Variables declaration and TYPE sections added.  (WRB)
  14464. C***END PROLOGUE  DUVEC
  14465. C     .. Scalar Arguments ..
  14466.       DOUBLE PRECISION X
  14467. C     .. Array Arguments ..
  14468.       DOUBLE PRECISION Y(*), YP(*)
  14469. C***FIRST EXECUTABLE STATEMENT  DUVEC
  14470.       STOP
  14471.       END
  14472. *DECK EG8CK
  14473.       SUBROUTINE EG8CK (LUN, KPRINT, IPASS)
  14474. C***BEGIN PROLOGUE  EG8CK
  14475. C***PURPOSE  Quick check for EXINT and GAUS8.
  14476. C***LIBRARY   SLATEC
  14477. C***TYPE      SINGLE PRECISION (EG8CK-S, DEG8CK-D)
  14478. C***KEYWORDS  QUICK CHECK
  14479. C***AUTHOR  Amos, D. E., (SNLA)
  14480. C***DESCRIPTION
  14481. C
  14482. C   EG8CK is a quick check routine for EXINT and GAUS8.  Exponential
  14483. C   integrals from EXINT are checked against quadratures from GAUS8.
  14484. C
  14485. C***ROUTINES CALLED  EXINT, FEIN, GAUS8, R1MACH
  14486. C***COMMON BLOCKS    FEINX
  14487. C***REVISION HISTORY  (YYMMDD)
  14488. C   800501  DATE WRITTEN
  14489. C   890718  Added check when testing error conditions.  (WRB)
  14490. C   890718  REVISION DATE from Version 3.2
  14491. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14492. C   910708  Code revised to test error returns for all values of
  14493. C           KPRINT.  (WRB)
  14494. C   920206  Corrected argument list in CALL to EXINT.  (WRB)
  14495. C***END PROLOGUE  EG8CK
  14496.       COMMON /FEINX/ X, A, FKM
  14497.       INTEGER I, ICASE, IE, IERR, II, IK, IPASS, IX, IY, K, KE, KK,
  14498.      * KODE, KX, LUN, M, N, NM, NZ
  14499.       REAL A, ANS, ATOL, BB, EN, ER, EX, FKM, SIG, SUM, TOL, T1, T2, X,
  14500.      * XX, Y
  14501.       REAL R1MACH, FEIN
  14502.       DIMENSION EN(4), Y(4), XX(5)
  14503.       LOGICAL FATAL
  14504.       EXTERNAL FEIN
  14505. C***FIRST EXECUTABLE STATEMENT  EG8CK
  14506.       IF (KPRINT .GE. 2) WRITE (LUN,90000)
  14507.       IPASS=1
  14508.       TOL = SQRT(MAX(R1MACH(4),1.0E-18))
  14509.       DO 150 KODE=1,2
  14510.         IK = KODE - 1
  14511.         FKM = IK
  14512.         DO 140 N=1,25,8
  14513.           DO 130 M=1,4
  14514.             NM = N + M - 1
  14515.             DO 120 IX=1,25,8
  14516.               X = IX- 0.20E0
  14517.               CALL EXINT(X, N, KODE, M, TOL, EN, NZ, IERR)
  14518.               KX = X+0.5E0
  14519.               IF (KX.EQ.0) KX = 1
  14520.               ICASE = 1
  14521.               A = N
  14522.               IF (KX.LE.N) GO TO 10
  14523.               ICASE = 2
  14524.               A = NM
  14525.               IF (KX.GE.NM) GO TO 10
  14526.               ICASE = 3
  14527.               A = KX
  14528.    10         CONTINUE
  14529.               SIG = 3.0E0/X
  14530.               T2 = 1.0E0
  14531.               SUM = 0.0E0
  14532.    20         CONTINUE
  14533.               T1 = T2
  14534.               T2 = T2 + SIG
  14535.               ATOL = TOL
  14536.               CALL GAUS8(FEIN, T1, T2, ATOL, ANS, IERR)
  14537.               SUM = SUM + ANS
  14538.               IF (ABS(ANS).LT.ABS(SUM)*TOL) GO TO 30
  14539.               GO TO 20
  14540.    30         CONTINUE
  14541.               EX = 1.0E0
  14542.               IF (KODE.EQ.1) EX = EXP(-X)
  14543.               BB = A
  14544.               IF (ICASE.NE.3) GO TO 40
  14545.               IY = KX - N + 1
  14546.               Y(IY) = SUM
  14547.               KE = M - IY
  14548.               IE = IY - 1
  14549.               KK = IY
  14550.               II = IY
  14551.               GO TO 60
  14552.    40         CONTINUE
  14553.               IF (ICASE.NE.2) GO TO 50
  14554.               Y(M) = SUM
  14555.               IF (M.EQ.1) GO TO 100
  14556.               IE = M - 1
  14557.               II = M
  14558.               GO TO 80
  14559.    50         CONTINUE
  14560.               Y(1) = SUM
  14561.               IF (M.EQ.1) GO TO 100
  14562.               KE = M - 1
  14563.               KK = 1
  14564.    60         CONTINUE
  14565. C
  14566. C             Forward recur
  14567. C
  14568.               DO 70 K=1,KE
  14569.                 Y(KK+1) = (EX-X*Y(KK))/BB
  14570.                 BB = BB + 1.0E0
  14571.                 KK = KK + 1
  14572.    70         CONTINUE
  14573.               IF (ICASE.NE.3) GO TO 100
  14574.    80         BB = A - 1.0E0
  14575. C
  14576. C             Backward recur
  14577. C
  14578.               DO 90 I=1,IE
  14579.                 Y(II-1) = (EX-BB*Y(II))/X
  14580.                 BB = BB - 1.0E0
  14581.                 II = II - 1
  14582.    90         CONTINUE
  14583.   100         CONTINUE
  14584.               DO 110 I=1,M
  14585.                 ER = ABS((Y(I)-EN(I))/Y(I))
  14586.                 IF (ER .GT. TOL) THEN
  14587.                    WRITE (LUN,90010)
  14588.                    IPASS = 0
  14589.                    GO TO 160
  14590.                 ENDIF
  14591.   110         CONTINUE
  14592.   120       CONTINUE
  14593.   130     CONTINUE
  14594.   140   CONTINUE
  14595.   150 CONTINUE
  14596. C
  14597. C     Trigger 6 error conditions.
  14598. C
  14599.   160 FATAL = .FALSE.
  14600. C
  14601.       IF (KPRINT .GE. 3) WRITE (LUN, 90020)
  14602.       XX(1) = 1.0E0
  14603.       XX(2) = 1.0E0
  14604.       XX(3) = 1.0E0
  14605.       XX(4) = 1.0E0
  14606.       XX(5) = 0.01E0
  14607.       DO 170 I=1,5
  14608.         XX(I) = -XX(I)
  14609.         K = XX(2)
  14610.         N = XX(3)
  14611.         M = XX(4)
  14612.         CALL EXINT (XX(I), N, K, M, XX(5), EN, NZ, IERR)
  14613.         IF (IERR .NE. 1) THEN
  14614.            IPASS = 0
  14615.            FATAL = .TRUE.
  14616.            WRITE (LUN, 90030) I
  14617.         ENDIF
  14618.         XX(I) = -XX(I)
  14619.   170 CONTINUE
  14620.       X = 0.0E0
  14621.       TOL = 1.0E-2
  14622.       CALL EXINT (X, 1, 1, 1, TOL, EN, NZ, IERR)
  14623.       IF (IERR .NE. 1) THEN
  14624.          IPASS = 0
  14625.          FATAL = .TRUE.
  14626.          WRITE (LUN, 90040)
  14627.       ENDIF
  14628.       IF (FATAL) THEN
  14629.          IF (KPRINT .GE. 2) THEN
  14630.             WRITE (LUN, 90070)
  14631.          ENDIF
  14632.       ELSE
  14633.          IF (KPRINT .GE. 3) THEN
  14634.             WRITE (LUN, 90080)
  14635.          ENDIF
  14636.       ENDIF
  14637. C
  14638.       IF(IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 90100)
  14639.       IF(IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 90110)
  14640.       RETURN
  14641. C
  14642. 90000 FORMAT ('1' / ' QUICK CHECK FOR EXINT AND GAUS8' /)
  14643. 90010 FORMAT (// ' ERROR IN EG8CK COMPARISON TEST' /)
  14644. 90020 FORMAT (/ ' TRIGGER 6 ERROR CONDITIONS')
  14645. 90030 FORMAT (' Error occurred with DO index I =', I2)
  14646. 90040 FORMAT (' Error occurred with X = 0.0')
  14647. 90070 FORMAT (/' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  14648. 90080 FORMAT (/' ALL INCORRECT ARGUMENT TESTS PASSED')
  14649. 90100 FORMAT (/ ' **********EXINT AND GAUS8 PASSED ALL TESTS**********')
  14650. 90110 FORMAT (/ ' **********EXINT OR GAUS8 FAILED SOME TESTS**********')
  14651.       END
  14652. *DECK EISQX1
  14653.       SUBROUTINE EISQX1 (LUN, KPRINT, IPASS)
  14654. C***BEGIN PROLOGUE  EISQX1
  14655. C***PURPOSE  Quick check for SGEEV and CGEEV.
  14656. C***LIBRARY   SLATEC
  14657. C***KEYWORDS  QUICK CHECK
  14658. C***AUTHOR  (UNKNOWN)
  14659. C***DESCRIPTION
  14660. C
  14661. C     THIS QUICK CHECK ROUTINE IS WRITTEN FOR EISPACK DRIVERS
  14662. C     SGEEV AND CGEEV.  THE EIGENVALUES OF INPUT MATRIX A(.,.)
  14663. C     ARE STORED IN EK(.).  RELERR IS THE RELATIVE ACCURACY
  14664. C     REQUIRED FOR THEM TO PASS.
  14665. C
  14666. C***ROUTINES CALLED  CGEEV, R1MACH, SGEEV
  14667. C***REVISION HISTORY  (YYMMDD)
  14668. C   ??????  DATE WRITTEN
  14669. C   890618  REVISION DATE from Version 3.2
  14670. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14671. C   900405  CALL to XERROR replaced by message to LUN.  (WRB)
  14672. C***END PROLOGUE  EISQX1
  14673.       INTEGER KPRINT,IPASS,LUN
  14674.       INTEGER LDA,N,LDV,JOB,I,J,ID
  14675.       REAL A(3,3),EK(3),W(9)
  14676.       REAL ERR,ERRI,RELERR,RECJ
  14677.       COMPLEX AC(3,3),EC(3),VC(3,3)
  14678.       DATA LDA,N,LDV / 3*3 /
  14679.       DATA A / 1., -2., 6., -1., 0., -3., 2., 5., 6. /
  14680.       DATA EK / -1., 3., 5. /
  14681. C***FIRST EXECUTABLE STATEMENT  EISQX1
  14682.       IPASS = 1
  14683.       RELERR = SQRT(R1MACH(4))
  14684.       DO 20 J=1,N
  14685.          DO 10 I=1,N
  14686.             AC(I,J) = CMPLX(A(I,J),0.)
  14687.    10       CONTINUE
  14688.    20    CONTINUE
  14689.       JOB = 1
  14690.       CALL CGEEV(AC,LDA,N,EC,VC,LDV,W,JOB,INFO)
  14691.       IF (INFO .NE. 0) THEN
  14692.          IF (KPRINT .GE. 2) WRITE (LUN, 688) 'CGEEV', INFO
  14693.          IPASS = 0
  14694.       ENDIF
  14695.       DO 40 J=1,N
  14696.          ERR = ABS(AIMAG(EC(J)))
  14697.          IF (ERR .GE. RELERR) IPASS = 0
  14698.          RECJ = REAL(EC(J))
  14699.          ERR = ABS(RECJ - EK(1))
  14700.          ID = 1
  14701.          DO 30 I=2,N
  14702.             ERRI = ABS(RECJ - EK(I))
  14703.             IF (ERRI .LT. ERR) ID = I
  14704.             ERR = MIN(ERRI,ERR)
  14705.    30       CONTINUE
  14706.          IF (ABS(RECJ-EK(ID))/ABS(EK(ID)) .GE. RELERR) IPASS = 0
  14707.    40    CONTINUE
  14708.       JOB = 0
  14709.       CALL SGEEV(A,LDA,N,EC,VC,LDV,W,JOB,INFO)
  14710.       IF (INFO .NE. 0) THEN
  14711.          IF (KPRINT .GE. 2) WRITE (LUN, 688) 'SGEEV', INFO
  14712.          IPASS = 0
  14713.       ENDIF
  14714.       DO 60 J=1,N
  14715.          ERR = ABS(AIMAG(EC(J)))
  14716.          IF (ERR .GE. RELERR) IPASS = 0
  14717.          RECJ = REAL(EC(J))
  14718.          ERR = ABS(RECJ - EK(1))
  14719.          ID = 1
  14720.          DO 50 I=2,N
  14721.             ERRI = ABS(RECJ - EK(I))
  14722.             IF (ERRI .LT. ERR) ID = I
  14723.             ERR = MIN(ERRI,ERR)
  14724.    50       CONTINUE
  14725.          IF (ABS(RECJ-EK(ID))/ABS(EK(ID)) .GE. RELERR) IPASS = 0
  14726.    60    CONTINUE
  14727.       IF (KPRINT.GE.2 .AND. IPASS.NE.0) WRITE (LUN,670)
  14728.   670 FORMAT(25H EISQX1 PASSES ALL TESTS.)
  14729.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN,680)
  14730.   680 FORMAT(25H EISQX1 FAILS SOME TESTS.)
  14731.   688 FORMAT (1X, 'Eigenvalue iteration failed to converge in ', A5,
  14732.      +        ', INFO = ', I4)
  14733.       RETURN
  14734.       END
  14735. *DECK EISQX2
  14736.       SUBROUTINE EISQX2 (LUN, KPRINT, IPASS)
  14737. C***BEGIN PROLOGUE  EISQX2
  14738. C***PURPOSE  Quick check for SSIEV, CHIEV and SSPEV.
  14739. C***LIBRARY   SLATEC
  14740. C***KEYWORDS  QUICK CHECK
  14741. C***AUTHOR  Kahaner, D. K., (NBS)
  14742. C***DESCRIPTION
  14743. C
  14744. C     THIS QUICK CHECK ROUTINE IS WRITTEN FOR EISPACK DRIVERS
  14745. C     SSIEV, CHIEV AND SSPEV.  THE EIGENVALUES OF INPUT MATRIX
  14746. C     A(.,.) ARE STORED IN EK(.).  RELERR IS THE RELATIVE
  14747. C     ACCURACY REQUIRED FOR THEM TO PASS.
  14748. C
  14749. C***ROUTINES CALLED  CHIEV, R1MACH, SSIEV, SSPEV
  14750. C***REVISION HISTORY  (YYMMDD)
  14751. C   800808  DATE WRITTEN
  14752. C   890618  REVISION DATE from Version 3.2
  14753. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14754. C   900405  CALL to XERROR replaced by message to LUN.  (WRB)
  14755. C***END PROLOGUE  EISQX2
  14756.       INTEGER KPRINT,IPASS,LUN
  14757.       INTEGER LDA,N,LDV,JOB,I,J,ID
  14758.       REAL A1(4,4),A2(10),AP(10),E(4),V(4,4),EK(4),W(16)
  14759.       REAL ERR,ERRI,RELERR
  14760.       COMPLEX AC(4,4),VC(4,4)
  14761.       EQUIVALENCE (V,VC)
  14762.       DATA LDA,N,LDV / 3*4 /
  14763.       DATA AP / 5., 4., 5., 1., 1., 4., 1., 1., 2., 4. /
  14764.       DATA EK / 1., 2., 5., 10. /
  14765. C***FIRST EXECUTABLE STATEMENT  EISQX2
  14766.       IPASS = 1
  14767.       RELERR = SQRT(R1MACH(4))
  14768.       ID = 0
  14769.       DO 20 J=1,N
  14770.          DO 10 I=1,J
  14771.             ID = ID + 1
  14772.             A1(I,J) = AP(ID)
  14773.             A2(ID) = AP(ID)
  14774.             AC(I,J) = CMPLX(AP(ID),0.)
  14775.    10       CONTINUE
  14776.    20    CONTINUE
  14777.       JOB = 1
  14778.       CALL CHIEV(AC,LDA,N,E,VC,LDV,W,JOB,INFO)
  14779.       IF (INFO .NE. 0) THEN
  14780.          IF (KPRINT .GE. 2) WRITE (LUN, 688) 'CHIEV', INFO
  14781.          IPASS = 0
  14782.       ENDIF
  14783.       DO 40 J=1,N
  14784.          ERR = ABS(E(J) - EK(1))
  14785.          ID = 1
  14786.          DO 30 I=2,N
  14787.             ERRI = ABS(E(J) - EK(I))
  14788.             IF (ERRI .LT. ERR) ID = I
  14789.             ERR = MIN(ERRI,ERR)
  14790.    30       CONTINUE
  14791.          IF (ABS(E(J)-EK(ID))/ABS(EK(ID)) .GE. RELERR) IPASS = 0
  14792.    40    CONTINUE
  14793.       CALL SSIEV(A1,LDA,N,E,W,JOB,INFO)
  14794.       IF (INFO .NE. 0) THEN
  14795.          IF (KPRINT .GE. 2) WRITE (LUN, 688) 'SSIEV', INFO
  14796.          IPASS = 0
  14797.       ENDIF
  14798.       DO 60 J=1,N
  14799.          ERR = ABS(E(J) - EK(1))
  14800.          ID = 1
  14801.          DO 50 I=2,N
  14802.             ERRI = ABS(E(J) - EK(I))
  14803.             IF (ERRI .LT. ERR) ID = I
  14804.             ERR = MIN(ERRI,ERR)
  14805.    50       CONTINUE
  14806.          IF (ABS(E(J)-EK(ID))/ABS(EK(ID)) .GE. RELERR) IPASS = 0
  14807.    60    CONTINUE
  14808.       JOB = 0
  14809.       CALL SSPEV(A2,N,E,V,LDV,W,JOB,INFO)
  14810.       IF (INFO .NE. 0) THEN
  14811.          IF (KPRINT .GE. 2) WRITE (LUN, 688) 'SSPEV', INFO
  14812.          IPASS = 0
  14813.       ENDIF
  14814.       DO 80 J=1,N
  14815.          ERR = ABS(E(J) - EK(1))
  14816.          ID = 1
  14817.          DO 70 I=2,N
  14818.             ERRI = ABS(E(J) - EK(I))
  14819.             IF (ERRI .LT. ERR) ID = I
  14820.             ERR = MIN(ERRI,ERR)
  14821.    70       CONTINUE
  14822.          IF (ABS(E(J)-EK(ID))/ABS(EK(ID)) .GE. RELERR) IPASS = 0
  14823.    80    CONTINUE
  14824.       IF (KPRINT.GE.2 .AND. IPASS.NE.0) WRITE (LUN,684)
  14825.   684 FORMAT(25H EISQX2 PASSES ALL TESTS.)
  14826.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN,686)
  14827.   686 FORMAT(25H EISQX2 FAILS SOME TESTS.)
  14828.   688 FORMAT (1X, 'Eigenvalue iteration failed to converge in ', A5,
  14829.      +        ', INFO = ', I4)
  14830.       RETURN
  14831.       END
  14832. *DECK EVCHCK
  14833.       SUBROUTINE EVCHCK (LOUT, KPRINT, NPTS, XEV, FEV, DEV, FEV2, FAIL)
  14834. C***BEGIN PROLOGUE  EVCHCK
  14835. C***SUBSIDIARY
  14836. C***PURPOSE  Test evaluation accuracy of CHFDV and CHFEV for PCHQK1.
  14837. C***LIBRARY   SLATEC (PCHIP)
  14838. C***TYPE      SINGLE PRECISION (EVCHCK-S, DEVCHK-D)
  14839. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  14840. C***AUTHOR  Fritsch, F. N., (LLNL)
  14841. C***DESCRIPTION
  14842. C
  14843. C -------- CODE TO TEST EVALUATION ACCURACY OF CHFDV AND CHFEV --------
  14844. C
  14845. C     USING FUNCTION AND DERIVATIVE VALUES FROM A CUBIC (COMPUTED IN
  14846. C     DOUBLE PRECISION) AT NINT DIFFERENT (X1,X2) PAIRS:
  14847. C     1. CHECKS THAT CHFDV AND CHFEV BOTH REPRODUCE ENDPOINT VALUES.
  14848. C     2. EVALUATES AT NPTS POINTS, 10 OF WHICH ARE OUTSIDE THE INTERVAL
  14849. C        AND:
  14850. C        A. CHECKS ACCURACY OF CHFDV FUNCTION AND DERIVATIVE VALUES
  14851. C           AGAINST EXACT VALUES.
  14852. C        B. CHECKS THAT RETURNED VALUES OF NEXT SUM TO 10.
  14853. C        C. CHECKS THAT FUNCTION VALUES FROM CHFEV AGREE WITH THOSE
  14854. C           FROM CHFDV.
  14855. C
  14856. C
  14857. C     FORTRAN INTRINSICS USED:  ABS, MAX, MIN.
  14858. C     FORTRAN LIBRARY ROUTINES USED:  SQRT, (READ), (WRITE).
  14859. C     SLATEC LIBRARY ROUTINES USED:  CHFDV, CHFEV, R1MACH, RAND.
  14860. C     OTHER ROUTINES USED:  FDTRUE.
  14861. C
  14862. C***ROUTINES CALLED  CHFDV, CHFEV, FDTRUE, R1MACH, RAND
  14863. C***REVISION HISTORY  (YYMMDD)
  14864. C   820601  DATE WRITTEN
  14865. C   820624  CONVERTED TO QUICK CHECK FOR SLATEC LIBRARY.
  14866. C   820630  1. MODIFIED DEFINITIONS OF RELATIVE ERROR AND TEST
  14867. C             TOLERANCES.
  14868. C           2. VARIOUS IMPROVEMENTS TO OUTPUT FORMATS.
  14869. C   820716  1. SET MACHEP VIA A CALL TO R1MACH.
  14870. C           2. CHANGED FROM FORTLIB'S RANF TO SLATEC'S RAND.
  14871. C   890629  1. Appended E0 to real constants to reduce S.P./D.P.
  14872. C             differences.
  14873. C           2. Other minor cosmetic changes.
  14874. C   890831  Modified array declarations.  (WRB)
  14875. C   890911  Removed unnecessary intrinsics.  (WRB)
  14876. C   891004  Cosmetic changes to prologue.  (WRB)
  14877. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  14878. C   900315  Revised prologue and improved some output formats.  (FNF)
  14879. C           Also moved formats to end to be consistent with other PCHIP
  14880. C           quick checks.
  14881. C   900316  Additional minor cosmetic changes.  (FNF)
  14882. C   900321  Made miscellaneous cosmetic changes.  (FNF)
  14883. C   901130  Added 1P's to formats and revised some to reduce maximum
  14884. C           line length.  (FNF)
  14885. C   910708  Minor modifications in use of KPRINT.  (WRB)
  14886. C   910801  Added EXTERNAL statement for RAND due to problem on IBM
  14887. C           RS 6000.  (WRB)
  14888. C***END PROLOGUE  EVCHCK
  14889. C
  14890. C  Declare arguments.
  14891. C
  14892.       INTEGER  LOUT, KPRINT, NPTS
  14893.       REAL  XEV(*), FEV(*), DEV(*), FEV2(*)
  14894.       LOGICAL  FAIL
  14895. C
  14896. C  DECLARATIONS.
  14897. C
  14898.       INTEGER  I, IERR, IINT, NEXT(2), NEXT2(2), NINT
  14899.       REAL  AED, AED2, AEDMAX, AEDMIN, AEF, AEF2, AEFMAX, AEFMIN,
  14900.      *      CHECK(2), CHECKF(2), CHECKD(2), D1, D2, DERMAX, DTRUE, DX,
  14901.      *      EPS1, EPS2, F1, F2, FACT, FERMAX, FLOORD, FLOORF, FOUR,
  14902.      *      FTRUE, LEFT(3), MACHEP,
  14903.      *      ONE, RED, RED2, REDMAX, REDMIN, REF, REF2, REFMAX,
  14904.      *      REFMIN, RIGHT(3), SMALL, TEN, TOL1, TOL2,
  14905.      *      X1, X2, XADMAX, XADMIN, XAFMAX, XAFMIN, XRDMAX,
  14906.      *      XRDMIN, XRFMAX, XRFMIN, ZERO
  14907.       LOGICAL  FAILOC, FAILNX
  14908. C
  14909.       REAL  R1MACH
  14910. C       The following should stay REAL (no D.P. equivalent).
  14911.       REAL  RAND
  14912.       EXTERNAL  RAND
  14913. C
  14914. C  DEFINE RELATIVE ERROR WITH FLOOR.
  14915. C
  14916.       REAL  RERR, ERR, VALUE, FLOOR
  14917.       RERR(ERR,VALUE,FLOOR) = ERR / MAX(ABS(VALUE), FLOOR)
  14918. C
  14919. C  INITIALIZE.
  14920. C
  14921.       DATA  ZERO /0.E0/,  ONE /1.E0/,  FOUR /4.E0/,  TEN /10.E0/
  14922.       DATA  SMALL  /1.0E-10/
  14923.       DATA  NINT /3/
  14924.       DATA   LEFT /-1.5E0, 2.0E-10, 1.0E0 /
  14925.       DATA  RIGHT / 2.5E0, 3.0E-10, 1.0E+8/
  14926. C
  14927. C***FIRST EXECUTABLE STATEMENT  EVCHCK
  14928.       MACHEP = R1MACH(4)
  14929.       EPS1 = FOUR*MACHEP
  14930.       EPS2 = TEN*MACHEP
  14931. C
  14932.       FAIL = .FALSE.
  14933. C
  14934.       IF (KPRINT .GE. 2)  WRITE (LOUT, 3000)
  14935. C
  14936. C  CYCLE OVER INTERVALS.
  14937. C
  14938.       DO 90  IINT = 1, NINT
  14939.       X1 =  LEFT(IINT)
  14940.       X2 = RIGHT(IINT)
  14941. C
  14942.       FACT = MAX(SQRT(X2-X1), ONE)
  14943.       TOL1 = EPS1 * FACT
  14944.       TOL2 = EPS2 * FACT
  14945. C
  14946. C  COMPUTE AND PRINT ENDPOINT VALUES.
  14947. C
  14948.       CALL FDTRUE (X1, F1, D1)
  14949.       CALL FDTRUE (X2, F2, D2)
  14950. C
  14951.       IF (KPRINT .GE. 3)  THEN
  14952.          IF (IINT .EQ. 1)  WRITE (LOUT, 2000)
  14953.          WRITE (LOUT, '(/)')
  14954.          WRITE (LOUT, 2001)  'X1', X1, 'X2', X2
  14955.          WRITE (LOUT, 2001)  'F1', F1, 'F2', F2
  14956.          WRITE (LOUT, 2001)  'D1', D1, 'D2', D2
  14957.       ENDIF
  14958. C
  14959.       IF (KPRINT .GE. 2)  WRITE (LOUT, 3001)  X1, X2
  14960. C
  14961. C  COMPUTE FLOORS FOR RELATIVE ERRORS.
  14962. C
  14963.       FLOORF = MAX( MIN(ABS(F1),ABS(F2)), SMALL)
  14964.       FLOORD = MAX( MIN(ABS(D1),ABS(D2)), SMALL)
  14965. C
  14966. C  CHECK REPRODUCTION OF ENDPOINT VALUES.
  14967. C
  14968.       XEV(1) = X1
  14969.       XEV(2) = X2
  14970. C     -----------------------------------------------------------
  14971.       CALL CHFDV (X1, X2, F1, F2, D1, D2, 2, XEV, CHECKF, CHECKD,
  14972.      *            NEXT, IERR)
  14973. C     -----------------------------------------------------------
  14974.       AEF  = CHECKF(1)-F1
  14975.       REF  = RERR(AEF , F1, FLOORF)
  14976.       AEF2 = CHECKF(2)-F2
  14977.       REF2 = RERR(AEF2, F2, FLOORF)
  14978.       AED  = CHECKD(1)-D1
  14979.       RED  = RERR(AED , D1, FLOORD)
  14980.       AED2 = CHECKD(2)-D2
  14981.       RED2 = RERR(AED2, D2, FLOORD)
  14982. C
  14983.       FAILOC = MAX(ABS(REF),ABS(REF2),ABS(RED),ABS(RED2)) .GT. TOL1
  14984.       FAIL = FAIL .OR. FAILOC
  14985. C
  14986.       IF (KPRINT .GE. 3)  THEN
  14987.          WRITE (LOUT, 2002)  NEXT, AEF, AEF2, AED, AED2
  14988.          WRITE (LOUT, 2003)  REF, REF2, RED, RED2
  14989.       ENDIF
  14990. C
  14991.       IF (FAILOC .AND. (KPRINT.GE.2))  WRITE (LOUT, 3002)
  14992. C
  14993. C  CHFEV SHOULD AGREE EXACTLY WITH CHFDV.
  14994. C                     -------
  14995. C     --------------------------------------------------------------
  14996.       CALL CHFEV (X1, X2, F1, F2, D1, D2, 2, XEV, CHECK, NEXT, IERR)
  14997. C     --------------------------------------------------------------
  14998.       FAILOC = (CHECK(1).NE.CHECKF(1)) .OR. (CHECK(2).NE.CHECKF(2))
  14999.       FAIL = FAIL .OR. FAILOC
  15000. C
  15001.       IF (FAILOC .AND. (KPRINT.GE.2))  WRITE (LOUT, 3003)
  15002. C
  15003. C  EVALUATE AT NPTS 'UNIFORMLY RANDOM' POINTS IN (X1,X2).
  15004. C     THIS VERSION EXTENDS EVALUATION DOMAIN BY ADDING 4 SUBINTERVALS
  15005. C     TO LEFT AND 6 TO RIGHT OF [X1,X2].
  15006. C
  15007.       DX = (X2-X1)/(NPTS-10)
  15008.       DO 20  I = 1, NPTS
  15009.          XEV(I) = (X1 + (I-5)*DX) + DX*RAND(ZERO)
  15010.    20 CONTINUE
  15011. C     --------------------------------------------------------
  15012.       CALL CHFDV (X1, X2, F1, F2, D1, D2, NPTS, XEV, FEV, DEV,
  15013.      *            NEXT, IERR)
  15014. C     --------------------------------------------------------
  15015.       IF (IERR .NE. 0)  THEN
  15016.          FAILOC = .TRUE.
  15017.          IF (KPRINT .GE. 2)  WRITE (LOUT, 4003)  IERR
  15018.       ELSE
  15019. C
  15020. C     CUMULATE LARGEST AND SMALLEST ERRORS FOR SUMMARY.
  15021. C
  15022.       DO 30  I = 1, NPTS
  15023.          CALL FDTRUE (XEV(I), FTRUE, DTRUE)
  15024.          AEF = FEV(I) - FTRUE
  15025.          REF = RERR(AEF, FTRUE, FLOORF)
  15026.          AED = DEV(I) - DTRUE
  15027.          RED = RERR(AED, DTRUE, FLOORD)
  15028. C
  15029.          IF (I .EQ. 1)  THEN
  15030. C            INITIALIZE.
  15031.             AEFMIN = AEF
  15032.             AEFMAX = AEF
  15033.             AEDMIN = AED
  15034.             AEDMAX = AED
  15035.             REFMIN = REF
  15036.             REFMAX = REF
  15037.             REDMIN = RED
  15038.             REDMAX = RED
  15039.             XAFMIN = XEV(1)
  15040.             XAFMAX = XEV(1)
  15041.             XADMIN = XEV(1)
  15042.             XADMAX = XEV(1)
  15043.             XRFMIN = XEV(1)
  15044.             XRFMAX = XEV(1)
  15045.             XRDMIN = XEV(1)
  15046.             XRDMAX = XEV(1)
  15047.          ELSE
  15048. C            SELECT.
  15049.             IF (AEF .LT. AEFMIN)  THEN
  15050.                AEFMIN = AEF
  15051.                XAFMIN = XEV(I)
  15052.             ELSE IF (AEF .GT. AEFMAX)  THEN
  15053.                AEFMAX = AEF
  15054.                XAFMAX = XEV(I)
  15055.             ENDIF
  15056.             IF (AED .LT. AEDMIN)  THEN
  15057.                AEDMIN = AED
  15058.                XADMIN = XEV(I)
  15059.             ELSE IF (AED .GT. AEDMAX)  THEN
  15060.                AEDMAX = AED
  15061.                XADMAX = XEV(I)
  15062.             ENDIF
  15063.             IF (REF .LT. REFMIN)  THEN
  15064.                REFMIN = REF
  15065.                XRFMIN = XEV(I)
  15066.             ELSE IF (REF .GT. REFMAX)  THEN
  15067.                REFMAX = REF
  15068.                XRFMAX = XEV(I)
  15069.             ENDIF
  15070.             IF (RED .LT. REDMIN)  THEN
  15071.                REDMIN = RED
  15072.                XRDMIN = XEV(I)
  15073.             ELSE IF (RED .GT. REDMAX)  THEN
  15074.                REDMAX = RED
  15075.                XRDMAX = XEV(I)
  15076.             ENDIF
  15077.          ENDIF
  15078.    30    CONTINUE
  15079. C
  15080.          FERMAX = MAX (ABS(REFMAX), ABS(REFMIN))
  15081.          DERMAX = MAX (ABS(REDMAX), ABS(REDMIN))
  15082. C
  15083.          FAILNX = (NEXT(1) + NEXT(2)) .NE. 10
  15084.          FAILOC = FAILNX .OR. (MAX(FERMAX, DERMAX) .GT. TOL2)
  15085.       ENDIF
  15086.       FAIL = FAIL .OR. FAILOC
  15087. C
  15088. C  PRINT SUMMARY.
  15089. C
  15090.       IF (KPRINT .GE. 3)  THEN
  15091.          WRITE (LOUT, 2004)  NPTS-10, NEXT
  15092. C
  15093.          WRITE (LOUT, 2005)  'MIN', AEFMIN, REFMIN, AEDMIN, REDMIN
  15094.          WRITE (LOUT, 2006) XAFMIN, XRFMIN, XADMIN, XRDMIN
  15095.          WRITE (LOUT, 2005)  'MAX', AEFMAX, REFMAX, AEDMAX, REDMAX
  15096.          WRITE (LOUT, 2006) XAFMAX, XRFMAX, XADMAX, XRDMAX
  15097.       ENDIF
  15098. C
  15099.       IF (KPRINT .GE. 2)  THEN
  15100.          IF (FAILOC) THEN
  15101.             IF (FERMAX .GT. TOL2)  WRITE (LOUT, 3006) 'F', FERMAX, TOL2
  15102.             IF (DERMAX .GT. TOL2)  WRITE (LOUT, 3006) 'D', DERMAX, TOL2
  15103.             IF (FAILNX)  WRITE (LOUT, 4006)  NEXT
  15104.          ELSE
  15105.             WRITE (LOUT, 5006)
  15106.          ENDIF
  15107.       ENDIF
  15108. C
  15109. C  CHECK THAT CHFEV AGREES WITH CHFDV.
  15110. C
  15111. C     -----------------------------------------------------------------
  15112.       CALL CHFEV (X1, X2, F1, F2, D1, D2, NPTS, XEV, FEV2, NEXT2, IERR)
  15113. C     -----------------------------------------------------------------
  15114.       IF (IERR .NE. 0)  THEN
  15115.          FAILOC = .TRUE.
  15116.          IF (KPRINT .GE. 2)  WRITE (LOUT, 3007)  IERR
  15117.       ELSE
  15118.          AEFMAX = ABS(FEV2(1) - FEV(1))
  15119.          XAFMAX = XEV(1)
  15120.          DO 40  I = 2, NPTS
  15121.             AEF = ABS(FEV2(I) - FEV(I))
  15122.             IF (AEF .GT. AEFMAX)  THEN
  15123.                AEFMAX = AEF
  15124.                XAFMAX = XEV(I)
  15125.             ENDIF
  15126.    40    CONTINUE
  15127.          FAILNX = (NEXT2(1).NE.NEXT(1)) .OR. (NEXT2(2).NE.NEXT(2))
  15128.          FAILOC = FAILNX .OR. (AEFMAX.NE.ZERO)
  15129.          IF (KPRINT .GE. 2)  THEN
  15130.             IF (FAILOC)  THEN
  15131.                WRITE (LOUT, 3008)
  15132.                IF (AEFMAX.NE.ZERO)  WRITE (LOUT, 3009)  AEFMAX, XAFMAX
  15133.                IF (FAILNX)  WRITE (LOUT, 4009)  NEXT2, NEXT
  15134.             ELSE
  15135.                WRITE (LOUT, 5009)
  15136.             ENDIF
  15137.          ENDIF
  15138.       ENDIF
  15139. C
  15140.       FAIL = FAIL .OR. FAILOC
  15141. C
  15142. C  GO BACK FOR ANOTHER INTERVAL.
  15143. C
  15144.    90 CONTINUE
  15145. C
  15146.       RETURN
  15147. C
  15148. C  FORMATS.
  15149. C
  15150.  2000 FORMAT (/10X,'CHFDV ACCURACY TEST')
  15151.  2001 FORMAT (10X,A2,' =',1P,E18.10,5X,A2,' =',E18.10)
  15152.  2002 FORMAT (/' ERRORS AT ENDPOINTS:',40X,'(NEXT =',2I3,')'
  15153.      *        // 1P,4X,'F1:',E13.5,4X,'F2:',E13.5,
  15154.      *              4X,'D1:',E13.5,4X,'D2:',E13.5)
  15155.  2003 FORMAT (1P,4(7X,E13.5))
  15156.  2004 FORMAT (/' ERRORS AT ',I5,' INTERIOR POINTS + 10 OUTSIDE:',
  15157.      *                15X,'(NEXT =',2I3,')'
  15158.      *        //30X,'FUNCTION',17X,'DERIVATIVE'
  15159.      *         /15X,2(11X,'ABS',9X,'REL') )
  15160.  2005 FORMAT (/5X,A3,'IMUM ERROR:  ',1P,2E12.4,2X,2E12.4)
  15161.  2006 FORMAT ( 5X,'LOCATED AT X =  ',1P,2E12.4,2X,2E12.4)
  15162.  3000 FORMAT (//10X,'EVCHCK RESULTS'/10X,'--------------')
  15163.  3001 FORMAT (/10X,'INTERVAL = (',1P,E12.5,',',E12.5,' ):' )
  15164.  3002 FORMAT (/' ***** CHFDV FAILED TO REPRODUCE ENDPOINT VALUES.')
  15165.  3003 FORMAT (/' ***** CHFEV DOES NOT AGREE WITH CHFDV AT ENDPOINTS.')
  15166.  3006 FORMAT (/' ***** MAXIMUM RELATIVE ERROR IN ',A1,' =',1P,E12.5,','
  15167.      *        /        17X,'EXCEEDS TOLERANCE =',E12.5)
  15168.  3007 FORMAT (/' ***** ERROR ***** CHFEV RETURNED IERR =',I5)
  15169.  3008 FORMAT (/' ***** CHFEV DID NOT AGREE WITH CHFDV:')
  15170.  3009 FORMAT (7X,'MAXIMUM DIFFERENCE ',1P,E12.5,
  15171.      *                '; OCCURRED AT X =',E12.5)
  15172.  4003 FORMAT (/' ***** ERROR ***** CHFDV RETURNED IERR =',I5)
  15173.  4006 FORMAT (/' ***** REPORTED NEXT =',2I5,'   RATHER THAN    4    6')
  15174.  4009 FORMAT (7X,'REPORTED NEXT =',2I3,'   RATHER THAN ',2I3)
  15175.  5006 FORMAT (/' CHFDV RESULTS OK.')
  15176.  5009 FORMAT (/' CHFEV AGREES WITH CHFDV.')
  15177. C------------- LAST LINE OF EVCHCK FOLLOWS -----------------------------
  15178.       END
  15179. *DECK EVERCK
  15180.       SUBROUTINE EVERCK (LOUT, KPRINT, FAIL)
  15181. C***BEGIN PROLOGUE  EVERCK
  15182. C***SUBSIDIARY
  15183. C***PURPOSE  Test error returns from PCHIP evaluators for PCHQK1.
  15184. C***LIBRARY   SLATEC (PCHIP)
  15185. C***TYPE      SINGLE PRECISION (EVERCK-S, DEVERK-D)
  15186. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  15187. C***AUTHOR  Fritsch, F. N., (LLNL)
  15188. C***DESCRIPTION
  15189. C
  15190. C --------- CODE TO TEST ERROR RETURNS FROM PCHIP EVALUATORS. ---------
  15191. C
  15192. C
  15193. C     FORTRAN LIBRARY ROUTINES USED:  (WRITE).
  15194. C     SLATEC LIBRARY ROUTINES USED:  CHFDV, CHFEV, PCHFD, PCHFE,
  15195. C                                    XERDMP, XGETF, XSETF.
  15196. C     OTHER ROUTINES USED:  COMP.
  15197. C
  15198. C***ROUTINES CALLED  CHFDV, CHFEV, COMP, PCHFD, PCHFE, XERDMP, XGETF,
  15199. C                    XSETF
  15200. C***REVISION HISTORY  (YYMMDD)
  15201. C   820601  DATE WRITTEN
  15202. C   820715  CONVERTED TO QUICK CHECK FOR SLATEC LIBRARY.
  15203. C   890207  ADDED CALLS TO ERROR HANDLER.
  15204. C   890316  Added call to XERDMP if KPRINT.GT.2 (FNF).
  15205. C   890629  Appended E0 to real constants to reduce S.P./D.P.
  15206. C           differences.
  15207. C   890706  Cosmetic changes to prologue.  (WRB)
  15208. C   891009  Removed unreferenced statement label.  (WRB)
  15209. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15210. C   900309  Added COMP to list of routines called.  (FNF)
  15211. C   900315  Revised prologue and improved some output formats.  (FNF)
  15212. C   900316  Deleted INCFD tests because some compilers object to them,
  15213. C           and made additional minor cosmetic changes.  (FNF)
  15214. C   900322  Made miscellaneous cosmetic changes.  (FNF)
  15215. C   910708  Minor modifications in use of KPRINT.  (WRB)
  15216. C***END PROLOGUE  EVERCK
  15217. C
  15218. C  Declare arguments.
  15219. C
  15220.       INTEGER  LOUT, KPRINT
  15221.       LOGICAL  FAIL
  15222. C
  15223. C  DECLARATIONS.
  15224. C
  15225.       INTEGER  I, IERR, KONTRL, N, NERR, NEXT(2)
  15226.       REAL  D(10), DUM, F(10), TEMP, X(10)
  15227.       LOGICAL  COMP, SKIP
  15228. C
  15229. C  INITIALIZE.
  15230. C
  15231.       PARAMETER (N = 10)
  15232. C***FIRST EXECUTABLE STATEMENT  EVERCK
  15233.       NERR = 0
  15234. C
  15235.       CALL XGETF (KONTRL)
  15236.       IF (KPRINT .LE. 2) THEN
  15237.          CALL XSETF (0)
  15238.       ELSE
  15239.          CALL XSETF (1)
  15240.       ENDIF
  15241. C
  15242.       IF (KPRINT .GE. 3)  WRITE (LOUT, 2000)
  15243.       IF (KPRINT .GE. 2)  WRITE (LOUT, 5000)
  15244. C
  15245. C  FIRST, TEST CHFEV AND CHFDV.
  15246. C
  15247.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-1)
  15248.       CALL CHFEV (0.E0, 1.E0, 3.E0, 7.E0, 3.E0, 6.E0, 0, DUM, DUM,
  15249.      * NEXT, IERR)
  15250.       IF (.NOT. COMP (IERR, -1, LOUT, KPRINT) )  NERR = NERR + 1
  15251. C
  15252.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-2)
  15253.       CALL CHFEV (1.E0, 1.E0, 3.E0, 7.E0, 3.E0, 6.E0, 1, DUM, DUM,
  15254.      * NEXT, IERR)
  15255.       IF (.NOT. COMP (IERR, -2, LOUT, KPRINT) )  NERR = NERR + 1
  15256. C
  15257.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-1)
  15258.       CALL CHFDV (0.E0, 1.E0, 3.E0, 7.E0, 3.E0, 6.E0, 0, DUM, DUM, DUM,
  15259.      * NEXT, IERR)
  15260.       IF (.NOT. COMP (IERR, -1, LOUT, KPRINT) )  NERR = NERR + 1
  15261. C
  15262.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-2)
  15263.       CALL CHFDV (1.E0, 1.E0, 3.E0, 7.E0, 3.E0, 6.E0, 1, DUM, DUM, DUM,
  15264.      * NEXT, IERR)
  15265.       IF (.NOT. COMP (IERR, -2, LOUT, KPRINT) )  NERR = NERR + 1
  15266. C
  15267. C  SET UP PCH DEFINITION.
  15268. C
  15269.       DO 10  I = 1, N
  15270.          X(I) = I
  15271.          F(I) = I + 2
  15272.          D(I) = 1.E0
  15273.    10 CONTINUE
  15274. C
  15275. C  SWAP POINTS 4 AND 7, SO X-ARRAY IS OUT OF ORDER.
  15276. C
  15277.       TEMP = X(4)
  15278.       X(4) = X(7)
  15279.       X(7) = TEMP
  15280. C
  15281. C  NOW, TEST PCHFE AND PCHFD.
  15282. C
  15283.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-1)
  15284.       SKIP = .FALSE.
  15285.       CALL PCHFE (1, X, F, D, 1, SKIP, 0, DUM, DUM, IERR)
  15286.       IF (.NOT. COMP (IERR, -1, LOUT, KPRINT) )  NERR = NERR + 1
  15287. C
  15288.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-3)
  15289.       SKIP = .FALSE.
  15290.       CALL PCHFE (N, X, F, D, 1, SKIP, 0, DUM, DUM, IERR)
  15291.       IF (.NOT. COMP (IERR, -3, LOUT, KPRINT) )  NERR = NERR + 1
  15292. C
  15293.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-4)
  15294.       SKIP = .TRUE.
  15295.       CALL PCHFE (N, X, F, D, 1, SKIP, 0, DUM, DUM, IERR)
  15296.       IF (.NOT. COMP (IERR, -4, LOUT, KPRINT) )  NERR = NERR + 1
  15297. C
  15298.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-1)
  15299.       SKIP = .FALSE.
  15300.       CALL PCHFD (1, X, F, D, 1, SKIP, 0, DUM, DUM, DUM, IERR)
  15301.       IF (.NOT. COMP (IERR, -1, LOUT, KPRINT) )  NERR = NERR + 1
  15302. C
  15303.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-3)
  15304.       SKIP = .FALSE.
  15305.       CALL PCHFD (N, X, F, D, 1, SKIP, 0, DUM, DUM, DUM, IERR)
  15306.       IF (.NOT. COMP (IERR, -3, LOUT, KPRINT) )  NERR = NERR + 1
  15307. C
  15308.       IF (KPRINT .GE. 3)  WRITE (LOUT, 5001)  (-4)
  15309.       SKIP = .TRUE.
  15310.       CALL PCHFD (N, X, F, D, 1, SKIP, 0, DUM, DUM, DUM, IERR)
  15311.       IF (.NOT. COMP (IERR, -4, LOUT, KPRINT) )  NERR = NERR + 1
  15312. C
  15313. C  SUMMARIZE RESULTS.
  15314. C
  15315.       IF (KPRINT .GT. 2)  CALL XERDMP
  15316.       IF (NERR .EQ. 0)  THEN
  15317.          FAIL = .FALSE.
  15318.          IF (KPRINT .GE. 2)  WRITE (LOUT, 5002)
  15319.       ELSE
  15320.          FAIL = .TRUE.
  15321.          IF (KPRINT .GE. 2)  WRITE (LOUT, 5003)  NERR
  15322.       ENDIF
  15323. C
  15324. C  TERMINATE.
  15325. C
  15326.       CALL XSETF (KONTRL)
  15327.       RETURN
  15328. C
  15329. C  FORMATS.
  15330. C
  15331.  2000 FORMAT ('1'//10X,'TEST ERROR RETURNS')
  15332.  5000 FORMAT (//10X,'EVERCK RESULTS'/10X,'--------------')
  15333.  5001 FORMAT (/' THIS CALL SHOULD RETURN IERR =',I3)
  15334.  5002 FORMAT (/' ALL ERROR RETURNS OK.')
  15335.  5003 FORMAT (//' ***** TROUBLE IN EVERCK *****'
  15336.      *        //5X,I5,' TESTS FAILED TO GIVE EXPECTED RESULTS.')
  15337. C------------- LAST LINE OF EVERCK FOLLOWS -----------------------------
  15338.       END
  15339. *DECK EVPCCK
  15340.       SUBROUTINE EVPCCK (LOUT, KPRINT, X, Y, F, FX, FY, XE, YE, FE, DE,
  15341.      +   FE2, FAIL)
  15342. C***BEGIN PROLOGUE  EVPCCK
  15343. C***SUBSIDIARY
  15344. C***PURPOSE  Test usage of increment argument in PCHFD and PCHFE for
  15345. C            PCHQK1.
  15346. C***LIBRARY   SLATEC (PCHIP)
  15347. C***TYPE      SINGLE PRECISION (EVPCCK-S, DEVPCK-D)
  15348. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  15349. C***AUTHOR  Fritsch, F. N., (LLNL)
  15350. C***DESCRIPTION
  15351. C
  15352. C ---- CODE TO TEST USAGE OF INCREMENT ARGUMENT IN PCHFD AND PCHFE ----
  15353. C
  15354. C     EVALUATES A BICUBIC FUNCTION AND ITS FIRST PARTIAL DERIVATIVES
  15355. C     ON A 4X6 MESH CONTAINED IN A 10X10 ARRAY.
  15356. C
  15357. C     INTERPOLATION OF THESE DATA ALONG MESH LINES IN EITHER DIMENSION
  15358. C     SHOULD AGREE WITH CORRECT FUNCTION WITHIN ROUNDOFF ERROR.
  15359. C
  15360. C     ARRAYS ARE ARGUMENTS ONLY TO ALLOW SHARING STORAGE WITH OTHER
  15361. C     TEST ROUTINES.
  15362. C
  15363. C     NOTE:  RUN WITH KPRINT=4 FOR FULL GORY DETAILS (10 PAGES WORTH).
  15364. C
  15365. C
  15366. C     FORTRAN INTRINSICS USED:  ABS.
  15367. C     FORTRAN LIBRARY ROUTINES USED:  (WRITE).
  15368. C     SLATEC LIBRARY ROUTINES USED:  PCHFD, PCHFE, R1MACH.
  15369. C
  15370. C***ROUTINES CALLED  PCHFD, PCHFE, R1MACH
  15371. C***REVISION HISTORY  (YYMMDD)
  15372. C   820601  DATE WRITTEN
  15373. C   820714  CONVERTED TO QUICK CHECK FOR SLATEC LIBRARY.
  15374. C   820715  1. CORRECTED SOME FORMATS.
  15375. C           2. ADDED CALL TO R1MACH TO SET MACHEP.
  15376. C   890406  1. Modified to make sure final elements of X and XE
  15377. C             agree, to avoid possible failure due to roundoff
  15378. C             error.
  15379. C           2. Added printout of TOL in case of failure.
  15380. C           3. Minor cosmetic changes.
  15381. C   890407  Appended E0 to real constants to reduce S.P./D.P.
  15382. C           differences.
  15383. C   890706  Cosmetic changes to prologue.  (WRB)
  15384. C   890911  Removed unnecessary intrinsics.  (WRB)
  15385. C   891004  Cosmetic changes to prologue.  (WRB)
  15386. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15387. C   900315  Revised prologue and improved some output formats.  (FNF)
  15388. C   900316  Additional minor cosmetic changes.  (FNF)
  15389. C   900321  Made miscellaneous cosmetic changes.  (FNF)
  15390. C   901130  Made many changes to output:  (FNF)
  15391. C           1. Reduced amount of output for KPRINT=3.  (Now need to
  15392. C              use KPRINT=4 for full output.)
  15393. C           2. Added 1P's to formats and revised some to reduce maximum
  15394. C              line length.
  15395. C   910708  Minor modifications in use of KPRINT.  (WRB)
  15396. C***END PROLOGUE  EVPCCK
  15397. C
  15398. C  Declare arguments.
  15399. C
  15400.       INTEGER  LOUT, KPRINT
  15401.       LOGICAL  FAIL
  15402.       REAL  X(10), Y(10), F(10,10), FX(10,10), FY(10,10),
  15403.      *      XE(51), YE(51), FE(51), DE(51), FE2(51)
  15404. C
  15405. C  DECLARATIONS.
  15406. C
  15407.       INTEGER  I, IER2, IERR, INC, J, K, NE, NERR, NMAX, NX, NY
  15408.       LOGICAL  FAILD, FAILE, FAILOC, SKIP
  15409.       REAL  DERMAX, DERR, DTRUE, DX, FDIFF, FDIFMX, FERMAX, FERR,
  15410.      *      FTRUE, MACHEP, TOL, PDERMX, PDIFMX, PFERMX, ZERO
  15411.       REAL  R1MACH
  15412. C
  15413. C  DEFINE TEST FUNCTION AND DERIVATIVES.
  15414. C
  15415.       REAL  AX, AY, FCN, DFDX, DFDY
  15416.       FCN(AX,AY)  =  AX*(AY*AY)*(AX*AX + 1.E0)
  15417.       DFDX(AX,AY) = (AY*AY)*(3.E0*AX*AX + 1.E0)
  15418.       DFDY(AX,AY) =   2.E0*AX*AY*(AX*AX + 1.E0)
  15419. C
  15420.       DATA  NMAX /10/,  NX /4/,  NY /6/
  15421.       DATA  NE /51/
  15422.       DATA  ZERO /0.E0/
  15423. C
  15424. C  INITIALIZE.
  15425. C
  15426. C***FIRST EXECUTABLE STATEMENT  EVPCCK
  15427.       MACHEP = R1MACH(4)
  15428.       TOL = 10.E0*MACHEP
  15429. C
  15430.       FAIL = .FALSE.
  15431. C
  15432. C  SET UP 4-BY-6 MESH IN A 10-BY-10 ARRAY:
  15433. C     X =  0.25(0.25)1.   ;
  15434. C     Y = -0.75(0.5 )1.75 .
  15435. C
  15436.       DO 1  I = 1, NX-1
  15437.          X(I) = 0.25E0*I
  15438.     1 CONTINUE
  15439.       X(NX) = 1.E0
  15440.       DO 5  J = 1, NY
  15441.          Y(J) = 0.5E0*J - 1.25E0
  15442.          DO 4  I = 1, NX
  15443.              F(I,J) = FCN (X(I), Y(J))
  15444.             FX(I,J) = DFDX(X(I), Y(J))
  15445.             FY(I,J) = DFDY(X(I), Y(J))
  15446.     4    CONTINUE
  15447.     5 CONTINUE
  15448. C
  15449. C  SET UP EVALUATION POINTS:
  15450. C     XE =  0.(0.02)1. ;
  15451. C     YE = -2.(0.08)2. .
  15452. C
  15453.       DX = 1.E0/(NE-1)
  15454.       DO 8  K = 1, NE-1
  15455.          XE(K) = DX*(K-1)
  15456.          YE(K) = 4.E0*XE(K) - 2.E0
  15457.     8 CONTINUE
  15458.       XE(NE) = 1.E0
  15459.       YE(NE) = 2.E0
  15460. C
  15461.       IF (KPRINT .GE. 2)  WRITE (LOUT, 1000)
  15462.       IF (KPRINT .GE. 3)  WRITE (LOUT, 1001)
  15463. C
  15464. C  EVALUATE ON HORIZONTAL MESH LINES (Y FIXED, X RUNNING) ..............
  15465. C
  15466.       NERR = 0
  15467.       INC = 1
  15468.       SKIP = .FALSE.
  15469.       DO 20  J = 1, NY
  15470. C        --------------------------------------------------------------
  15471.          CALL PCHFD (NX, X, F(1,J), FX(1,J), INC, SKIP, NE, XE, FE, DE,
  15472.      *               IERR)
  15473. C        --------------------------------------------------------------
  15474.          IF (KPRINT .GE. 3)
  15475.      *       WRITE (LOUT, 2000)  INC, 'J', J, 'Y', Y(J), IERR
  15476.          IF (IERR .LT. 0)  GO TO 15
  15477.          IF (KPRINT .GT. 3)  WRITE (LOUT, 2001)  'X'
  15478. C
  15479. C        PCHFE SHOULD AGREE EXACTLY WITH PCHFD.
  15480. C
  15481. C        -----------------------------------------------------------
  15482.          CALL PCHFE (NX, X, F(1,J), FX(1,J), INC, SKIP, NE, XE, FE2,
  15483.      *               IER2)
  15484. C        -----------------------------------------------------------
  15485. C
  15486.          DO 10  K = 1, NE
  15487.             FTRUE =  FCN(XE(K), Y(J))
  15488.             FERR = FE(K) - FTRUE
  15489.             DTRUE = DFDX(XE(K), Y(J))
  15490.             DERR = DE(K) - DTRUE
  15491.             IF (KPRINT .GT. 3)
  15492.      *         WRITE (LOUT, 2002)  XE(K), FTRUE, FE(K), FERR,
  15493.      *                                    DTRUE, DE(K), DERR
  15494.             IF (K .EQ. 1)  THEN
  15495. C              INITIALIZE.
  15496.                FERMAX = ABS(FERR)
  15497.                PFERMX = XE(1)
  15498.                DERMAX = ABS(DERR)
  15499.                PDERMX = XE(1)
  15500.                FDIFMX = ABS(FE2(1) - FE(1))
  15501.                PDIFMX = XE(1)
  15502.             ELSE
  15503. C              SELECT.
  15504.                FERR = ABS(FERR)
  15505.                IF (FERR .GT. FERMAX)  THEN
  15506.                   FERMAX = FERR
  15507.                   PFERMX = XE(K)
  15508.                ENDIF
  15509.                DERR = ABS(DERR)
  15510.                IF (DERR .GT. DERMAX)  THEN
  15511.                   DERMAX = DERR
  15512.                   PDERMX = XE(K)
  15513.                ENDIF
  15514.                FDIFF = ABS(FE2(K) - FE(K))
  15515.                IF (FDIFF .GT. FDIFMX)  THEN
  15516.                   FDIFMX = FDIFF
  15517.                   PDIFMX = XE(K)
  15518.                ENDIF
  15519.             ENDIF
  15520.    10    CONTINUE
  15521. C
  15522.          FAILD = (FERMAX.GT.TOL) .OR. (DERMAX.GT.TOL)
  15523.          FAILE = FDIFMX .NE. ZERO
  15524.          FAILOC = FAILD .OR. FAILE .OR. (IERR.NE.13) .OR. (IER2.NE.IERR)
  15525. C
  15526.          IF (FAILOC .AND. (KPRINT.GE.2))
  15527.      *      WRITE (LOUT, 2003)  'J', J, 'Y', Y(J)
  15528. C
  15529.          IF ((KPRINT.GE.3) .OR. (FAILD.AND.(KPRINT.EQ.2)) )
  15530.      *      WRITE (LOUT, 2004)  FERMAX, PFERMX, DERMAX, PDERMX
  15531.          IF (FAILD .AND. (KPRINT.GE.2))  WRITE (LOUT, 2014)  TOL
  15532. C
  15533.          IF ((KPRINT.GE.3) .OR. (FAILE.AND.(KPRINT.EQ.2)) )
  15534.      *      WRITE (LOUT, 2005)  FDIFMX, PDIFMX
  15535. C
  15536.          IF ((IERR.NE.13) .AND. (KPRINT.GE.2))
  15537.      *      WRITE (LOUT, 2006)  'D', IERR, 13
  15538. C
  15539.          IF ((IER2.NE.IERR) .AND. (KPRINT.GE.2))
  15540.      *      WRITE (LOUT, 2006)  'E', IER2, IERR
  15541.          GO TO 19
  15542. C
  15543.    15    CONTINUE
  15544.          FAILOC = .TRUE.
  15545.          IF (KPRINT .GE. 2)  WRITE (LOUT, 3000) IERR
  15546. C
  15547.    19    CONTINUE
  15548.          IF (FAILOC)  NERR = NERR + 1
  15549.          FAIL = FAIL .OR. FAILOC
  15550.    20 CONTINUE
  15551. C
  15552.       IF (KPRINT .GE. 2)  THEN
  15553.          IF (NERR .GT. 0)  THEN
  15554.             WRITE (LOUT, 3001)  NERR, 'J'
  15555.          ELSE
  15556.             WRITE (LOUT, 4000)  'J'
  15557.          ENDIF
  15558.       ENDIF
  15559. C
  15560. C  EVALUATE ON VERTICAL MESH LINES (X FIXED, Y RUNNING) ................
  15561. C
  15562.       NERR = 0
  15563.       INC = NMAX
  15564.       SKIP = .FALSE.
  15565.       DO 40  I = 1, NX
  15566. C        --------------------------------------------------------------
  15567.          CALL PCHFD (NY, Y, F(I,1), FY(I,1), INC, SKIP, NE, YE, FE, DE,
  15568.      *               IERR)
  15569. C        --------------------------------------------------------------
  15570.          IF (KPRINT .GE. 3)
  15571.      *       WRITE (LOUT, 2000)  INC, 'I', I, 'X', X(I), IERR
  15572.          IF (IERR .LT. 0)  GO TO 35
  15573.          IF (KPRINT .GT. 3)  WRITE (LOUT, 2001)  'Y'
  15574. C
  15575. C        PCHFE SHOULD AGREE EXACTLY WITH PCHFD.
  15576. C
  15577. C        -----------------------------------------------------------
  15578.          CALL PCHFE (NY, Y, F(I,1), FY(I,1), INC, SKIP, NE, YE, FE2,
  15579.      *               IER2)
  15580. C        -----------------------------------------------------------
  15581. C
  15582.          DO 30  K = 1, NE
  15583.             FTRUE =  FCN(X(I), YE(K))
  15584.             FERR = FE(K) - FTRUE
  15585.             DTRUE = DFDY(X(I), YE(K))
  15586.             DERR = DE(K) - DTRUE
  15587.             IF (KPRINT .GT. 3)
  15588.      *         WRITE (LOUT, 2002)  YE(K), FTRUE, FE(K), FERR,
  15589.      *                                    DTRUE, DE(K), DERR
  15590.             IF (K .EQ. 1)  THEN
  15591. C              INITIALIZE.
  15592.                FERMAX = ABS(FERR)
  15593.                PFERMX = YE(1)
  15594.                DERMAX = ABS(DERR)
  15595.                PDERMX = YE(1)
  15596.                FDIFMX = ABS(FE2(1) - FE(1))
  15597.                PDIFMX = YE(1)
  15598.             ELSE
  15599. C              SELECT.
  15600.                FERR = ABS(FERR)
  15601.                IF (FERR .GT. FERMAX)  THEN
  15602.                   FERMAX = FERR
  15603.                   PFERMX = YE(K)
  15604.                ENDIF
  15605.                DERR = ABS(DERR)
  15606.                IF (DERR .GT. DERMAX)  THEN
  15607.                   DERMAX = DERR
  15608.                   PDERMX = YE(K)
  15609.                ENDIF
  15610.                FDIFF = ABS(FE2(K) - FE(K))
  15611.                IF (FDIFF .GT. FDIFMX)  THEN
  15612.                   FDIFMX = FDIFF
  15613.                   PDIFMX = YE(K)
  15614.                ENDIF
  15615.             ENDIF
  15616.    30    CONTINUE
  15617. C
  15618.          FAILD = (FERMAX.GT.TOL) .OR. (DERMAX.GT.TOL)
  15619.          FAILE = FDIFMX .NE. ZERO
  15620.          FAILOC = FAILD .OR. FAILE .OR. (IERR.NE.20) .OR. (IER2.NE.IERR)
  15621. C
  15622.          IF (FAILOC .AND. (KPRINT.GE.2))
  15623.      *      WRITE (LOUT, 2003)  'I', I, 'X', X(I)
  15624. C
  15625.          IF ((KPRINT.GE.3) .OR. (FAILD.AND.(KPRINT.EQ.2)) )
  15626.      *      WRITE (LOUT, 2004)  FERMAX, PFERMX, DERMAX, PDERMX
  15627.          IF (FAILD .AND. (KPRINT.GE.2))  WRITE (LOUT, 2014)  TOL
  15628. C
  15629.          IF ((KPRINT.GE.3) .OR. (FAILE.AND.(KPRINT.EQ.2)) )
  15630.      *      WRITE (LOUT, 2005)  FDIFMX, PDIFMX
  15631. C
  15632.          IF ((IERR.NE.20) .AND. (KPRINT.GE.2))
  15633.      *      WRITE (LOUT, 2006)  'D', IERR, 20
  15634. C
  15635.          IF ((IER2.NE.IERR) .AND. (KPRINT.GE.2))
  15636.      *      WRITE (LOUT, 2006)  'E', IER2, IERR
  15637.          GO TO 39
  15638. C
  15639.    35    CONTINUE
  15640.          FAILOC = .TRUE.
  15641.          IF (KPRINT .GE. 2)  WRITE (LOUT, 3000) IERR
  15642. C
  15643.    39    CONTINUE
  15644.          IF (FAILOC)  NERR = NERR + 1
  15645.          FAIL = FAIL .OR. FAILOC
  15646.    40 CONTINUE
  15647. C
  15648.       IF (KPRINT .GE. 2)  THEN
  15649.          IF (NERR .GT. 0)  THEN
  15650.             WRITE (LOUT, 3001)  NERR, 'I'
  15651.          ELSE
  15652.             WRITE (LOUT, 4000)  'I'
  15653.          ENDIF
  15654.       ENDIF
  15655. C
  15656. C  TERMINATE.
  15657. C
  15658.       RETURN
  15659. C
  15660. C  FORMATS.
  15661. C
  15662.  1000 FORMAT (//10X,'EVPCCK RESULTS'/10X,'--------------')
  15663.  1001 FORMAT ('1'//10X,'TEST PCHFE AND PCHFD')
  15664.  2000 FORMAT (//20X,'PCHFD INCREMENT TEST -- INCFD = ',I2
  15665.      *        /15X,'ON ',A1,'-LINE ',I2,',  ',A1,' =',F8.4,
  15666.      *           '  --  IERR =',I3)
  15667.  2001 FORMAT ( /3X,A1,'E',10X,'F',8X,'FE',9X,'DIFF',
  15668.      *                    13X,'D',8X,'DE',9X,'DIFF')
  15669.  2002 FORMAT (F7.2,2(2X,2F10.5,1P,E15.5,0P))
  15670.  2003 FORMAT (/' ***** PCHFD AND/OR PCHFE FAILED ON ',A1,'-LINE ',I1,
  15671.      *                             ',  ',A1,' =',F8.4)
  15672.  2004 FORMAT (/17X,'  MAXIMUM ERROR IN FUNCTION =',1P,
  15673.      *                                   1P,E13.5,0P,' (AT',F6.2,'),'
  15674.      *        /31X,    'IN DERIVATIVE =',1P,E13.5,0P,' (AT',F6.2,').' )
  15675.  2005 FORMAT ( '  MAXIMUM DIFFERENCE BETWEEN PCHFE AND PCHFD =',
  15676.      *                                   1P,E13.5,0P,' (AT',F6.2,').' )
  15677.  2006 FORMAT (/'  PCHF',A1,' RETURNED IERR = ',I2,' INSTEAD OF ',I2)
  15678.  2014 FORMAT ('  *** BOTH SHOULD BE .LE. TOL =',1P,E12.5,' ***')
  15679.  3000 FORMAT (//' ***** ERROR ***** PCHFD RETURNED IERR =',I5//)
  15680.  3001 FORMAT (//' ***** ERROR ***** PCHFD AND/OR PCHFE FAILED ON',I2,
  15681.      *                                1X,A1,'-LINES.'//)
  15682.  4000 FORMAT (/' PCHFD AND PCHFE OK ON ',A1,'-LINES.')
  15683. C------------- LAST LINE OF EVPCCK FOLLOWS -----------------------------
  15684.       END
  15685. *DECK F0C
  15686.       REAL FUNCTION F0C (X)
  15687. C***BEGIN PROLOGUE  F0C
  15688. C***PURPOSE  Subsidiary to
  15689. C***LIBRARY   SLATEC
  15690. C***AUTHOR  (UNKNOWN)
  15691. C***ROUTINES CALLED  (NONE)
  15692. C***REVISION HISTORY  (YYMMDD)
  15693. C   ??????  DATE WRITTEN
  15694. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15695. C***END PROLOGUE  F0C
  15696.       REAL X
  15697. C***FIRST EXECUTABLE STATEMENT  F0C
  15698.       F0C = 1.E0/(X*X+1.E-4)
  15699.       RETURN
  15700.       END
  15701. *DECK F0F
  15702.       REAL FUNCTION F0F (X)
  15703. C***BEGIN PROLOGUE  F0F
  15704. C***PURPOSE  Subsidiary to
  15705. C***LIBRARY   SLATEC
  15706. C***AUTHOR  (UNKNOWN)
  15707. C***ROUTINES CALLED  (NONE)
  15708. C***REVISION HISTORY  (YYMMDD)
  15709. C   ??????  DATE WRITTEN
  15710. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15711. C***END PROLOGUE  F0F
  15712.       REAL X
  15713. C***FIRST EXECUTABLE STATEMENT  F0F
  15714.       F0F = 0.0
  15715.       IF(X.NE.0.0) F0F = SIN(0.5E+02*X)/(X*SQRT(X))
  15716.       RETURN
  15717.       END
  15718. *DECK F0O
  15719.       REAL FUNCTION F0O (X)
  15720. C***BEGIN PROLOGUE  F0O
  15721. C***PURPOSE  Subsidiary to
  15722. C***LIBRARY   SLATEC
  15723. C***AUTHOR  (UNKNOWN)
  15724. C***ROUTINES CALLED  (NONE)
  15725. C***REVISION HISTORY  (YYMMDD)
  15726. C   ??????  DATE WRITTEN
  15727. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15728. C***END PROLOGUE  F0O
  15729.       REAL X
  15730. C***FIRST EXECUTABLE STATEMENT  F0O
  15731.       F0O = (2.0E0*SIN(X))**14
  15732.       RETURN
  15733.       END
  15734. *DECK F0S
  15735.       REAL FUNCTION F0S (X)
  15736. C***BEGIN PROLOGUE  F0S
  15737. C***PURPOSE  Subsidiary to
  15738. C***LIBRARY   SLATEC
  15739. C***AUTHOR  (UNKNOWN)
  15740. C***ROUTINES CALLED  (NONE)
  15741. C***REVISION HISTORY  (YYMMDD)
  15742. C   ??????  DATE WRITTEN
  15743. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15744. C***END PROLOGUE  F0S
  15745.       REAL X
  15746. C***FIRST EXECUTABLE STATEMENT  F0S
  15747.       F0S = 0.0
  15748.       IF(X.NE.0.0) F0S = 1.0/SQRT(X)
  15749.       RETURN
  15750.       END
  15751. *DECK F0WS
  15752.       REAL FUNCTION F0WS (X)
  15753. C***BEGIN PROLOGUE  F0WS
  15754. C***PURPOSE  Subsidiary to
  15755. C***LIBRARY   SLATEC
  15756. C***AUTHOR  (UNKNOWN)
  15757. C***ROUTINES CALLED  (NONE)
  15758. C***REVISION HISTORY  (YYMMDD)
  15759. C   ??????  DATE WRITTEN
  15760. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15761. C***END PROLOGUE  F0WS
  15762.       REAL X
  15763. C***FIRST EXECUTABLE STATEMENT  F0WS
  15764.       F0WS  = SIN(10.0*X)
  15765.       RETURN
  15766.       END
  15767. *DECK F1C
  15768.       REAL FUNCTION F1C (X)
  15769. C***BEGIN PROLOGUE  F1C
  15770. C***PURPOSE  Subsidiary to
  15771. C***LIBRARY   SLATEC
  15772. C***AUTHOR  (UNKNOWN)
  15773. C***ROUTINES CALLED  (NONE)
  15774. C***REVISION HISTORY  (YYMMDD)
  15775. C   ??????  DATE WRITTEN
  15776. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15777. C***END PROLOGUE  F1C
  15778.       REAL X
  15779. C***FIRST EXECUTABLE STATEMENT  F1C
  15780.       F1C = 0.0
  15781.       IF(X.NE.0.33) F1C = (X-0.5)*ABS(X-0.33)**(-0.9)
  15782.       RETURN
  15783.       END
  15784. *DECK F1F
  15785.       REAL FUNCTION F1F (X)
  15786. C***BEGIN PROLOGUE  F1F
  15787. C***PURPOSE  Subsidiary to
  15788. C***LIBRARY   SLATEC
  15789. C***AUTHOR  (UNKNOWN)
  15790. C***ROUTINES CALLED  (NONE)
  15791. C***REVISION HISTORY  (YYMMDD)
  15792. C   ??????  DATE WRITTEN
  15793. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15794. C***END PROLOGUE  F1F
  15795.       REAL X,X1,Y
  15796. C***FIRST EXECUTABLE STATEMENT  F1F
  15797.       X1 = X+1.0
  15798.       F1F = 5.0/X1/X1
  15799.       Y = 5.0/X1
  15800.       IF(Y.GT.3.1415926535897932) F1F = 0.0
  15801.       RETURN
  15802.       END
  15803. *DECK F1G
  15804.       REAL FUNCTION F1G (X)
  15805. C***BEGIN PROLOGUE  F1G
  15806. C***PURPOSE  Subsidiary to
  15807. C***LIBRARY   SLATEC
  15808. C***AUTHOR  (UNKNOWN)
  15809. C***ROUTINES CALLED  (NONE)
  15810. C***REVISION HISTORY  (YYMMDD)
  15811. C   ??????  DATE WRITTEN
  15812. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15813. C***END PROLOGUE  F1G
  15814.       REAL PI,X
  15815.       DATA PI/3.1415926535897932/
  15816. C***FIRST EXECUTABLE STATEMENT  F1G
  15817.       F1G = 2.0/(2.0+SIN(10.0*PI*X))
  15818.       RETURN
  15819.       END
  15820. *DECK F1N
  15821.       REAL FUNCTION F1N (X)
  15822. C***BEGIN PROLOGUE  F1N
  15823. C***PURPOSE  Subsidiary to
  15824. C***LIBRARY   SLATEC
  15825. C***AUTHOR  (UNKNOWN)
  15826. C***ROUTINES CALLED  (NONE)
  15827. C***REVISION HISTORY  (YYMMDD)
  15828. C   ??????  DATE WRITTEN
  15829. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15830. C***END PROLOGUE  F1N
  15831.       REAL X
  15832. C***FIRST EXECUTABLE STATEMENT  F1N
  15833.       F1N=1.0E0/(X**4+X**2+1.0E0)
  15834.       RETURN
  15835.       END
  15836. *DECK F1O
  15837.       REAL FUNCTION F1O (X)
  15838. C***BEGIN PROLOGUE  F1O
  15839. C***PURPOSE  Subsidiary to
  15840. C***LIBRARY   SLATEC
  15841. C***AUTHOR  (UNKNOWN)
  15842. C***ROUTINES CALLED  (NONE)
  15843. C***REVISION HISTORY  (YYMMDD)
  15844. C   ??????  DATE WRITTEN
  15845. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15846. C***END PROLOGUE  F1O
  15847.       REAL X
  15848. C***FIRST EXECUTABLE STATEMENT  F1O
  15849.       F1O = 1.0
  15850.       IF(X.GT.3.1415926535897932) F1O = 0.0
  15851.       RETURN
  15852.       END
  15853. *DECK F1P
  15854.       REAL FUNCTION F1P (X)
  15855. C***BEGIN PROLOGUE  F1P
  15856. C***PURPOSE  Subsidiary to
  15857. C***LIBRARY   SLATEC
  15858. C***AUTHOR  (UNKNOWN)
  15859. C***ROUTINES CALLED  (NONE)
  15860. C***REVISION HISTORY  (YYMMDD)
  15861. C   ??????  DATE WRITTEN
  15862. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15863. C***END PROLOGUE  F1P
  15864.       REAL ALFA1,ALFA2,P1,P2,X,D1,D2
  15865. C  P1 = 1/7, P2 = 2/3
  15866.       DATA P1/0.1428571428571428E+00/
  15867.       DATA P2/0.6666666666666667E+00/
  15868. C***FIRST EXECUTABLE STATEMENT  F1P
  15869.       ALFA1 = -0.25E0
  15870.       ALFA2 = -0.5E0
  15871.       D1=ABS(X-P1)
  15872.       D2=ABS(X-P2)
  15873.       F1P = 0.0E+00
  15874.       IF(D1.NE.0.0E+00.AND.D2.NE.0.0E+00) F1P = D1**ALFA1+D2**ALFA2
  15875.       RETURN
  15876.       END
  15877. *DECK F1S
  15878.       REAL FUNCTION F1S (X)
  15879. C***BEGIN PROLOGUE  F1S
  15880. C***PURPOSE  Subsidiary to
  15881. C***LIBRARY   SLATEC
  15882. C***AUTHOR  (UNKNOWN)
  15883. C***ROUTINES CALLED  (NONE)
  15884. C***REVISION HISTORY  (YYMMDD)
  15885. C   ??????  DATE WRITTEN
  15886. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15887. C***END PROLOGUE  F1S
  15888.       REAL X
  15889. C***FIRST EXECUTABLE STATEMENT  F1S
  15890.       F1S = 0.2E+01/(0.2E+01+SIN(0.314159E+02*X))
  15891.       RETURN
  15892.       END
  15893. *DECK F1WS
  15894.       REAL FUNCTION F1WS (X)
  15895. C***BEGIN PROLOGUE  F1WS
  15896. C***PURPOSE  Subsidiary to
  15897. C***LIBRARY   SLATEC
  15898. C***AUTHOR  (UNKNOWN)
  15899. C***ROUTINES CALLED  (NONE)
  15900. C***REVISION HISTORY  (YYMMDD)
  15901. C   ??????  DATE WRITTEN
  15902. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15903. C***END PROLOGUE  F1WS
  15904.       REAL X
  15905. C***FIRST EXECUTABLE STATEMENT  F1WS
  15906.       F1WS = ABS(X-0.33E+00)**(-0.999E+00)
  15907.       RETURN
  15908.       END
  15909. *DECK F2G
  15910.       REAL FUNCTION F2G (X)
  15911. C***BEGIN PROLOGUE  F2G
  15912. C***PURPOSE  Subsidiary to
  15913. C***LIBRARY   SLATEC
  15914. C***AUTHOR  (UNKNOWN)
  15915. C***ROUTINES CALLED  (NONE)
  15916. C***REVISION HISTORY  (YYMMDD)
  15917. C   ??????  DATE WRITTEN
  15918. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15919. C***END PROLOGUE  F2G
  15920.       REAL X
  15921. C***FIRST EXECUTABLE STATEMENT  F2G
  15922.       F2G = X*SIN(0.3E+02*X)*COS(0.5E+02*X)
  15923.       RETURN
  15924.       END
  15925. *DECK F2N
  15926.       REAL FUNCTION F2N (X)
  15927. C***BEGIN PROLOGUE  F2N
  15928. C***PURPOSE  Subsidiary to
  15929. C***LIBRARY   SLATEC
  15930. C***AUTHOR  (UNKNOWN)
  15931. C***ROUTINES CALLED  (NONE)
  15932. C***REVISION HISTORY  (YYMMDD)
  15933. C   ??????  DATE WRITTEN
  15934. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15935. C***END PROLOGUE  F2N
  15936.       REAL X
  15937. C***FIRST EXECUTABLE STATEMENT  F2N
  15938.       F2N=X**(-0.9E+00)
  15939.       RETURN
  15940.       END
  15941. *DECK F2O
  15942.       REAL FUNCTION F2O (X)
  15943. C***BEGIN PROLOGUE  F2O
  15944. C***PURPOSE  Subsidiary to
  15945. C***LIBRARY   SLATEC
  15946. C***AUTHOR  (UNKNOWN)
  15947. C***ROUTINES CALLED  (NONE)
  15948. C***REVISION HISTORY  (YYMMDD)
  15949. C   ??????  DATE WRITTEN
  15950. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15951. C***END PROLOGUE  F2O
  15952.       REAL X
  15953. C***FIRST EXECUTABLE STATEMENT  F2O
  15954.       F2O = 0.0E+00
  15955.       IF(X.NE.0.0E+00) F2O = 1.0/(X*X*SQRT(X))
  15956.       RETURN
  15957.       END
  15958. *DECK F2P
  15959.       REAL FUNCTION F2P (X)
  15960. C***BEGIN PROLOGUE  F2P
  15961. C***PURPOSE  Subsidiary to
  15962. C***LIBRARY   SLATEC
  15963. C***AUTHOR  (UNKNOWN)
  15964. C***ROUTINES CALLED  (NONE)
  15965. C***REVISION HISTORY  (YYMMDD)
  15966. C   ??????  DATE WRITTEN
  15967. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15968. C***END PROLOGUE  F2P
  15969.       REAL X
  15970. C***FIRST EXECUTABLE STATEMENT  F2P
  15971.       F2P = SIN(0.314159E+03*X)/(0.314159E+01*X)
  15972.       RETURN
  15973.       END
  15974. *DECK F2S
  15975.       REAL FUNCTION F2S (X)
  15976. C***BEGIN PROLOGUE  F2S
  15977. C***PURPOSE  Subsidiary to
  15978. C***LIBRARY   SLATEC
  15979. C***AUTHOR  (UNKNOWN)
  15980. C***ROUTINES CALLED  (NONE)
  15981. C***REVISION HISTORY  (YYMMDD)
  15982. C   ??????  DATE WRITTEN
  15983. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  15984. C***END PROLOGUE  F2S
  15985.       REAL X
  15986. C***FIRST EXECUTABLE STATEMENT  F2S
  15987.       F2S = 100.0
  15988.       IF(X.NE.0.0) F2S = SIN(0.314159E+03*X)/(0.314159E+01*X)
  15989.       RETURN
  15990.       END
  15991. *DECK F3G
  15992.       REAL FUNCTION F3G (X)
  15993. C***BEGIN PROLOGUE  F3G
  15994. C***PURPOSE  Subsidiary to
  15995. C***LIBRARY   SLATEC
  15996. C***AUTHOR  (UNKNOWN)
  15997. C***ROUTINES CALLED  (NONE)
  15998. C***REVISION HISTORY  (YYMMDD)
  15999. C   ??????  DATE WRITTEN
  16000. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16001. C***END PROLOGUE  F3G
  16002.       REAL X
  16003. C***FIRST EXECUTABLE STATEMENT  F3G
  16004.       F3G = ABS(X-0.33E+00)**(-0.9E+00)
  16005.       RETURN
  16006.       END
  16007. *DECK F3P
  16008.       REAL FUNCTION F3P (X)
  16009. C***BEGIN PROLOGUE  F3P
  16010. C***PURPOSE  Subsidiary to
  16011. C***LIBRARY   SLATEC
  16012. C***AUTHOR  (UNKNOWN)
  16013. C***ROUTINES CALLED  (NONE)
  16014. C***REVISION HISTORY  (YYMMDD)
  16015. C   ??????  DATE WRITTEN
  16016. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16017. C***END PROLOGUE  F3P
  16018.       REAL X
  16019. C***FIRST EXECUTABLE STATEMENT  F3P
  16020.       F3P = 1.0
  16021.       IF(X.GT.3.1415926535897932) F3P = 0.0
  16022.       RETURN
  16023.       END
  16024. *DECK F3S
  16025.       REAL FUNCTION F3S (X)
  16026. C***BEGIN PROLOGUE  F3S
  16027. C***PURPOSE  Subsidiary to
  16028. C***LIBRARY   SLATEC
  16029. C***AUTHOR  (UNKNOWN)
  16030. C***ROUTINES CALLED  (NONE)
  16031. C***REVISION HISTORY  (YYMMDD)
  16032. C   ??????  DATE WRITTEN
  16033. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16034. C***END PROLOGUE  F3S
  16035.       REAL X
  16036. C***FIRST EXECUTABLE STATEMENT  F3S
  16037.       F3S = 0.1E+01
  16038.       IF(X.GT.3.1415926535897932) F3S = 0.0
  16039.       RETURN
  16040.       END
  16041. *DECK F4P
  16042.       REAL FUNCTION F4P (X)
  16043. C***BEGIN PROLOGUE  F4P
  16044. C***PURPOSE  Subsidiary to
  16045. C***LIBRARY   SLATEC
  16046. C***AUTHOR  (UNKNOWN)
  16047. C***ROUTINES CALLED  (NONE)
  16048. C***REVISION HISTORY  (YYMMDD)
  16049. C   ??????  DATE WRITTEN
  16050. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16051. C***END PROLOGUE  F4P
  16052.       REAL X
  16053. C***FIRST EXECUTABLE STATEMENT  F4P
  16054.       F4P = 0.0
  16055.       IF(X.GT.0.0) F4P = 1.0/(X*SQRT(X))
  16056.       RETURN
  16057.       END
  16058. *DECK F4S
  16059.       REAL FUNCTION F4S (X)
  16060. C***BEGIN PROLOGUE  F4S
  16061. C***PURPOSE  Subsidiary to
  16062. C***LIBRARY   SLATEC
  16063. C***AUTHOR  (UNKNOWN)
  16064. C***ROUTINES CALLED  (NONE)
  16065. C***REVISION HISTORY  (YYMMDD)
  16066. C   ??????  DATE WRITTEN
  16067. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16068. C***END PROLOGUE  F4S
  16069.       REAL X
  16070. C***FIRST EXECUTABLE STATEMENT  F4S
  16071.       IF(X.EQ..33E+00) GO TO 10
  16072.       F4S = ABS(X-0.33E+00)**(-0.999E+00)
  16073.       RETURN
  16074.    10 F4S=0.0
  16075.       RETURN
  16076.       END
  16077. *DECK F5S
  16078.       REAL FUNCTION F5S (X)
  16079. C***BEGIN PROLOGUE  F5S
  16080. C***PURPOSE  Subsidiary to
  16081. C***LIBRARY   SLATEC
  16082. C***AUTHOR  (UNKNOWN)
  16083. C***ROUTINES CALLED  (NONE)
  16084. C***REVISION HISTORY  (YYMMDD)
  16085. C   ??????  DATE WRITTEN
  16086. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16087. C***END PROLOGUE  F5S
  16088.       REAL X
  16089. C***FIRST EXECUTABLE STATEMENT  F5S
  16090.       F5S = 0.0
  16091.       IF(X.NE.0.0) F5S = 1.0/(X*SQRT(X))
  16092.       RETURN
  16093.       END
  16094. *DECK FB
  16095.       REAL FUNCTION FB (X)
  16096. C***BEGIN PROLOGUE  FB
  16097. C***PURPOSE  Subsidiary to
  16098. C***LIBRARY   SLATEC
  16099. C***AUTHOR  (UNKNOWN)
  16100. C***ROUTINES CALLED  (NONE)
  16101. C***REVISION HISTORY  (YYMMDD)
  16102. C   ??????  DATE WRITTEN
  16103. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16104. C***END PROLOGUE  FB
  16105.       REAL X
  16106. C***FIRST EXECUTABLE STATEMENT  FB
  16107.       FB = 1.0E0
  16108.       RETURN
  16109.       END
  16110. *DECK FCN1
  16111.       SUBROUTINE FCN1 (IFLAG, M, N, X, FVEC, FJAC, LDFJAC)
  16112. C***BEGIN PROLOGUE  FCN1
  16113. C***PURPOSE  Subsidiary to
  16114. C***LIBRARY   SLATEC
  16115. C***AUTHOR  (UNKNOWN)
  16116. C***ROUTINES CALLED  (NONE)
  16117. C***REVISION HISTORY  (YYMMDD)
  16118. C   ??????  DATE WRITTEN
  16119. C   890911  Removed unnecessary intrinsics.  (WRB)
  16120. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16121. C***END PROLOGUE  FCN1
  16122. C
  16123. C     SUBROUTINE WHICH EVALUATES THE FUNCTION FOR TEST
  16124. C     PROGRAM USED IN QUICK CHECK OF SNLS1E.
  16125. C     NUMERICAL APPROXIMATION OF JACOBIAN IS USED.
  16126. C
  16127.       DIMENSION X(*),FVEC(*)
  16128.       DATA TWO/2.E0/
  16129. C***FIRST EXECUTABLE STATEMENT  FCN1
  16130.       IF(IFLAG.NE.1) RETURN
  16131.       DO 100 I=1,M
  16132.       TEMP=I
  16133.       FVEC(I)=TWO+TWO*TEMP-EXP(TEMP*X(1))-EXP(TEMP*X(2))
  16134.   100 CONTINUE
  16135.       RETURN
  16136.       END
  16137. *DECK FCN2
  16138.       SUBROUTINE FCN2 (IFLAG, M, N, X, FVEC, FJAC, LDFJAC)
  16139. C***BEGIN PROLOGUE  FCN2
  16140. C***PURPOSE
  16141. C***LIBRARY   SLATEC
  16142. C***KEYWORDS  QUICK CHECK
  16143. C***AUTHOR  (UNKNOWN)
  16144. C***DESCRIPTION
  16145. C
  16146. C     SUBROUTINE TO EVALUATE FUNCTION AND FULL JACOBIAN
  16147. C     FOR TEST PROBLEM IN QUICK CHECK OF SNLS1E.
  16148. C
  16149. C***ROUTINES CALLED  (NONE)
  16150. C***REVISION HISTORY  (YYMMDD)
  16151. C   ??????  DATE WRITTEN
  16152. C   890911  Removed unnecessary intrinsics.  (WRB)
  16153. C   890911  REVISION DATE from Version 3.2
  16154. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16155. C***END PROLOGUE  FCN2
  16156.       DIMENSION X(*),FVEC(*),FJAC(LDFJAC,*)
  16157.       DATA TWO/2.E0/
  16158. C***FIRST EXECUTABLE STATEMENT  FCN2
  16159.       IF(IFLAG.EQ.0) RETURN
  16160. C
  16161. C      SHOULD WE EVALUATE FUNCTION OR JACOBIAN
  16162. C
  16163.       IF(IFLAG.NE.1) GO TO 150
  16164. C
  16165. C      EVALUATE FUNCTIONS
  16166. C
  16167.       DO 100 I=1,M
  16168.       TEMP=I
  16169.       FVEC(I)=TWO+TWO*TEMP-EXP(TEMP*X(1))-EXP(TEMP*X(2))
  16170.   100 CONTINUE
  16171.       RETURN
  16172. C
  16173. C      EVALUATE JACOBIAN
  16174. C
  16175. 150   CONTINUE
  16176.       IF(IFLAG.NE.2) RETURN
  16177.       DO 200 I=1,M
  16178.       TEMP=I
  16179.       FJAC(I,1)=-TEMP*EXP(TEMP*X(1))
  16180.       FJAC(I,2)=-TEMP*EXP(TEMP*X(2))
  16181.   200 CONTINUE
  16182.       RETURN
  16183.       END
  16184. *DECK FCN3
  16185.       SUBROUTINE FCN3 (IFLAG, M, N, X, FVEC, FJROW, NROW)
  16186. C***BEGIN PROLOGUE  FCN3
  16187. C***PURPOSE
  16188. C***LIBRARY   SLATEC
  16189. C***KEYWORDS  QUICK CHECK
  16190. C***AUTHOR  (UNKNOWN)
  16191. C***DESCRIPTION
  16192. C
  16193. C     SUBROUTINE TO EVALUATE THE JACOBIAN, ONE ROW AT A TIME, FOR
  16194. C     TEST PROBLEM USED IN QUICK CHECK OF SNLS1E.
  16195. C
  16196. C***ROUTINES CALLED  (NONE)
  16197. C***REVISION HISTORY  (YYMMDD)
  16198. C   ??????  DATE WRITTEN
  16199. C   890911  Removed unnecessary intrinsics.  (WRB)
  16200. C   890911  REVISION DATE from Version 3.2
  16201. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16202. C***END PROLOGUE  FCN3
  16203.       DIMENSION X(*),FVEC(*),FJROW(*)
  16204.       DATA TWO/2.E0/
  16205. C***FIRST EXECUTABLE STATEMENT  FCN3
  16206.       IF(IFLAG.EQ.0) RETURN
  16207. C
  16208. C      SHOULD WE EVALUATE FUNCTIONS OR JACOBIAN.
  16209. C
  16210.       IF(IFLAG.NE.1) GO TO 150
  16211. C
  16212. C      EVALUATE FUNCTIONS.
  16213. C
  16214.       DO 100 I=1,M
  16215.       TEMP=I
  16216.       FVEC(I)=TWO+TWO*TEMP-EXP(TEMP*X(1))-EXP(TEMP*X(2))
  16217.   100 CONTINUE
  16218.       RETURN
  16219. C
  16220. C     EVALUATE ONE ROW OF JACOBIAN.
  16221. C
  16222. 150   CONTINUE
  16223.       IF(IFLAG.NE.3) RETURN
  16224.       TEMP=NROW
  16225.       FJROW(1)=-TEMP*EXP(TEMP*X(1))
  16226.       FJROW(2)=-TEMP*EXP(TEMP*X(2))
  16227.       RETURN
  16228.       END
  16229. *DECK FCQX
  16230.       SUBROUTINE FCQX (LUN, KPRINT, IPASS)
  16231. C***BEGIN PROLOGUE  FCQX
  16232. C***PURPOSE  Quick check for FC.
  16233. C***LIBRARY   SLATEC
  16234. C***TYPE      SINGLE PRECISION (FCQX-S, DFCQX-D)
  16235. C***KEYWORDS  QUICK CHECK
  16236. C***AUTHOR  Hanson, R. J., (SNLA)
  16237. C***DESCRIPTION
  16238. C
  16239. C     QUICK CHECK SUBPROGRAM FOR THE SUBROUTINE FC.
  16240. C
  16241. C     FIT DISCRETE DATA BY AN S-SHAPED CURVE. EVALUATE THE FITTED CURVE,
  16242. C     ITS FIRST TWO DERIVATIVES, AND PROBABLE ERROR CURVE.
  16243. C
  16244. C     USE SUBPROGRAM FC TO OBTAIN THE CONSTRAINED CUBIC B-SPLINE
  16245. C     REPRESENTATION OF THE CURVE.
  16246. C
  16247. C     THE VALUES OF THE COEFFICIENTS OF THE B-SPLINE AS COMPUTED
  16248. C     BY FC AND THE VALUES OF THE FITTED CURVE AS COMPUTED BY BVALU
  16249. C     IN THE DE BOOR PACKAGE ARE TESTED FOR ACCURACY WITH THE EXPECTED
  16250. C     VALUES.  SEE EXAMPLE PROGRAM SAND78-1291, PP. 22-27.
  16251. C
  16252. C     THE DIMENSIONS IN THE FOLLOWING ARRAYS ARE AS SMALL
  16253. C     AS POSSIBLE FOR THE PROBLEM BEING SOLVED.
  16254. C
  16255. C***ROUTINES CALLED  BVALU, CV, FC, IVOUT, R1MACH, SCOPY, SMOUT, SVOUT
  16256. C***REVISION HISTORY  (YYMMDD)
  16257. C   780801  DATE WRITTEN
  16258. C   890718  Changed references from BVALUE to BVALU.  (WRB)
  16259. C   890911  Removed unnecessary intrinsics.  (WRB)
  16260. C   891004  Changed computation of XVAL.  (WRB)
  16261. C   891004  REVISION DATE from Version 3.2
  16262. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16263. C   901010  Restructured using IF-THEN-ELSE-ENDIF, modified tolerances
  16264. C           to use R1MACH(4) rather than R1MACH(3) and cleaned up
  16265. C           FORMATs.  (RWC)
  16266. C***END PROLOGUE  FCQX
  16267.       DIMENSION XDATA(9), YDATA(9), SDDATA(9), BKPT(13), XCONST(11),
  16268.      *   YCONST(11), COEFF(9), V(51,5), W(529), WORK(12), CHECK(51),
  16269.      *   COEFCK(9)
  16270.       INTEGER ICNT, IPASS, ITEST(38), NDERIV(11), IW(30)
  16271. C
  16272.       DATA XDATA(1),XDATA(2),XDATA(3),XDATA(4),XDATA(5),
  16273.      1     XDATA(6),XDATA(7),XDATA(8),XDATA(9)
  16274.      2 /0.15,0.27,0.33,0.40,0.43,0.47,0.53,0.58,0.63/
  16275.       DATA YDATA(1),YDATA(2),YDATA(3),YDATA(4),YDATA(5),
  16276.      1     YDATA(6),YDATA(7),YDATA(8),YDATA(9)
  16277.      2 /0.025,0.05,0.13,0.27,0.37,0.47,0.64,0.77,0.87/
  16278.       DATA SDDATA(1) /0.015 /,NDATA/09/,NORD/04/,NBKPT/13/,LAST/10/
  16279.       DATA BKPT(1),BKPT(2),BKPT(3),BKPT(4),BKPT(5),
  16280.      1     BKPT(6),BKPT(7),BKPT(8),BKPT(9),BKPT(10),
  16281.      2     BKPT(11),BKPT(12),BKPT(13)
  16282.      3 /-0.6,-0.4,-0.2,0.,0.2,0.4,0.6,0.8,0.9,1.0,1.1,1.2,1.3/
  16283. C
  16284. C     STORE THE DATA TO BE USED TO CHECK THE ACCURACY OF THE
  16285. C     COMPUTED RESULTS.  SEE SAND78-1291, P.26.
  16286. C
  16287.       DATA COEFCK(1),COEFCK(2),COEFCK(3),COEFCK(4),COEFCK(5),
  16288.      1     COEFCK(6),COEFCK(7),COEFCK(8),COEFCK(9)/  1.186380846E-13,
  16289.      2          -2.826166426E-14, -4.333929094E-15,  1.722113311E-01,
  16290.      3           9.421965984E-01,  9.684708719E-01,  9.894902905E-01,
  16291.      4           1.005254855E+00,  9.894902905E-01/
  16292.       DATA CHECK(1), CHECK(2), CHECK(3), CHECK(4), CHECK(5),
  16293.      1     CHECK(6), CHECK(7), CHECK(8), CHECK(9)/
  16294.      2     2.095830752E-16, 2.870188850E-05, 2.296151081E-04,
  16295.      3     7.749509897E-04, 1.836920865E-03, 3.587736064E-03,
  16296.      4     6.199607918E-03, 9.844747759E-03, 1.469536692E-02/
  16297.       DATA CHECK(10), CHECK(11), CHECK(12), CHECK(13), CHECK(14),
  16298.      1     CHECK(15), CHECK(16), CHECK(17), CHECK(18)/
  16299.      2     2.092367672E-02, 2.870188851E-02, 3.824443882E-02,
  16300.      3     4.993466504E-02, 6.419812979E-02, 8.146039566E-02,
  16301.      4     1.021470253E-01, 1.266835812E-01, 1.554956261E-01/
  16302.       DATA CHECK(19), CHECK(20), CHECK(21), CHECK(22), CHECK(23),
  16303.      1     CHECK(24), CHECK(25), CHECK(26), CHECK(27)/
  16304.      2     1.890087225E-01, 2.276484331E-01, 2.718403204E-01,
  16305.      3     3.217163150E-01, 3.762338189E-01, 4.340566020E-01,
  16306.      4     4.938484342E-01, 5.542730855E-01, 6.139943258E-01/
  16307.       DATA CHECK(28), CHECK(29), CHECK(30), CHECK(31), CHECK(32),
  16308.      1     CHECK(33), CHECK(34), CHECK(35), CHECK(36)/
  16309.      2     6.716759250E-01, 7.259816530E-01, 7.755752797E-01,
  16310.      3     8.191205752E-01, 8.556270903E-01, 8.854875002E-01,
  16311.      4     9.094402609E-01, 9.282238286E-01, 9.425766596E-01/
  16312.       DATA CHECK(37), CHECK(38), CHECK(39), CHECK(40), CHECK(41),
  16313.      1     CHECK(42), CHECK(43), CHECK(44), CHECK(45)/
  16314.      2     9.532372098E-01, 9.609439355E-01, 9.664352927E-01,
  16315.      3     9.704497377E-01, 9.737257265E-01, 9.768786393E-01,
  16316.      4     9.800315521E-01, 9.831844649E-01, 9.863373777E-01/
  16317.       DATA CHECK(46), CHECK(47), CHECK(48), CHECK(49), CHECK(50),
  16318.      1     CHECK(51)/       9.894902905E-01, 9.926011645E-01,
  16319.      2     9.954598055E-01, 9.978139804E-01, 9.994114563E-01,
  16320.      3     1.000000000E+00/
  16321. C***FIRST EXECUTABLE STATEMENT  FCQX
  16322. C
  16323. C     BROADCAST SDDATA(1) VALUE TO ALL OF SDDATA(*).
  16324. C
  16325.       CALL SCOPY(NDATA,SDDATA,0,SDDATA,1)
  16326.       ZERO = 0.
  16327.       ONE = 1.
  16328.       NDEG = NORD-1
  16329. C
  16330. C     WRITE THE VARIOUS CONSTRAINTS FOR
  16331. C     THE FITTED CURVE.
  16332. C
  16333.       NCONST = 0
  16334.       T = BKPT(NORD)
  16335. C
  16336. C     CONSTRAIN FUNCTION TO BE ZERO AT LEFT-MOST BREAKPOINT.
  16337. C
  16338.       NCONST = NCONST+1
  16339.       XCONST(NCONST) = T
  16340.       YCONST(NCONST) = ZERO
  16341.       NDERIV(NCONST) = 2+4*0
  16342. C
  16343. C     CONSTRAIN FIRST DERIVATIVE TO BE
  16344. C     NONNEGATIVE AT LEFT-MOST BREAKPOINT.
  16345. C
  16346.       NCONST = NCONST+1
  16347.       XCONST(NCONST) = T
  16348.       YCONST(NCONST) = ZERO
  16349.       NDERIV(NCONST) = 1+4*1
  16350. C
  16351. C     CONSTRAIN SECOND DERIVATIVES TO BE
  16352. C     NONNEGATIVE AT LEFT SET OF BREAKPOINTS.
  16353. C
  16354.       DO 10 I = 1, 3
  16355.          L = NDEG+I
  16356.          T = BKPT(L)
  16357.          NCONST=NCONST+1
  16358.          XCONST(NCONST) = T
  16359.          YCONST(NCONST) = ZERO
  16360.          NDERIV(NCONST) = 1+4*2
  16361.    10 CONTINUE
  16362. C
  16363. C     CONSTRAIN FUNCTION VALUE AT RIGHT-MOST
  16364. C     BREAKPOINT TO BE ONE.
  16365. C
  16366.       NCONST = NCONST+1
  16367.       T = BKPT(LAST)
  16368.       XCONST(NCONST) = T
  16369.       YCONST(NCONST) = ONE
  16370.       NDERIV(NCONST) = 2+4*0
  16371. C
  16372. C     CONSTRAIN SLOPE TO AGREE AT LEFT AND
  16373. C     RIGHT-MOST BREAKPOINTS.
  16374. C
  16375.       NCONST = NCONST+1
  16376.       XCONST(NCONST) = BKPT(NORD)
  16377.       YCONST(NCONST) = BKPT(LAST)
  16378.       NDERIV(NCONST) = 3+4*1
  16379. C
  16380. C     CONSTRAIN SECOND DERIVATIVES TO BE
  16381. C     NONPOSITIVE AT RIGHT SET OF BREAKPOINTS.
  16382. C
  16383.       DO 20 I = 1, 4
  16384.          NCONST = NCONST+1
  16385.          L = LAST-4+I
  16386.          XCONST(NCONST) = BKPT(L)
  16387.          YCONST(NCONST) = ZERO
  16388.          NDERIV(NCONST) = 0+4*2
  16389.    20 CONTINUE
  16390. C
  16391.       IF (KPRINT.GE.2) WRITE (LUN,1000)
  16392.  1000 FORMAT ('1TEST OF SUBROUTINE FC'/)
  16393.       ICNT = 1
  16394.       IDIGIT = -4
  16395. C
  16396.       IF (KPRINT.GE.3) THEN
  16397.          CALL SVOUT (NBKPT, BKPT, '('' ARRAY OF KNOTS.'')', IDIGIT)
  16398.          CALL SVOUT (NDATA, XDATA, '('' INDEP. VAR. VALUES'')',
  16399.      *      IDIGIT)
  16400.          CALL SVOUT (NDATA, YDATA, '('' DEPEND. VAR. VALUES'')', IDIGIT)
  16401.          CALL SVOUT (NDATA, SDDATA, '('' DEPEND. VAR. UNCERTAINTY'')',
  16402.      *      IDIGIT)
  16403. C
  16404.          CALL SVOUT (NCONST, XCONST, '('' INDEP. VAR. CONST. VALS.'')',
  16405.      *      IDIGIT)
  16406.          CALL SVOUT (NCONST, YCONST, '('' CONST. VALUES'')', IDIGIT)
  16407.          CALL IVOUT (NCONST, NDERIV, '('' CONST. INDICATOR'')', IDIGIT)
  16408.       ENDIF
  16409. C
  16410. C     DECLARE AMOUNT OF WORKING STORAGE ALLOCATED TO FC.
  16411. C
  16412.       IW(1) = 529
  16413.       IW(2) = 30
  16414. C
  16415. C     SET MODE TO INDICATE A NEW PROBLEM
  16416. C     AND REQUEST THE VARIANCE FUNCTION.
  16417. C
  16418.       MODE = 2
  16419. C
  16420. C     OBTAIN THE COEFFICIENTS OF THE B-SPLINE.
  16421. C
  16422.       CALL FC(NDATA,XDATA,YDATA,SDDATA,
  16423.      1        NORD,NBKPT,BKPT,
  16424.      2        NCONST,XCONST,YCONST,NDERIV,
  16425.      3        MODE,
  16426.      4        COEFF,
  16427.      5        W,IW)
  16428. C
  16429. C     CHECK COEFFICIENTS
  16430. C
  16431.       TOL = 7.E0*SQRT(R1MACH(4))
  16432.       DO 40 I = 1, NDATA
  16433.          DIFF = ABS(COEFF(I)-COEFCK(I))
  16434.          IF (DIFF .GT. TOL) GO TO 50
  16435.    40 CONTINUE
  16436. C
  16437.       ITEST(ICNT) = 1
  16438.       IF (KPRINT.GE.3) WRITE (LUN,1001)
  16439.  1001 FORMAT (/' FC PASSED TEST 1')
  16440.       GO TO 60
  16441. C
  16442.    50 ITEST(ICNT) = 0
  16443.       IF (KPRINT.GE.2) WRITE (LUN,1002)
  16444.  1002 FORMAT (/' FC FAILED TEST 1')
  16445. C
  16446.    60 K = ITEST(ICNT)
  16447.       IF (KPRINT.NE.2 .OR. K.EQ.0) THEN
  16448.          IF (KPRINT.GE.2) THEN
  16449.             CALL SVOUT (NDATA, COEFCK,
  16450.      *     '(/'' PREDICTED COEFFICIENTS OF THE B-SPLINE FROM SAMPLE'')',
  16451.      *         IDIGIT)
  16452.             CALL SVOUT (NDATA, COEFF,
  16453.      *         '(/'' COEFFICIENTS OF THE B-SPLINE COMPUTED BY FC'')',
  16454.      *         IDIGIT)
  16455.          ENDIF
  16456.       ENDIF
  16457. C
  16458.       ICNT=ICNT+1
  16459. C
  16460. C     COMPUTE VALUE, FIRST TWO DERIVS., AND PROBABLE UNCERTAINTY.
  16461. C
  16462.       N = NBKPT-NORD
  16463.       NVAL = 51
  16464.       DO 90 I = 1, NVAL
  16465. C
  16466. C        THE FUNCTION BVALU IS IN THE DE BOOR B-SPLINE PACKAGE.
  16467. C
  16468.          XVAL = REAL(I-1)/(NVAL-1)
  16469.          II = 1
  16470.          DO 80 J = 1, 3
  16471.             V(I,J+1) = BVALU(BKPT,COEFF,N,NORD,J-1,XVAL,II,WORK)
  16472.    80    CONTINUE
  16473.          V(I,1) = XVAL
  16474. C
  16475. C        THE VARIANCE FUNCTION CV IS A COMPANION SUBPROGRAM TO FC.
  16476. C
  16477.          V(I,5) = SQRT(CV(XVAL,NDATA,NCONST,NORD,NBKPT,BKPT,W))
  16478.    90 CONTINUE
  16479. C
  16480.       DO 100 I = 1, NVAL
  16481.          DIFF = ABS(V(I,2)-CHECK(I))
  16482.          IF (DIFF .GT. TOL) GO TO 110
  16483.   100 CONTINUE
  16484. C
  16485.       ITEST(ICNT) = 1
  16486.       IF (KPRINT.GE.3) WRITE (LUN,1003)
  16487.  1003 FORMAT (/' FC (AND BVALU) PASSED TEST 2')
  16488.       GO TO 120
  16489. C
  16490.   110 ITEST(ICNT) = 0
  16491.       IF (KPRINT.GE.2) WRITE (LUN,1004)
  16492.  1004 FORMAT (/' FC (AND BVALU) FAILED TEST 2')
  16493. C
  16494.   120 K = ITEST(ICNT)
  16495.       IF (KPRINT.NE.2 .OR. K.EQ.0) THEN
  16496.          IF (KPRINT.GE.2) THEN
  16497. C
  16498. C           PRINT THESE VALUES.
  16499. C
  16500.             CALL SMOUT (NVAL, 5, NVAL, V,
  16501.      1         '(''1'',15X,''X'',10X,''FNCN'',8X,''1ST D'',7X,''2ND D'',
  16502.      2         7X, ''ERROR'')', IDIGIT)
  16503.             WRITE (LUN,1005)
  16504.  1005       FORMAT (/' VALUES SHOULD CORRESPOND TO THOSE IN ',
  16505.      *         'SAND78-1291, P. 26')
  16506.          ENDIF
  16507.       ENDIF
  16508. C
  16509. C     CHECK ERROR PROCESSOR
  16510. C
  16511.       IF (KPRINT.GE.2) THEN
  16512.          WRITE (LUN,1006)
  16513.  1006    FORMAT (/ ' 6 ERROR MESSAGES EXPECTED')
  16514.          CALL FC(NDATA,XDATA,YDATA,SDDATA,0,NBKPT,BKPT,NCONST,XCONST,
  16515.      1           YCONST,NDERIV,MODE,COEFF,W,IW)
  16516.          CALL FC(NDATA,XDATA,YDATA,SDDATA,NORD,0,BKPT,NCONST,XCONST,
  16517.      1           YCONST,NDERIV,MODE,COEFF,W,IW)
  16518.          CALL FC(-1,XDATA,YDATA,SDDATA,NORD,NBKPT,BKPT,NCONST,XCONST,
  16519.      1           YCONST,NDERIV,MODE,COEFF,W,IW)
  16520.          MODE = 0
  16521.          CALL FC(NDATA,XDATA,YDATA,SDDATA,NORD,NBKPT,BKPT,NCONST,XCONST,
  16522.      1           YCONST,NDERIV,MODE,COEFF,W,IW)
  16523.          IW(1) = 10
  16524.          CALL FC(NDATA,XDATA,YDATA,SDDATA,NORD,NBKPT,BKPT,NCONST,XCONST,
  16525.      1           YCONST,NDERIV,MODE,COEFF,W,IW)
  16526.          IW(1) = 529
  16527.          IW(2) = 2
  16528.          CALL FC(NDATA,XDATA,YDATA,SDDATA,NORD,NBKPT,BKPT,NCONST,XCONST,
  16529.      1           YCONST,NDERIV,MODE,COEFF,W,IW)
  16530.       ENDIF
  16531. C
  16532.       IP = 1
  16533.         DO 150 I = 1, ICNT
  16534.            IP = IP*ITEST(I)
  16535.   150   CONTINUE
  16536. C
  16537.       IPASS = IP
  16538.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,1007)
  16539.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,1008)
  16540.       RETURN
  16541. C
  16542.  1007 FORMAT (/' *****************FC PASSED ALL TESTS*****************')
  16543.  1008 FORMAT (/' ****************FC FAILED SOME TESTS*****************')
  16544.       END
  16545. *DECK FDEQC
  16546.       SUBROUTINE FDEQC (T, U, UPRIME, RPAR, IPAR)
  16547. C***BEGIN PROLOGUE  FDEQC
  16548. C***SUBSIDIARY
  16549. C***PURPOSE  Derivative evaluator for DEPAC quick checks.
  16550. C***LIBRARY   SLATEC
  16551. C***TYPE      SINGLE PRECISION (FDEQC-S, DFDEQC-D)
  16552. C***AUTHOR  Chow, Jeff, (LANL)
  16553. C***ROUTINES CALLED  (NONE)
  16554. C***REVISION HISTORY  (YYMMDD)
  16555. C   810801  DATE WRITTEN
  16556. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16557. C   900415  Name changed from F to FDEQC.  (WRB)
  16558. C***END PROLOGUE  FDEQC
  16559. C
  16560. C     Declare arguments.
  16561. C
  16562.       INTEGER IPAR(*)
  16563.       REAL RPAR(*), T, U(*), UPRIME(*)
  16564. C
  16565. C     Declare local variables.
  16566. C
  16567.       REAL R, RSQ, R3
  16568. C***FIRST EXECUTABLE STATEMENT  FDEQC
  16569.       RSQ = U(1)*U(1) + U(2)*U(2)
  16570.       R = SQRT(RSQ)
  16571.       R3 = RSQ*R
  16572.       UPRIME(1) = U(3)
  16573.       UPRIME(2) = U(4)
  16574.       UPRIME(3) = -(U(1)/R3)
  16575.       UPRIME(4) = -(U(2)/R3)
  16576.       RETURN
  16577.       END
  16578. *DECK FDTRUE
  16579.       SUBROUTINE FDTRUE (X, F, D)
  16580. C***BEGIN PROLOGUE  FDTRUE
  16581. C***SUBSIDIARY
  16582. C***PURPOSE  Compute exact function values for EVCHCK.
  16583. C***LIBRARY   SLATEC (PCHIP)
  16584. C***TYPE      SINGLE PRECISION (FDTRUE-S, DFDTRU-D)
  16585. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  16586. C***AUTHOR  Fritsch, F. N., (LLNL)
  16587. C***DESCRIPTION
  16588. C
  16589. C        COMPUTE EXACT FUNCTION VALUES IN DOUBLE PRECISION.
  16590. C
  16591. C                   F(X) = X*(X+1)*(X-2)
  16592. C
  16593. C***ROUTINES CALLED  (NONE)
  16594. C***REVISION HISTORY  (YYMMDD)
  16595. C   820601  DATE WRITTEN
  16596. C   890618  REVISION DATE from Version 3.2
  16597. C   890706  Cosmetic changes to prologue.  (WRB)
  16598. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16599. C   900315  Revised prologue.  (FNF)
  16600. C   900316  Deleted variables ONE and TWO.  (FNF)
  16601. C   900321  Changed name of d.p. version from DFTRUE to DFDTRU.
  16602. C***END PROLOGUE  FDTRUE
  16603.       REAL  X, F, D
  16604.       DOUBLE PRECISION  FACT1, FACT2, XX
  16605. C
  16606. C***FIRST EXECUTABLE STATEMENT  FDTRUE
  16607.       XX = X
  16608.       FACT1 = XX + 1
  16609.       FACT2 = XX - 2
  16610.       F = XX * FACT1 * FACT2
  16611.       D = FACT1*FACT2 + XX*(FACT1 + FACT2)
  16612. C
  16613.       RETURN
  16614. C------------- LAST LINE OF FDTRUE FOLLOWS -----------------------------
  16615.       END
  16616. *DECK FEIN
  16617.       REAL FUNCTION FEIN (T)
  16618. C***BEGIN PROLOGUE  FEIN
  16619. C***PURPOSE  Subsidiary to EG8CK.
  16620. C***LIBRARY   SLATEC
  16621. C***AUTHOR  (UNKNOWN)
  16622. C***ROUTINES CALLED  (NONE)
  16623. C***COMMON BLOCKS    FEINX
  16624. C***REVISION HISTORY  (YYMMDD)
  16625. C   ??????  DATE WRITTEN
  16626. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16627. C***END PROLOGUE  FEIN
  16628.       COMMON /FEINX/ X, A, FKM
  16629.       REAL X, A, FKM, T, ALN
  16630. C***FIRST EXECUTABLE STATEMENT  FEIN
  16631.       ALN = (FKM-T)*X - A*LOG(T)
  16632.       FEIN = EXP(ALN)
  16633.       RETURN
  16634.       END
  16635. *DECK FFTQX
  16636.       SUBROUTINE FFTQX (LUN, KPRINT, IPASS)
  16637. C***BEGIN PROLOGUE  FFTQX
  16638. C***PURPOSE  Quick check for the NCAR FFT routines.
  16639. C***LIBRARY   SLATEC
  16640. C***KEYWORDS  QUICK CHECK
  16641. C***AUTHOR  Swarztrauber, P. N., (NCAR)
  16642. C***DESCRIPTION
  16643. C
  16644. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  16645. C
  16646. C                       VERSION 4  APRIL 1985
  16647. C
  16648. C                         A TEST DRIVER FOR
  16649. C          A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE FAST FOURIER
  16650. C           TRANSFORM OF PERIODIC AND OTHER SYMMETRIC SEQUENCES
  16651. C
  16652. C                              BY
  16653. C
  16654. C                       PAUL N SWARZTRAUBER
  16655. C
  16656. C       NATIONAL CENTER FOR ATMOSPHERIC RESEARCH  BOULDER,COLORADO 80307
  16657. C
  16658. C        WHICH IS SPONSORED BY THE NATIONAL SCIENCE FOUNDATION
  16659. C
  16660. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  16661. C
  16662. C
  16663. C             THIS PROGRAM TESTS THE PACKAGE OF FAST FOURIER
  16664. C     TRANSFORMS FOR BOTH COMPLEX AND REAL PERIODIC SEQUENCES AND
  16665. C     CERTAIN OTHER SYMMETRIC SEQUENCES THAT ARE LISTED BELOW.
  16666. C
  16667. C     1.   RFFTI     INITIALIZE  RFFTF AND RFFTB
  16668. C     2.   RFFTF     FORWARD TRANSFORM OF A REAL PERIODIC SEQUENCE
  16669. C     3.   RFFTB     BACKWARD TRANSFORM OF A REAL COEFFICIENT ARRAY
  16670. C
  16671. C     4.   EZFFTI    INITIALIZE EZFFTF AND EZFFTB
  16672. C     5.   EZFFTF    A SIMPLIFIED REAL PERIODIC FORWARD TRANSFORM
  16673. C     6.   EZFFTB    A SIMPLIFIED REAL PERIODIC BACKWARD TRANSFORM
  16674. C
  16675. C     7.   SINTI     INITIALIZE SINT
  16676. C     8.   SINT      SINE TRANSFORM OF A REAL ODD SEQUENCE
  16677. C
  16678. C     9.   COSTI     INITIALIZE COST
  16679. C     10.  COST      COSINE TRANSFORM OF A REAL EVEN SEQUENCE
  16680. C
  16681. C     11.  SINQI     INITIALIZE SINQF AND SINQB
  16682. C     12.  SINQF     FORWARD SINE TRANSFORM WITH ODD WAVE NUMBERS
  16683. C     13.  SINQB     UNNORMALIZED INVERSE OF SINQF
  16684. C
  16685. C     14.  COSQI     INITIALIZE COSQF AND COSQB
  16686. C     15.  COSQF     FORWARD COSINE TRANSFORM WITH ODD WAVE NUMBERS
  16687. C     16.  COSQB     UNNORMALIZED INVERSE OF COSQF
  16688. C
  16689. C     17.  CFFTI     INITIALIZE CFFTF AND CFFTB
  16690. C     18.  CFFTF     FORWARD TRANSFORM OF A COMPLEX PERIODIC SEQUENCE
  16691. C     19.  CFFTB     UNNORMALIZED INVERSE OF CFFTF
  16692. C
  16693. C***ROUTINES CALLED  CFFTB, CFFTF, CFFTI, COSQB, COSQF, COSQI, COST,
  16694. C                    COSTI, EZFFTB, EZFFTF, EZFFTI, PIMACH, R1MACH,
  16695. C                    RFFTB, RFFTF, RFFTI, SINQB, SINQF, SINQI, SINT,
  16696. C                    SINTI
  16697. C***REVISION HISTORY  (YYMMDD)
  16698. C   790601  DATE WRITTEN
  16699. C   890718  Changed computation of PI to use PIMACH.  (WRB)
  16700. C   890911  Removed unnecessary intrinsics.  (WRB)
  16701. C   890911  REVISION DATE from Version 3.2
  16702. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  16703. C   901205  Changed usage of R1MACH(3) to R1MACH(4).  (RWC)
  16704. C   910708  Minor modifications in use of KPRINT.  (WRB)
  16705. C   920211  Code cleaned up, an error in printing an error message fixed
  16706. C           and comments on PASS/FAIL of individual tests added.  (WRB)
  16707. C   920618  Code upgraded to "Version 4".  (BKS, WRB)
  16708. C***END PROLOGUE  FFTQX
  16709. C     .. Scalar Arguments ..
  16710.       INTEGER IPASS, KPRINT, LUN
  16711. C     .. Local Scalars ..
  16712.       REAL ARG, ARG1, ARG2, AZERO, AZEROH, CF, COSQBT, COSQFB, COSQFT,
  16713.      +     COSTFB, COSTT, DCFB, DCFFTB, DCFFTF, DEZB1, DEZF1, DEZFB, DT,
  16714.      +     DUM, ERRMAX, FN, PI, RFTB, RFTF, RFTFB, SIGN, SINQBT, SINQFB,
  16715.      +     SINQFT, SINTFB, SINTT, SQRT2, SUM, SUM1, SUM2, TFN, TPI
  16716.       INTEGER I, J, K, MODN, N, NM1, NNS, NP1, NS2, NS2M, NZ
  16717. C     .. Local Arrays ..
  16718.       COMPLEX CX(200), CY(200)
  16719.       REAL A(100), AH(100), B(100), BH(100), W(2000), X(200), XH(200),
  16720.      +     Y(200)
  16721.       INTEGER ND(10)
  16722. C     .. External Functions ..
  16723.       REAL PIMACH, R1MACH
  16724.       EXTERNAL PIMACH, R1MACH
  16725. C     .. External Subroutines ..
  16726.       EXTERNAL CFFTB, CFFTF, CFFTI, COSQB, COSQF, COSQI, COST, COSTI,
  16727.      +         EZFFTB, EZFFTF, EZFFTI, RFFTB, RFFTF, RFFTI, SINQB,
  16728.      +         SINQF, SINQI, SINT, SINTI
  16729. C     .. Intrinsic Functions ..
  16730.       INTRINSIC ABS, CABS, CMPLX, COS, MAX, MOD, SIN, SQRT
  16731. C     .. Data statements ..
  16732.       DATA ND(1), ND(2), ND(3), ND(4), ND(5), ND(6), ND(7)/120, 54, 49,
  16733.      +     32, 4, 3, 2/
  16734. C***FIRST EXECUTABLE STATEMENT  FFTQX
  16735.       SQRT2 = SQRT(2.0)
  16736.       ERRMAX = 2.0*SQRT(R1MACH(4))
  16737.       NNS = 7
  16738.       PI = PIMACH(DUM)
  16739.       IF (KPRINT .GE. 2) WRITE (LUN, 9000)
  16740.       IPASS = 1
  16741.       DO 660 NZ=1,NNS
  16742.         N = ND(NZ)
  16743.         IF (KPRINT .GE. 2) WRITE (LUN, 9010) N
  16744.         MODN = MOD(N, 2)
  16745.         FN = N
  16746.         TFN = FN + FN
  16747.         NP1 = N + 1
  16748.         NM1 = N - 1
  16749.         DO 100 J=1,NP1
  16750.           X(J) = SIN(J*SQRT2)
  16751.           Y(J) = X(J)
  16752.           XH(J) = X(J)
  16753.   100   CONTINUE
  16754. C
  16755. C       Test Subroutines RFFTI, RFFTF and RFFTB
  16756. C
  16757.         CALL RFFTI(N, W)
  16758.         DT = (PI+PI)/FN
  16759.         NS2 = (N+1)/2
  16760.         IF (NS2 .LT. 2) GO TO 130
  16761.         DO 120 K=2,NS2
  16762.           SUM1 = 0.0
  16763.           SUM2 = 0.0
  16764.           ARG = (K-1)*DT
  16765.           DO 110 I=1,N
  16766.             ARG1 = (I-1)*ARG
  16767.             SUM1 = SUM1 + X(I)*COS(ARG1)
  16768.             SUM2 = SUM2 + X(I)*SIN(ARG1)
  16769.   110     CONTINUE
  16770.           Y(2*K-2) = SUM1
  16771.           Y(2*K-1) = -SUM2
  16772.   120   CONTINUE
  16773.   130   SUM1 = 0.0
  16774.         SUM2 = 0.0
  16775.         DO 140 I=1,NM1,2
  16776.           SUM1 = SUM1 + X(I)
  16777.           SUM2 = SUM2 + X(I+1)
  16778.   140   CONTINUE
  16779.         IF (MODN .EQ. 1) SUM1 = SUM1 + X(N)
  16780.         Y(1) = SUM1 + SUM2
  16781.         IF (MODN .EQ. 0) Y(N) = SUM1 - SUM2
  16782.         CALL RFFTF(N, X, W)
  16783.         RFTF = 0.0
  16784.         DO 150 I=1,N
  16785.           RFTF = MAX(RFTF, ABS(X(I)-Y(I)))
  16786.           X(I) = XH(I)
  16787.   150   CONTINUE
  16788.         RFTF = RFTF/FN
  16789.         IF (RFTF .LE. ERRMAX) THEN
  16790.           IF (KPRINT .GE. 3) WRITE (LUN, 9020)
  16791.         ELSE
  16792.           IPASS = 0
  16793.           IF (KPRINT .GE. 2) WRITE (LUN, 9030)
  16794.         END IF
  16795.         SIGN = 1.0
  16796.         DO 180 I=1,N
  16797.           SUM = 0.5*X(1)
  16798.           ARG = (I-1)*DT
  16799.           IF (NS2 .LT. 2) GO TO 170
  16800.           DO 160 K=2,NS2
  16801.             ARG1 = (K-1)*ARG
  16802.             SUM = SUM + X(2*K-2)*COS(ARG1) - X(2*K-1)*SIN(ARG1)
  16803.   160     CONTINUE
  16804.   170     IF (MODN .EQ. 0) SUM = SUM + 0.5*SIGN*X(N)
  16805.           Y(I) = SUM + SUM
  16806.           SIGN = -SIGN
  16807.   180   CONTINUE
  16808.         CALL RFFTB(N, X, W)
  16809.         RFTB = 0.0
  16810.         DO 190 I=1,N
  16811.           RFTB = MAX(RFTB, ABS(X(I)-Y(I)))
  16812.           X(I) = XH(I)
  16813.           Y(I) = XH(I)
  16814.   190   CONTINUE
  16815.         IF (RFTB .LE. ERRMAX) THEN
  16816.           IF (KPRINT .GE. 3) WRITE (LUN, 9040)
  16817.         ELSE
  16818.           IPASS = 0
  16819.           IF (KPRINT .GE. 2) WRITE (LUN, 9050)
  16820.         END IF
  16821. C
  16822.         CALL RFFTB(N, Y, W)
  16823.         CALL RFFTF(N, Y, W)
  16824.         CF = 1.0/FN
  16825.         RFTFB = 0.0
  16826.         DO 200 I=1,N
  16827.           RFTFB = MAX(RFTFB, ABS(CF*Y(I)-X(I)))
  16828.   200   CONTINUE
  16829.         IF (RFTFB .LE. ERRMAX) THEN
  16830.           IF (KPRINT .GE. 3) WRITE (LUN, 9060)
  16831.         ELSE
  16832.           IPASS = 0
  16833.           IF (KPRINT .GE. 2) WRITE (LUN, 9070)
  16834.         END IF
  16835. C
  16836. C       Test Subroutines SINTI and SINT
  16837. C
  16838.         DT = PI/FN
  16839.         DO 210 I=1,NM1
  16840.           X(I) = XH(I)
  16841.   210   CONTINUE
  16842.         DO 230 I=1,NM1
  16843.           Y(I) = 0.0
  16844.           ARG1 = (I)*DT
  16845.           DO 220 K=1,NM1
  16846.             Y(I) = Y(I) + X(K)*SIN((K)*ARG1)
  16847.   220     CONTINUE
  16848.           Y(I) = Y(I) + Y(I)
  16849.   230   CONTINUE
  16850.         CALL SINTI(NM1, W)
  16851.         CALL SINT(NM1, X, W)
  16852.         CF = 0.5/FN
  16853.         SINTT = 0.0
  16854.         DO 240 I=1,NM1
  16855.           SINTT = MAX(SINTT, ABS(X(I)-Y(I)))
  16856.           X(I) = XH(I)
  16857.           Y(I) = X(I)
  16858.   240   CONTINUE
  16859.         SINTT = CF*SINTT
  16860.         IF (SINTT .LE. ERRMAX) THEN
  16861.           IF (KPRINT .GE. 3) WRITE (LUN, 9080)
  16862.         ELSE
  16863.           IPASS = 0
  16864.           IF (KPRINT .GE. 2) WRITE (LUN, 9090)
  16865.         END IF
  16866.         CALL SINT(NM1, X, W)
  16867.         CALL SINT(NM1, X, W)
  16868.         SINTFB = 0.0
  16869.         DO 250 I=1,NM1
  16870.           SINTFB = MAX(SINTFB, ABS(CF*X(I)-Y(I)))
  16871.   250   CONTINUE
  16872.         IF (SINTFB .LE. ERRMAX) THEN
  16873.           IF (KPRINT .GE. 3) WRITE (LUN, 9100)
  16874.         ELSE
  16875.           IPASS = 0
  16876.           IF (KPRINT .GE. 2) WRITE (LUN, 9110)
  16877.         END IF
  16878. C
  16879. C       Test Subroutines COSTI and COST
  16880. C
  16881.         DO 260 I=1,NP1
  16882.           X(I) = XH(I)
  16883.   260   CONTINUE
  16884.         SIGN = 1.0
  16885.         DO 280 I=1,NP1
  16886.           Y(I) = 0.5*(X(1)+SIGN*X(N+1))
  16887.           ARG = (I-1)*DT
  16888.           DO 270 K=2,N
  16889.             Y(I) = Y(I) + X(K)*COS((K-1)*ARG)
  16890.   270     CONTINUE
  16891.           Y(I) = Y(I) + Y(I)
  16892.           SIGN = -SIGN
  16893.   280   CONTINUE
  16894.         CALL COSTI(NP1, W)
  16895.         CALL COST(NP1, X, W)
  16896.         COSTT = 0.0
  16897.         DO 290 I=1,NP1
  16898.           COSTT = MAX(COSTT, ABS(X(I)-Y(I)))
  16899.           X(I) = XH(I)
  16900.           Y(I) = XH(I)
  16901.   290   CONTINUE
  16902.         COSTT = CF*COSTT
  16903.         IF (COSTT .LE. ERRMAX) THEN
  16904.           IF (KPRINT .GE. 3) WRITE (LUN, 9120)
  16905.         ELSE
  16906.           IPASS = 0
  16907.           IF (KPRINT .GE. 2) WRITE (LUN, 9130)
  16908.         END IF
  16909. C
  16910.         CALL COST(NP1, X, W)
  16911.         CALL COST(NP1, X, W)
  16912.         COSTFB = 0.0
  16913.         DO 300 I=1,NP1
  16914.           COSTFB = MAX(COSTFB, ABS(CF*X(I)-Y(I)))
  16915.   300   CONTINUE
  16916.         IF (COSTFB .LE. ERRMAX) THEN
  16917.           IF (KPRINT .GE. 3) WRITE (LUN, 9140)
  16918.         ELSE
  16919.           IPASS = 0
  16920.           IF (KPRINT .GE. 2) WRITE (LUN, 9150)
  16921.         END IF
  16922. C
  16923. C       Test Subroutines SINQI, SINQF and SINQB
  16924. C
  16925.         CF = 0.25/FN
  16926.         DO 310 I=1,N
  16927.           Y(I) = XH(I)
  16928.   310   CONTINUE
  16929.         DT = PI/(FN+FN)
  16930.         DO 330 I=1,N
  16931.           X(I) = 0.0
  16932.           ARG = DT*(I)
  16933.           DO 320 K=1,N
  16934.             X(I) = X(I) + Y(K)*SIN((K+K-1)*ARG)
  16935.   320     CONTINUE
  16936.           X(I) = 4.0*X(I)
  16937.   330   CONTINUE
  16938.         CALL SINQI(N, W)
  16939.         CALL SINQB(N, Y, W)
  16940.         SINQBT = 0.0
  16941.         DO 340 I=1,N
  16942.           SINQBT = MAX(SINQBT, ABS(Y(I)-X(I)))
  16943.           X(I) = XH(I)
  16944.   340   CONTINUE
  16945.         SINQBT = CF*SINQBT
  16946.         IF (SINQBT .LE. ERRMAX) THEN
  16947.           IF (KPRINT .GE. 3) WRITE (LUN, 9160)
  16948.         ELSE
  16949.           IPASS = 0
  16950.           IF (KPRINT .GE. 2) WRITE (LUN, 9170)
  16951.         END IF
  16952. C
  16953.         SIGN = 1.0
  16954.         DO 360 I=1,N
  16955.           ARG = (I+I-1)*DT
  16956.           Y(I) = 0.5*SIGN*X(N)
  16957.           DO 350 K=1,NM1
  16958.             Y(I) = Y(I) + X(K)*SIN((K)*ARG)
  16959.   350     CONTINUE
  16960.           Y(I) = Y(I) + Y(I)
  16961.           SIGN = -SIGN
  16962.   360   CONTINUE
  16963.         CALL SINQF(N, X, W)
  16964.         SINQFT = 0.0
  16965.         DO 370 I=1,N
  16966.           SINQFT = MAX(SINQFT, ABS(X(I)-Y(I)))
  16967.           Y(I) = XH(I)
  16968.           X(I) = XH(I)
  16969.   370   CONTINUE
  16970.         IF (SINQFT .LE. ERRMAX) THEN
  16971.           IF (KPRINT .GE. 3) WRITE (LUN, 9180)
  16972.         ELSE
  16973.           IPASS = 0
  16974.           IF (KPRINT .GE. 2) WRITE (LUN, 9190)
  16975.         END IF
  16976. C
  16977.         CALL SINQF(N, Y, W)
  16978.         CALL SINQB(N, Y, W)
  16979.         SINQFB = 0.0
  16980.         DO 380 I=1,N
  16981.           SINQFB = MAX(SINQFB, ABS(CF*Y(I)-X(I)))
  16982.   380   CONTINUE
  16983.         IF (SINQFB .LE. ERRMAX) THEN
  16984.           IF (KPRINT .GE. 3) WRITE (LUN, 9200)
  16985.         ELSE
  16986.           IPASS = 0
  16987.           IF (KPRINT .GE. 2) WRITE (LUN, 9210)
  16988.         END IF
  16989. C
  16990. C       Test Subroutines COSQI, COSQF and COSQB
  16991. C
  16992.         DO 390 I=1,N
  16993.           Y(I) = XH(I)
  16994.   390   CONTINUE
  16995.         DO 410 I=1,N
  16996.           X(I) = 0.0
  16997.           ARG = (I-1)*DT
  16998.           DO 400 K=1,N
  16999.             X(I) = X(I) + Y(K)*COS((K+K-1)*ARG)
  17000.   400     CONTINUE
  17001.           X(I) = 4.0*X(I)
  17002.   410   CONTINUE
  17003.         CALL COSQI(N, W)
  17004.         CALL COSQB(N, Y, W)
  17005.         COSQBT = 0.0
  17006.         DO 420 I=1,N
  17007.           COSQBT = MAX(COSQBT, ABS(X(I)-Y(I)))
  17008.           X(I) = XH(I)
  17009.   420   CONTINUE
  17010.         COSQBT = CF*COSQBT
  17011.         IF (COSQBT .LE. ERRMAX) THEN
  17012.           IF (KPRINT .GE. 3) WRITE (LUN, 9220)
  17013.         ELSE
  17014.           IPASS = 0
  17015.           IF (KPRINT .GE. 2) WRITE (LUN, 9230)
  17016.         END IF
  17017. C
  17018.         DO 440 I=1,N
  17019.           Y(I) = 0.5*X(1)
  17020.           ARG = (I+I-1)*DT
  17021.           DO 430 K=2,N
  17022.             Y(I) = Y(I) + X(K)*COS((K-1)*ARG)
  17023.   430     CONTINUE
  17024.           Y(I) = Y(I) + Y(I)
  17025.   440   CONTINUE
  17026.         CALL COSQF(N, X, W)
  17027.         COSQFT = 0.0
  17028.         DO 450 I=1,N
  17029.           COSQFT = MAX(COSQFT, ABS(Y(I)-X(I)))
  17030.           X(I) = XH(I)
  17031.           Y(I) = XH(I)
  17032.   450   CONTINUE
  17033.         COSQFT = CF*COSQFT
  17034.         IF (COSQFT .LE. ERRMAX) THEN
  17035.           IF (KPRINT .GE. 3) WRITE (LUN, 9240)
  17036.         ELSE
  17037.           IPASS = 0
  17038.           IF (KPRINT .GE. 2) WRITE (LUN, 9250)
  17039.         END IF
  17040. C
  17041.         CALL COSQB(N, X, W)
  17042.         CALL COSQF(N, X, W)
  17043.         COSQFB = 0.0
  17044.         DO 460 I=1,N
  17045.           COSQFB = MAX(COSQFB, ABS(CF*X(I)-Y(I)))
  17046.   460   CONTINUE
  17047.         IF (COSQFB .LE. ERRMAX) THEN
  17048.           IF (KPRINT .GE. 3) WRITE (LUN, 9260)
  17049.         ELSE
  17050.           IPASS = 0
  17051.           IF (KPRINT .GE. 2) WRITE (LUN, 9270)
  17052.         END IF
  17053. C
  17054. C       Test Subroutines EZFFTI, EZFFTF and EZFFTB
  17055. C
  17056.         CALL EZFFTI(N, W)
  17057.         DO 470 I=1,N
  17058.           X(I) = XH(I)
  17059.   470   CONTINUE
  17060.         TPI = 2.0*PI
  17061.         DT = TPI/N
  17062.         NS2 = (N+1)/2
  17063.         CF = 2.0/N
  17064.         NS2M = NS2 - 1
  17065.         IF (NS2M .LE. 0) GO TO 500
  17066.         DO 490 K=1,NS2M
  17067.           SUM1 = 0.0
  17068.           SUM2 = 0.0
  17069.           ARG = K*DT
  17070.           DO 480 I=1,N
  17071.             ARG1 = (I-1)*ARG
  17072.             SUM1 = SUM1 + X(I)*COS(ARG1)
  17073.             SUM2 = SUM2 + X(I)*SIN(ARG1)
  17074.   480     CONTINUE
  17075.           A(K) = CF*SUM1
  17076.           B(K) = CF*SUM2
  17077.   490   CONTINUE
  17078.   500   NM1 = N - 1
  17079.         SUM1 = 0.0
  17080.         SUM2 = 0.0
  17081.         DO 510 I=1,NM1,2
  17082.           SUM1 = SUM1 + X(I)
  17083.           SUM2 = SUM2 + X(I+1)
  17084.   510   CONTINUE
  17085.         IF (MODN .EQ. 1) SUM1 = SUM1 + X(N)
  17086.         AZERO = 0.5*CF*(SUM1+SUM2)
  17087.         IF (MODN .EQ. 0) A(NS2) = 0.5*CF*(SUM1-SUM2)
  17088.         CALL EZFFTF(N, X, AZEROH, AH, BH, W)
  17089.         DEZF1 = ABS(AZEROH-AZERO)
  17090.         IF (MODN .EQ. 0) DEZF1 = MAX(DEZF1, ABS(A(NS2)-AH(NS2)))
  17091.         IF (NS2M .LE. 0) GO TO 530
  17092.         DO 520 I=1,NS2M
  17093.           DEZF1 = MAX(DEZF1, ABS(AH(I)-A(I)), ABS(BH(I)-B(I)))
  17094.   520   CONTINUE
  17095.         IF (DEZF1 .LE. ERRMAX) THEN
  17096.           IF (KPRINT .GE. 3) WRITE (LUN, 9280)
  17097.         ELSE
  17098.           IPASS = 0
  17099.           IF (KPRINT .GE. 2) WRITE (LUN, 9290)
  17100.         END IF
  17101. C
  17102.   530   NS2 = N/2
  17103.         IF (MODN .EQ. 0) B(NS2) = 0.0
  17104.         DO 550 I=1,N
  17105.           SUM = AZERO
  17106.           ARG1 = (I-1)*DT
  17107.           DO 540 K=1,NS2
  17108.             ARG2 = (K)*ARG1
  17109.             SUM = SUM + A(K)*COS(ARG2) + B(K)*SIN(ARG2)
  17110.   540     CONTINUE
  17111.           X(I) = SUM
  17112.   550   CONTINUE
  17113.         CALL EZFFTB(N, Y, AZERO, A, B, W)
  17114.         DEZB1 = 0.0
  17115.         DO 560 I=1,N
  17116.           DEZB1 = MAX(DEZB1, ABS(X(I)-Y(I)))
  17117.           X(I) = XH(I)
  17118.   560   CONTINUE
  17119.         IF (DEZB1 .LE. ERRMAX) THEN
  17120.           IF (KPRINT .GE. 3) WRITE (LUN, 9300)
  17121.         ELSE
  17122.           IPASS = 0
  17123.           IF (KPRINT .GE. 2) WRITE (LUN, 9310)
  17124.         END IF
  17125. C
  17126.         CALL EZFFTF(N, X, AZERO, A, B, W)
  17127.         CALL EZFFTB(N, Y, AZERO, A, B, W)
  17128.         DEZFB = 0.0
  17129.         DO 570 I=1,N
  17130.           DEZFB = MAX(DEZFB, ABS(X(I)-Y(I)))
  17131.   570   CONTINUE
  17132.         IF (DEZFB .LE. ERRMAX) THEN
  17133.           IF (KPRINT .GE. 3) WRITE (LUN, 9320)
  17134.         ELSE
  17135.           IPASS = 0
  17136.           IF (KPRINT .GE. 2) WRITE (LUN, 9330)
  17137.         END IF
  17138. C
  17139. C       Test Subroutines CFFTI, CFFTF and CFFTB
  17140. C
  17141.         DO 580 I=1,N
  17142.           CX(I) = CMPLX(COS(SQRT2*I), SIN(SQRT2*(I*I)))
  17143.   580   CONTINUE
  17144.         DT = (PI+PI)/FN
  17145.         DO 600 I=1,N
  17146.           ARG1 = -(I-1)*DT
  17147.           CY(I) = (0.0, 0.0)
  17148.           DO 590 K=1,N
  17149.             ARG2 = (K-1)*ARG1
  17150.             CY(I) = CY(I) + CMPLX(COS(ARG2), SIN(ARG2))*CX(K)
  17151.   590     CONTINUE
  17152.   600   CONTINUE
  17153.         CALL CFFTI(N, W)
  17154.         CALL CFFTF(N, CX, W)
  17155.         DCFFTF = 0.0
  17156.         DO 610 I=1,N
  17157.           DCFFTF = MAX(DCFFTF, CABS(CX(I)-CY(I)))
  17158.           CX(I) = CX(I)/FN
  17159.   610   CONTINUE
  17160.         DCFFTF = DCFFTF/FN
  17161.         IF (DCFFTF .LE. ERRMAX) THEN
  17162.           IF (KPRINT .GE. 3) WRITE (LUN, 9340)
  17163.         ELSE
  17164.           IPASS = 0
  17165.           IF (KPRINT .GE. 2) WRITE (LUN, 9350)
  17166.         END IF
  17167. C
  17168.         DO 630 I=1,N
  17169.           ARG1 = (I-1)*DT
  17170.           CY(I) = (0.0, 0.0)
  17171.           DO 620 K=1,N
  17172.             ARG2 = (K-1)*ARG1
  17173.             CY(I) = CY(I) + CMPLX(COS(ARG2), SIN(ARG2))*CX(K)
  17174.   620     CONTINUE
  17175.   630   CONTINUE
  17176.         CALL CFFTB(N, CX, W)
  17177.         DCFFTB = 0.0
  17178.         DO 640 I=1,N
  17179.           DCFFTB = MAX(DCFFTB, CABS(CX(I)-CY(I)))
  17180.           CX(I) = CY(I)
  17181.   640   CONTINUE
  17182.         IF (DCFFTB .LE. ERRMAX) THEN
  17183.           IF (KPRINT .GE. 3) WRITE (LUN, 9360)
  17184.         ELSE
  17185.           IPASS = 0
  17186.           IF (KPRINT .GE. 2) WRITE (LUN, 9370)
  17187.         END IF
  17188. C
  17189.         CF = 1.0/FN
  17190.         CALL CFFTF(N, CX, W)
  17191.         CALL CFFTB(N, CX, W)
  17192.         DCFB = 0.0
  17193.         DO 650 I=1,N
  17194.           DCFB = MAX(DCFB, CABS(CF*CX(I)-CY(I)))
  17195.   650   CONTINUE
  17196.         IF (DCFB .LE. ERRMAX) THEN
  17197.           IF (KPRINT .GE. 3) WRITE (LUN, 9380)
  17198.         ELSE
  17199.           IPASS = 0
  17200.           IF (KPRINT .GE. 2) WRITE (LUN, 9390)
  17201.         END IF
  17202.         IF (KPRINT .GE. 3) THEN
  17203.           WRITE (LUN, 9400) N, RFTF, RFTB, RFTFB, SINTT, SINTFB,
  17204.      +      COSTT, COSTFB, SINQFT, SINQBT, SINQFB, COSQFT, COSQBT,
  17205.      +      COSQFB, DEZF1, DEZB1, DEZFB, DCFFTF, DCFFTB, DCFB
  17206.         END IF
  17207.   660 CONTINUE
  17208.       IF (KPRINT.GE.2 .AND. IPASS.EQ.1) WRITE (LUN, 9410)
  17209.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN, 9420)
  17210.       RETURN
  17211. C
  17212.  9000 FORMAT ('1' / ' FFT QUICK CHECK')
  17213.  9010 FORMAT (/ ' Test FFT routines with a sequence of length ', I3)
  17214.  9020 FORMAT (' Test of RFFTF PASSED')
  17215.  9030 FORMAT (' Test of RFFTF FAILED')
  17216.  9040 FORMAT (' Test of RFFTB PASSED')
  17217.  9050 FORMAT (' Test of RFFTB FAILED')
  17218.  9060 FORMAT (' Test of RFFTF and RFFTB PASSED')
  17219.  9070 FORMAT (' Test of RFFTF and RFFTB FAILED')
  17220.  9080 FORMAT (' First test of SINT PASSED')
  17221.  9090 FORMAT (' First test of SINT FAILED')
  17222.  9100 FORMAT (' Second test of SINT PASSED')
  17223.  9110 FORMAT (' Second test of SINT FAILED')
  17224.  9120 FORMAT (' First test of COST PASSED')
  17225.  9130 FORMAT (' First test of COST FAILED')
  17226.  9140 FORMAT (' Second test of COST PASSED')
  17227.  9150 FORMAT (' Second test of COST FAILED')
  17228.  9160 FORMAT (' Test of SINQB PASSED')
  17229.  9170 FORMAT (' Test of SINQB FAILED')
  17230.  9180 FORMAT (' Test of SINQF PASSED')
  17231.  9190 FORMAT (' Test of SINQF FAILED')
  17232.  9200 FORMAT (' Test of SINQF and SINQB PASSED')
  17233.  9210 FORMAT (' Test of SINQF and SINQB FAILED')
  17234.  9220 FORMAT (' Test of COSQB PASSED')
  17235.  9230 FORMAT (' Test of COSQB FAILED')
  17236.  9240 FORMAT (' Test of COSQF PASSED')
  17237.  9250 FORMAT (' Test of COSQF FAILED')
  17238.  9260 FORMAT (' Test of COSQF and COSQB PASSED')
  17239.  9270 FORMAT (' Test of COSQF and COSQB FAILED')
  17240.  9280 FORMAT (' Test of EZFFTF PASSED')
  17241.  9290 FORMAT (' Test of EZFFTF FAILED')
  17242.  9300 FORMAT (' Test of EZFFTB PASSED')
  17243.  9310 FORMAT (' Test of EZFFTB FAILED')
  17244.  9320 FORMAT (' Test of EZFFTF and EZFFTB PASSED')
  17245.  9330 FORMAT (' Test of EZFFTF and EZFFTB FAILED')
  17246.  9340 FORMAT (' Test of CFFTF PASSED')
  17247.  9350 FORMAT (' Test of CFFTF FAILED')
  17248.  9360 FORMAT (' Test of CFFTB PASSED')
  17249.  9370 FORMAT (' Test of CFFTB FAILED')
  17250.  9380 FORMAT (' Test of CFFTF and CFFTB PASSED')
  17251.  9390 FORMAT (' Test of CFFTF and CFFTB FAILED')
  17252.  9400 FORMAT ('0N', I5, '  RFFTF  ', E9.3, '  RFFTB  ', E9.3,
  17253.      +        '  RFFTFB ',E9.3 /
  17254.      +        7X, '  SINT   ', E9.3, '  SINTFB ', E9.3 /
  17255.      +        7X, '  COST   ', E9.3 , '  COSTFB '  , E9.3 /
  17256.      +        7X, '  SINQF  ', E9.3, '  SINQB  ', E9.3, '  SINQFB ',
  17257.      +        E9.3 /
  17258.      +        7X, '  COSQF  ', E9.3, '  COSQB  ', E9.3, '  COSQFB ',
  17259.      +        E9.3 /
  17260.      +        7X, '  DEZF1  ', E9.3, '  DEZB1  ', E9.3, '  DEZFB  ',
  17261.      +        E9.3 /
  17262.      +        7X, '  CFFTF  ', E9.3, '  CFFTB  ', E9.3, '  CFFTFB ',
  17263.      +        E9.3)
  17264.  9410 FORMAT (/ ' ***********FFT ROUTINES PASSED ALL TESTS************')
  17265.  9420 FORMAT (/ ' ***********FFT ROUTINES FAILED SOME TESTS***********')
  17266.       END
  17267. *DECK FMAT
  17268.       SUBROUTINE FMAT (X, Y, YP)
  17269. C***BEGIN PROLOGUE  FMAT
  17270. C***PURPOSE  Subsidiary to
  17271. C***LIBRARY   SLATEC
  17272. C***AUTHOR  (UNKNOWN)
  17273. C***ROUTINES CALLED  (NONE)
  17274. C***COMMON BLOCKS    SAVEX
  17275. C***REVISION HISTORY  (YYMMDD)
  17276. C   ??????  DATE WRITTEN
  17277. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  17278. C***END PROLOGUE  FMAT
  17279.       DIMENSION Y(*),YP(*)
  17280.       COMMON /SAVEX/ XSAVE, TERM
  17281. C***FIRST EXECUTABLE STATEMENT  FMAT
  17282.       YP(1) = Y(2)
  17283.       IF (X .EQ. XSAVE) GO TO 10
  17284.       XSAVE=X
  17285.       TANX=TAN(X/57.2957795130823)
  17286.       TERM=3.0/TANX+2.0*TANX
  17287.    10 YP(2) = -TERM*Y(2)-0.7*Y(1)
  17288.       RETURN
  17289.       END
  17290. *DECK FQD1
  17291.       REAL FUNCTION FQD1 (X)
  17292. C***BEGIN PROLOGUE  FQD1
  17293. C***SUBSIDIARY
  17294. C***PURPOSE  Function evaluator for QNC79 and GAUS8 quick checks.
  17295. C***LIBRARY   SLATEC
  17296. C***TYPE      SINGLE PRECISION (FQD1-S, DFQD1-D)
  17297. C***AUTHOR  Boland, W. Robert, (LANL)
  17298. C***SEE ALSO  QG8TST, QN79QX
  17299. C***ROUTINES CALLED  (NONE)
  17300. C***REVISION HISTORY  (YYMMDD)
  17301. C   920229  DATE WRITTEN
  17302. C***END PROLOGUE  FQD1
  17303. C     .. Scalar Arguments ..
  17304.       REAL X
  17305. C     .. Intrinsic Functions ..
  17306.       INTRINSIC SQRT
  17307. C***FIRST EXECUTABLE STATEMENT  FQD1
  17308.       FQD1 = 0.0E0
  17309.       IF (X .GT. 0.0E0) THEN
  17310.         FQD1 = 1.0E0/SQRT(X)
  17311.       ENDIF
  17312.       RETURN
  17313.       END
  17314. *DECK FQD2
  17315.       REAL FUNCTION FQD2 (X)
  17316. C***BEGIN PROLOGUE  FQD2
  17317. C***SUBSIDIARY
  17318. C***PURPOSE  Function evaluator for QNC79 and GAUS8 quick checks.
  17319. C***LIBRARY   SLATEC
  17320. C***TYPE      SINGLE PRECISION (FQD2-S, DFQD2-D)
  17321. C***AUTHOR  Boland, W. Robert, (LANL)
  17322. C***SEE ALSO  QG8TST, QN79QX
  17323. C***ROUTINES CALLED  (NONE)
  17324. C***REVISION HISTORY  (YYMMDD)
  17325. C   920229  DATE WRITTEN
  17326. C***END PROLOGUE  FQD2
  17327. C     .. Scalar Arguments ..
  17328.       REAL X
  17329. C     .. Intrinsic Functions ..
  17330.       INTRINSIC COS, EXP
  17331. C***FIRST EXECUTABLE STATEMENT  FQD2
  17332.       FQD2 = EXP(X)*COS(10.0E0*X)
  17333.       RETURN
  17334.       END
  17335. *DECK FZTEST
  17336.       SUBROUTINE FZTEST (LUN, KPRINT, IPASS)
  17337. C***BEGIN PROLOGUE  FZTEST
  17338. C***PURPOSE  Quick check for FZERO.
  17339. C***LIBRARY   SLATEC
  17340. C***TYPE      SINGLE PRECISION (FZTEST-S, DFZTST-D)
  17341. C***AUTHOR  (UNKNOWN)
  17342. C***ROUTINES CALLED  FZERO, R1MACH, XERCLR, XGETF, XSETF
  17343. C***REVISION HISTORY  (YYMMDD)
  17344. C   ??????  DATE WRITTEN
  17345. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  17346. C   901205  Changed usage of R1MACH(3) to R1MACH(4).  (RWC)
  17347. C   910501  Added PURPOSE and TYPE records.  (WRB)
  17348. C   910708  Minor modifications in use of KPRINT.  (WRB)
  17349. C   920212  Code completely restructured to test IFLAG for all values
  17350. C           of KPRINT.  (WRB)
  17351. C***END PROLOGUE  FZTEST
  17352. C     .. Scalar Arguments ..
  17353.       INTEGER IPASS, KPRINT, LUN
  17354. C     .. Local Scalars ..
  17355.       INTEGER IFLAG, KONTRL
  17356.       REAL AE, B, C, PI, R, RE, TOL
  17357.       LOGICAL FATAL
  17358. C     .. External Functions ..
  17359.       REAL R1MACH
  17360.       EXTERNAL R1MACH
  17361. C     .. External Subroutines ..
  17362.       EXTERNAL FZERO, XERCLR, XGETF, XSETF
  17363. C     .. Intrinsic Functions ..
  17364.       REAL SIN, TAN
  17365.       INTRINSIC ABS, ATAN, MAX, SIN, SQRT, TAN
  17366. C***FIRST EXECUTABLE STATEMENT  FZTEST
  17367.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  17368.       IPASS = 1
  17369.       PI = 4.0E0 *ATAN(1.0E0)
  17370.       RE = 1.0E-6
  17371.       AE = 1.0E-6
  17372.       TOL = MAX(1.0E-5,SQRT(R1MACH(4)))
  17373. C
  17374. C     Set up and solve example problem
  17375. C
  17376.       B = 0.1E0
  17377.       C = 4.0E0
  17378.       R = C - B
  17379.       CALL FZERO (SIN, B, C, R, RE, AE, IFLAG)
  17380. C
  17381. C     See if test was passed.
  17382. C
  17383.       IF (ABS(B-PI).LE.TOL .AND. ABS(C-PI).LE.TOL) THEN
  17384.         IF (KPRINT .GE. 3) WRITE (LUN, 9010) 'PASSED', B, C, IFLAG
  17385.       ELSE
  17386.         IPASS = 0
  17387.         IF (KPRINT .GE. 2) WRITE (LUN, 9010) 'FAILED', B, C, IFLAG
  17388.       ENDIF
  17389. C
  17390. C     Trigger 2 error conditions
  17391. C
  17392.       CALL XGETF (KONTRL)
  17393.       IF (KPRINT .LE. 2) THEN
  17394.          CALL XSETF (0)
  17395.       ELSE
  17396.          CALL XSETF (1)
  17397.       ENDIF
  17398.       FATAL = .FALSE.
  17399.       CALL XERCLR
  17400. C
  17401.       IF (KPRINT .GE. 3) WRITE (LUN,9020)
  17402.       B = 1.0E0
  17403. C
  17404. C     IFLAG=3 (Singular point)
  17405. C
  17406.       C = 2.0E0
  17407.       R = 0.5E0*(B+C)
  17408.       CALL FZERO (TAN, B, C, B, RE, AE, IFLAG)
  17409.       IF (IFLAG .NE. 3) THEN
  17410.         IPASS = 0
  17411.         FATAL = .TRUE.
  17412.         IF (KPRINT .GE. 2) WRITE (LUN,9030) IFLAG, 2
  17413.       ENDIF
  17414. C
  17415. C     IFLAG=4 (No sign change)
  17416. C
  17417.       B = -3.0E0
  17418.       C = -0.1E0
  17419.       R = 0.5E0*(B+C)
  17420.       CALL FZERO (SIN, B, C, R, RE, AE, IFLAG)
  17421.       IF (IFLAG .NE. 4) THEN
  17422.         IPASS = 0
  17423.         FATAL = .TRUE.
  17424.         IF (KPRINT .GE. 2) WRITE (LUN,9030) IFLAG, 4
  17425.       ENDIF
  17426. C
  17427.       CALL XERCLR
  17428. C
  17429.       CALL XSETF (KONTRL)
  17430.       IF (FATAL) THEN
  17431.         IF (KPRINT .GE. 2) THEN
  17432.           WRITE (LUN, 9040)
  17433.         ENDIF
  17434.       ELSE
  17435.         IF (KPRINT .GE. 3) THEN
  17436.           WRITE (LUN, 9050)
  17437.         ENDIF
  17438.       ENDIF
  17439. C
  17440.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,9060)
  17441.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,9070)
  17442.       RETURN
  17443.  9000 FORMAT ('1' / ' FZERO QUICK CHECK')
  17444.  9010 FORMAT (' Accuracy test ', A /
  17445.      +        ' Example problem results:  (answer = PI),  B =', F20.14,
  17446.      +        ' C =', F20.14 / ' IFLAG =', I2)
  17447.  9020 FORMAT (/ ' IFLAG 3 and 4 tests')
  17448.  9030 FORMAT (/' IFLAG test FAILED.  IFLAG =', I2, ', but should ',
  17449.      +        'have been', I2)
  17450.  9040 FORMAT (/ ' At least IFLAG test failed')
  17451.  9050 FORMAT (/ ' All IFLAG tests passed')
  17452.  9060 FORMAT (/' ***************FZERO PASSED ALL TESTS**************')
  17453.  9070 FORMAT (/' ***************FZERO FAILED SOME TESTS*************')
  17454.       END
  17455. *DECK GVEC
  17456.       SUBROUTINE GVEC (X, G)
  17457. C***BEGIN PROLOGUE  GVEC
  17458. C***PURPOSE  Subsidiary to
  17459. C***LIBRARY   SLATEC
  17460. C***AUTHOR  (UNKNOWN)
  17461. C***ROUTINES CALLED  (NONE)
  17462. C***REVISION HISTORY  (YYMMDD)
  17463. C   ??????  DATE WRITTEN
  17464. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  17465. C***END PROLOGUE  GVEC
  17466.       DIMENSION G(*)
  17467. C***FIRST EXECUTABLE STATEMENT  GVEC
  17468.       G(1) = 0.0
  17469.       G(2) = 1.0+COS(X)
  17470.       RETURN
  17471.       END
  17472. *DECK HEADER
  17473.       SUBROUTINE HEADER (KPRINT)
  17474. C***BEGIN PROLOGUE  HEADER
  17475. C***PURPOSE  Print header for BLAS quick checks.
  17476. C***LIBRARY   SLATEC
  17477. C***AUTHOR  Lawson, C. L., (JPL)
  17478. C***ROUTINES CALLED  (NONE)
  17479. C***COMMON BLOCKS    COMBLA
  17480. C***REVISION HISTORY  (YYMMDD)
  17481. C   741212  DATE WRITTEN
  17482. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  17483. C   920210  Minor modifications to prologue and code.  (WRB)
  17484. C***END PROLOGUE  HEADER
  17485.       COMMON /COMBLA/ NPRINT, ICASE, N, INCX, INCY, MODE, PASS
  17486.       LOGICAL PASS
  17487.       CHARACTER*6 L(38)
  17488. C
  17489.       DATA L(1)  /'  SDOT'/
  17490.       DATA L(2)  /' DSDOT'/
  17491.       DATA L(3)  /'SDSDOT'/
  17492.       DATA L(4)  /'  DDOT'/
  17493.       DATA L(5)  /'DQDOTI'/
  17494.       DATA L(6)  /'DQDOTA'/
  17495.       DATA L(7)  /' CDOTC'/
  17496.       DATA L(8)  /' CDOTU'/
  17497.       DATA L(9)  /' SAXPY'/
  17498.       DATA L(10) /' DAXPY'/
  17499.       DATA L(11) /' CAXPY'/
  17500.       DATA L(12) /' SROTG'/
  17501.       DATA L(13) /' DROTG'/
  17502.       DATA L(14) /'  SROT'/
  17503.       DATA L(15) /'  DROT'/
  17504.       DATA L(16) /'SROTMG'/
  17505.       DATA L(17) /'DROTMG'/
  17506.       DATA L(18) /' SROTM'/
  17507.       DATA L(19) /' DROTM'/
  17508.       DATA L(20) /' SCOPY'/
  17509.       DATA L(21) /' DCOPY'/
  17510.       DATA L(22) /' CCOPY'/
  17511.       DATA L(23) /' SSWAP'/
  17512.       DATA L(24) /' DSWAP'/
  17513.       DATA L(25) /' CSWAP'/
  17514.       DATA L(26) /' SNRM2'/
  17515.       DATA L(27) /' DNRM2'/
  17516.       DATA L(28) /'SCNRM2'/
  17517.       DATA L(29) /' SASUM'/
  17518.       DATA L(30) /' DASUM'/
  17519.       DATA L(31) /'SCASUM'/
  17520.       DATA L(32) /' SSCAL'/
  17521.       DATA L(33) /' DSCAL'/
  17522.       DATA L(34) /' CSCAL'/
  17523.       DATA L(35) /'CSSCAL'/
  17524.       DATA L(36) /'ISAMAX'/
  17525.       DATA L(37) /'IDAMAX'/
  17526.       DATA L(38) /'ICAMAX'/
  17527. C***FIRST EXECUTABLE STATEMENT  HEADER
  17528.       IF (KPRINT .GE. 2) WRITE (NPRINT,9000) ICASE,L(ICASE)
  17529.       RETURN
  17530. C
  17531.  9000 FORMAT (' Test of subprogram number', I3, 2X, A)
  17532.       END
  17533. *DECK ITEST
  17534.       SUBROUTINE ITEST (LEN, ICOMP, ITRUE, KPRINT)
  17535. C***BEGIN PROLOGUE  ITEST
  17536. C***PURPOSE  Compare arrays ICOMP and ITRUE.
  17537. C***LIBRARY   SLATEC
  17538. C***TYPE      INTEGER (ITEST-I)
  17539. C***KEYWORDS  QUICK CHECK
  17540. C***AUTHOR  Lawson, C. L., (JPL)
  17541. C***DESCRIPTION
  17542. C
  17543. C   This subroutine compares the arrays ICOMP and ITRUE of length LEN
  17544. C   for equality.  In the case of an unequal compare, appropriate
  17545. C   messages are written.
  17546. C
  17547. C***ROUTINES CALLED  (NONE)
  17548. C***COMMON BLOCKS    COMBLA
  17549. C***REVISION HISTORY  (YYMMDD)
  17550. C   741210  DATE WRITTEN
  17551. C   890831  Modified array declarations.  (WRB)
  17552. C   890831  REVISION DATE from Version 3.2
  17553. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  17554. C   920211  Code restructured and information added to the DESCRIPTION
  17555. C           section.  (WRB)
  17556. C***END PROLOGUE  ITEST
  17557.       INTEGER ICOMP(*), ITRUE(*)
  17558.       LOGICAL PASS
  17559.       COMMON /COMBLA/ NPRINT, ICASE, N, INCX, INCY, MODE, PASS
  17560. C***FIRST EXECUTABLE STATEMENT  ITEST
  17561.       DO 100 I = 1,LEN
  17562.         IF (ICOMP(I) .NE. ITRUE(I)) THEN
  17563. C
  17564. C         Here ICOMP(I) is not equal to ITRUE(I).
  17565. C
  17566.           IF (PASS) THEN
  17567. C
  17568. C           Print FAIL message and header.
  17569. C
  17570.             PASS = .FALSE.
  17571.             IF (KPRINT .GE. 3) THEN
  17572.               WRITE (NPRINT,9000)
  17573.               WRITE (NPRINT,9010)
  17574.             ENDIF
  17575.           ENDIF
  17576.           IF (KPRINT .GE. 3) THEN
  17577.             ID = ICOMP(I) - ITRUE(I)
  17578.             WRITE (NPRINT,9020) ICASE, N, INCX, INCY, MODE, I, ICOMP(I),
  17579.      +                          ITRUE(I), ID
  17580.           ENDIF
  17581.         ENDIF
  17582.   100 CONTINUE
  17583.       RETURN
  17584.  9000 FORMAT ('+', 39X, 'FAIL')
  17585.  9010 FORMAT ('0CASE  N INCX INCY MODE  I', 29X, 'COMP(I)', 29X,
  17586.      +        'TRUE(I)', 2X, 'DIFFERENCE' / 1X)
  17587.  9020 FORMAT (1X, I4, I3, 3I5, I3, 2I36, I12)
  17588.       END
  17589. *DECK JAC
  17590.       SUBROUTINE JAC (T, U, PD, NROWPD, RPAR, IPAR)
  17591. C***BEGIN PROLOGUE  JAC
  17592. C***SUBSIDIARY
  17593. C***PURPOSE  Evaluate Jacobian for DEBDF quick check.
  17594. C***LIBRARY   SLATEC
  17595. C***TYPE      SINGLE PRECISION (JAC-S, DJAC-D)
  17596. C***AUTHOR  Chow, Jeff (LANL)
  17597. C***ROUTINES CALLED  (NONE)
  17598. C***REVISION HISTORY  (YYMMDD)
  17599. C   810801  DATE WRITTEN
  17600. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  17601. C   900415  Minor clean-up of prologue and code.  (WRB)
  17602. C***END PROLOGUE  JAC
  17603.       INTEGER IPAR, NROWPD
  17604.       REAL PD, R, R5, RPAR, RSQ, T, U, U1SQ, U2SQ, U1U2
  17605.       DIMENSION U(*),PD(NROWPD,*),RPAR(*),IPAR(*)
  17606. C***FIRST EXECUTABLE STATEMENT  JAC
  17607.       U1SQ = U(1)*U(1)
  17608.       U2SQ = U(2)*U(2)
  17609.       U1U2 = U(1)*U(2)
  17610.       RSQ = U1SQ + U2SQ
  17611.       R = SQRT(RSQ)
  17612.       R5 = RSQ*RSQ*R
  17613.       PD(3,1) = (3.E0*U1SQ - RSQ)/R5
  17614.       PD(4,1) = 3.E0*U1U2/R5
  17615.       PD(3,2) = PD(4,1)
  17616.       PD(4,2) = (3.E0*U2SQ - RSQ)/R5
  17617.       PD(1,3) = 1.E0
  17618.       PD(2,4) = 1.E0
  17619.       RETURN
  17620.       END
  17621. *DECK LSEIQX
  17622.       SUBROUTINE LSEIQX (LUN, KPRINT, IPASS)
  17623. C***BEGIN PROLOGUE  LSEIQX
  17624. C***PURPOSE  Quick check for LSEI.
  17625. C***LIBRARY   SLATEC
  17626. C***TYPE      SINGLE PRECISION (LSEIQX-S, DLSEIT-D)
  17627. C***KEYWORDS  QUICK CHECK
  17628. C***AUTHOR  Hanson, R. J, (SNLA)
  17629. C           Haskell, Karen, (SNLA)
  17630. C***DESCRIPTION
  17631. C
  17632. C     THE SAMPLE PROBLEM SOLVED IS FROM A PAPER BY J. STOER, IN
  17633. C     SIAM JOURNAL OF NUM. ANAL., JUNE 1971.
  17634. C
  17635. C***ROUTINES CALLED  LSEI, R1MACH, SAXPY, SCOPY, SDOT, SNRM2, SVOUT
  17636. C***REVISION HISTORY  (YYMMDD)
  17637. C   790216  DATE WRITTEN
  17638. C   890618  REVISION DATE from Version 3.2
  17639. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  17640. C   901010  Restructured using IF-THEN-ELSE-ENDIF, modified tolerances
  17641. C           to use R1MACH(4) rather than R1MACH(3) and cleaned up
  17642. C           FORMATs.  (RWC)
  17643. C   920722  Initialized IP(1) and IP(2) for CALL to LSEI.  (BKS, WRB)
  17644. C***END PROLOGUE  LSEIQX
  17645.       DIMENSION D(11,6), IP(17), WORK(105), F(6), PRGOPT(4)
  17646.       DIMENSION X(5), H(5), SOL(5), A(6,5), G(5,5), ERR(5)
  17647. C
  17648. C     DEFINE THE DATA ARRAYS FOR THE EXAMPLE.  THE ARRAY A( )
  17649. C     CONTAINS THE LEAST SQUARES EQUATIONS.  (THERE ARE NO EQUALITY
  17650. C     CONSTRAINTS IN THIS EXAMPLE).
  17651. C
  17652.       DATA A(1,1),A(1,2),A(1,3),A(1,4),A(1,5)
  17653.      *     /-74.,80.,18.,-11.,-4./
  17654.       DATA A(2,1),A(2,2),A(2,3),A(2,4),A(2,5)
  17655.      *     /14.,-69.,21.,28.,0./
  17656.       DATA A(3,1),A(3,2),A(3,3),A(3,4),A(3,5)
  17657.      *     /66.,-72.,-5.,7.,1./
  17658.       DATA A(4,1),A(4,2),A(4,3),A(4,4),A(4,5)
  17659.      *     /-12.,66.,-30.,-23.,3./
  17660.       DATA A(5,1),A(5,2),A(5,3),A(5,4),A(5,5)
  17661.      *     /3.,8.,-7.,-4.,1./
  17662.       DATA A(6,1),A(6,2),A(6,3),A(6,4),A(6,5)
  17663.      *     /4.,-12.,4.,4.,0./
  17664. C
  17665. C     THE ARRAY G( ) CONTAINS THE INEQUALITY CONSTRAINT EQUATIONS,
  17666. C     WRITTEN IN THE SENSE
  17667. C     (ROW VECTOR)*(SOLUTION VECTOR) .GE. (GIVEN VALUE).
  17668. C
  17669.       DATA G(1,1),G(1,2),G(1,3),G(1,4),G(1,5)
  17670.      *     /-1.,-1.,-1.,-1.,-1./
  17671.       DATA G(2,1),G(2,2),G(2,3),G(2,4),G(2,5)
  17672.      *     /10.,10.,-3.,5.,4./
  17673.       DATA G(3,1),G(3,2),G(3,3),G(3,4),G(3,5)
  17674.      *     /-8.,1.,-2.,-5.,3./
  17675.       DATA G(4,1),G(4,2),G(4,3),G(4,4),G(4,5)
  17676.      *     /8.,-1.,2.,5.,-3./
  17677.       DATA G(5,1),G(5,2),G(5,3),G(5,4),G(5,5)
  17678.      *     /-4.,-2.,3.,-5.,1./
  17679. C
  17680. C     DEFINE THE LEAST SQUARES RIGHT-SIDE VECTOR.
  17681. C
  17682.       DATA F(1),F(2),F(3),F(4),F(5),F(6)
  17683.      *     /-5.,-9.,708.,4165.,-13266.,8409./
  17684. C
  17685. C     DEFINE THE INEQUALITY CONSTRAINT RIGHT-SIDE VECTOR.
  17686. C
  17687.       DATA H(1),H(2),H(3),H(4),H(5)
  17688.      *     /-5.,20.,-40.,11.,-30./
  17689. C
  17690. C     DEFINE THE VECTOR THAT IS THE KNOWN SOLUTION.
  17691. C
  17692.       DATA SOL(1),SOL(2),SOL(3),SOL(4),SOL(5)
  17693.      *     /1.,2.,-1.,3.,-4./
  17694. C***FIRST EXECUTABLE STATEMENT  LSEIQX
  17695. C
  17696. C     DEFINE THE MATRIX DIMENSIONS, NUMBER OF LEAST SQUARES EQUATIONS,
  17697. C     NUMBER OF EQUALITY CONSTRAINTS, TOTAL NUMBER OF
  17698. C     EQUATIONS, AND NUMBER OF VARIABLES.  SET ME=0 TO INDICATE
  17699. C     THERE ARE NO EQUALITY CONSTRAINTS.
  17700. C
  17701.       MDD = 11
  17702.       MDA = 6
  17703.       MDG = 5
  17704.       MA = 6
  17705.       MG = 5
  17706.       M = MA + MG
  17707.       N = 5
  17708.       ME = 0
  17709. C
  17710.       IP(1) = 105
  17711.       IP(2) = 17
  17712. C
  17713.       NP1 = N + 1
  17714.       MEP1 = ME + 1
  17715.       MEAP1 = ME + MA + 1
  17716. C
  17717. C     COPY THE PROBLEM MATRICES
  17718. C
  17719.       DO 10 I = 1, N
  17720. C
  17721. C        COPY THE I-TH COL OF THE INEQUALITY CONSTRAINT MATRIX INTO
  17722. C        THE WORK ARRAY.
  17723. C
  17724.          CALL SCOPY(MG, G(1,I), 1, D(MEAP1,I), 1)
  17725. C
  17726. C        COPY THE I-TH COL OF THE LEAST SQUARES MATRIX INTO THE WORK
  17727. C        ARRAY.
  17728. C
  17729.          CALL SCOPY(MA, A(1,I), 1, D(MEP1,I), 1)
  17730.    10 CONTINUE
  17731. C
  17732. C     COPY THE RIGHT-SIDE VECTORS INTO THE WORK ARRAY IN COMPATIBLE
  17733. C     ORDER.
  17734. C
  17735.       CALL SCOPY(MG, H, 1, D(MEAP1,NP1), 1)
  17736.       CALL SCOPY(MA, F, 1, D(MEP1,NP1),  1)
  17737. C
  17738.       IF (KPRINT.GE.2) WRITE (LUN,99999)
  17739. C
  17740. C     USE DEFAULT PROGRAM OPTIONS IN LSEI, AND SET MATRIX-VECTOR
  17741. C     PRINTING ACCURACY PARAMETERS.
  17742. C
  17743.       PRGOPT(1) = 1
  17744.       IDIGIT = -4
  17745.       JDIGIT = -11
  17746. C
  17747. C     COMPUTE RESIDUAL NORM OF KNOWN LEAST SQUARES SOLN.
  17748. C     (TO BE USED TO CHECK COMPUTED RESIDUAL NORM = RNORML.)
  17749. C
  17750.       DO 20 I = 1, MA
  17751.          WORK(I) = SDOT(N,D(I,1),MDD,SOL,1) - F(I)
  17752.    20 CONTINUE
  17753.       RESNRM = SNRM2(MA,WORK,1)
  17754. C
  17755. C     CALL LSEI TO GET SOLN IN X(*), LEAST SQUARES RESIDUAL IN RNORML.
  17756. C
  17757.       CALL LSEI(D, MDD, ME, MA, MG, N, PRGOPT, X, RNORME, RNORML, MODE,
  17758.      *   WORK, IP)
  17759. C
  17760. C     COMPUTE REL. ERROR IN PROBLEM VARIABLE SOLN. AND RESIDUAL
  17761. C     NORM COMPUTATION.
  17762. C
  17763.       TNORM = SNRM2(N,SOL,1)
  17764.       CALL SCOPY(N, SOL, 1, ERR, 1)
  17765.       CALL SAXPY(N, -1.0, X, 1, ERR, 1)
  17766.       CNORM = SNRM2(N, ERR, 1)
  17767.       RELERR = CNORM/TNORM
  17768.       RELNRM = (RESNRM-RNORML)/RESNRM
  17769. C
  17770.       IF (RELERR .LE. 70.*SQRT(R1MACH(4)) .AND.
  17771.      *    RELNRM .LE.  5.*R1MACH(4)) THEN
  17772.          IPASS = 1
  17773.          IF (KPRINT.GE.3) WRITE (LUN,99998)
  17774.       ELSE
  17775.          IPASS = 0
  17776.          IF (KPRINT.GE.2) WRITE (LUN,99997) RELERR, RELNRM
  17777.       ENDIF
  17778. C
  17779. C        PRINT OUT KNOWN SOLUTION AND COMPUTED SOLUTION
  17780. C
  17781.       IF (KPRINT.GE.3) THEN
  17782.          CALL SVOUT(N, ERR,
  17783.      *      '('' RESIDUALS FROM KNOWN LEAST SQUARES SOLN'')', IDIGIT)
  17784.          CALL SVOUT(N, X, '(/'' SOLN COMPUTED BY LSEI.'')', JDIGIT)
  17785.       ENDIF
  17786. C
  17787.       IF (KPRINT.GE.2) THEN
  17788.          IF (.NOT.(KPRINT.EQ.2 .AND. IPASS.NE.0)) THEN
  17789. C
  17790. C           PRINT OUT THE KNOWN AND COMPUTED RESIDUAL NORMS
  17791. C
  17792.             CALL SVOUT(1, RESNRM,
  17793.      *         '(/'' RESIDUAL NORM OF KNOWN LEAST SQUARES SOLN'')',
  17794.      *         JDIGIT)
  17795.             CALL SVOUT(1, RNORML, '(/'' RES NORM COMPUTED BY LSEI.'')',
  17796.      *         JDIGIT)
  17797. C
  17798. C           PRINT OUT THE COMPUTED SOLUTION RELATIVE ERROR
  17799. C
  17800.             CALL SVOUT(1, RELERR, '(/'' COMPUTED SOLN REL. ERROR'')',
  17801.      *         IDIGIT)
  17802. C
  17803. C           PRINT OUT THE COMPUTED RELATIVE ERROR IN RESIDUAL NORM
  17804. C
  17805.             CALL SVOUT(1, RELNRM,
  17806.      *       '(/'' COMPUTED REL. ERROR IN RESIDUAL NORM'')', IDIGIT)
  17807.          ENDIF
  17808.       ENDIF
  17809. C
  17810. C     CHECK CALLS TO ERROR PROCESSOR
  17811. C
  17812.       IF (KPRINT.GE.2) THEN
  17813.          WRITE (LUN,99996)
  17814.          CALL LSEI(D, 0, ME, MA, MG, N, PRGOPT, X, RNORME, RNORML,
  17815.      *      MODE, WORK, IP)
  17816.          PRGOPT(1) = -1
  17817.          CALL LSEI(D, MDD, ME, MA, MG, N, PRGOPT, X, RNORME, RNORML,
  17818.      *      MODE, WORK, IP)
  17819.       ENDIF
  17820. C
  17821.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,99995)
  17822.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,99994)
  17823.       RETURN
  17824. C
  17825. 99994 FORMAT (/' ****************LSEI FAILED SOME TESTS**************')
  17826. 99995 FORMAT (/' ****************LSEI PASSED ALL TESTS***************')
  17827. 99996 FORMAT (/ ' 2 ERROR MESSAGES EXPECTED')
  17828. 99997 FORMAT (/' LSEI FAILED TEST'/' RELERR = ',1P,E20.6/' RELNRM = ',
  17829.      *        E20.6)
  17830. 99998 FORMAT (/' LSEI PASSED TEST')
  17831. 99999 FORMAT ('1TEST OF SUBROUTINE LSEI')
  17832.       END
  17833. *DECK PASS
  17834.       SUBROUTINE PASS (LUN, ICNT, ITEST)
  17835. C***BEGIN PROLOGUE  PASS
  17836. C***PURPOSE  Print a PASS/FAIL message for a particular quick check
  17837. C            test.
  17838. C***LIBRARY   SLATEC
  17839. C***AUTHOR  (UNKNOWN)
  17840. C***ROUTINES CALLED  (NONE)
  17841. C***REVISION HISTORY  (YYMMDD)
  17842. C   ??????  DATE WRITTEN
  17843. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  17844. C   920210  PURPOSE added and code restructured.  (WRB)
  17845. C***END PROLOGUE  PASS
  17846.       INTEGER ICNT, ITEST, LUN
  17847. C***FIRST EXECUTABLE STATEMENT  PASS
  17848.       IF (ITEST .NE. 0) THEN
  17849.         WRITE (LUN,9000) ICNT
  17850.       ELSE
  17851.         WRITE (LUN,9100) ICNT
  17852.       ENDIF
  17853.       RETURN
  17854.  9000 FORMAT(/ ' TEST NUMBER', I5, ' PASSED')
  17855.  9100 FORMAT(/ ' *****TEST NUMBER' ,I5, ' FAILED**********')
  17856.       END
  17857. *DECK PCHQK1
  17858.       SUBROUTINE PCHQK1 (LUN, KPRINT, IPASS)
  17859. C***BEGIN PROLOGUE  PCHQK1
  17860. C***PURPOSE  Test the PCHIP evaluators CHFDV, CHFEV, PCHFD and PCHFE.
  17861. C***LIBRARY   SLATEC (PCHIP)
  17862. C***TYPE      SINGLE PRECISION (PCHQK1-S, DPCHQ1-D)
  17863. C***KEYWORDS  PCHIP EVALUATOR QUICK CHECK
  17864. C***AUTHOR  Fritsch, F. N., (LLNL)
  17865. C***DESCRIPTION
  17866. C
  17867. C              PCHIP QUICK CHECK NUMBER 1
  17868. C
  17869. C     TESTS THE EVALUATORS:  CHFDV, CHFEV, PCHFD, PCHFE.
  17870. C *Usage:
  17871. C
  17872. C        INTEGER  LUN, KPRINT, IPASS
  17873. C
  17874. C        CALL PCHQK1 (LUN, KPRINT, IPASS)
  17875. C
  17876. C *Arguments:
  17877. C
  17878. C     LUN   :IN  is the unit number to which output is to be written.
  17879. C
  17880. C     KPRINT:IN  controls the amount of output, as specified in the
  17881. C                SLATEC Guidelines.
  17882. C
  17883. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  17884. C                IPASS=0 indicates one or more tests failed.
  17885. C
  17886. C *Description:
  17887. C
  17888. C   This routine carries out three tests of the PCH evaluators:
  17889. C     EVCHCK tests the single-cubic evaluators.
  17890. C     EVPCCK tests the full PCH evaluators.
  17891. C     EVERCK exercises the error returns in all evaluators.
  17892. C
  17893. C***ROUTINES CALLED  EVCHCK, EVERCK, EVPCCK
  17894. C***REVISION HISTORY  (YYMMDD)
  17895. C   820601  DATE WRITTEN
  17896. C   890306  Changed IPASS to the more accurate name IFAIL.  (FNF)
  17897. C   890618  REVISION DATE from Version 3.2
  17898. C   890706  Cosmetic changes to prologue.  (WRB)
  17899. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  17900. C   900309  Added EVERCK to list of routines called.  (FNF)
  17901. C   900314  Improved some output formats.
  17902. C   900315  Revised prologue and improved some output formats.  (FNF)
  17903. C   900316  Additional minor cosmetic changes.  (FNF)
  17904. C   900321  Removed IFAIL from call sequence for SLATEC standards and
  17905. C           made miscellaneous cosmetic changes.  (FNF)
  17906. C***END PROLOGUE  PCHQK1
  17907. C
  17908. C  Declare arguments.
  17909. C
  17910.       INTEGER  LUN, KPRINT, IPASS
  17911. C
  17912. C  DECLARE LOCAL VARIABLES.
  17913. C
  17914.       INTEGER  I1, I2, I3, I4, I5, I6, I7, I8, I9, IFAIL, NPTS
  17915.       REAL  WORK (4000)
  17916.       LOGICAL  FAIL
  17917. C
  17918. C***FIRST EXECUTABLE STATEMENT  PCHQK1
  17919.       IF (KPRINT .GE. 2)  WRITE (LUN, 1000)
  17920. C
  17921. C  TEST CHFDV AND CHFEV.
  17922. C
  17923.       IFAIL = 0
  17924.       NPTS = 1000
  17925.       I1 = 1  + NPTS
  17926.       I2 = I1 + NPTS
  17927.       I3 = I2 + NPTS
  17928.       CALL EVCHCK (LUN, KPRINT, NPTS, WORK(1), WORK(I1), WORK(I2),
  17929.      *                                          WORK(I3), FAIL)
  17930.       IF (FAIL)  IFAIL = IFAIL + 1
  17931. C
  17932. C  TEST PCHFD AND PCHFE.
  17933. C
  17934.       I1 = 1  +  10
  17935.       I2 = I1 +  10
  17936.       I3 = I2 + 100
  17937.       I4 = I3 + 100
  17938.       I5 = I4 + 100
  17939.       I6 = I5 +  51
  17940.       I7 = I6 +  51
  17941.       I8 = I7 +  51
  17942.       I9 = I8 +  51
  17943.       CALL EVPCCK (LUN, KPRINT, WORK(1), WORK(I1), WORK(I2), WORK(I3),
  17944.      *             WORK(I4), WORK(I5), WORK(I6), WORK(I7), WORK(I8),
  17945.      *             WORK(I9), FAIL)
  17946.       IF (FAIL)  IFAIL = IFAIL + 2
  17947. C
  17948. C  TEST ERROR RETURNS.
  17949. C
  17950.       CALL EVERCK (LUN, KPRINT, FAIL)
  17951.       IF (FAIL)  IFAIL = IFAIL + 4
  17952. C
  17953. C  PRINT SUMMARY AND TERMINATE.
  17954. C     At this point, IFAIL has the following value:
  17955. C        IFAIL = 0  IF ALL TESTS PASSED.
  17956. C        IFAIL BETWEEN 1 AND 7 IS THE SUM OF:
  17957. C           IFAIL=1  IF SINGLE CUBIC TEST FAILED. (SEE EVCHCK OUTPUT.)
  17958. C           IFAIL=2  IF PCHFD/PCHFE  TEST FAILED. (SEE EVPCCK OUTPUT.)
  17959. C           IFAIL=4  IF ERROR RETURN TEST FAILED. (SEE EVERCK OUTPUT.)
  17960. C
  17961.       IF ((KPRINT.GE.2).AND.(IFAIL.NE.0))  WRITE (LUN, 3001)  IFAIL
  17962. C
  17963.       IF (IFAIL.EQ.0)  THEN
  17964.          IPASS = 1
  17965.          IF (KPRINT.GE.2) WRITE(LUN,99998)
  17966.       ELSE
  17967.          IPASS = 0
  17968.          IF (KPRINT.GE.1) WRITE(LUN,99999)
  17969.       ENDIF
  17970. C
  17971.       RETURN
  17972. C
  17973. C  FORMATS.
  17974. C
  17975.  1000 FORMAT ('1'/' ------------  PCHIP QUICK CHECK OUTPUT',
  17976.      .        ' ------------')
  17977.  3001 FORMAT (/' *** TROUBLE ***',I5,' EVALUATION TESTS FAILED.')
  17978. 99998 FORMAT (/' ------------  PCHIP PASSED  ALL EVALUATION TESTS',
  17979.      .        ' ------------')
  17980. 99999 FORMAT (/' ************  PCHIP FAILED SOME EVALUATION TESTS',
  17981.      .        ' ************')
  17982. C------------- LAST LINE OF PCHQK1 FOLLOWS -----------------------------
  17983.       END
  17984. *DECK PCHQK2
  17985.       SUBROUTINE PCHQK2 (LUN, KPRINT, IPASS)
  17986. C***BEGIN PROLOGUE  PCHQK2
  17987. C***PURPOSE  Test the PCHIP integrators PCHIA and PCHID.
  17988. C***LIBRARY   SLATEC (PCHIP)
  17989. C***TYPE      SINGLE PRECISION (PCHQK2-S, DPCHQ2-D)
  17990. C***KEYWORDS  PCHIP INTEGRATOR QUICK CHECK
  17991. C***AUTHOR  Fritsch, F. N., (LLNL)
  17992. C***DESCRIPTION
  17993. C
  17994. C              PCHIP QUICK CHECK NUMBER 2
  17995. C
  17996. C     TESTS THE INTEGRATORS:  PCHIA, PCHID.
  17997. C *Usage:
  17998. C
  17999. C        INTEGER  LUN, KPRINT, IPASS
  18000. C
  18001. C        CALL PCHQK2 (LUN, KPRINT, IPASS)
  18002. C
  18003. C *Arguments:
  18004. C
  18005. C     LUN   :IN  is the unit number to which output is to be written.
  18006. C
  18007. C     KPRINT:IN  controls the amount of output, as specified in the
  18008. C                SLATEC Guidelines.
  18009. C
  18010. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  18011. C                IPASS=0 indicates one or more tests failed.
  18012. C
  18013. C *Description:
  18014. C
  18015. C   This routine constructs data from a cubic, integrates it with PCHIA
  18016. C   and compares the results with the correct answer.
  18017. C   Since PCHIA calls PCHID, this tests both integrators.
  18018. C
  18019. C***ROUTINES CALLED  PCHIA, R1MACH
  18020. C***REVISION HISTORY  (YYMMDD)
  18021. C   820601  DATE WRITTEN
  18022. C   890306  Changed IPASS to the more accurate name IFAIL.  (FNF)
  18023. C   890316  Added declarations as in DPCHQ2.  (FNF)
  18024. C   890629  Appended E0 to real constants to reduce S.P./D.P.
  18025. C           differences.
  18026. C   890706  Cosmetic changes to prologue.  (WRB)
  18027. C   891004  Cosmetic changes to prologue.  (WRB)
  18028. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  18029. C   900314  Improved some output formats.  (FNF)
  18030. C   900315  Revised prologue and improved some output formats.  (FNF)
  18031. C   900316  Additional minor cosmetic changes.  (FNF)
  18032. C   900321  Removed IFAIL from call sequence for SLATEC standards and
  18033. C           made miscellaneous cosmetic changes.  (FNF)
  18034. C   901130  Added 1P's to formats; changed to allow KPRINT.gt.3.  (FNF)
  18035. C   910708  Minor modifications in use of KPRINT.  (WRB)
  18036. C***END PROLOGUE  PCHQK2
  18037. C
  18038. C  Declare arguments.
  18039. C
  18040.       INTEGER  LUN, KPRINT, IPASS
  18041. C
  18042. C  DECLARE VARIABLES.
  18043. C
  18044.       INTEGER  I, IEREXP(17), IERR, IFAIL, N, NPAIRS
  18045.       REAL  A(17), B(17), CALC, D(7), ERRMAX, ERROR, F(7), MACHEP,
  18046.      *      ONE, THREE, THRQTR, TOL, TRUE, TWO, X(7)
  18047.       LOGICAL  FAIL, SKIP
  18048. C
  18049. C  DECLARE EXTERNALS.
  18050. C
  18051.       REAL  PCHIA, R1MACH
  18052. C
  18053. C  DEFINE TEST FUNCTIONS.
  18054. C
  18055.       REAL  AX, FCN, DERIV, ANTDER
  18056.       FCN(AX) = THREE*AX*AX*(AX-TWO)
  18057.       DERIV(AX) = THREE*AX*(TWO*(AX-TWO) + AX)
  18058.       ANTDER(AX) = AX**3 * (THRQTR*AX - TWO)
  18059. C
  18060. C  INITIALIZE.
  18061. C
  18062.       DATA  THRQTR /0.75E0/,  ONE /1.E0/,  TWO /2.E0/,  THREE /3.E0/
  18063.       DATA  N /7/
  18064.       DATA  X /-4.E0, -2.E0, -0.9E0, 0.E0, 0.9E0, 2.E0, 4.E0/
  18065.       DATA  NPAIRS /17/
  18066.       DATA  A /-3.0E0, 3.0E0,-0.5E0,-0.5E0,-0.5E0,-4.0E0,-4.0E0, 3.0E0,
  18067.      *  -5.0E0,-5.0E0,-6.0E0, 6.0E0,-1.5E0,-1.5E0,-3.0E0, 3.0E0, 0.5E0/
  18068.       DATA  B / 3.0E0,-3.0E0, 1.0E0, 2.0E0, 5.0E0,-0.5E0, 4.0E0, 5.0E0,
  18069.      *  -3.0E0, 5.0E0,-5.0E0, 5.0E0,-0.5E0,-1.0E0,-2.5E0, 3.5E0, 0.5E0/
  18070.       DATA  IEREXP /0,0,0,0,2,0,0,2,1,3,3,3,0,0,0,0,0/
  18071. C
  18072. C  SET PASS/FAIL TOLERANCE.
  18073. C
  18074. C***FIRST EXECUTABLE STATEMENT  PCHQK2
  18075.       MACHEP = R1MACH(4)
  18076.       TOL = 100.E0*MACHEP
  18077. C
  18078. C  SET UP PCH FUNCTION DEFINITION.
  18079. C
  18080.       DO 10  I = 1, N
  18081.          F(I) =   FCN(X(I))
  18082.          D(I) = DERIV(X(I))
  18083.    10 CONTINUE
  18084. C
  18085.       IF (KPRINT .GE. 3)  WRITE (LUN, 1000)  (X(I), F(I), D(I), I=1,N)
  18086.       IF (KPRINT .GE. 2)  WRITE (LUN, 1001)
  18087. C
  18088. C  LOOP OVER (A,B)-PAIRS.
  18089. C
  18090.       IF (KPRINT .GE. 3)  WRITE (LUN, 2000)
  18091. C
  18092.       IFAIL = 0
  18093. C
  18094.       SKIP = .FALSE.
  18095.       DO 20  I = 1, NPAIRS
  18096. C               ---------------------------------------------
  18097.          CALC = PCHIA (N, X, F, D, 1, SKIP, A(I), B(I), IERR)
  18098. C               ---------------------------------------------
  18099.          IF (IERR .GE. 0)  THEN
  18100.             FAIL = IERR .NE. IEREXP(I)
  18101.             TRUE = ANTDER(B(I)) - ANTDER(A(I))
  18102.             ERROR = CALC - TRUE
  18103.             IF (KPRINT .GE. 3)  THEN
  18104.                IF (FAIL)  THEN
  18105.                  WRITE (LUN, 2001) A(I), B(I), IERR, TRUE, CALC, ERROR,
  18106.      *                                          IEREXP(I)
  18107.                ELSE
  18108.                  WRITE (LUN, 2002) A(I), B(I), IERR, TRUE, CALC, ERROR
  18109.                ENDIF
  18110.             ENDIF
  18111. C
  18112.             ERROR = ABS(ERROR) / MAX(ONE, ABS(TRUE))
  18113.             IF (FAIL .OR. (ERROR.GT.TOL))  IFAIL = IFAIL + 1
  18114.             IF (I .EQ. 1)  THEN
  18115.                ERRMAX = ERROR
  18116.             ELSE
  18117.                ERRMAX = MAX(ERRMAX, ERROR)
  18118.             ENDIF
  18119.          ELSE
  18120.             IF (KPRINT .GE. 3)  WRITE (LUN, 2002)  A(I), B(I), IERR
  18121.             IFAIL = IFAIL + 1
  18122.          ENDIF
  18123.    20 CONTINUE
  18124. C
  18125. C  PRINT SUMMARY.
  18126. C
  18127.       IF (KPRINT .GE. 2)  THEN
  18128.          WRITE (LUN, 2003)  ERRMAX, TOL
  18129.          IF (IFAIL .NE. 0)  WRITE (LUN, 3001)  IFAIL
  18130.       ENDIF
  18131. C
  18132. C  TERMINATE.
  18133. C
  18134.       IF (IFAIL.EQ.0)  THEN
  18135.          IPASS = 1
  18136.          IF (KPRINT.GE.2) WRITE(LUN,99998)
  18137.       ELSE
  18138.          IPASS = 0
  18139.          IF (KPRINT.GE.1) WRITE(LUN,99999)
  18140.       ENDIF
  18141. C
  18142.       RETURN
  18143. C
  18144. C  FORMATS.
  18145. C
  18146.  1000 FORMAT ('1'//10X,'TEST PCHIP INTEGRATORS'
  18147.      *           // 5X,'DATA:' //11X,'X',9X,'F',9X,'D'
  18148.      *            /(5X,3F10.3) )
  18149.  1001 FORMAT (//10X,'PCHQK2 RESULTS'/10X,'--------------')
  18150.  2000 FORMAT (// 5X,'TEST RESULTS:'
  18151.      *        //'    A     B    ERR     TRUE',16X,'CALC',15X,'ERROR')
  18152.  2001 FORMAT (2F6.1,I5,1P,2E20.10,E15.5,'  (',I1,') *****' )
  18153.  2002 FORMAT (2F6.1,I5,1P,2E20.10,E15.5)
  18154.  2003 FORMAT (/'  MAXIMUM RELATIVE ERROR IS:',1P,E15.5,
  18155.      *                       ',   TOLERANCE:',1P,E15.5)
  18156.  3001 FORMAT (/' *** TROUBLE ***',I5,' INTEGRATION TESTS FAILED.')
  18157. 99998 FORMAT (/' ------------  PCHIP PASSED  ALL INTEGRATION TESTS',
  18158.      .        ' ------------')
  18159. 99999 FORMAT (/' ************  PCHIP FAILED SOME INTEGRATION TESTS',
  18160.      .        ' ************')
  18161. C------------- LAST LINE OF PCHQK2 FOLLOWS -----------------------------
  18162.       END
  18163. *DECK PCHQK3
  18164.       SUBROUTINE PCHQK3 (LUN, KPRINT, IPASS)
  18165. C***BEGIN PROLOGUE  PCHQK3
  18166. C***PURPOSE  Test the PCHIP interpolators PCHIC, PCHIM, PCHSP.
  18167. C***LIBRARY   SLATEC (PCHIP)
  18168. C***TYPE      SINGLE PRECISION (PCHQK3-S, DPCHQ3-D)
  18169. C***KEYWORDS  PCHIP INTERPOLATOR QUICK CHECK
  18170. C***AUTHOR  Fritsch, F. N., (LLNL)
  18171. C***DESCRIPTION
  18172. C
  18173. C              PCHIP QUICK CHECK NUMBER 3
  18174. C
  18175. C     TESTS THE INTERPOLATORS:  PCHIC, PCHIM, PCHSP.
  18176. C *Usage:
  18177. C
  18178. C        INTEGER  LUN, KPRINT, IPASS
  18179. C
  18180. C        CALL PCHQK3 (LUN, KPRINT, IPASS)
  18181. C
  18182. C *Arguments:
  18183. C
  18184. C     LUN   :IN  is the unit number to which output is to be written.
  18185. C
  18186. C     KPRINT:IN  controls the amount of output, as specified in the
  18187. C                SLATEC Guidelines.
  18188. C
  18189. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  18190. C                IPASS=0 indicates one or more tests failed.
  18191. C
  18192. C *Description:
  18193. C
  18194. C   This routine interpolates a constructed data set with all three
  18195. C    PCHIP interpolators and compares the results with those obtained
  18196. C   on a Cray X/MP.  Two different values of the  PCHIC parameter SWITCH
  18197. C   are used.
  18198. C
  18199. C *Remarks:
  18200. C     1. The Cray results are given only to nine significant figures,
  18201. C        so don't expect them to match to more.
  18202. C     2. The results will depend to some extent on the accuracy of
  18203. C        the EXP function.
  18204. C
  18205. C***ROUTINES CALLED  COMP, PCHIC, PCHIM, PCHSP, R1MACH
  18206. C***REVISION HISTORY  (YYMMDD)
  18207. C   900309  DATE WRITTEN
  18208. C   900314  Converted to a subroutine and added a SLATEC 4.0 prologue.
  18209. C   900315  Revised prologue and improved some output formats.  (FNF)
  18210. C   900316  Made TOLD machine-dependent and added extra output when
  18211. C           KPRINT=3.  (FNF)
  18212. C   900320  Added E0's to DATA statement for X to reduce single/double
  18213. C           differences, and other minor cosmetic changes.
  18214. C   900321  Removed IFAIL from call sequence for SLATEC standards and
  18215. C           made miscellaneous cosmetic changes.  (FNF)
  18216. C   900322  Minor changes to reduce single/double differences.  (FNF)
  18217. C   900530  Tolerance (TOLD) changed.  (WRB)
  18218. C   900802  Modified TOLD formula and constants in PCHIC calls to be
  18219. C           compatible with DPCHQ3.  (FNF)
  18220. C   901130  Several significant changes:  (FNF)
  18221. C           1. Changed comparison between PCHIM and PCHIC to only
  18222. C              require agreement to machine precision.
  18223. C           2. Revised to print more output when KPRINT=3.
  18224. C           3. Added 1P's to formats.
  18225. C   910708  Minor modifications in use of KPRINT.  (WRB)
  18226. C***END PROLOGUE  PCHQK3
  18227. C
  18228. C*Internal Notes:
  18229. C
  18230. C     TOLD is used to compare with stored Cray results.  Its value
  18231. C          should be consistent with significance of stored values.
  18232. C     TOLZ is used for cases in which exact equality is expected.
  18233. C     TOL  is used for cases in which agreement to machine precision
  18234. C          is expected.
  18235. C**End
  18236. C
  18237. C  Declare arguments.
  18238. C
  18239.       INTEGER  LUN, KPRINT, IPASS
  18240.       LOGICAL  COMP
  18241.       REAL  R1MACH
  18242. C
  18243. C  Declare variables.
  18244. C
  18245.       INTEGER  I, IC(2), IERR, IFAIL, N, NBAD, NBADZ, NWK
  18246.       PARAMETER  (N = 9,  NWK = 2*N)
  18247.       REAL  D(N), DC(N), DC5, DC6, DM(N), DS(N), ERR, F(N), MONE, TOL,
  18248.      .      TOLD, TOLZ, VC(2), X(N), WK(NWK), ZERO
  18249.       PARAMETER  (ZERO = 0.0E0,  MONE = -1.0E0)
  18250.       CHARACTER*6  RESULT
  18251. C
  18252. C  Initialize.
  18253. C
  18254. C       Data.
  18255.       DATA  IC /0, 0/
  18256.       DATA  X /-2.2E0,-1.2E0,-1.0E0,-0.5E0,-0.01E0, 0.5E0, 1.0E0,
  18257.      .          2.0E0, 2.2E0/
  18258. C
  18259. C       Results generated on Cray X/MP (9 sign. figs.)
  18260.       DATA  DM / 0.            , 3.80027352E-01, 7.17253009E-01,
  18261.      .           5.82014161E-01, 0.            ,-5.68208031E-01,
  18262.      .          -5.13501618E-01,-7.77910977E-02,-2.45611117E-03/
  18263.       DATA  DC5,DC6 / 1.76950158E-02,-5.69579814E-01/
  18264.       DATA  DS /-5.16830792E-02, 5.71455855E-01, 7.40530225E-01,
  18265.      .           7.63864934E-01, 1.92614386E-02,-7.65324380E-01,
  18266.      .          -7.28209035E-01,-7.98445427E-02,-2.85983446E-02/
  18267. C
  18268. C***FIRST EXECUTABLE STATEMENT  PCHQK3
  18269.       IFAIL = 0
  18270. C
  18271. C        Set tolerances.
  18272.       TOL  = 10*R1MACH(4)
  18273.       TOLD = MAX( 1.0E-7, 10*TOL )
  18274.       TOLZ = ZERO
  18275. C
  18276.       IF (KPRINT .GE. 3)  WRITE (LUN, 1000)
  18277.       IF (KPRINT .GE. 2)  WRITE (LUN, 1002)
  18278. C
  18279. C  Set up data.
  18280. C
  18281.       DO 10  I = 1, N
  18282.          F(I) = EXP(-X(I)**2)
  18283.    10 CONTINUE
  18284. C
  18285.       IF (KPRINT .GE. 3)  THEN
  18286.          DO 12  I = 1, 4
  18287.             WRITE (LUN, 1010)  X(I), F(I), DM(I), DS(I)
  18288.    12    CONTINUE
  18289.             WRITE (LUN, 1011)  X(5), F(5), DM(5), DC5, DS(5)
  18290.             WRITE (LUN, 1011)  X(6), F(6), DM(6), DC6, DS(6)
  18291.          DO 15  I = 7, N
  18292.             WRITE (LUN, 1010)  X(I), F(I), DM(I), DS(I)
  18293.    15    CONTINUE
  18294.       ENDIF
  18295. C
  18296. C  Test PCHIM.
  18297. C
  18298.       IF (KPRINT.GE.3)  WRITE (LUN, 2000) 'IM'
  18299. C     --------------------------------
  18300.       CALL PCHIM (N, X, F, D, 1, IERR)
  18301. C     --------------------------------
  18302. C        Expect IERR=1 (one monotonicity switch).
  18303.       IF ( KPRINT.GE.3 )  WRITE (LUN, 2001) 1
  18304.       IF ( .NOT.COMP (IERR, 1, LUN, KPRINT) )  THEN
  18305.          IFAIL = IFAIL + 1
  18306.       ELSE
  18307.          IF ( KPRINT.GE.3 )  WRITE (LUN, 2002)
  18308.          NBAD = 0
  18309.          NBADZ = 0
  18310.          DO 20  I = 1, N
  18311.             RESULT = '  OK'
  18312. C             D-values should agree with stored values.
  18313. C               (Zero values should agree exactly.)
  18314.             IF ( DM(I).EQ.ZERO )  THEN
  18315.                ERR = ABS( D(I) )
  18316.                IF ( ERR.GT.TOLZ )  THEN
  18317.                   NBADZ = NBADZ + 1
  18318.                   RESULT = '**BADZ'
  18319.                ENDIF
  18320.             ELSE
  18321.                ERR = ABS( (D(I)-DM(I))/DM(I) )
  18322.                IF ( ERR.GT.TOLD )  THEN
  18323.                   NBAD = NBAD + 1
  18324.                   RESULT = '**BAD'
  18325.                ENDIF
  18326.             ENDIF
  18327.             IF (KPRINT.GE.3)
  18328.      *         WRITE (LUN, 2003)  I, X(I), D(I), ERR, RESULT
  18329.    20    CONTINUE
  18330.          IF ( (NBADZ.NE.0).OR.(NBAD.NE.0) )  THEN
  18331.             IFAIL = IFAIL + 1
  18332.             IF ((NBADZ.NE.0).AND.(KPRINT.GE.2))
  18333.      *         WRITE (LUN, 2004)  NBAD
  18334.             IF ((NBAD.NE.0).AND.(KPRINT.GE.2))
  18335.      *         WRITE (LUN, 2005)  NBAD, 'IM', TOLD
  18336.          ELSE
  18337.             IF (KPRINT.GE.3)  WRITE (LUN, 2006)  'IM'
  18338.          ENDIF
  18339.       ENDIF
  18340. C
  18341. C  Test PCHIC -- options set to reproduce PCHIM.
  18342. C
  18343.       IF (KPRINT.GE.3)  WRITE (LUN, 2000) 'IC'
  18344. C     --------------------------------------------------------
  18345.       CALL PCHIC (IC, VC, ZERO, N, X, F, DC, 1, WK, NWK, IERR)
  18346. C     --------------------------------------------------------
  18347. C        Expect IERR=0 .
  18348.       IF ( KPRINT.GE.3 )  WRITE (LUN, 2001) 0
  18349.       IF ( .NOT.COMP (IERR, 0, LUN, KPRINT) )  THEN
  18350.          IFAIL = IFAIL + 1
  18351.       ELSE
  18352.          IF ( KPRINT.GE.3 )  WRITE (LUN, 2002)
  18353.          NBAD = 0
  18354.          DO 30  I = 1, N
  18355.             RESULT = '  OK'
  18356. C           D-values should agree exactly with those computed by PCHIM.
  18357. C            (To be generous, will only test to machine precision.)
  18358.             ERR = ABS( D(I)-DC(I) )
  18359.             IF ( ERR.GT.TOL )  THEN
  18360.                NBAD = NBAD + 1
  18361.                RESULT = '**BAD'
  18362.             ENDIF
  18363.             IF (KPRINT.GE.3)
  18364.      *         WRITE (LUN, 2003)  I, X(I), DC(I), ERR, RESULT
  18365.    30    CONTINUE
  18366.          IF ( NBAD.NE.0 )  THEN
  18367.             IFAIL = IFAIL + 1
  18368.             IF (KPRINT.GE.2)  WRITE (LUN, 2005)  NBAD, 'IC', TOL
  18369.          ELSE
  18370.             IF (KPRINT.GE.3)  WRITE (LUN, 2006)  'IC'
  18371.          ENDIF
  18372.       ENDIF
  18373. C
  18374. C  Test PCHIC -- default nonzero switch derivatives.
  18375. C
  18376.       IF (KPRINT.GE.3)  WRITE (LUN, 2000) 'IC'
  18377. C     -------------------------------------------------------
  18378.       CALL PCHIC (IC, VC, MONE, N, X, F, D, 1, WK, NWK, IERR)
  18379. C     -------------------------------------------------------
  18380. C        Expect IERR=0 .
  18381.       IF ( KPRINT.GE.3 )  WRITE (LUN, 2001) 0
  18382.       IF ( .NOT.COMP (IERR, 0, LUN, KPRINT) )  THEN
  18383.          IFAIL = IFAIL + 1
  18384.       ELSE
  18385.          IF ( KPRINT.GE.3 )  WRITE (LUN, 2002)
  18386.          NBAD = 0
  18387.          NBADZ = 0
  18388.          DO 40  I = 1, N
  18389.             RESULT = '  OK'
  18390. C            D-values should agree exactly with those computed in
  18391. C            previous call, except at points 5 and 6.
  18392.             IF ( (I.LT.5).OR.(I.GT.6) )  THEN
  18393.                ERR = ABS( D(I)-DC(I) )
  18394.                IF ( ERR.GT.TOLZ )  THEN
  18395.                   NBADZ = NBADZ + 1
  18396.                   RESULT = '**BADA'
  18397.                ENDIF
  18398.             ELSE
  18399.                IF ( I.EQ.5 )  THEN
  18400.                   ERR = ABS( (D(I)-DC5)/DC5 )
  18401.                ELSE
  18402.                   ERR = ABS( (D(I)-DC6)/DC6 )
  18403.                ENDIF
  18404.                IF ( ERR.GT.TOLD )  THEN
  18405.                   NBAD = NBAD + 1
  18406.                   RESULT = '**BAD'
  18407.                ENDIF
  18408.             ENDIF
  18409.             IF (KPRINT.GE.3)
  18410.      *         WRITE (LUN, 2003)  I, X(I), D(I), ERR, RESULT
  18411.    40    CONTINUE
  18412.          IF ( (NBADZ.NE.0).OR.(NBAD.NE.0) )  THEN
  18413.             IFAIL = IFAIL + 1
  18414.             IF ((NBADZ.NE.0).AND.(KPRINT.GE.2))
  18415.      *         WRITE (LUN, 2007)  NBAD
  18416.             IF ((NBAD.NE.0).AND.(KPRINT.GE.2))
  18417.      *         WRITE (LUN, 2005)  NBAD, 'IC', TOLD
  18418.          ELSE
  18419.             IF (KPRINT.GE.3)  WRITE (LUN, 2006)  'IC'
  18420.          ENDIF
  18421.       ENDIF
  18422. C
  18423. C  Test PCHSP.
  18424. C
  18425.       IF (KPRINT.GE.3)  WRITE (LUN, 2000) 'SP'
  18426. C     -------------------------------------------------
  18427.       CALL PCHSP (IC, VC, N, X, F, D, 1, WK, NWK, IERR)
  18428. C     -------------------------------------------------
  18429. C        Expect IERR=0 .
  18430.       IF ( KPRINT.GE.3 )  WRITE (LUN, 2001) 0
  18431.       IF ( .NOT.COMP (IERR, 0, LUN, KPRINT) )  THEN
  18432.          IFAIL = IFAIL + 1
  18433.       ELSE
  18434.          IF ( KPRINT.GE.3 )  WRITE (LUN, 2002)
  18435.          NBAD = 0
  18436.          DO 50  I = 1, N
  18437.             RESULT = '  OK'
  18438. C             D-values should agree with stored values.
  18439.             ERR = ABS( (D(I)-DS(I))/DS(I) )
  18440.             IF ( ERR.GT.TOLD )  THEN
  18441.                NBAD = NBAD + 1
  18442.                RESULT = '**BAD'
  18443.             ENDIF
  18444.             IF (KPRINT.GE.3)
  18445.      *         WRITE (LUN, 2003)  I, X(I), D(I), ERR, RESULT
  18446.    50    CONTINUE
  18447.          IF ( NBAD.NE.0 )  THEN
  18448.             IFAIL = IFAIL + 1
  18449.             IF (KPRINT.GE.2)  WRITE (LUN, 2005)  NBAD, 'SP', TOLD
  18450.          ELSE
  18451.             IF (KPRINT.GE.3)  WRITE (LUN, 2006)  'SP'
  18452.          ENDIF
  18453.       ENDIF
  18454. C
  18455. C  PRINT SUMMARY AND TERMINATE.
  18456. C
  18457.       IF ((KPRINT.GE.2).AND.(IFAIL.NE.0))  WRITE (LUN, 3001)  IFAIL
  18458. C
  18459.       IF (IFAIL.EQ.0)  THEN
  18460.          IPASS = 1
  18461.          IF (KPRINT.GE.2) WRITE(LUN,99998)
  18462.       ELSE
  18463.          IPASS = 0
  18464.          IF (KPRINT.GE.1) WRITE(LUN,99999)
  18465.       ENDIF
  18466. C
  18467.       RETURN
  18468. C
  18469. C  FORMATS.
  18470. C
  18471.  1000 FORMAT ('1'//10X,'TEST PCHIP INTERPOLATORS'
  18472.      .           // 5X,'DATA:'
  18473.      .            /39X,'---------- EXPECTED D-VALUES ----------'
  18474.      .            /12X,'X',9X,'F',18X,'DM',13X,'DC',13X,'DS')
  18475.  1002 FORMAT (//10X,'PCHQK3 RESULTS'/10X,'--------------')
  18476.  1010 FORMAT (5X,F10.2,1P,E15.5,4X,E15.5,15X,E15.5)
  18477.  1011 FORMAT (5X,F10.2,1P,E15.5,4X,3E15.5)
  18478.  2000 FORMAT (/5X,' PCH',A2,' TEST:')
  18479.  2001 FORMAT (15X,'EXPECT  IERR =',I5)
  18480.  2002 FORMAT (/9X,'I',7X,'X',9X,'D',13X,'ERR')
  18481.  2003 FORMAT (5X,I5,F10.2,1P,2E15.5,2X,A)
  18482.  2004 FORMAT (/'    **',I5,'  PCHIM RESULTS FAILED TO BE EXACTLY ZERO.')
  18483.  2005 FORMAT (/'    **',I5,'  PCH',A2,' RESULTS FAILED TOLERANCE TEST.',
  18484.      *                     '  TOL =',1P,E10.3)
  18485.  2006 FORMAT (/5X,'  ALL  PCH',A2,' RESULTS OK.')
  18486.  2007 FORMAT (/'    **',I5,'  PCHIC RESULTS FAILED TO AGREE WITH',
  18487.      *                      ' PREVIOUS CALL.')
  18488.  3001 FORMAT (/' *** TROUBLE ***',I5,' INTERPOLATION TESTS FAILED.')
  18489. 99998 FORMAT (/' ------------  PCHIP PASSED  ALL INTERPOLATION TESTS',
  18490.      .        ' ------------')
  18491. 99999 FORMAT (/' ************  PCHIP FAILED SOME INTERPOLATION TESTS',
  18492.      .        ' ************')
  18493. C------------- LAST LINE OF PCHQK3 FOLLOWS -----------------------------
  18494.       END
  18495. *DECK PCHQK4
  18496.       SUBROUTINE PCHQK4 (LUN, KPRINT, IPASS)
  18497. C***BEGIN PROLOGUE  PCHQK4
  18498. C***PURPOSE  Test the PCHIP monotonicity checker PCHCM.
  18499. C***LIBRARY   SLATEC (PCHIP)
  18500. C***TYPE      SINGLE PRECISION (PCHQK4-S, DPCHQ4-D)
  18501. C***KEYWORDS  PCHIP MONOTONICITY CHECKER QUICK CHECK
  18502. C***AUTHOR  Fritsch, F. N., (LLNL)
  18503. C***DESCRIPTION
  18504. C
  18505. C              PCHIP QUICK CHECK NUMBER 4
  18506. C
  18507. C     TESTS THE MONOTONICITY CHECKER:  PCHCM.
  18508. C *Usage:
  18509. C
  18510. C        INTEGER  LUN, KPRINT, IPASS
  18511. C
  18512. C        CALL PCHQK4 (LUN, KPRINT, IPASS)
  18513. C
  18514. C *Arguments:
  18515. C
  18516. C     LUN   :IN  is the unit number to which output is to be written.
  18517. C
  18518. C     KPRINT:IN  controls the amount of output, as specified in the
  18519. C                SLATEC Guidelines.
  18520. C
  18521. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  18522. C                IPASS=0 indicates one or more tests failed.
  18523. C
  18524. C *Description:
  18525. C
  18526. C   This routine tests a constructed data set with three different
  18527. C   INCFD settings and compares with the expected results.  It then
  18528. C   runs a special test to check for bug in overall monotonicity found
  18529. C   in PCHMC.  Finally, it reverses the data and repeats all tests.
  18530. C
  18531. C***ROUTINES CALLED  PCHCM
  18532. C***REVISION HISTORY  (YYMMDD)
  18533. C   890208  DATE WRITTEN
  18534. C   890306  Changed LOUT to LUN and added it to call list.  (FNF)
  18535. C   890316  Removed DATA statements to suit new quick check standards.
  18536. C   890410  Changed PCHMC to PCHCM.
  18537. C   890410  Added a SLATEC 4.0 format prologue.
  18538. C   900314  Changed name from PCHQK3 to PCHQK4 and improved some output
  18539. C           formats.
  18540. C   900315  Revised prologue and improved some output formats.  (FNF)
  18541. C   900321  Removed IFAIL from call sequence for SLATEC standards and
  18542. C           made miscellaneous cosmetic changes.  (FNF)
  18543. C   900322  Added declarations so all variables are declared.  (FNF)
  18544. C   910708  Minor modifications in use of KPRINT.  (WRB)
  18545. C***END PROLOGUE  PCHQK4
  18546. C
  18547. C*Internal Notes:
  18548. C
  18549. C     Data set-up is done via assignment statements to avoid modifying
  18550. C     DATA-loaded arrays, as required by the 1989 SLATEC Guidelines.
  18551. C     Run with KPRINT=3 to display the data.
  18552. C**End
  18553. C
  18554. C  Declare arguments.
  18555. C
  18556.       INTEGER  LUN, KPRINT, IPASS
  18557. C
  18558. C  DECLARE VARIABLES.
  18559. C
  18560.       INTEGER  MAXN, MAXN2, MAXN3, NB
  18561.       PARAMETER  (MAXN = 16,  MAXN2 = 8,  MAXN3 = 6,  NB = 7)
  18562.       INTEGER  I, IERR, IFAIL, INCFD, ISMEX1(MAXN), ISMEX2(MAXN2),
  18563.      .         ISMEX3(MAXN3), ISMEXB(NB), ISMON(MAXN), K, N, NS(3)
  18564.       REAL  D(MAXN), DB(NB), F(MAXN), FB(NB), X(MAXN)
  18565.       LOGICAL  SKIP
  18566. C
  18567. C  DEFINE EXPECTED RESULTS.
  18568. C
  18569.       DATA  ISMEX1 / 1, 1,-1, 1, 1,-1, 1, 1,-1, 1, 1,-1, 1, 1,-1, 2/
  18570.       DATA  ISMEX2 / 1, 2, 2, 1, 2, 2, 1, 2/
  18571.       DATA  ISMEX3 / 1, 1, 1, 1, 1, 1/
  18572.       DATA  ISMEXB / 1, 3, 1, -1, -3, -1, 2/
  18573. C
  18574. C  DEFINE TEST DATA.
  18575. C
  18576.       DATA  NS /16, 8, 6/
  18577. C
  18578. C       Define X, F, D.
  18579. C***FIRST EXECUTABLE STATEMENT  PCHQK4
  18580.       DO 1  I = 1, MAXN
  18581.          X(I) = I
  18582.          D(I) = 0.E0
  18583.     1 CONTINUE
  18584.       DO 2  I = 2, MAXN, 3
  18585.          D(I) = 2.E0
  18586.     2 CONTINUE
  18587.       DO 3  I = 1, 3
  18588.          F(I) = X(I)
  18589.          F(I+ 3) = F(I  ) + 1.E0
  18590.          F(I+ 6) = F(I+3) + 1.E0
  18591.          F(I+ 9) = F(I+6) + 1.E0
  18592.          F(I+12) = F(I+9) + 1.E0
  18593.     3 CONTINUE
  18594.       F(16) = 6.E0
  18595. C       Define FB, DB.
  18596.       FB(1) = 0.E0
  18597.       FB(2) = 2.E0
  18598.       FB(3) = 3.E0
  18599.       FB(4) = 5.E0
  18600.       DB(1) = 1.E0
  18601.       DB(2) = 3.E0
  18602.       DB(3) = 3.E0
  18603.       DB(4) = 0.E0
  18604.       DO 4  I = 1, 3
  18605.          FB(NB-I+1) =  FB(I)
  18606.          DB(NB-I+1) = -DB(I)
  18607.     4 CONTINUE
  18608. C
  18609. C  INITIALIZE.
  18610. C
  18611.       IFAIL = 0
  18612. C
  18613.       IF (KPRINT .GE. 3)  THEN
  18614.          WRITE (LUN, 1000)
  18615.          DO 10  I = 1, NB
  18616.             WRITE (LUN, 1001)  I, X(I), F(I), D(I), FB(I), DB(I)
  18617.    10    CONTINUE
  18618.          DO 20  I = NB+1, MAXN
  18619.             WRITE (LUN, 1001)  I, X(I), F(I), D(I)
  18620.    20    CONTINUE
  18621.       ENDIF
  18622.       IF (KPRINT .GE. 2)  WRITE (LUN, 1002)
  18623. C
  18624. C  TRANSFER POINT FOR SECOND SET OF TESTS.
  18625. C
  18626.    25 CONTINUE
  18627. C
  18628. C  Loop over a series of values of INCFD.
  18629. C
  18630.       DO 30  INCFD = 1, 3
  18631.          N = NS(INCFD)
  18632.          SKIP = .FALSE.
  18633. C        -------------------------------------------------
  18634.          CALL PCHCM (N, X, F, D, INCFD, SKIP, ISMON, IERR)
  18635. C        -------------------------------------------------
  18636.          IF (KPRINT.GE.3)
  18637.      .      WRITE (LUN, 2000)  INCFD, IERR, (ISMON(I), I=1,N)
  18638.          IF ( IERR.NE.0 )  THEN
  18639.             IFAIL = IFAIL + 1
  18640.             IF (KPRINT.GE.3)  WRITE (LUN,2001)
  18641.          ELSE
  18642.             DO 29  I = 1, N
  18643.                IF (INCFD.EQ.1)  THEN
  18644.                   IF ( ISMON(I).NE.ISMEX1(I) )  THEN
  18645.                      IFAIL = IFAIL + 1
  18646.                      IF (KPRINT.GE.3)
  18647.      .                  WRITE (LUN, 2002)  (ISMEX1(K),K=1,N)
  18648.                      GO TO 30
  18649.                   ENDIF
  18650.                ELSE IF (INCFD.EQ.2) THEN
  18651.                   IF ( ISMON(I).NE.ISMEX2(I) )  THEN
  18652.                      IFAIL = IFAIL + 1
  18653.                      IF (KPRINT.GE.3)
  18654.      .                  WRITE (LUN, 2002)  (ISMEX2(K),K=1,N)
  18655.                      GO TO 30
  18656.                   ENDIF
  18657.                ELSE
  18658.                   IF ( ISMON(I).NE.ISMEX3(I) )  THEN
  18659.                      IFAIL = IFAIL + 1
  18660.                      IF (KPRINT.GE.3)
  18661.      .                  WRITE (LUN, 2002)  (ISMEX3(K),K=1,N)
  18662.                      GO TO 30
  18663.                   ENDIF
  18664.                ENDIF
  18665.    29       CONTINUE
  18666.          ENDIF
  18667.    30 CONTINUE
  18668. C
  18669. C  Test for -1,3,1 bug.
  18670. C
  18671.       SKIP = .FALSE.
  18672. C     ------------------------------------------------
  18673.       CALL PCHCM (NB, X, FB, DB, 1, SKIP, ISMON, IERR)
  18674. C     ------------------------------------------------
  18675.       IF (KPRINT.GE.3)
  18676.      .   WRITE (LUN, 2030)  IERR, (ISMON(I), I=1,NB)
  18677.       IF ( IERR.NE.0 )  THEN
  18678.          IFAIL = IFAIL + 1
  18679.          IF (KPRINT.GE.3)  WRITE (LUN,2001)
  18680.       ELSE
  18681.          DO 34  I = 1, NB
  18682.             IF ( ISMON(I).NE.ISMEXB(I) )  THEN
  18683.                IFAIL = IFAIL + 1
  18684.                IF (KPRINT.GE.3)
  18685.      .            WRITE (LUN, 2002)  (ISMEXB(K),K=1,NB)
  18686.                GO TO 35
  18687.             ENDIF
  18688.    34    CONTINUE
  18689.       ENDIF
  18690.    35 CONTINUE
  18691. C
  18692.       IF (F(1).LT.0.)  GO TO 90
  18693. C
  18694. C  Change sign and do again.
  18695. C
  18696.       DO 40  I = 1, MAXN
  18697.          F(I) = -F(I)
  18698.          D(I) = -D(I)
  18699.          IF ( ISMEX1(I).NE.2 )  ISMEX1(I) = -ISMEX1(I)
  18700.    40 CONTINUE
  18701.       DO 42  I = 1, MAXN2
  18702.          IF ( ISMEX2(I).NE.2 )  ISMEX2(I) = -ISMEX2(I)
  18703.    42 CONTINUE
  18704.       DO 43  I = 1, MAXN3
  18705.          IF ( ISMEX3(I).NE.2 )  ISMEX3(I) = -ISMEX3(I)
  18706.    43 CONTINUE
  18707.       DO 50  I = 1, NB
  18708.          FB(I) = -FB(I)
  18709.          DB(I) = -DB(I)
  18710.          IF ( ISMEXB(I).NE.2 )  ISMEXB(I) = -ISMEXB(I)
  18711.    50 CONTINUE
  18712.       GO TO 25
  18713. C
  18714. C  PRINT SUMMARY AND TERMINATE.
  18715. C
  18716.    90 CONTINUE
  18717.       IF ((KPRINT.GE.2).AND.(IFAIL.NE.0))  WRITE (LUN, 3001)  IFAIL
  18718. C
  18719.       IF (IFAIL.EQ.0)  THEN
  18720.          IPASS = 1
  18721.          IF (KPRINT.GE.2) WRITE(LUN,99998)
  18722.       ELSE
  18723.          IPASS = 0
  18724.          IF (KPRINT.GE.1) WRITE(LUN,99999)
  18725.       ENDIF
  18726. C
  18727.       RETURN
  18728. C
  18729. C  FORMATS.
  18730. C
  18731.  1000 FORMAT ('1'//10X,'TEST PCHIP MONOTONICITY CHECKER'
  18732.      *           // 5X,'DATA:'
  18733.      .           // 9X,'I',4X,'X',5X,'F',5X,'D',5X,'FB',4X,'DB')
  18734.  1001 FORMAT (5X,I5,5F6.1)
  18735.  1002 FORMAT (//10X,'PCHQK4 RESULTS'/10X,'--------------')
  18736.  2000 FORMAT (/4X,'INCFD =',I2,':  IERR =',I3/15X,'ISMON =',16I3)
  18737.  2001 FORMAT (' *** Failed -- bad IERR value.')
  18738.  2002 FORMAT (' *** Failed -- expect:',16I3)
  18739.  2030 FORMAT (/4X,' Bug test:  IERR =',I3/15X,'ISMON =',7I3)
  18740.  3001 FORMAT (/' *** TROUBLE ***',I5,' MONOTONICITY TESTS FAILED.')
  18741. 99998 FORMAT (/' ------------  PCHIP PASSED  ALL MONOTONICITY TESTS',
  18742.      .        ' ------------')
  18743. 99999 FORMAT (/' ************  PCHIP FAILED SOME MONOTONICITY TESTS',
  18744.      .        ' ************')
  18745. C------------- LAST LINE OF PCHQK4 FOLLOWS -----------------------------
  18746.       END
  18747. *DECK PFITQX
  18748.       SUBROUTINE PFITQX (LUN, KPRINT, IPASS)
  18749. C***BEGIN PROLOGUE  PFITQX
  18750. C***PURPOSE  Quick check for POLFIT, PCOEF and PVALUE.
  18751. C***LIBRARY   SLATEC
  18752. C***TYPE      SINGLE PRECISION (PFITQX-S, DPFITT-D)
  18753. C***AUTHOR  (UNKNOWN)
  18754. C***ROUTINES CALLED  CMPARE, PASS, PCOEF, POLFIT, PVALUE, R1MACH,
  18755. C                    XERCLR, XGETF, XSETF
  18756. C***COMMON BLOCKS    CHECK
  18757. C***REVISION HISTORY  (YYMMDD)
  18758. C   ??????  DATE WRITTEN
  18759. C   890911  Removed unnecessary intrinsics.  (WRB)
  18760. C   890921  Realigned order of variables in the COMMON block.
  18761. C           (WRB)
  18762. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  18763. C   900911  Test problem changed and cosmetic changes to code.  (WRB)
  18764. C   901205  Changed usage of R1MACH(3) to R1MACH(4) and modified the
  18765. C           FORMATs.  (RWC)
  18766. C   910708  Minor modifications in use of KPRINT.  (WRB)
  18767. C   920214  Code restructured to test for all values of KPRINT and to
  18768. C           provide more PASS/FAIL information.  (WRB)
  18769. C***END PROLOGUE  PFITQX
  18770. C     .. Scalar Arguments ..
  18771.       INTEGER IPASS, KPRINT, LUN
  18772. C     .. Scalars in Common ..
  18773.       REAL EPS, RP, SVEPS, TOL
  18774.       INTEGER IERP, IERR, NORD, NORDP
  18775. C     .. Arrays in Common ..
  18776.       REAL R(11)
  18777. C     .. Local Scalars ..
  18778.       REAL YFIT
  18779.       INTEGER I, ICNT, M, MAXORD
  18780. C     .. Local Arrays ..
  18781.       REAL A(97), TC(5), W(11), X(11), Y(11), YP(5)
  18782.       INTEGER ITEST(9)
  18783. C     .. External Functions ..
  18784.       REAL R1MACH
  18785.       EXTERNAL R1MACH
  18786. C     .. External Subroutines ..
  18787.       EXTERNAL CMPARE, PASS, PCOEF, POLFIT, PVALUE
  18788. C     .. Intrinsic Functions ..
  18789.       INTRINSIC ABS, SQRT
  18790. C     .. Common blocks ..
  18791.       COMMON /CHECK/ EPS, R, RP, SVEPS, TOL, NORDP, NORD, IERP, IERR
  18792. C***FIRST EXECUTABLE STATEMENT  PFITQX
  18793.       IF (KPRINT .GE. 2) WRITE (LUN,FMT=9000)
  18794. C
  18795. C     Initialize variables for testing passage or failure of tests
  18796. C
  18797.       DO 100 I = 1,9
  18798.         ITEST(I) = 0
  18799.   100 CONTINUE
  18800.       ICNT = 0
  18801.       TOL = SQRT(R1MACH(4))
  18802.       M = 11
  18803.       DO 110 I = 1,M
  18804.         X(I) = I - 6
  18805.         Y(I) = X(I)**4
  18806.   110 CONTINUE
  18807. C
  18808. C     Test POLFIT
  18809. C     Input EPS is negative - specified level
  18810. C
  18811.       W(1) = -1.0E0
  18812.       EPS = -0.01E0
  18813.       SVEPS = EPS
  18814.       MAXORD = 8
  18815.       NORDP = 4
  18816.       RP = 625.0E0
  18817.       IERP = 1
  18818.       CALL POLFIT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  18819. C
  18820. C     See if test passed
  18821. C
  18822.       CALL CMPARE (ICNT, ITEST)
  18823. C
  18824. C     Check for suppression of printing.
  18825. C
  18826.       IF (KPRINT .EQ. 0) GO TO 130
  18827.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 130
  18828.       WRITE (LUN,FMT=9010)
  18829.       WRITE (LUN,FMT=9020)
  18830.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 120
  18831.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  18832.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  18833. C
  18834. C     Send message indicating passage or failure of test
  18835. C
  18836.   120 CALL PASS (LUN, ICNT, ITEST(ICNT))
  18837. C
  18838. C     Input EPS is negative - computed level
  18839. C
  18840.   130 EPS = -1.0E0
  18841.       SVEPS = EPS
  18842.       CALL POLFIT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  18843. C
  18844. C     See if test passed
  18845. C
  18846.       CALL CMPARE (ICNT, ITEST)
  18847. C
  18848. C     Check for suppression of printing.
  18849. C
  18850.       IF (KPRINT .EQ. 0) GO TO 150
  18851.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 150
  18852.       WRITE (LUN,FMT=9050)
  18853.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 140
  18854.       WRITE (LUN,FMT=9060) MAXORD
  18855.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  18856.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  18857. C
  18858. C     Send message indicating passage or failure of test
  18859. C
  18860.   140 CALL PASS (LUN, ICNT, ITEST(ICNT))
  18861. C
  18862. C     Input EPS is zero
  18863. C
  18864.   150 W(1) = -1.0E0
  18865.       EPS = 0.0E0
  18866.       SVEPS = EPS
  18867.       NORDP = 5
  18868.       MAXORD = 5
  18869.       CALL POLFIT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  18870. C
  18871. C     See if test passed
  18872. C
  18873.       CALL CMPARE (ICNT, ITEST)
  18874. C
  18875. C     Check for suppression of printing.
  18876. C
  18877.       IF (KPRINT .EQ. 0) GO TO 170
  18878.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 170
  18879.       WRITE (LUN,FMT=9070)
  18880.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 160
  18881.       WRITE (LUN,FMT=9060) MAXORD
  18882.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  18883.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  18884. C
  18885. C     Send message indicating passage or failure of test
  18886. C
  18887.   160 CALL PASS (LUN, ICNT, ITEST(ICNT))
  18888. C
  18889. C     Input EPS is positive
  18890. C
  18891.   170 IERP = 1
  18892.       NORDP = 4
  18893.       EPS = 75.0E0*R1MACH(4)
  18894.       SVEPS = EPS
  18895.       CALL POLFIT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  18896. C
  18897. C     See if test passed
  18898. C
  18899.       CALL CMPARE (ICNT, ITEST)
  18900. C
  18901. C     Check for suppression of printing.
  18902. C
  18903.       IF (KPRINT .EQ. 0) GO TO 190
  18904.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 190
  18905.       WRITE (LUN,FMT=9080)
  18906.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 180
  18907.       WRITE (LUN,FMT=9060) MAXORD
  18908.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  18909.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  18910. C
  18911. C     Send message indicating passage or failure of test
  18912. C
  18913.   180 CALL PASS (LUN, ICNT, ITEST(ICNT))
  18914. C
  18915. C     Improper input
  18916. C
  18917.   190 IERP = 2
  18918.       M = -2
  18919. C
  18920. C     Check for suppression of printing.
  18921. C
  18922.       CALL XGETF (KONTRL)
  18923.       IF (KPRINT .LE. 2) THEN
  18924.          CALL XSETF (0)
  18925.       ELSE
  18926.          CALL XSETF (1)
  18927.       ENDIF
  18928.       CALL XERCLR
  18929. C
  18930.       IF (KPRINT .GE. 3) WRITE (LUN,9090)
  18931.       CALL POLFIT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  18932. C
  18933. C     See if test passed
  18934. C
  18935.       ICNT = ICNT + 1
  18936.       IF (IERR .EQ. 2) THEN
  18937.         ITEST(ICNT) = 1
  18938.         IF (KPRINT .GE. 3) THEN
  18939.           WRITE (LUN, 9100) 'PASSED', IERR
  18940.         ENDIF
  18941.       ELSE
  18942.         IF (KPRINT .GE. 2) THEN
  18943.           WRITE (LUN, 9100) 'FAILED', IERR
  18944.         ENDIF
  18945.       ENDIF
  18946. C
  18947. C     Check for suppression of printing.
  18948. C
  18949.       IF (KPRINT .EQ. 0) GO TO 210
  18950.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 210
  18951.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 200
  18952. C
  18953. C     Send message indicating passage or failure of test
  18954. C
  18955.   200 CALL PASS (LUN, ICNT, ITEST(ICNT))
  18956. C
  18957.       CALL XERCLR
  18958.       CALL XSETF (KONTRL)
  18959. C
  18960. C     MAXORD too small to meet RMS error
  18961. C
  18962.   210 M = 11
  18963.       W(1) = -1.0E0
  18964.       EPS = 5.0E0*R1MACH(4)
  18965.       SVEPS = EPS
  18966.       RP = 553.0E0
  18967.       MAXORD = 2
  18968.       IERP = 3
  18969.       NORDP = 2
  18970.       CALL POLFIT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  18971. C
  18972. C     See if test passed
  18973. C
  18974.       CALL CMPARE (ICNT, ITEST)
  18975. C
  18976. C     Check for suppression of printing.
  18977. C
  18978.       IF (KPRINT .EQ. 0) GO TO 230
  18979.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 230
  18980.       WRITE (LUN,FMT=9110)
  18981.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 220
  18982.       WRITE (LUN,FMT=9060) MAXORD
  18983.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  18984.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  18985. C
  18986. C     Send message indicating passage or failure of test
  18987. C
  18988.   220 CALL PASS (LUN, ICNT, ITEST(ICNT))
  18989. C
  18990. C     MAXORD too small to meet statistical test
  18991. C
  18992.   230 NORDP = 4
  18993.       IERP = 4
  18994.       RP = 625.0E0
  18995.       EPS = -0.01E0
  18996.       SVEPS = EPS
  18997.       MAXORD = 5
  18998.       CALL POLFIT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  18999. C
  19000. C     See if test passed
  19001. C
  19002.       CALL CMPARE (ICNT, ITEST)
  19003. C
  19004. C     Check for suppression of printing.
  19005. C
  19006.       IF (KPRINT .EQ. 0) GO TO 250
  19007.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 250
  19008.       WRITE (LUN,FMT=9120)
  19009.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 240
  19010.       WRITE (LUN,FMT=9060) MAXORD
  19011.       WRITE (LUN,FMT=9030) SVEPS,NORDP,RP,IERP
  19012.       WRITE (LUN,FMT=9040) EPS,NORD,R(11),IERR
  19013. C
  19014. C     Send message indicating passage or failure of test
  19015. C
  19016.   240 CALL PASS (LUN, ICNT, ITEST(ICNT))
  19017. C
  19018. C     Test PCOEF
  19019. C
  19020.   250 MAXORD = 6
  19021.       EPS = 0.0E0
  19022.       SVEPS = EPS
  19023.       Y(6) = 1.0E0
  19024.       DO 260 I = 1,M
  19025.         W(I) = 1.0E0/(Y(I)**2)
  19026.   260 CONTINUE
  19027.       Y(6) = 0.0E0
  19028.       CALL POLFIT (M, X, Y, W, MAXORD, NORD, EPS, R, IERR, A)
  19029.       CALL PCOEF (4, 5.0E0, TC, A)
  19030. C
  19031. C     See if test passed
  19032. C
  19033.       ICNT = ICNT + 1
  19034.       IF (ABS(R(11)-TC(1)) .LE. TOL) ITEST(ICNT) = 1
  19035. C
  19036. C     Check for suppression of printing
  19037. C
  19038.       IF (KPRINT .EQ. 0) GO TO 280
  19039.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 280
  19040.       WRITE (LUN,FMT=9130)
  19041.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 270
  19042.       WRITE (LUN,FMT=9140) R(11),TC(1)
  19043. C
  19044. C     Send message indicating passage or failure of test
  19045. C
  19046.   270 CALL PASS (LUN, ICNT, ITEST(ICNT))
  19047. C
  19048. C     Test PVALUE
  19049. C     Normal call
  19050. C
  19051.   280 CALL PVALUE (6, 0, X(8), YFIT, YP, A)
  19052. C
  19053. C     See if test passed
  19054. C
  19055.       ICNT = ICNT + 1
  19056.       IF (ABS(R(8)-YFIT) .LE. TOL) ITEST(ICNT) = 1
  19057. C
  19058. C     Check for suppression of printing
  19059. C
  19060.       IF (KPRINT .EQ. 0) GO TO 300
  19061.       IF (KPRINT.EQ.1 .AND. ITEST(ICNT).EQ.1) GO TO 300
  19062.       WRITE (LUN,FMT=9150)
  19063.       WRITE (LUN,FMT=9160)
  19064.       IF (KPRINT.LE.2 .AND. ITEST(ICNT).EQ.1) GO TO 290
  19065.       WRITE (LUN,FMT=9170) X(8),R(8),YFIT
  19066. C
  19067. C     Send message indicating passage or failure of test
  19068. C
  19069.   290 CALL PASS (LUN, ICNT, ITEST(ICNT))
  19070. C
  19071. C     Check to see if all tests passed
  19072. C
  19073.   300 IPASS = 1
  19074.       DO 310 I = 1,9
  19075.         IPASS = IPASS*ITEST(I)
  19076.   310 CONTINUE
  19077. C
  19078.       IF (IPASS.EQ.1 .AND. KPRINT.GE.3) WRITE (LUN,FMT=9180)
  19079.       IF (IPASS.EQ.0 .AND. KPRINT.GE.2) WRITE (LUN,FMT=9190)
  19080.       RETURN
  19081. C
  19082.  9000 FORMAT ('1' / 'Test POLFIT, PCOEF and PVALUE')
  19083.  9010 FORMAT (' Exercise POLFIT')
  19084.  9020 FORMAT (' Input EPS is negative - specified significance level')
  19085.  9030 FORMAT (' Input EPS =  ', E15.8, '   correct order =  ', I3,
  19086.      +        '   R(1) = ', E15.8, '   IERR = ', I1)
  19087.  9040 FORMAT (' Output EPS = ', E15.8, '   computed order = ', I3,
  19088.      +        '   R(1) = ', E15.8, '   IERR = ', I1)
  19089.  9050 FORMAT (/ ' Input EPS is negative - computed significance level')
  19090.  9060 FORMAT (' Maximum order = ', I2)
  19091.  9070 FORMAT (/ ' Input EPS is zero')
  19092.  9080 FORMAT (/ ' Input EPS is positive')
  19093.  9090 FORMAT (/ ' Invalid input')
  19094.  9100 FORMAT (' POLFIT incorrect argument test ', A /
  19095.      +        ' IERR should be 2.  It is ', I4)
  19096.  9110 FORMAT (/ ' Cannot meet RMS error requirement')
  19097.  9120 FORMAT (/ ' Cannot satisfy statistical test')
  19098.  9130 FORMAT (/ ' Exercise PCOEF')
  19099.  9140 FORMAT (/ ' For C=1.0, correct coefficient = ', E15.8,
  19100.      +        '   computed = ', E15.8)
  19101.  9150 FORMAT (/ ' Exercise PVALUE')
  19102.  9160 FORMAT (' Normal execution')
  19103.  9170 FORMAT (' For X = ', F5.2, '   correct P(X) = ', E15.8,
  19104.      +        '    P(X) from PVALUE = ', E15.8)
  19105.  9180 FORMAT (/' ***************POLFIT PASSED ALL TESTS***************')
  19106.  9190 FORMAT (/' ***************POLFIT FAILED SOME TESTS**************')
  19107.       END
  19108. *DECK PNTCHK
  19109.       SUBROUTINE PNTCHK (LUN, KPRINT, IPASS)
  19110. C***BEGIN PROLOGUE  PNTCHK
  19111. C***PURPOSE  Quick check for POLINT, POLCOF and POLYVL
  19112. C***LIBRARY   SLATEC
  19113. C***TYPE      SINGLE PRECISION (PNTCHK-S, DPNTCK-D)
  19114. C***KEYWORDS  QUICK CHECK
  19115. C***AUTHOR  (UNKNOWN)
  19116. C***ROUTINES CALLED  NUMXER, POLCOF, POLINT, POLYVL, R1MACH, XERCLR,
  19117. C                    XGETF, XSETF
  19118. C***REVISION HISTORY  (YYMMDD)
  19119. C   ??????  DATE WRITTEN
  19120. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  19121. C   901205  Changed usage of R1MACH(3) to R1MACH(4).  (RWC)
  19122. C   910708  Minor modifications in use of KPRINT.  (WRB)
  19123. C   920212  Code completely restructured to test errors for all values
  19124. C           of KPRINT.  (WRB)
  19125. C***END PROLOGUE  PNTCHK
  19126. C     .. Scalar Arguments ..
  19127.       INTEGER IPASS, KPRINT, LUN
  19128. C     .. Local Scalars ..
  19129.       REAL TOL, YF
  19130.       INTEGER I, IERR, KONTRL, N, NERR
  19131.       LOGICAL FATAL
  19132. C     .. Local Arrays ..
  19133.       REAL C(6), D(6), DCHK(6), W(12), X(6), XCHK(6), Y(6)
  19134. C     .. External Functions ..
  19135.       REAL R1MACH
  19136.       INTEGER NUMXER
  19137.       EXTERNAL R1MACH, NUMXER
  19138. C     .. External Subroutines ..
  19139.       EXTERNAL POLCOF, POLINT, POLYVL, XERCLR, XGETF, XSETF
  19140. C     .. Intrinsic Functions ..
  19141.       INTRINSIC ABS, SQRT
  19142. C     .. Data statements ..
  19143.       DATA X / 1.0E0, 2.0E0, 3.0E0, -1.0E0, -2.0E0, -3.0E0 /
  19144.       DATA Y / 0.0E0, 9.0E0, 64.0E0, 0.0E0, 9.0E0, 64.0E0 /
  19145.       DATA XCHK / 1.0E0, 0.0E0, -2.0E0, 0.0E0, 1.0E0, 0.0E0 /
  19146.       DATA DCHK / 1.0E0, 0.0E0, -4.0E0, 0.0E0, 24.0E0, 0.0E0 /
  19147. C***FIRST EXECUTABLE STATEMENT  PNTCHK
  19148.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  19149. C
  19150. C     Initialize variables for tests.
  19151. C
  19152.       TOL = SQRT(R1MACH(4))
  19153.       IPASS = 1
  19154.       N = 6
  19155. C
  19156. C     Set up polynomial test.
  19157. C
  19158.       CALL POLINT (N, X, Y, C)
  19159.       CALL POLCOF (0.0E0, N, X, C, D, W)
  19160. C
  19161. C     Check to see if POLCOF test passed.
  19162. C
  19163.       FATAL = .FALSE.
  19164.       DO 110 I = 1,N
  19165.         IF (ABS(D(I)-XCHK(I)) .GT. TOL) THEN
  19166.           IPASS = 0
  19167.           FATAL = .TRUE.
  19168.         ENDIF
  19169.   110 CONTINUE
  19170.       IF (FATAL) THEN
  19171.         IF (KPRINT .GE. 2) WRITE (LUN, 9010) 'FAILED', (D(I), I = 1,N)
  19172.       ELSE
  19173.         IF (KPRINT .GE. 3) WRITE (LUN, 9010) 'PASSED', (D(I), I = 1,N)
  19174.       ENDIF
  19175. C
  19176. C     Test POLYVL.
  19177. C
  19178.       CALL POLYVL (5, 0.0E0, YF, D, N, X, C, W, IERR)
  19179.       IF (ABS(DCHK(1)-YF) .LE. TOL) THEN
  19180.         IF (KPRINT .GE. 3) WRITE (LUN, 9020) 'PASSED', YF,(D(I),I=1,5)
  19181.       ELSE
  19182.         IPASS = 0
  19183.         IF (KPRINT .GE. 2) WRITE (LUN, 9020) 'FAILED', YF,(D(I),I=1,5)
  19184.       ENDIF
  19185. C
  19186.       FATAL = .FALSE.
  19187.       DO 120 I = 1,5
  19188.         IF (ABS(DCHK(I+1)-D(I)) .GT. TOL) THEN
  19189.           IPASS = 0
  19190.           FATAL = .TRUE.
  19191.         ENDIF
  19192.   120 CONTINUE
  19193. C
  19194. C     Trigger 2 error conditions
  19195. C
  19196.       CALL XGETF (KONTRL)
  19197.       IF (KPRINT .LE. 2) THEN
  19198.          CALL XSETF (0)
  19199.       ELSE
  19200.          CALL XSETF (1)
  19201.       ENDIF
  19202.       FATAL = .FALSE.
  19203.       CALL XERCLR
  19204. C
  19205.       IF (KPRINT .GE. 3) WRITE (LUN,9030)
  19206.       CALL POLINT (0, X, Y, C)
  19207.       IF (NUMXER(NERR) .NE. 2) THEN
  19208.         IPASS = 0
  19209.         FATAL = .TRUE.
  19210.       ENDIF
  19211.       CALL XERCLR
  19212. C
  19213.       X(1) = -1.0E0
  19214.       CALL POLINT (N, X, Y, C)
  19215.       IF (NUMXER(NERR) .NE. 2) THEN
  19216.         IPASS = 0
  19217.         FATAL = .TRUE.
  19218.       ENDIF
  19219.       CALL XERCLR
  19220. C
  19221.       CALL XSETF (KONTRL)
  19222.       IF (FATAL) THEN
  19223.         IF (KPRINT .GE. 2) THEN
  19224.           WRITE (LUN, 9040)
  19225.         ENDIF
  19226.       ELSE
  19227.         IF (KPRINT .GE. 3) THEN
  19228.           WRITE (LUN, 9050)
  19229.         ENDIF
  19230.       ENDIF
  19231. C
  19232.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN,9080)
  19233.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN,9090)
  19234.       RETURN
  19235. C
  19236.  9000 FORMAT ('1' / ' Test POLINT, POLCOF and POLYVL')
  19237.  9010 FORMAT (/ 'POLCOF ', A, ' test' /
  19238.      +        ' Taylor coefficients for the quintic should be' /
  19239.      +        6X, '1.000', 5X, '0.000', 4X, '-2.000', 5X, '0.000', 5X,
  19240.      +        '1.000', 5X, '0.000' /
  19241.      +        ' Taylor coefficients from POLCOF are' / 1X, 6F10.3 /)
  19242.  9020 FORMAT (' Derivative test ', A /
  19243.      +        ' The derivatives of the polynomial at zero as ',
  19244.      +        'computed by POLYVL are' / 1X, 6F10.3 /)
  19245.  9030 FORMAT (/' 2 Error messages expected')
  19246.  9040 FORMAT (/ ' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  19247.  9050 FORMAT (/ ' ALL INCORRECT ARGUMENT TESTS PASSED')
  19248.  9080 FORMAT (/' ****************POLINT PASSED ALL TESTS**************')
  19249.  9090 FORMAT (/' ***************POLINT FAILED SOME TESTS**************')
  19250.       END
  19251. *DECK QC6A
  19252.       SUBROUTINE QC6A (LUN, KPRINT, IPASS)
  19253. C***BEGIN PROLOGUE  QC6A
  19254. C***PURPOSE  Test subroutine AAAAAA.
  19255. C***LIBRARY   SLATEC
  19256. C***TYPE      ALL (QC6A-A)
  19257. C***AUTHOR  Boland, W. Robert, (LANL)
  19258. C***DESCRIPTION
  19259. C
  19260. C *Usage:
  19261. C
  19262. C        INTEGER  LUN, KPRINT, IPASS
  19263. C
  19264. C        CALL  QC6A (LUN, KPRINT, IPASS)
  19265. C
  19266. C *Arguments:
  19267. C
  19268. C     LUN   :IN  is the unit number to which output is to be written.
  19269. C
  19270. C     KPRINT:IN  controls the amount of output, as specified in the
  19271. C                SLATEC Guidelines.
  19272. C
  19273. C     IPASS:OUT  indicates whether the test passed or failed.
  19274. C                A value of one is good, indicating no failures.
  19275. C
  19276. C *Description:
  19277. C
  19278. C   This routine tests the SLATEC routine AAAAAA to see if the version
  19279. C   number in the SLATEC library source is the same as the quick check
  19280. C   version number.
  19281. C
  19282. C***ROUTINES CALLED  AAAAAA
  19283. C***REVISION HISTORY  (YYMMDD)
  19284. C   890713  DATE WRITTEN
  19285. C***END PROLOGUE  QC6A
  19286. C
  19287. C*Internal Notes:
  19288. C
  19289. C     Data set-up is done via a PARAMETER statement.
  19290. C
  19291. C**End
  19292. C
  19293. C  Declare arguments.
  19294. C
  19295.       INTEGER  LUN, KPRINT, IPASS
  19296. C
  19297. C  DECLARE VARIABLES.
  19298. C
  19299.       CHARACTER * 16 VER, VERSN
  19300.       PARAMETER  (VERSN = ' 4.0-')
  19301. C
  19302. C***FIRST EXECUTABLE STATEMENT  QC6A
  19303.       IF (KPRINT.GE.3) WRITE (LUN, 9000)
  19304.       CALL AAAAAA (VER)
  19305.       IF (VER .EQ. VERSN) THEN
  19306.          IPASS = 1
  19307.          IF (KPRINT .GE. 3) THEN
  19308.             WRITE (LUN, 9010)
  19309.             WRITE (LUN, 9020) VER
  19310.          ENDIF
  19311.       ELSE
  19312.          IPASS = 0
  19313.          IF (KPRINT .GE. 3) WRITE (LUN, 9010)
  19314.          IF (KPRINT .GE. 2) WRITE (LUN, 9030) VER, VERSN
  19315.       ENDIF
  19316. C
  19317. C     Terminate.
  19318. C
  19319.       IF (KPRINT.GE.2 .AND. IPASS.EQ.1) WRITE (LUN, 90000)
  19320.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN, 90010)
  19321.       RETURN
  19322. C
  19323. C     Formats.
  19324. C
  19325.  9000 FORMAT ('1' // ' CODE TO TEST SLATEC ROUTINE AAAAAA')
  19326.  9010 FORMAT (/ ' QC6A RESULTS')
  19327.  9020 FORMAT (' *** Passed -- version number = ', A16)
  19328.  9030 FORMAT (' *** Failed -- version number from AAAAAA = ', A16,
  19329.      +        ' but expected version number = ', A16)
  19330. 90000 FORMAT(/' ************QC6A   PASSED  ALL TESTS ****************')
  19331. 90010 FORMAT(/' ************QC6A   FAILED SOME TESTS ****************')
  19332. C------------- LAST LINE OF QC6A FOLLOWS -----------------------------
  19333.       END
  19334. *DECK QCDRC
  19335.       SUBROUTINE QCDRC (LUN, KPRINT, IPASS)
  19336. C***BEGIN PROLOGUE  QCDRC
  19337. C***PURPOSE  Quick check for DRC.
  19338. C***LIBRARY   SLATEC
  19339. C***KEYWORDS  QUICK CHECK
  19340. C***AUTHOR  Pexton, R. L., (LLNL)
  19341. C***DESCRIPTION
  19342. C
  19343. C            QUICK TEST FOR CARLSON INTEGRAL DRC
  19344. C
  19345. C***ROUTINES CALLED  D1MACH, DRC, NUMXER, XERCLR, XGETF, XSETF
  19346. C***REVISION HISTORY  (YYMMDD)
  19347. C   790801  DATE WRITTEN
  19348. C   890618  REVISION DATE from Version 3.2
  19349. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  19350. C   910708  Minor modifications in use of KPRINT.  (WRB)
  19351. C***END PROLOGUE  QCDRC
  19352.       INTEGER KPRINT, IPASS, CONTRL, KONTRL, LUN, IER
  19353.       INTEGER IPASS1, IPASS2, IPASS3, IPASS4, NUMXER
  19354.       DOUBLE PRECISION PI, TRC, DRC, DIF, D1MACH
  19355.       EXTERNAL D1MACH, DRC, NUMXER, XERCLR, XGETF, XSETF
  19356. C***FIRST EXECUTABLE STATEMENT  QCDRC
  19357.       CALL XERCLR
  19358.       CALL XGETF(CONTRL)
  19359.       IF ( KPRINT .GE. 3 ) THEN
  19360.          KONTRL = +1
  19361.       ELSE
  19362.          KONTRL = 0
  19363.       ENDIF
  19364.       CALL XSETF(KONTRL)
  19365. C
  19366. C  FORCE ERROR 1
  19367. C
  19368.       IF ( KPRINT .GE. 3 ) WRITE (LUN,101)
  19369.   101 FORMAT(' DRC - FORCE ERROR 1 TO OCCUR')
  19370.       TRC = DRC(-1.0D0,-1.0D0,IER)
  19371.       IER = NUMXER(IER)
  19372.       IF ( IER .EQ. 1 ) THEN
  19373.          IPASS1 = 1
  19374.       ELSE
  19375.          IPASS1 = 0
  19376.       ENDIF
  19377.       CALL XERCLR
  19378. C
  19379. C  FORCE ERROR 2
  19380. C
  19381.       IF ( KPRINT .GE. 3 ) WRITE (LUN,102)
  19382.   102 FORMAT(' DRC - FORCE ERROR 2 TO OCCUR')
  19383.       TRC = DRC(D1MACH(1),D1MACH(1),IER)
  19384.       IER = NUMXER(IER)
  19385.       IF ( IER .EQ. 2 ) THEN
  19386.          IPASS2 = 1
  19387.       ELSE
  19388.          IPASS2 = 0
  19389.       ENDIF
  19390.       CALL XERCLR
  19391. C
  19392. C  FORCE ERROR 3
  19393. C
  19394.       IF ( KPRINT .GE. 3 ) WRITE (LUN,103)
  19395.   103 FORMAT(' DRC - FORCE ERROR 3 TO OCCUR')
  19396.       TRC = DRC(D1MACH(2),D1MACH(2),IER)
  19397.       IER = NUMXER(IER)
  19398.       IF ( IER .EQ. 3 ) THEN
  19399.          IPASS3 = 1
  19400.       ELSE
  19401.          IPASS3 = 0
  19402.       ENDIF
  19403.       CALL XERCLR
  19404. C
  19405. C  ARGUMENTS IN RANGE
  19406. C
  19407.       PI  = 3.141592653589793238462643383279D0
  19408.       TRC = DRC(0.0D0,0.25D0,IER)
  19409.       CALL XERCLR
  19410.       DIF = TRC - PI
  19411.       IF ( (ABS(DIF/PI).LT.1000.0D0*D1MACH(4)) .AND. (IER.EQ.0) ) THEN
  19412.          IPASS4 = 1
  19413.       ELSE
  19414.          IPASS4 = 0
  19415.       ENDIF
  19416.       IPASS = MIN(IPASS1,IPASS2,IPASS3,IPASS4)
  19417.       IF ( KPRINT .LE. 0 ) THEN
  19418.          GO TO 999
  19419.       ELSEIF ( KPRINT .EQ. 1 ) THEN
  19420.          IF ( IPASS .EQ. 1 ) THEN
  19421.             GO TO 999
  19422.          ELSE
  19423.             WRITE (LUN,104)
  19424.   104       FORMAT(' DRC - FAILED')
  19425.             GO TO 999
  19426.          ENDIF
  19427.       ELSE
  19428.          IF ( IPASS .EQ. 1 ) THEN
  19429.             WRITE (LUN,105)
  19430.   105       FORMAT(' DRC - PASSED')
  19431.             GO TO 999
  19432.          ELSE
  19433.             WRITE (LUN,104)
  19434.             IF ( IPASS4 .EQ. 0 ) WRITE (LUN,106) PI, TRC, DIF
  19435.   106       FORMAT(' CORRECT ANSWER =', 1PD20.14 /
  19436.      *             'COMPUTED ANSWER =',   D20.14 /
  19437.      *             '     DIFFERENCE =',   D20.14 )
  19438.             GO TO 999
  19439.          ENDIF
  19440.       ENDIF
  19441.   999 CONTINUE
  19442.       CALL XSETF(CONTRL)
  19443.       RETURN
  19444.       END
  19445. *DECK QCDRD
  19446.       SUBROUTINE QCDRD (LUN, KPRINT, IPASS)
  19447. C***BEGIN PROLOGUE  QCDRD
  19448. C***PURPOSE  Quick check for DRD.
  19449. C***LIBRARY   SLATEC
  19450. C***KEYWORDS  QUICK CHECK
  19451. C***AUTHOR  Pexton, R. L., (LLNL)
  19452. C***DESCRIPTION
  19453. C
  19454. C            QUICK TEST FOR CARLSON INTEGRAL DRD
  19455. C
  19456. C***ROUTINES CALLED  D1MACH, DRD, NUMXER, XERCLR, XGETF, XSETF
  19457. C***REVISION HISTORY  (YYMMDD)
  19458. C   790801  DATE WRITTEN
  19459. C   890618  REVISION DATE from Version 3.2
  19460. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  19461. C   910708  Minor modifications in use of KPRINT.  (WRB)
  19462. C***END PROLOGUE  QCDRD
  19463.       INTEGER KPRINT, IPASS, CONTRL, KONTRL, LUN, IER
  19464.       INTEGER IPASS1, IPASS2, IPASS3, IPASS4, NUMXER
  19465.       DOUBLE PRECISION BLEM, TRD, DRD, DIF, D1MACH
  19466.       EXTERNAL D1MACH, DRD, NUMXER, XERCLR, XGETF, XSETF
  19467. C***FIRST EXECUTABLE STATEMENT  QCDRD
  19468.       CALL XERCLR
  19469.       CALL XGETF(CONTRL)
  19470.       IF ( KPRINT .GE. 3 ) THEN
  19471.          KONTRL = +1
  19472.       ELSE
  19473.          KONTRL = 0
  19474.       ENDIF
  19475.       CALL XSETF(KONTRL)
  19476. C
  19477. C  FORCE ERROR 1
  19478. C
  19479.       IF ( KPRINT .GE. 3 ) WRITE (LUN,101)
  19480.   101 FORMAT(' DRD - FORCE ERROR 1 TO OCCUR')
  19481.       TRD = DRD(-1.0D0,-1.0D0,-1.0D0,IER)
  19482.       IER = NUMXER(IER)
  19483.       IF ( IER .EQ. 1 ) THEN
  19484.          IPASS1 = 1
  19485.       ELSE
  19486.          IPASS1 = 0
  19487.       ENDIF
  19488.       CALL XERCLR
  19489. C
  19490. C  FORCE ERROR 2
  19491. C
  19492.       IF ( KPRINT .GE. 3 ) WRITE (LUN,102)
  19493.   102 FORMAT(' DRD - FORCE ERROR 2 TO OCCUR')
  19494.       TRD = DRD(1.0D0,1.0D0,-1.0D0,IER)
  19495.       IER = NUMXER(IER)
  19496.       IF ( IER .EQ. 2 ) THEN
  19497.          IPASS2 = 1
  19498.       ELSE
  19499.          IPASS2 = 0
  19500.       ENDIF
  19501.       CALL XERCLR
  19502. C
  19503. C  FORCE ERROR 3
  19504. C
  19505.       IF ( KPRINT .GE. 3 ) WRITE (LUN,103)
  19506.   103 FORMAT(' DRD - FORCE ERROR 3 TO OCCUR')
  19507.       TRD = DRD(D1MACH(2),D1MACH(2),D1MACH(2),IER)
  19508.       IER = NUMXER(IER)
  19509.       IF ( IER .EQ. 3 ) THEN
  19510.          IPASS3 = 1
  19511.       ELSE
  19512.          IPASS3 = 0
  19513.       ENDIF
  19514.       CALL XERCLR
  19515. C
  19516. C  ARGUMENTS IN RANGE
  19517. C  BLEM=3 * LEMNISCATE CONSTANT B
  19518. C
  19519.       BLEM = 1.797210352103388311159883738420D0
  19520.       TRD  = DRD(0.0D0,2.0D0,1.0D0,IER)
  19521.       CALL XERCLR
  19522.       DIF  = TRD - BLEM
  19523.       IF ( (ABS(DIF/BLEM).LT.1000.0D0*D1MACH(4)).AND.(IER.EQ.0) ) THEN
  19524.          IPASS4 = 1
  19525.       ELSE
  19526.          IPASS = 0
  19527.       ENDIF
  19528.       IPASS = MIN(IPASS1,IPASS2,IPASS3,IPASS4)
  19529.       IF ( KPRINT .LE. 0 ) THEN
  19530.          GO TO 999
  19531.       ELSEIF ( KPRINT .EQ. 1 ) THEN
  19532.          IF ( IPASS .EQ. 1 ) THEN
  19533.             GO TO 999
  19534.          ELSE
  19535.             WRITE (LUN,104)
  19536.   104       FORMAT(' DRD - FAILED')
  19537.             GO TO 999
  19538.          ENDIF
  19539.       ELSE
  19540.          IF ( IPASS .EQ. 1 ) THEN
  19541.             WRITE (LUN,105)
  19542.   105       FORMAT(' DRD - PASSED')
  19543.             GO TO 999
  19544.          ELSE
  19545.             WRITE (LUN,104)
  19546.             IF ( IPASS4 .EQ. 0 ) WRITE (LUN,106) BLEM, TRD, DIF
  19547.   106       FORMAT(' CORRECT ANSWER =', 1PD20.14 /
  19548.      *             'COMPUTED ANSWER =',   D20.14 /
  19549.      *             '     DIFFERENCE =',   D20.14 )
  19550.             GO TO 999
  19551.          ENDIF
  19552.       ENDIF
  19553.   999 CONTINUE
  19554.       CALL XSETF(CONTRL)
  19555.       RETURN
  19556.       END
  19557. *DECK QCDRF
  19558.       SUBROUTINE QCDRF (LUN, KPRINT, IPASS)
  19559. C***BEGIN PROLOGUE  QCDRF
  19560. C***PURPOSE  Quick check for DRF.
  19561. C***LIBRARY   SLATEC
  19562. C***KEYWORDS  QUICK CHECK
  19563. C***AUTHOR  Pexton, R. L., (LLNL)
  19564. C***DESCRIPTION
  19565. C
  19566. C            QUICK TEST FOR CARLSON INTEGRAL DRF
  19567. C
  19568. C***ROUTINES CALLED  D1MACH, DRF, NUMXER, XERCLR, XGETF, XSETF
  19569. C***REVISION HISTORY  (YYMMDD)
  19570. C   790801  DATE WRITTEN
  19571. C   890618  REVISION DATE from Version 3.2
  19572. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  19573. C   910708  Minor modifications in use of KPRINT.  (WRB)
  19574. C***END PROLOGUE  QCDRF
  19575.       INTEGER KPRINT, IPASS, CONTRL, KONTRL, LUN, IER
  19576.       INTEGER IPASS1, IPASS2, IPASS3, IPASS4, NUMXER
  19577.       DOUBLE PRECISION ALEM, TRF, DRF, DIF, D1MACH
  19578.       EXTERNAL D1MACH, DRF, NUMXER, XERCLR, XGETF, XSETF
  19579. C***FIRST EXECUTABLE STATEMENT  QCDRF
  19580.       CALL XERCLR
  19581.       CALL XGETF(CONTRL)
  19582.       IF ( KPRINT .GE. 3 ) THEN
  19583.          KONTRL = +1
  19584.       ELSE
  19585.          KONTRL = 0
  19586.       ENDIF
  19587.       CALL XSETF(KONTRL)
  19588. C
  19589. C  FORCE ERROR 1
  19590. C
  19591.       IF ( KPRINT .GE. 3 ) WRITE (LUN,101)
  19592.   101 FORMAT(' DRF - FORCE ERROR 1 TO OCCUR')
  19593.       TRF = DRF(-1.0D0,-1.0D0,-1.0D0,IER)
  19594.       IER = NUMXER(IER)
  19595.       IF ( IER .EQ. 1 ) THEN
  19596.          IPASS1 = 1
  19597.       ELSE
  19598.          IPASS1 = 0
  19599.       ENDIF
  19600.       CALL XERCLR
  19601. C
  19602. C  FORCE ERROR 2
  19603. C
  19604.       IF ( KPRINT .GE. 3 ) WRITE (LUN,102)
  19605.   102 FORMAT(' DRF - FORCE ERROR 2 TO OCCUR')
  19606.       TRF = DRF(D1MACH(1),D1MACH(1),D1MACH(1),IER)
  19607.       IER = NUMXER(IER)
  19608.       IF ( IER .EQ. 2 ) THEN
  19609.          IPASS2 = 1
  19610.       ELSE
  19611.          IPASS2 = 0
  19612.       ENDIF
  19613.       CALL XERCLR
  19614. C
  19615. C  FORCE ERROR 3
  19616. C
  19617.       IF ( KPRINT .GE. 3 ) WRITE (LUN,103)
  19618.   103 FORMAT(' DRF - FORCE ERROR 3 TO OCCUR')
  19619.       TRF = DRF(D1MACH(2),D1MACH(2),D1MACH(2),IER)
  19620.       IER = NUMXER(IER)
  19621.       IF ( IER .EQ. 3 ) THEN
  19622.          IPASS3 = 1
  19623.       ELSE
  19624.          IPASS3 = 0
  19625.       ENDIF
  19626.       CALL XERCLR
  19627. C
  19628. C  ARGUMENTS IN RANGE
  19629. C  ALEM=LEMNISCATE CONSTANT A
  19630. C
  19631.       ALEM = 1.3110287771460599052324197949D0
  19632.       TRF  = DRF(0.0D0,1.0D0,2.0D0,IER)
  19633.       CALL XERCLR
  19634.       DIF  = TRF - ALEM
  19635.       IF ( (ABS(DIF/ALEM).LT.1000.0D0*D1MACH(4)).AND.(IER.EQ.0) ) THEN
  19636.          IPASS4 = 1
  19637.       ELSE
  19638.          IPASS4 = 0
  19639.       ENDIF
  19640.       IPASS = MIN(IPASS1,IPASS2,IPASS3,IPASS4)
  19641.       IF ( KPRINT .EQ. 0 ) THEN
  19642.          GO TO 999
  19643.       ELSEIF ( KPRINT .EQ. 1 ) THEN
  19644.          IF ( IPASS .EQ. 1 ) THEN
  19645.             GO TO 999
  19646.          ELSE
  19647.             WRITE (LUN,104)
  19648.   104       FORMAT(' DRF - FAILED')
  19649.             GO TO 999
  19650.          ENDIF
  19651.       ELSE
  19652.          IF ( IPASS .EQ. 1 ) THEN
  19653.             WRITE (LUN,105)
  19654.   105       FORMAT(' DRF - PASSED')
  19655.             GO TO 999
  19656.          ELSE
  19657.             WRITE (LUN,104)
  19658.             IF ( IPASS4 .EQ. 0 ) WRITE (LUN,106) ALEM, TRF, DIF
  19659.   106       FORMAT(' CORRECT ANSWER =', 1PD20.14 /
  19660.      *             'COMPUTED ANSWER =',   D20.14 /
  19661.      *             '     DIFFERENCE =',   D20.14 )
  19662.             GO TO 999
  19663.          ENDIF
  19664.       ENDIF
  19665.   999 CONTINUE
  19666.       CALL XSETF(CONTRL)
  19667.       RETURN
  19668.       END
  19669. *DECK QCDRJ
  19670.       SUBROUTINE QCDRJ (LUN, KPRINT, IPASS)
  19671. C***BEGIN PROLOGUE  QCDRJ
  19672. C***PURPOSE  Quick check for DRJ.
  19673. C***LIBRARY   SLATEC
  19674. C***KEYWORDS  QUICK CHECK
  19675. C***AUTHOR  Pexton, R. L., (LLNL)
  19676. C***DESCRIPTION
  19677. C
  19678. C            QUICK TEST FOR CARLSON INTEGRAL DRJ
  19679. C
  19680. C***ROUTINES CALLED  D1MACH, DRJ, NUMXER, XERCLR, XGETF, XSETF
  19681. C***REVISION HISTORY  (YYMMDD)
  19682. C   790801  DATE WRITTEN
  19683. C   890618  REVISION DATE from Version 3.2
  19684. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  19685. C   910708  Minor modifications in use of KPRINT.  (WRB)
  19686. C***END PROLOGUE  QCDRJ
  19687.       INTEGER KPRINT, IPASS, CONTRL, KONTRL, LUN, IER
  19688.       INTEGER IPASS1, IPASS2, IPASS3, IPASS4, NUMXER
  19689.       DOUBLE PRECISION CONSJ, TRJ, DRJ, DIF, D1MACH
  19690.       EXTERNAL D1MACH, DRJ, NUMXER, XERCLR, XGETF, XSETF
  19691. C***FIRST EXECUTABLE STATEMENT  QCDRJ
  19692.       CALL XERCLR
  19693.       CALL XGETF(CONTRL)
  19694.       IF ( KPRINT .GE. 3 ) THEN
  19695.          KONTRL = +1
  19696.       ELSE
  19697.          KONTRL = 0
  19698.       ENDIF
  19699.       CALL XSETF(KONTRL)
  19700. C
  19701. C  FORCE ERROR 1
  19702. C
  19703.       IF ( KPRINT .GE. 3 ) WRITE (LUN,101)
  19704.   101 FORMAT(' DRJ - FORCE ERROR 1 TO OCCUR')
  19705.       TRJ = DRJ(-1.0D0,-1.0D0,-1.0D0,-1.0D0,IER)
  19706.       IER = NUMXER(IER)
  19707.       IF ( IER .EQ. 1 ) THEN
  19708.          IPASS1 = 1
  19709.       ELSE
  19710.          IPASS1 = 0
  19711.       ENDIF
  19712.       CALL XERCLR
  19713. C
  19714. C  FORCE ERROR 2
  19715. C
  19716.       IF ( KPRINT .GE. 3 ) WRITE (LUN,102)
  19717.   102 FORMAT(' DRJ - FORCE ERROR 2 TO OCCUR')
  19718.       TRJ = DRJ(D1MACH(1),D1MACH(1),D1MACH(1),D1MACH(1),IER)
  19719.       IER = NUMXER(IER)
  19720.       IF ( IER .EQ. 2 ) THEN
  19721.          IPASS2 = 1
  19722.       ELSE
  19723.          IPASS2 = 0
  19724.       ENDIF
  19725.       CALL XERCLR
  19726. C
  19727. C  FORCE ERROR 3
  19728. C
  19729.       IF ( KPRINT .GE. 3 ) WRITE (LUN,103)
  19730.   103 FORMAT(' DRJ - FORCE ERROR 3 TO OCCUR')
  19731.       TRJ = DRJ(D1MACH(2),D1MACH(2),D1MACH(2),D1MACH(2),IER)
  19732.       IER = NUMXER(IER)
  19733.       IF ( IER .EQ. 3 ) THEN
  19734.          IPASS3 = 1
  19735.       ELSE
  19736.          IPASS3 = 0
  19737.       ENDIF
  19738.       CALL XERCLR
  19739. C
  19740. C  ARGUMENTS IN RANGE
  19741. C
  19742.       CONSJ = 0.14297579667156753833233879421D0
  19743.       TRJ   = DRJ(2.0D0,3.0D0,4.0D0,5.0D0,IER)
  19744.       CALL XERCLR
  19745.       DIF   = TRJ - CONSJ
  19746.       IF ( (ABS(DIF/CONSJ).LT.1000.0D0*D1MACH(4)).AND.(IER.EQ.0) ) THEN
  19747.          IPASS4 = 1
  19748.       ELSE
  19749.          IPASS4 = 0
  19750.       ENDIF
  19751.       IPASS = MIN(IPASS1,IPASS2,IPASS3,IPASS4)
  19752.       IF (KPRINT .LE. 0 ) THEN
  19753.          GO TO 999
  19754.       ELSEIF ( KPRINT .EQ. 1 ) THEN
  19755.          IF ( IPASS .EQ. 1 ) THEN
  19756.             GO TO 999
  19757.          ELSE
  19758.             WRITE (LUN,104)
  19759.   104       FORMAT(' DRJ - FAILED')
  19760.             GO TO 999
  19761.          ENDIF
  19762.       ELSE
  19763.          IF ( IPASS .EQ. 1 ) THEN
  19764.             WRITE (LUN,105)
  19765.   105       FORMAT(' DRJ - PASSED')
  19766.             GO TO 999
  19767.          ELSE
  19768.             WRITE (LUN,104)
  19769.             IF ( IPASS4 .EQ. 0 ) WRITE (LUN,106) CONSJ, TRJ, DIF
  19770.   106       FORMAT(' CORRECT ANSWER =', 1PD20.14 /
  19771.      *             'COMPUTED ANSWER =',   D20.14 /
  19772.      *             '     DIFFERENCE =',   D20.14 )
  19773.             GO TO 999
  19774.          ENDIF
  19775.       ENDIF
  19776.   999 CONTINUE
  19777.       CALL XSETF(CONTRL)
  19778.       RETURN
  19779.       END
  19780. *DECK QCGLSS
  19781.       SUBROUTINE QCGLSS (LUN, KPRINT, IPASS)
  19782. C***BEGIN PROLOGUE  QCGLSS
  19783. C***PURPOSE  Quick check for SGLSS.
  19784. C***LIBRARY   SLATEC
  19785. C***TYPE      SINGLE PRECISION (QCGLSS-S, DQCGLS-D)
  19786. C***AUTHOR  Voorhees, E. A., (LANL)
  19787. C***DESCRIPTION
  19788. C
  19789. C      QUICK CHECK SUBROUTINE  QCGLSS  TESTS THE EXECUTION
  19790. C      OF THE GENERAL LINEAR SYSTEM SOLVER, SGLSS .  THE
  19791. C      SGLSS  SUBROUTINE PACKAGE WAS WRITTEN BY T. MANTEUFFEL
  19792. C      (LANL).
  19793. C
  19794. C      A TITLE LINE AND A SUMMARY LINE ARE ALWAYS OUTPUTTED
  19795. C      BY QCGLSS.  THE SUMMARY LINE GIVES A COUNT OF THE
  19796. C      NUMBER OF PROBLEMS DETECTED DURING THE TEST.
  19797. C
  19798. C      THE REAL QUANTITIES FOR THE COMPUTED SOLUTION VECTOR
  19799. C      X  AND THE CORRESPONDING  RNORM  ARE COMPARED AGAINST
  19800. C      STORED VALUES.  DISAGREEMENT OCCURS IF A DIFFERENCE
  19801. C      IS SQRT(R1MACH(4) OR MORE.  THE RETURNED VALUE (INTEGER)
  19802. C      OF  INFO  IS ALSO CHECKED.  FOUR CASES ARE RUN, TWO
  19803. C      INVOLVING  LLSIA  AND TWO INVOLVING  ULSIA .
  19804. C
  19805. C      QCGLSS REQUIRES NO INPUT ARGUMENTS.  ON RETURN, NERR
  19806. C      (INTEGER TYPE) CONTAINS THE COUNT OF THE NUMBER OF
  19807. C      PROBLEMS DETECTED BY  QCGLSS .
  19808. C
  19809. C***ROUTINES CALLED  R1MACH, SGLSS
  19810. C***REVISION HISTORY  (YYMMDD)
  19811. C   811026  DATE WRITTEN
  19812. C   820801  REVISION DATE from Version 3.2
  19813. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  19814. C   901010  Restructured using IF-THEN-ELSE-ENDIF, cleaned up FORMATs,
  19815. C           including removing an illegal character from column 1, and
  19816. C           editorial changes.  (RWC)
  19817. C***END PROLOGUE  QCGLSS
  19818.       REAL AA(4,4,2),A(4,4),BB(4,2),B(4),XX(4,4),DELMAX,DELX,R
  19819.       REAL WORK(20)
  19820.       CHARACTER*1 LIST(2)
  19821.       INTEGER INF(4),NERR,KPROG,KCASE
  19822.       INTEGER IWORK(7),INFO,LUN
  19823.       DATA AA/1.,.5,1.,.25,0.,2.,0.,1.,2.,-1.,1.,0.,0.,0.,0.,0.,
  19824.      1 1.,2.,-1.,0.,0.,1.,2.,0.,-1.,0.,1.,0.,1.,0.,1.,0./
  19825.       DATA BB/3.,1.5,2.,1.25,1.,3.,3.,0./
  19826.       DATA XX/.9999999999999787,1.000000000000007,1.000000000000007,
  19827.      1 0.,.8095238095238102,1.047619047619044,1.095238095238081,0.,
  19828.      1 .7777777777777857,1.444444444444429,.3333333333333393,
  19829.      1 .5555555555555500,
  19830.      1 .3333333333333321,0.0,-.3333333333333286,.3333333333333286/
  19831.       DATA INF/0,1,0,2/
  19832.       DATA LIST/'L','U'/
  19833. C***FIRST EXECUTABLE STATEMENT  QCGLSS
  19834.       INFO = 0
  19835.       NERR = 0
  19836.       R = SQRT(R1MACH(4))
  19837.       IF (KPRINT.GE.2) WRITE (LUN,800)
  19838.       DO 60 KPROG=1,2
  19839.          DO 50 KCASE=1,2
  19840. C
  19841. C           FORM BASIC MATRIX  A  AND VECTOR  B .  (CASE 1)
  19842. C
  19843.             DO 10  I=1,4
  19844.                DO 5  J=1,4
  19845.                   A(I,J) = AA(I,J,KPROG)
  19846.     5          CONTINUE
  19847.                B(I) = BB(I,KPROG)
  19848.    10       CONTINUE
  19849. C
  19850. C           MAKE 3 ROWS IDENTICAL FOR CASE 2.
  19851. C
  19852.             IF (KCASE .NE. 1) THEN
  19853.                DO 20  I=2,3
  19854.                   DO 15  J=1,4
  19855.                      A(I,J) = A(1,J)
  19856.    15             CONTINUE
  19857.                   B(I) = B(1)
  19858.    20          CONTINUE
  19859.             ENDIF
  19860. C
  19861. C           SOLVE FOR VECTOR  X .
  19862. C
  19863.             INFO = 0
  19864.             IF (KPROG .EQ. 1) CALL SGLSS(A,4,4,3,B,4,1,RNORM,WORK,20,
  19865.      1         IWORK,7,INFO)
  19866.             IF (KPROG .EQ. 2) CALL SGLSS(A,4,3,4,B,4,1,RNORM,WORK,20,
  19867.      1         IWORK,7,INFO)
  19868. C
  19869. C           TEST COMPUTED  X , RNORM , AND  INFO .
  19870. C
  19871.             KK = 2*(KPROG - 1) + KCASE
  19872.             DELMAX = 0.0E0
  19873.             DO 30  I=1,4
  19874.                DELX = ABS(B(I)-XX(I,KK))
  19875.                DELMAX = MAX(DELMAX,DELX)
  19876.    30       CONTINUE
  19877. C
  19878.             IF (KPRINT.GE.3) WRITE (LUN,701) LIST(KPROG),KCASE,DELMAX
  19879.             IF (DELMAX .GE. R) THEN
  19880.                NERR = NERR + 1
  19881.                IF (KPRINT.GE.2) WRITE (LUN,801) LIST(KPROG),KCASE,DELMAX
  19882.             ENDIF
  19883.             IF (KPRINT.GE.3) WRITE (LUN,702) LIST(KPROG),KCASE,RNORM
  19884.             IF (RNORM .GT. R) THEN
  19885.                NERR = NERR + 1
  19886.                IF (KPRINT.GE.2) WRITE (LUN,802) LIST(KPROG),KCASE,RNORM
  19887.             ENDIF
  19888. C
  19889.             IF (KPRINT.GE.3) WRITE (LUN,703) LIST(KPROG),KCASE,INFO,
  19890.      *         INF(KK)
  19891.             IF (INFO .NE. INF(KK)) THEN
  19892.                NERR = NERR + 1
  19893.                IF (KPRINT.GE.2) WRITE (LUN,803) LIST(KPROG),KCASE,INFO,
  19894.      *            INF(KK)
  19895.             ENDIF
  19896.    50    CONTINUE
  19897.    60 CONTINUE
  19898. C
  19899. C     SUMMARY PRINT
  19900. C
  19901.       IPASS=0
  19902.       IF (NERR.EQ.0) IPASS=1
  19903.       IF (NERR.NE.0 .AND. KPRINT.NE.0) WRITE (LUN,804) NERR
  19904.       IF (NERR.EQ.0 .AND. KPRINT.GT.1) WRITE (LUN,805)
  19905.       RETURN
  19906. C
  19907.   701 FORMAT (3X, A, 'LSIA, CASE ', I1, '.  MAX ABS ERROR OF', E11.4/)
  19908.   702 FORMAT (3X, A, 'LSIA, CASE ', I1, '.  RNORM IS ', E11.4/)
  19909.   703 FORMAT (3X, A, 'LSIA, CASE ', I1, '.  INFO=', I1,
  19910.      1   ' (SHOULD = ', I1, ')'/)
  19911.   800 FORMAT(/' *    QCGLSS - QUICK CHECK FOR SGLSS (LLSIA AND ULSIA)'/)
  19912.   801 FORMAT ('   PROBLEM WITH ', A, 'LSIA, CASE ', I1,
  19913.      1   '.  MAX ABS ERROR OF', E11.4/)
  19914.   802 FORMAT ('   PROBLEM WITH ', A, 'LSIA, CASE ', I1,
  19915.      1   '.  RNORM (TOO LARGE) IS', E11.4/)
  19916.   803 FORMAT ('   PROBLEM WITH ', A, 'LSIA, CASE ', I1,
  19917.      1   '.  INFO=', I1, ' (SHOULD = ', I1, ')'/)
  19918.   804 FORMAT (/' **** QCGLSS DETECTED A TOTAL OF ', I2,
  19919.      1   ' PROBLEMS WITH SGLSS. ****'/)
  19920.   805 FORMAT ('     QCGLSS DETECTED NO PROBLEMS WITH SGLSS.'/)
  19921.       END
  19922. *DECK QCKIN
  19923.       SUBROUTINE QCKIN (LUN, KPRINT, IPASS)
  19924. C***BEGIN PROLOGUE  QCKIN
  19925. C***PURPOSE  Quick check for BSKIN.
  19926. C***LIBRARY   SLATEC
  19927. C***KEYWORDS  QUICK CHECK
  19928. C***AUTHOR  Amos, D. E., (SNLA)
  19929. C***DESCRIPTION
  19930. C
  19931. C     ABSTRACT
  19932. C     QCKIN IS A QUICK CHECK ROUTINE WHICH EXERCISES THE MAJOR
  19933. C     LOOPS IN SUBROUTINE BSKIN (X,N,KODE,M,Y,NZ,IERR) FOR BICKLEY
  19934. C     FUNCTIONS KI(J,X).  MORE PRECISELY, QCKIN DOES CONSISTENCY CHECKS
  19935. C     ON THE OUTPUT FROM BSKIN BY COMPARING SINGLE EVALUATIONS (M=1)
  19936. C     AGAINST SELECTED MEMBERS OF SEQUENCES WHICH ARE GENERATED BY
  19937. C     RECURSION.  IF THE RELATIVE ERROR IS LESS THAN 1000 TIMES UNIT
  19938. C     ROUND OFF, THEN THE TEST IS PASSED - IF NOT, THEN X, THE VALUES
  19939. C     TO BE COMPARED, THE RELATIVE ERROR AND PARAMETERS KODE, N, M AND K
  19940. C     ARE WRITTEN ON LOGICAL UNIT 6 WHERE K IS THE MEMBER OF THE
  19941. C     SEQUENCE OF LENGTH M WHICH FAILED THE TEST.  THAT IS, THE INDEX
  19942. C     OF THE FUNCTION WHICH FAILED THE TEST IS J=N+K-1.  UNDERFLOW
  19943. C     TESTS ARE MADE AND ERROR CONDITIONS ARE TRIGGERED.
  19944. C
  19945. C     FUNCTIONS I1MACH AND R1MACH MUST BE INITIALIZED ACCORDING TO THE
  19946. C     PROLOGUE IN EACH FUNCTION FOR THE MACHINE ENVIRONMENT BEFORE
  19947. C     QCKIN OR BSKIN CAN BE EXECUTED.  FIFTEEN MACHINE ENVIRONMENTS
  19948. C     CAN BE DEFINED IN I1MACH AND R1MACH.
  19949. C
  19950. C***ROUTINES CALLED  BSKIN, I1MACH, R1MACH
  19951. C***REVISION HISTORY  (YYMMDD)
  19952. C   820601  DATE WRITTEN
  19953. C   890911  Removed unnecessary intrinsics.  (WRB)
  19954. C   890911  REVISION DATE from Version 3.2
  19955. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  19956. C***END PROLOGUE  QCKIN
  19957.       INTEGER I, IERR, IFLG, IX, I1M12, J, K, KODE, LUN, M, MDEL, MM,
  19958.      * N, NDEL, NN, NZ
  19959.       INTEGER I1MACH
  19960.       REAL AIX, ER, TOL, V, X, XINC, Y
  19961.       REAL R1MACH
  19962.       DIMENSION V(1), Y(10)
  19963. C***FIRST EXECUTABLE STATEMENT  QCKIN
  19964.       TOL = 1000.0E0*MAX(R1MACH(4),1.0E-18)
  19965.       IFLG = 0
  19966.       IF(KPRINT.GE.3)WRITE (LUN,99999)
  19967. 99999 FORMAT (1H1//34H QUICK CHECK DIAGNOSTICS FOR BSKIN//)
  19968.       DO 70 KODE=1,2
  19969.         N = 0
  19970.         DO 60 NN=1,7
  19971.           M = 1
  19972.           DO 50 MM=1,4
  19973.             X = 0.0E0
  19974.             DO 40 IX=1,6
  19975.               IF (N.EQ.0 .AND. IX.EQ.1) GO TO 30
  19976.               CALL BSKIN(X, N, KODE, M, Y, NZ, IERR)
  19977.               DO 20 K=1,M,2
  19978.                 J = N + K - 1
  19979.                 CALL BSKIN(X, J, KODE, 1, V, NZ, IERR)
  19980.                 ER = ABS((V(1)-Y(K))/V(1))
  19981.                 IF (ER.LE.TOL) GO TO 20
  19982.                 IF (IFLG.NE.0) GO TO 10
  19983.                 IF(KPRINT.GE.2)WRITE (LUN,99998)
  19984. 99998           FORMAT (8X, 1HX, 13X, 4HV(1), 11X, 4HY(K), 9X, 6HREL ER,
  19985.      *           1HR, 5X, 4HKODE, 3X, 1HN, 4X, 1HM, 4X, 1HK)
  19986.    10           CONTINUE
  19987.                 IFLG = IFLG + 1
  19988.                 IF(KPRINT.GE.2)
  19989.      *          WRITE (LUN,99997) X, V(1), Y(K), ER, KODE, N, M, K
  19990. 99997           FORMAT (4E15.6, 4I5)
  19991.                 IF (IFLG.GT.200) GO TO 130
  19992.    20         CONTINUE
  19993.    30         CONTINUE
  19994.               AIX = 2*IX-3
  19995.               XINC = MAX(1.0E0,AIX)
  19996.               X = X + XINC
  19997.    40       CONTINUE
  19998.             MDEL = MAX(1,MM-1)
  19999.             M = M + MDEL
  20000.    50     CONTINUE
  20001.           NDEL = MAX(1,2*N-2)
  20002.           N = N + NDEL
  20003.    60   CONTINUE
  20004.    70 CONTINUE
  20005. C-----------------------------------------------------------------------
  20006. C     TEST UNDERFLOW
  20007. C-----------------------------------------------------------------------
  20008.       KODE = 1
  20009.       M = 10
  20010.       N = 10
  20011.       I1M12 = I1MACH(12)
  20012.       X = -2.302E0*R1MACH(5)*I1M12
  20013.       CALL BSKIN(X, N, KODE, M, Y, NZ, IERR)
  20014.       IF (NZ.EQ.M) GO TO 80
  20015.       IF(KPRINT.GE.2)WRITE (LUN,99996)
  20016. 99996 FORMAT (//30H NZ IN UNDERFLOW TEST IS NOT 1//)
  20017.       IFLG = IFLG + 1
  20018.       GO TO 110
  20019.    80 CONTINUE
  20020.       DO 90 I=1,M
  20021.         IF (Y(I).NE.0.0E0) GO TO 100
  20022.    90 CONTINUE
  20023.       GO TO 110
  20024.   100 CONTINUE
  20025.       IFLG = IFLG + 1
  20026.       IF(KPRINT.GE.2)WRITE (LUN,99995)
  20027. 99995 FORMAT (//43H SOME Y VALUE IN UNDERFLOW TEST IS NOT ZERO//)
  20028.   110 CONTINUE
  20029.       IF (IFLG.NE.0.OR.KPRINT.LT.3) GO TO 120
  20030.       WRITE (LUN,99994)
  20031. 99994 FORMAT (//16H QUICK CHECKS OK//)
  20032.   120 CONTINUE
  20033.       IPASS=0
  20034.       IF(IFLG.EQ.0) IPASS=1
  20035.       RETURN
  20036.   130 CONTINUE
  20037.       IF(KPRINT.GE.2)WRITE (LUN,99992)
  20038. 99992 FORMAT (//52H PROCESSING OF MAIN LOOPS TERMINATED BECAUSE THE NUM,
  20039.      * 36HBER OF DIAGNOSTIC PRINTS EXCEEDS 200//)
  20040.       IPASS=0
  20041.       IF(IFLG.EQ.0) IPASS=1
  20042.       RETURN
  20043.       END
  20044. *DECK QCPSI
  20045.       SUBROUTINE QCPSI (LUN, KPRINT, IPASS)
  20046. C***BEGIN PROLOGUE  QCPSI
  20047. C***PURPOSE  Quick check for PSIFN.
  20048. C***LIBRARY   SLATEC
  20049. C***KEYWORDS  QUICK CHECK
  20050. C***AUTHOR  Amos, D. E., (SNLA)
  20051. C***DESCRIPTION
  20052. C
  20053. C     ABSTRACT
  20054. C     QCPSI IS A QUICK CHECK ROUTINE WHICH EXERCISES THE MAJOR
  20055. C     LOOPS IN SUBROUTINE PSIFN(X,N,KODE,M,ANS,NZ,IERR) FOR DERIVATIVES
  20056. C     OF THE PSI FUNCTION.  FOR N=0, THE PSI FUNCTIONS ARE CALCULATED
  20057. C     EXPLICITLY AND CHECKED AGAINST EVALUATIONS FROM PSIFN. FOR
  20058. C     N.GT.0, CONSISTENCY CHECKS ARE MADE BY COMPARING A SEQUENCE
  20059. C     AGAINST SINGLE EVALUATIONS OF PSIFN, ONE AT A TIME.
  20060. C     IF THE RELATIVE ERROR IS LESS THAN 1000 TIMES UNIT ROUNDOFF,
  20061. C     THEN THE TEST IS PASSED--IF NOT,
  20062. C     THEN X, THE VALUES TO BE COMPARED, THE RELATIVE ERROR AND
  20063. C     PARAMETERS KODE AND N ARE WRITTEN ON LOGICAL UNIT 6 WHERE N IS
  20064. C     THE ORDER OF THE DERIVATIVE AND KODE IS A SELECTION PARAMETER
  20065. C     DEFINED IN THE PROLOGUE TO PSIFN.
  20066. C
  20067. C     FUNCTIONS I1MACH AND R1MACH MUST BE INITIALIZED ACCORDING TO THE
  20068. C     PROLOGUE IN EACH FUNCTION FOR THE MACHINE ENVIRONMENT BEFORE
  20069. C     QCPSI OR PSIFN CAN BE EXECUTED.
  20070. C
  20071. C***ROUTINES CALLED  PSIFN, R1MACH
  20072. C***REVISION HISTORY  (YYMMDD)
  20073. C   820601  DATE WRITTEN
  20074. C   890911  Removed unnecessary intrinsics.  (WRB)
  20075. C   890911  REVISION DATE from Version 3.2
  20076. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  20077. C***END PROLOGUE  QCPSI
  20078.       INTEGER I, IERR, IFLG, IX, KODE, LUN, M, N, NM, NN, NZ
  20079.       REAL ER, EULER, PSI1, PSI2, R1M4, S, TOL, X
  20080.       REAL R1MACH
  20081.       DIMENSION PSI1(3), PSI2(20)
  20082.       DATA EULER /0.5772156649015328606E0/
  20083. C***FIRST EXECUTABLE STATEMENT  QCPSI
  20084.       R1M4 = R1MACH(4)
  20085.       TOL = 1000.0E0*MAX(R1M4,1.0E-18)
  20086.       IF(KPRINT.GE.3)WRITE (LUN,99999)
  20087. 99999 FORMAT (1H1//34H QUICK CHECK DIAGNOSTICS FOR PSIFN//)
  20088. C-----------------------------------------------------------------------
  20089. C     CHECK PSI(I) AND PSI(I-0.5), I=1,2,...
  20090. C-----------------------------------------------------------------------
  20091.       IFLG = 0
  20092.       N = 0
  20093.       DO 50 KODE=1,2
  20094.         DO 40 M=1,2
  20095.           S = -EULER + (M-1)*(-2.0E0*LOG(2.0E0))
  20096.           X = 1.0E0 - (M-1)*0.5E0
  20097.           DO 30 I=1,20
  20098.             CALL PSIFN(X, N, KODE, 1, PSI2, NZ, IERR)
  20099.             PSI1(1) = -S + (KODE-1)*LOG(X)
  20100.             ER = ABS((PSI1(1)-PSI2(1))/PSI1(1))
  20101.             IF (ER.LE.TOL) GO TO 20
  20102.             IF (IFLG.NE.0) GO TO 10
  20103.             IF(KPRINT.GE.2)WRITE (LUN,99998)
  20104. 99998       FORMAT (8X, 1HX, 13X, 4HPSI1, 11X, 4HPSI2, 9X, 7HREL ERR,
  20105.      *       5X, 4HKODE, 3X, 1HN)
  20106.    10       CONTINUE
  20107.             IFLG = IFLG + 1
  20108.             IF(KPRINT.GE.2)
  20109.      *      WRITE (LUN,99997) X, PSI1(1), PSI2(I), ER, KODE, N
  20110. 99997       FORMAT (4E15.6, 2I5)
  20111.             IF (IFLG.GT.200) GO TO 150
  20112.    20       CONTINUE
  20113.             S = S + 1.0E0/X
  20114.             X = X + 1.0E0
  20115.    30     CONTINUE
  20116.    40   CONTINUE
  20117.    50 CONTINUE
  20118. C-----------------------------------------------------------------------
  20119. C     CHECK SMALL X.LT.UNIT ROUNDOFF
  20120. C-----------------------------------------------------------------------
  20121.       KODE = 1
  20122.       X = TOL/10000.0E0
  20123.       N = 1
  20124.       CALL PSIFN(X, N, KODE, 1, PSI2, NZ, IERR)
  20125.       PSI1(1) = X**(-N-1)
  20126.       ER = ABS((PSI1(1)-PSI2(1))/PSI1(1))
  20127.       IF (ER.LE.TOL) GO TO 70
  20128.       IF (IFLG.NE.0) GO TO 60
  20129.       IF(KPRINT.GE.2)WRITE (LUN,99998)
  20130.    60 CONTINUE
  20131.       IFLG = IFLG + 1
  20132.       IF(KPRINT.GE.2)
  20133.      * WRITE (LUN,99997) X, PSI1(1), PSI2(1), ER, KODE, N
  20134.    70 CONTINUE
  20135. C-----------------------------------------------------------------------
  20136. C     CONSISTENCY TESTS FOR N.GE.0
  20137. C-----------------------------------------------------------------------
  20138.       DO 130 KODE=1,2
  20139.         DO 120 M=1,5
  20140.           DO 110 N=1,16,5
  20141.             NN = N - 1
  20142.             X = 0.1E0
  20143.             DO 100 IX=1,25,2
  20144.               X = X + 1.0E0
  20145.               CALL PSIFN(X, NN, KODE, M, PSI2, NZ, IERR)
  20146.               DO 90 I=1,M
  20147.                 NM = NN + I - 1
  20148.                 CALL PSIFN(X, NM, KODE, 1, PSI1, NZ, IERR)
  20149.                 ER = ABS((PSI2(I)-PSI1(1))/PSI1(1))
  20150.                 IF (ER.LT.TOL) GO TO 90
  20151.                 IF (IFLG.NE.0) GO TO 80
  20152.                 IF(KPRINT.GE.2)WRITE (LUN,99998)
  20153.    80           CONTINUE
  20154.                 IFLG = IFLG + 1
  20155.                 IF(KPRINT.GE.2)
  20156.      *          WRITE (LUN,99997) X, PSI1(1), PSI2(I), ER, KODE, NM
  20157.    90         CONTINUE
  20158.   100       CONTINUE
  20159.   110     CONTINUE
  20160.   120   CONTINUE
  20161.   130 CONTINUE
  20162.       IF (IFLG.NE.0.OR.KPRINT.LT.3) GO TO 140
  20163.       WRITE (LUN,99996)
  20164. 99996 FORMAT (//16H QUICK CHECKS OK//)
  20165.   140 CONTINUE
  20166.       IPASS=0
  20167.       IF(IFLG.EQ.0)IPASS=1
  20168.       RETURN
  20169.   150 CONTINUE
  20170.       IF(KPRINT.GE.2)WRITE (LUN,99994)
  20171. 99994 FORMAT (//52H PROCESSING OF MAIN LOOPS TERMINATED BECAUSE THE NUM,
  20172.      * 36HBER OF DIAGNOSTIC PRINTS EXCEEDS 200//)
  20173.       IPASS=0
  20174.       IF(IFLG.EQ.0)IPASS=1
  20175.       RETURN
  20176.       END
  20177. *DECK QCRC
  20178.       SUBROUTINE QCRC (LUN, KPRINT, IPASS)
  20179. C***BEGIN PROLOGUE  QCRC
  20180. C***PURPOSE  Quick check for RC.
  20181. C***LIBRARY   SLATEC
  20182. C***KEYWORDS  QUICK CHECK
  20183. C***AUTHOR  Pexton, R. L., (LLNL)
  20184. C***DESCRIPTION
  20185. C
  20186. C            QUICK TEST FOR CARLSON INTEGRAL RC
  20187. C
  20188. C***ROUTINES CALLED  NUMXER, R1MACH, RC, XERCLR, XGETF, XSETF
  20189. C***REVISION HISTORY  (YYMMDD)
  20190. C   790801  DATE WRITTEN
  20191. C   890618  REVISION DATE from Version 3.2
  20192. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  20193. C   910708  Minor modifications in use of KPRINT.  (WRB)
  20194. C***END PROLOGUE  QCRC
  20195.       INTEGER KPRINT, IPASS, CONTRL, KONTRL, LUN, IER
  20196.       INTEGER IPASS1, IPASS2, IPASS3, IPASS4, NUMXER
  20197.       REAL PI, TRC, RC, DIF, R1MACH
  20198.       EXTERNAL NUMXER, R1MACH, RC, XERCLR, XGETF, XSETF
  20199. C***FIRST EXECUTABLE STATEMENT  QCRC
  20200.       CALL XERCLR
  20201.       CALL XGETF(CONTRL)
  20202.       IF ( KPRINT .GE. 3 ) THEN
  20203.          KONTRL = +1
  20204.       ELSE
  20205.          KONTRL = 0
  20206.       ENDIF
  20207.       CALL XSETF(KONTRL)
  20208. C
  20209. C  FORCE ERROR 1
  20210. C
  20211.       IF ( KPRINT .GE. 3 ) WRITE (LUN,101)
  20212.   101 FORMAT(' RC - FORCE ERROR 1 TO OCCUR')
  20213.       TRC = RC(-1.0E0,-1.0E0,IER)
  20214.       IER = NUMXER(IER)
  20215.       IF ( IER .EQ. 1 ) THEN
  20216.          IPASS1 = 1
  20217.       ELSE
  20218.          IPASS1 = 0
  20219.       ENDIF
  20220.       CALL XERCLR
  20221. C
  20222. C  FORCE ERROR 2
  20223. C
  20224.       IF ( KPRINT .GE. 3 ) WRITE (LUN,102)
  20225.   102 FORMAT(' RC - FORCE ERROR 2 TO OCCUR')
  20226.       TRC = RC(R1MACH(1),R1MACH(1),IER)
  20227.       IER = NUMXER(IER)
  20228.       IF ( IER .EQ. 2 ) THEN
  20229.          IPASS2 = 1
  20230.       ELSE
  20231.          IPASS2 = 0
  20232.       ENDIF
  20233.       CALL XERCLR
  20234. C
  20235. C  FORCE ERROR 3
  20236. C
  20237.       IF ( KPRINT .GE. 3 ) WRITE (LUN,103)
  20238.   103 FORMAT(' RC - FORCE ERROR 3 TO OCCUR')
  20239.       TRC = RC(R1MACH(2),R1MACH(2),IER)
  20240.       IER = NUMXER(IER)
  20241.       IF ( IER .EQ. 3 ) THEN
  20242.          IPASS3 = 1
  20243.       ELSE
  20244.          IPASS3 = 0
  20245.       ENDIF
  20246.       CALL XERCLR
  20247. C
  20248. C  ARGUMENTS IN RANGE
  20249. C
  20250.       PI  = 3.1415926535897932E0
  20251.       TRC = RC(0.0E0,0.25E0,IER)
  20252.       CALL XERCLR
  20253.       DIF = TRC - PI
  20254.       IF ( (ABS(DIF/PI).LT.1000.0E0*R1MACH(4)) .AND. (IER.EQ.0) ) THEN
  20255.          IPASS4 = 1
  20256.       ELSE
  20257.          IPASS4 = 0
  20258.       ENDIF
  20259.       IPASS = MIN(IPASS1,IPASS2,IPASS3,IPASS4)
  20260.       IF ( KPRINT .LE. 0 ) THEN
  20261.          GO TO 999
  20262.       ELSEIF ( KPRINT .EQ. 1 ) THEN
  20263.          IF ( IPASS .EQ. 1 ) THEN
  20264.             GO TO 999
  20265.          ELSE
  20266.             WRITE (LUN,104)
  20267.   104       FORMAT(' RC - FAILED')
  20268.             GO TO 999
  20269.          ENDIF
  20270.       ELSE
  20271.          IF ( IPASS .EQ. 1 ) THEN
  20272.             WRITE (LUN,105)
  20273.   105       FORMAT(' RC - PASSED')
  20274.             GO TO 999
  20275.          ELSE
  20276.             WRITE (LUN,104)
  20277.             IF ( IPASS4 .EQ. 0 ) WRITE (LUN,106) PI, TRC, DIF
  20278.   106       FORMAT(' CORRECT ANSWER =', 1PE14.6 /
  20279.      *             'COMPUTED ANSWER =',   E14.6 /
  20280.      *             '     DIFFERENCE =',   E14.6 )
  20281.             GO TO 999
  20282.          ENDIF
  20283.       ENDIF
  20284.   999 CONTINUE
  20285.       CALL XSETF(CONTRL)
  20286.       RETURN
  20287.       END
  20288. *DECK QCRD
  20289.       SUBROUTINE QCRD (LUN, KPRINT, IPASS)
  20290. C***BEGIN PROLOGUE  QCRD
  20291. C***PURPOSE  Quick check for RD.
  20292. C***LIBRARY   SLATEC
  20293. C***KEYWORDS  QUICK CHECK
  20294. C***AUTHOR  Pexton, R. L., (LLNL)
  20295. C***DESCRIPTION
  20296. C
  20297. C            QUICK TEST FOR CARLSON INTEGRAL RD
  20298. C
  20299. C***ROUTINES CALLED  NUMXER, R1MACH, RD, XERCLR, XGETF, XSETF
  20300. C***REVISION HISTORY  (YYMMDD)
  20301. C   790801  DATE WRITTEN
  20302. C   890618  REVISION DATE from Version 3.2
  20303. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  20304. C   910708  Minor modifications in use of KPRINT.  (WRB)
  20305. C***END PROLOGUE  QCRD
  20306.       INTEGER KPRINT, IPASS, CONTRL, KONTRL, LUN, IER
  20307.       INTEGER IPASS1, IPASS2, IPASS3, IPASS4, NUMXER
  20308.       REAL BLEM, TRD, RD, DIF, R1MACH
  20309.       EXTERNAL NUMXER, R1MACH, RD, XERCLR, XGETF, XSETF
  20310. C***FIRST EXECUTABLE STATEMENT  QCRD
  20311.       CALL XERCLR
  20312.       CALL XGETF(CONTRL)
  20313.       IF ( KPRINT .GE. 3 ) THEN
  20314.          KONTRL = +1
  20315.       ELSE
  20316.          KONTRL = 0
  20317.       ENDIF
  20318.       CALL XSETF(KONTRL)
  20319. C
  20320. C  FORCE ERROR 1
  20321. C
  20322.       IF ( KPRINT .GE. 3 ) WRITE (LUN,101)
  20323.   101 FORMAT(' RD - FORCE ERROR 1 TO OCCUR')
  20324.       TRD = RD(-1.0E0,-1.0E0,-1.0E0,IER)
  20325.       IER = NUMXER(IER)
  20326.       IF ( IER .EQ. 1 ) THEN
  20327.          IPASS1 = 1
  20328.       ELSE
  20329.          IPASS1 = 0
  20330.       ENDIF
  20331.       CALL XERCLR
  20332. C
  20333. C  FORCE ERROR 2
  20334. C
  20335.       IF ( KPRINT .GE. 3 ) WRITE (LUN,102)
  20336.   102 FORMAT(' RD - FORCE ERROR 2 TO OCCUR')
  20337.       TRD = RD(1.0E0,1.0E0,-1.0E0,IER)
  20338.       IER = NUMXER(IER)
  20339.       IF ( IER .EQ. 2 ) THEN
  20340.          IPASS2 = 1
  20341.       ELSE
  20342.          IPASS2 = 0
  20343.       ENDIF
  20344.       CALL XERCLR
  20345. C
  20346. C  FORCE ERROR 3
  20347. C
  20348.       IF ( KPRINT .GE. 3 ) WRITE (LUN,103)
  20349.   103 FORMAT(' RD - FORCE ERROR 3 TO OCCUR')
  20350.       TRD = RD(R1MACH(2),R1MACH(2),R1MACH(2),IER)
  20351.       IER = NUMXER(IER)
  20352.       IF ( IER .EQ. 3 ) THEN
  20353.          IPASS3 = 1
  20354.       ELSE
  20355.          IPASS3 = 0
  20356.       ENDIF
  20357.       CALL XERCLR
  20358. C
  20359. C  ARGUMENTS IN RANGE
  20360. C  BLEM=3 * LEMNISCATE CONSTANT B
  20361. C
  20362.       BLEM = 1.79721035210338831E0
  20363.       TRD  = RD(0.0E0,2.0E0,1.0E0,IER)
  20364.       CALL XERCLR
  20365.       DIF  = TRD - BLEM
  20366.       IF ( (ABS(DIF/BLEM).LT.1000.0E0*R1MACH(4)).AND.(IER.EQ.0) ) THEN
  20367.          IPASS4 = 1
  20368.       ELSE
  20369.          IPASS = 0
  20370.       ENDIF
  20371.       IPASS = MIN(IPASS1,IPASS2,IPASS3,IPASS4)
  20372.       IF ( KPRINT .LE. 0 ) THEN
  20373.          GO TO 999
  20374.       ELSEIF ( KPRINT .EQ. 1 ) THEN
  20375.          IF ( IPASS .EQ. 1 ) THEN
  20376.             GO TO 999
  20377.          ELSE
  20378.             WRITE (LUN,104)
  20379.   104       FORMAT(' RD - FAILED')
  20380.             GO TO 999
  20381.          ENDIF
  20382.       ELSE
  20383.          IF ( IPASS .EQ. 1 ) THEN
  20384.             WRITE (LUN,105)
  20385.   105       FORMAT(' RD - PASSED')
  20386.             GO TO 999
  20387.          ELSE
  20388.             WRITE (LUN,104)
  20389.             IF ( IPASS4 .EQ. 0 ) WRITE (LUN,106) BLEM, TRD, DIF
  20390.   106       FORMAT(' CORRECT ANSWER =', 1PE14.6 /
  20391.      *             'COMPUTED ANSWER =',   E14.6 /
  20392.      *             '     DIFFERENCE =',   E14.6 )
  20393.             GO TO 999
  20394.          ENDIF
  20395.       ENDIF
  20396.   999 CONTINUE
  20397.       CALL XSETF(CONTRL)
  20398.       RETURN
  20399.       END
  20400. *DECK QCRF
  20401.       SUBROUTINE QCRF (LUN, KPRINT, IPASS)
  20402. C***BEGIN PROLOGUE  QCRF
  20403. C***PURPOSE  Quick check for RF.
  20404. C***LIBRARY   SLATEC
  20405. C***KEYWORDS  QUICK CHECK
  20406. C***AUTHOR  Pexton, R. L., (LLNL)
  20407. C***DESCRIPTION
  20408. C
  20409. C            QUICK TEST FOR CARLSON INTEGRAL RF
  20410. C
  20411. C***ROUTINES CALLED  NUMXER, R1MACH, RF, XERCLR, XGETF, XSETF
  20412. C***REVISION HISTORY  (YYMMDD)
  20413. C   790801  DATE WRITTEN
  20414. C   890618  REVISION DATE from Version 3.2
  20415. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  20416. C   910708  Minor modifications in use of KPRINT.  (WRB)
  20417. C***END PROLOGUE  QCRF
  20418.       INTEGER KPRINT, IPASS, CONTRL, KONTRL, LUN, IER
  20419.       INTEGER IPASS1, IPASS2, IPASS3, IPASS4, NUMXER
  20420.       REAL ALEM, TRF, RF, DIF, R1MACH
  20421.       EXTERNAL NUMXER, R1MACH, RF, XERCLR, XGETF, XSETF
  20422. C***FIRST EXECUTABLE STATEMENT  QCRF
  20423.       CALL XERCLR
  20424.       CALL XGETF(CONTRL)
  20425.       IF ( KPRINT .GE. 3 ) THEN
  20426.          KONTRL = +1
  20427.       ELSE
  20428.          KONTRL = 0
  20429.       ENDIF
  20430.       CALL XSETF(KONTRL)
  20431. C
  20432. C  FORCE ERROR 1
  20433. C
  20434.       IF ( KPRINT .GE. 3 ) WRITE (LUN,101)
  20435.   101 FORMAT(' RF - FORCE ERROR 1 TO OCCUR')
  20436.       TRF = RF(-1.0E0,-1.0E0,-1.0E0,IER)
  20437.       IER = NUMXER(IER)
  20438.       IF ( IER .EQ. 1 ) THEN
  20439.          IPASS1 = 1
  20440.       ELSE
  20441.          IPASS1 = 0
  20442.       ENDIF
  20443.       CALL XERCLR
  20444. C
  20445. C  FORCE ERROR 2
  20446. C
  20447.       IF ( KPRINT .GE. 3 ) WRITE (LUN,102)
  20448.   102 FORMAT(' RF - FORCE ERROR 2 TO OCCUR')
  20449.       TRF = RF(R1MACH(1),R1MACH(1),R1MACH(1),IER)
  20450.       IER = NUMXER(IER)
  20451.       IF ( IER .EQ. 2 ) THEN
  20452.          IPASS2 = 1
  20453.       ELSE
  20454.          IPASS2 = 0
  20455.       ENDIF
  20456.       CALL XERCLR
  20457. C
  20458. C  FORCE ERROR 3
  20459. C
  20460.       IF ( KPRINT .GE. 3 ) WRITE (LUN,103)
  20461.   103 FORMAT(' RF - FORCE ERROR 3 TO OCCUR')
  20462.       TRF = RF(R1MACH(2),R1MACH(2),R1MACH(2),IER)
  20463.       IER = NUMXER(IER)
  20464.       IF ( IER .EQ. 3 ) THEN
  20465.          IPASS3 = 1
  20466.       ELSE
  20467.          IPASS3 = 0
  20468.       ENDIF
  20469.       CALL XERCLR
  20470. C
  20471. C  ARGUMENTS IN RANGE
  20472. C  ALEM=LEMNISCATE CONSTANT A
  20473. C
  20474.       ALEM = 1.311028777146059905E0
  20475.       TRF  = RF(0.0E0,1.0E0,2.0E0,IER)
  20476.       CALL XERCLR
  20477.       DIF  = TRF - ALEM
  20478.       IF ( (ABS(DIF/ALEM).LT.1000.0E0*R1MACH(4)).AND.(IER.EQ.0) ) THEN
  20479.          IPASS4 = 1
  20480.       ELSE
  20481.          IPASS4 = 0
  20482.       ENDIF
  20483.       IPASS = MIN(IPASS1,IPASS2,IPASS3,IPASS4)
  20484.       IF ( KPRINT .EQ. 0 ) THEN
  20485.          GO TO 999
  20486.       ELSEIF ( KPRINT .EQ. 1 ) THEN
  20487.          IF ( IPASS .EQ. 1 ) THEN
  20488.             GO TO 999
  20489.          ELSE
  20490.             WRITE (LUN,104)
  20491.   104       FORMAT(' RF - FAILED')
  20492.             GO TO 999
  20493.          ENDIF
  20494.       ELSE
  20495.          IF ( IPASS .EQ. 1 ) THEN
  20496.             WRITE (LUN,105)
  20497.   105       FORMAT(' RF - PASSED')
  20498.             GO TO 999
  20499.          ELSE
  20500.             WRITE (LUN,104)
  20501.             IF ( IPASS4 .EQ. 0 ) WRITE (LUN,106) ALEM, TRF, DIF
  20502.   106       FORMAT(' CORRECT ANSWER =', 1PE14.6 /
  20503.      *             'COMPUTED ANSWER =',   E14.6 /
  20504.      *             '     DIFFERENCE =',   E14.6 )
  20505.             GO TO 999
  20506.          ENDIF
  20507.       ENDIF
  20508.   999 CONTINUE
  20509.       CALL XSETF(CONTRL)
  20510.       RETURN
  20511.       END
  20512. *DECK QCRJ
  20513.       SUBROUTINE QCRJ (LUN, KPRINT, IPASS)
  20514. C***BEGIN PROLOGUE  QCRJ
  20515. C***PURPOSE  Quick check for RJ.
  20516. C***LIBRARY   SLATEC
  20517. C***KEYWORDS  QUICK CHECK
  20518. C***AUTHOR  Pexton, R. L., (LLNL)
  20519. C***DESCRIPTION
  20520. C
  20521. C            QUICK TEST FOR CARLSON INTEGRAL RJ
  20522. C
  20523. C***ROUTINES CALLED  NUMXER, R1MACH, RJ, XERCLR, XGETF, XSETF
  20524. C***REVISION HISTORY  (YYMMDD)
  20525. C   790801  DATE WRITTEN
  20526. C   890618  REVISION DATE from Version 3.2
  20527. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  20528. C   910708  Minor modifications in use of KPRINT.  (WRB)
  20529. C***END PROLOGUE  QCRJ
  20530.       INTEGER KPRINT, IPASS, CONTRL, KONTRL, LUN, IER
  20531.       INTEGER IPASS1, IPASS2, IPASS3, IPASS4, NUMXER
  20532.       REAL CONSJ, TRJ, RJ, DIF, R1MACH
  20533.       EXTERNAL NUMXER, R1MACH, RJ, XERCLR, XGETF, XSETF
  20534. C***FIRST EXECUTABLE STATEMENT  QCRJ
  20535.       CALL XERCLR
  20536.       CALL XGETF(CONTRL)
  20537.       IF ( KPRINT .GE. 3 ) THEN
  20538.          KONTRL = +1
  20539.       ELSE
  20540.          KONTRL = 0
  20541.       ENDIF
  20542.       CALL XSETF(KONTRL)
  20543. C
  20544. C  FORCE ERROR 1
  20545. C
  20546.       IF ( KPRINT .GE. 3 ) WRITE (LUN,101)
  20547.   101 FORMAT(' RJ - FORCE ERROR 1 TO OCCUR')
  20548.       TRJ = RJ(-1.0E0,-1.0E0,-1.0E0,-1.0E0,IER)
  20549.       IER = NUMXER(IER)
  20550.       IF ( IER .EQ. 1 ) THEN
  20551.          IPASS1 = 1
  20552.       ELSE
  20553.          IPASS1 = 0
  20554.       ENDIF
  20555.       CALL XERCLR
  20556. C
  20557. C  FORCE ERROR 2
  20558. C
  20559.       IF ( KPRINT .GE. 3 ) WRITE (LUN,102)
  20560.   102 FORMAT(' RJ - FORCE ERROR 2 TO OCCUR')
  20561.       TRJ = RJ(R1MACH(1),R1MACH(1),R1MACH(1),R1MACH(1),IER)
  20562.       IER = NUMXER(IER)
  20563.       IF ( IER .EQ. 2 ) THEN
  20564.          IPASS2 = 1
  20565.       ELSE
  20566.          IPASS2 = 0
  20567.       ENDIF
  20568.       CALL XERCLR
  20569. C
  20570. C  FORCE ERROR 3
  20571. C
  20572.       IF ( KPRINT .GE. 3 ) WRITE (LUN,103)
  20573.   103 FORMAT(' RJ - FORCE ERROR 3 TO OCCUR')
  20574.       TRJ = RJ(R1MACH(2),R1MACH(2),R1MACH(2),R1MACH(2),IER)
  20575.       IER = NUMXER(IER)
  20576.       IF ( IER .EQ. 3 ) THEN
  20577.          IPASS3 = 1
  20578.       ELSE
  20579.          IPASS3 = 0
  20580.       ENDIF
  20581.       CALL XERCLR
  20582. C
  20583. C  ARGUMENTS IN RANGE
  20584. C
  20585.       CONSJ = 0.142975796671567538E0
  20586.       TRJ   = RJ(2.0E0,3.0E0,4.0E0,5.0E0,IER)
  20587.       CALL XERCLR
  20588.       DIF   = TRJ - CONSJ
  20589.       IF ( (ABS(DIF/CONSJ).LT.1000.0E0*R1MACH(4)).AND.(IER.EQ.0) ) THEN
  20590.          IPASS4 = 1
  20591.       ELSE
  20592.          IPASS4 = 0
  20593.       ENDIF
  20594.       IPASS = MIN(IPASS1,IPASS2,IPASS3,IPASS4)
  20595.       IF (KPRINT .LE. 0 ) THEN
  20596.          GO TO 999
  20597.       ELSEIF ( KPRINT .EQ. 1 ) THEN
  20598.          IF ( IPASS .EQ. 1 ) THEN
  20599.             GO TO 999
  20600.          ELSE
  20601.             WRITE (LUN,104)
  20602.   104       FORMAT(' RJ - FAILED')
  20603.             GO TO 999
  20604.          ENDIF
  20605.       ELSE
  20606.          IF ( IPASS .EQ. 1 ) THEN
  20607.             WRITE (LUN,105)
  20608.   105       FORMAT(' RJ - PASSED')
  20609.             GO TO 999
  20610.          ELSE
  20611.             WRITE (LUN,104)
  20612.             IF ( IPASS4 .EQ. 0 ) WRITE (LUN,106) CONSJ, TRJ, DIF
  20613.   106       FORMAT(' CORRECT ANSWER =', 1PE14.6 /
  20614.      *             'COMPUTED ANSWER =',   E14.6 /
  20615.      *             '     DIFFERENCE =',   E14.6 )
  20616.             GO TO 999
  20617.          ENDIF
  20618.       ENDIF
  20619.   999 CONTINUE
  20620.       CALL XSETF(CONTRL)
  20621.       RETURN
  20622.       END
  20623. *DECK QG8TST
  20624.       SUBROUTINE QG8TST (LUN, KPRINT, IPASS)
  20625. C***BEGIN PROLOGUE  QG8TST
  20626. C***PURPOSE  Quick check for GAUS8.
  20627. C***LIBRARY   SLATEC
  20628. C***TYPE      SINGLE PRECISION (QG8TST-S, DQG8TS-D)
  20629. C***AUTHOR  (UNKNOWN)
  20630. C***ROUTINES CALLED  FQD1, FQD2, GAUS8, R1MACH, XGETF, XSETF
  20631. C***REVISION HISTORY  (YYMMDD)
  20632. C   ??????  DATE WRITTEN
  20633. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  20634. C   901205  Changed usage of R1MACH(3) to R1MACH(4).  (RWC)
  20635. C   910501  Added PURPOSE and TYPE records.  (WRB)
  20636. C   910708  Minor modifications in use of KPRINT.  (WRB)
  20637. C   920213  Code restructured to test GAUS8 for all values of KPRINT,
  20638. C           second accuracy test added and testing of error returns
  20639. C           revised.  (WRB)
  20640. C***END PROLOGUE  QG8TST
  20641. C     .. Scalar Arguments ..
  20642.       INTEGER IPASS, KPRINT, LUN
  20643. C     .. Local Scalars ..
  20644.       INTEGER IERR
  20645.       REAL A, ANS, B, COR, ERR, REQ, TOL
  20646.       LOGICAL FATAL
  20647. C     .. External Functions ..
  20648.       REAL FQD1, FQD2, R1MACH
  20649.       EXTERNAL FQD1, FQD2, R1MACH
  20650. C     .. External Subroutines ..
  20651.       EXTERNAL GAUS8, XGETF, XSETF
  20652. C     .. Intrinsic Functions ..
  20653.       INTRINSIC ABS, MAX, SQRT
  20654. C***FIRST EXECUTABLE STATEMENT  QG8TST
  20655.       IF (KPRINT .GE. 2) WRITE (LUN,FMT=9000)
  20656. C
  20657. C     Initialize variables for testing.
  20658. C
  20659.       TOL = SQRT(R1MACH(4))
  20660.       IPASS = 1
  20661. C
  20662. C     First accuracy test.
  20663. C
  20664.       A = 1.0E0
  20665.       B = 4.0E0
  20666.       ERR = TOL/100.0E0
  20667.       CALL GAUS8 (FQD1, A, B, ERR, ANS, IERR)
  20668.       COR = 2.0E0
  20669.       IF (ABS(ANS-COR).LE.TOL .AND. IERR.EQ.1) THEN
  20670.         IF (KPRINT .GE. 3)
  20671.      +    WRITE (LUN, 9010) 'PASSED', A, B, ANS, COR, ERR, IERR
  20672.       ELSE
  20673.         IPASS = 0
  20674.         IF (KPRINT .GE. 2)
  20675.      +    WRITE (LUN, 9010) 'FAILED', A, B, ANS, COR, ERR, IERR
  20676.       ENDIF
  20677. C
  20678. C     Second accuracy test.
  20679. C
  20680.       A = 0.0E0
  20681.       B = 4.0E0*ATAN(1.0E0)
  20682.       ERR = TOL/100.0E0
  20683.       CALL GAUS8 (FQD2, A, B, ERR, ANS, IERR)
  20684.       COR = (EXP(B)-1.0E0)/101.0E0
  20685.       IF (ABS(ANS-COR).LE.TOL .AND. IERR.EQ.1) THEN
  20686.         IF (KPRINT .GE. 3)
  20687.      +    WRITE (LUN, 9010) 'PASSED', A, B, ANS, COR, ERR, IERR
  20688.       ELSE
  20689.         IPASS = 0
  20690.         IF (KPRINT .GE. 2)
  20691.      +    WRITE (LUN, 9010) 'FAILED', A, B, ANS, COR, ERR, IERR
  20692.       ENDIF
  20693. C
  20694. C     Test error returns.
  20695. C
  20696.       CALL XGETF (KONTRL)
  20697.       IF (KPRINT .LE. 2) THEN
  20698.          CALL XSETF (0)
  20699.       ELSE
  20700.          CALL XSETF (1)
  20701.       ENDIF
  20702.       FATAL = .FALSE.
  20703. C
  20704.       IF (KPRINT .GE. 3) WRITE (LUN,FMT=9030)
  20705. C
  20706. C     Test with a discontinuous integrand and a tight error tolerance.
  20707. C
  20708.       A = 0.0E0
  20709.       B = 1.0E0
  20710.       COR = 2.0E0
  20711.       ERR = 100.0E0*R1MACH(4)
  20712.       REQ = ERR
  20713.       CALL GAUS8 (FQD1, A, B, ERR, ANS, IERR)
  20714. C
  20715. C     See if test passed.
  20716. C
  20717.       IF (IERR .EQ. 2) THEN
  20718.         IF (KPRINT .GE. 3)
  20719.      +    WRITE (LUN,FMT=9040) 'PASSED', REQ, ANS, IERR, ERR, COR
  20720.       ELSE
  20721.         IF (KPRINT .GE. 2)
  20722.      +    WRITE (LUN,FMT=9040) 'PASSED', REQ, ANS, IERR, ERR, COR
  20723.         IPASS = 0
  20724.         FATAL = .TRUE.
  20725.       ENDIF
  20726. C
  20727. C     Test GAUS8 with A and B nearly equal.
  20728. C
  20729.       A = 2.0E0
  20730.       B = A*(1.0E0+R1MACH(4))
  20731.       COR = 0.0E0
  20732.       ERR = TOL
  20733. C
  20734.       CALL GAUS8 (FQD1, A, B, ERR, ANS, IERR)
  20735. C
  20736. C     Check to see if test passed.
  20737. C
  20738.       IF (IERR.EQ.-1 .AND. ANS.EQ.0.0E0) THEN
  20739.         IF (KPRINT .GE. 3) WRITE (LUN,9050) 'PASSED'
  20740.       ELSE
  20741.         IPASS = 0
  20742.         FATAL = .TRUE.
  20743.         IF (KPRINT .GE. 2) WRITE (LUN,9050) 'FAILED'
  20744.       ENDIF
  20745. C
  20746.       CALL XSETF (KONTRL)
  20747.       IF (FATAL) THEN
  20748.          IF (KPRINT .GE. 2) THEN
  20749.             WRITE (LUN, 9060)
  20750.          ENDIF
  20751.       ELSE
  20752.          IF (KPRINT .GE. 3) THEN
  20753.             WRITE (LUN, 9070)
  20754.          ENDIF
  20755.       ENDIF
  20756. C
  20757.       IF (IPASS.EQ.1 .AND. KPRINT.GE.3) WRITE (LUN,FMT=9080)
  20758.       IF (IPASS.EQ.0 .AND. KPRINT.GE.2) WRITE (LUN,FMT=9090)
  20759.       RETURN
  20760. C
  20761.  9000 FORMAT ('1' / ' GAUS8 Quick Check')
  20762.  9010 FORMAT (/ ' Accuracy test of GAUS8 ', A /
  20763.      +        ' A = ', F10.5, '   B = ', F10.5 /
  20764.      +        ' Computed result = ', E14.7, '   Exact result = ',
  20765.      +        E14.7 /
  20766.      +        ' Tolerance = ', E14.7, '   IERR = ', I2 /)
  20767.  9030 FORMAT (/ ' Test error returns' /
  20768.      +        ' 2 error messages expected' /)
  20769.  9040 FORMAT (' Test of GAUS8 ', A /
  20770.      +        ' REQ =', E10.2, 5X, 'ANS =', E20.13, 5X, 'IERR =', I2,
  20771.      +        5X, 'should be 2' /
  20772.      +        ' ERR =', E10.2, ' CORRECT =' ,E20.13 /)
  20773.  9050 FORMAT (' Test of A and B nearly equal ', A)
  20774.  9060 FORMAT (/ ' At least one incorrect argument test FAILED')
  20775.  9070 FORMAT (/ ' All incorrect argument tests PASSED')
  20776.  9080 FORMAT (/,' ***************GAUS8 PASSED ALL TESTS***************')
  20777.  9090 FORMAT (/,' ***************GAUS8 FAILED SOME TESTS**************')
  20778.       END
  20779. *DECK QN79QX
  20780.       SUBROUTINE QN79QX (LUN, KPRINT, IPASS)
  20781. C***BEGIN PROLOGUE  QN79QX
  20782. C***PURPOSE  Quick check for QNC79.
  20783. C***LIBRARY   SLATEC
  20784. C***TYPE      SINGLE PRECISION (QN79QX-S, DQN79Q-D)
  20785. C***AUTHOR  (UNKNOWN)
  20786. C***ROUTINES CALLED  FQD1, FQD2, QNC79, R1MACH, XGETF, XSETF
  20787. C***REVISION HISTORY  (YYMMDD)
  20788. C   ??????  DATE WRITTEN
  20789. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  20790. C   901205  Changed usage of R1MACH(3) to R1MACH(4).  (RWC)
  20791. C   910501  Added PURPOSE and TYPE records.  (WRB)
  20792. C   910708  Minor modifications in use of KPRINT.  (WRB)
  20793. C   920213  Code restructured to test QNC79 for all values of KPRINT,
  20794. C           second accuracy test added and testing of error returns
  20795. C           revised.  (WRB)
  20796. C***END PROLOGUE  QN79QX
  20797. C     .. Scalar Arguments ..
  20798.       INTEGER IPASS, KPRINT, LUN
  20799. C     .. Local Scalars ..
  20800.       INTEGER IERR, NFCT
  20801.       REAL A, ANS, B, COR, ERR, REQ, TOL
  20802.       LOGICAL FATAL
  20803. C     .. External Functions ..
  20804.       REAL FQD1, FQD2, R1MACH
  20805.       EXTERNAL FQD1, FQD2, R1MACH
  20806. C     .. External Subroutines ..
  20807.       EXTERNAL QNC79, XGETF, XSETF
  20808. C     .. Intrinsic Functions ..
  20809.       INTRINSIC ABS, MAX, SQRT
  20810. C***FIRST EXECUTABLE STATEMENT  QN79QX
  20811.       IF (KPRINT .GE. 2) WRITE (LUN,FMT=9000)
  20812. C
  20813. C     Initialize variables for testing.
  20814. C
  20815.       TOL = SQRT(R1MACH(4))
  20816.       IPASS = 1
  20817. C
  20818. C     First accuracy test.
  20819. C
  20820.       A = 1.0E0
  20821.       B = 4.0E0
  20822.       ERR = TOL/100.0E0
  20823.       CALL QNC79 (FQD1, A, B, ERR, ANS, IERR, NFCT)
  20824.       COR = 2.0E0
  20825.       IF (ABS(ANS-COR).LE.TOL .AND. IERR.EQ.1) THEN
  20826.         IF (KPRINT .GE. 3)
  20827.      +    WRITE (LUN, 9010) 'PASSED', A, B, ANS, COR, ERR, IERR, NFCT
  20828.       ELSE
  20829.         IPASS = 0
  20830.         IF (KPRINT .GE. 2)
  20831.      +    WRITE (LUN, 9010) 'FAILED', A, B, ANS, COR, ERR, IERR, NFCT
  20832.       ENDIF
  20833. C
  20834. C     Second accuracy test.
  20835. C
  20836.       A = 0.0E0
  20837.       B = 4.0E0*ATAN(1.0E0)
  20838.       ERR = TOL/10.0E0
  20839.       CALL QNC79 (FQD2, A, B, ERR, ANS, IERR, NFCT)
  20840.       COR = (EXP(B)-1.0E0)/101.0E0
  20841.       IF (ABS(ANS-COR).LE.TOL .AND. IERR.EQ.1) THEN
  20842.         IF (KPRINT .GE. 3)
  20843.      +    WRITE (LUN, 9010) 'PASSED', A, B, ANS, COR, ERR, IERR, NFCT
  20844.       ELSE
  20845.         IPASS = 0
  20846.         IF (KPRINT .GE. 2)
  20847.      +    WRITE (LUN, 9010) 'FAILED', A, B, ANS, COR, ERR, IERR, NFCT
  20848.       ENDIF
  20849. C
  20850. C     Test error returns.
  20851. C
  20852.       CALL XGETF (KONTRL)
  20853.       IF (KPRINT .LE. 2) THEN
  20854.          CALL XSETF (0)
  20855.       ELSE
  20856.          CALL XSETF (1)
  20857.       ENDIF
  20858.       FATAL = .FALSE.
  20859. C
  20860.       IF (KPRINT .GE. 3) WRITE (LUN,FMT=9030)
  20861. C
  20862. C     Test with a discontinuous integrand and a tight error tolerance.
  20863. C
  20864.       A = 0.0E0
  20865.       B = 1.0E0
  20866.       COR = 2.0E0
  20867.       ERR = 100.0E0*R1MACH(4)
  20868.       REQ = ERR
  20869.       CALL QNC79 (FQD1, A, B, ERR, ANS, IERR, NFCT)
  20870. C
  20871. C     See if test passed.
  20872. C
  20873.       IF (IERR .EQ. 2) THEN
  20874.         IF (KPRINT .GE. 3)
  20875.      +    WRITE (LUN,FMT=9040) 'PASSED', REQ, ANS, IERR, ERR, COR
  20876.       ELSE
  20877.         IF (KPRINT .GE. 2)
  20878.      +    WRITE (LUN,FMT=9040) 'FAILED', REQ, ANS, IERR, ERR, COR
  20879.         IPASS = 0
  20880.         FATAL = .TRUE.
  20881.       ENDIF
  20882. C
  20883. C     Test QNC79 with A and B nearly equal.
  20884. C
  20885.       A = 2.0E0
  20886.       B = A*(1.0E0+R1MACH(4))
  20887.       COR = 0.0E0
  20888.       ERR = TOL
  20889. C
  20890.       CALL QNC79 (FQD1, A, B, ERR, ANS, IERR, NFCT)
  20891. C
  20892. C     Check to see if test passed.
  20893. C
  20894.       IF (IERR.EQ.-1 .AND. ANS.EQ.0.0E0) THEN
  20895.         IF (KPRINT .GE. 3) WRITE (LUN,9050) 'PASSED'
  20896.       ELSE
  20897.         IPASS = 0
  20898.         FATAL = .TRUE.
  20899.         IF (KPRINT .GE. 2) WRITE (LUN,9050) 'FAILED'
  20900.       ENDIF
  20901. C
  20902.       CALL XSETF (KONTRL)
  20903.       IF (FATAL) THEN
  20904.          IF (KPRINT .GE. 2) THEN
  20905.             WRITE (LUN, 9060)
  20906.          ENDIF
  20907.       ELSE
  20908.          IF (KPRINT .GE. 3) THEN
  20909.             WRITE (LUN, 9070)
  20910.          ENDIF
  20911.       ENDIF
  20912. C
  20913.       IF (IPASS.EQ.1 .AND. KPRINT.GE.3) WRITE (LUN,FMT=9080)
  20914.       IF (IPASS.EQ.0 .AND. KPRINT.GE.2) WRITE (LUN,FMT=9090)
  20915.       RETURN
  20916. C
  20917.  9000 FORMAT ('1' / ' QNC79 Quick Check')
  20918.  9010 FORMAT (/ ' Accuracy test of QNC79 ', A /
  20919.      +        ' A = ', F10.5, '   B = ', F10.5 /
  20920.      +        ' Computed result = ', E14.7, '   Exact result = ',
  20921.      +        E14.7 /
  20922.      +        ' Tolerance = ', E14.7, '   IERR = ', I2,
  20923.      +        '   Number of function evals = ', I5 /)
  20924.  9030 FORMAT (/ ' Test error returns' /
  20925.      +        ' 2 error messages expected' /)
  20926.  9040 FORMAT (' Test of QNC79 ', A /
  20927.      +        ' REQ =', E10.2, 5X, 'ANS =', E20.13, 5X, 'IERR =', I2,
  20928.      +        5X, 'should be 2' /
  20929.      +        ' ERR =', E10.2, ' CORRECT =' ,E20.13 /)
  20930.  9050 FORMAT (' Test of A and B nearly equal ', A)
  20931.  9060 FORMAT (/ ' At least one incorrect argument test FAILED')
  20932.  9070 FORMAT (/ ' All incorrect argument tests PASSED')
  20933.  9080 FORMAT (/' ***************QNC79 PASSED ALL TESTS****************')
  20934.  9090 FORMAT (/' ***************QNC79 FAILED SOME TESTS***************')
  20935.       END
  20936. *DECK QXABM
  20937.       SUBROUTINE QXABM (LUN, KPRINT, IPASS)
  20938. C***BEGIN PROLOGUE  QXABM
  20939. C***SUBSIDIARY
  20940. C***PURPOSE  Test the DEPAC routine DEABM.
  20941. C***LIBRARY   SLATEC
  20942. C***TYPE      SINGLE PRECISION (QXABM-S, QXDABM-D)
  20943. C***KEYWORDS  QUICK CHECK
  20944. C***AUTHOR  Chow, Jeff, (LANL)
  20945. C***DESCRIPTION
  20946. C
  20947. C *Usage:
  20948. C
  20949. C        INTEGER  LUN, KPRINT, IPASS
  20950. C
  20951. C        CALL QXABM (LUN, KPRINT, IPASS)
  20952. C
  20953. C *Arguments:
  20954. C
  20955. C     LUN   :IN  is the unit number to which output is to be written.
  20956. C
  20957. C     KPRINT:IN  controls the amount of output, as specified in the
  20958. C                SLATEC Guidelines.
  20959. C
  20960. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  20961. C                IPASS=0 indicates one or more tests failed.
  20962. C
  20963. C *Description:
  20964. C
  20965. C   DEABM is tested by solving the equations of motion of a body
  20966. C   moving in a plane about a spherical earth, namely
  20967. C           (D/DT)(D/DT)X = -G*X/R**3
  20968. C           (D/DT)(D/DT)Y = -G*Y/R**3
  20969. C   where G = 1, R = SQRT(X**2 + Y**2) and
  20970. C           X(0) = 1
  20971. C           (D/DT)X(0) = 0
  20972. C           Y(0) = 0
  20973. C           (D/DT)Y(0) = 1.
  20974. C
  20975. C***ROUTINES CALLED  DEABM, FDEQC, R1MACH
  20976. C***REVISION HISTORY  (YYMMDD)
  20977. C   810801  DATE WRITTEN
  20978. C   890618  REVISION DATE from Version 3.2
  20979. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  20980. C   900415  Code extensively revised.  (WRB)
  20981. C***END PROLOGUE  QXABM
  20982. C
  20983. C     Declare arguments.
  20984. C
  20985.       INTEGER  LUN, KPRINT, IPASS
  20986. C
  20987. C     Declare local variables.
  20988. C
  20989.       INTEGER  IDID, INFO(15), IPAR, IWORK(51), N, LIW, LRW
  20990.       REAL ABSERR, R, R1MACH, RELERR, RELTOL, RPAR, RWORK(214), T, TOUT,
  20991.      +     U(4)
  20992.       EXTERNAL FDEQC
  20993. C***FIRST EXECUTABLE STATEMENT  QXABM
  20994.       IF (KPRINT .GE. 2)  WRITE (LUN, 9000)
  20995. C
  20996. C     Initialize problem.
  20997. C
  20998.       N = 4
  20999.       LRW = 214
  21000.       LIW = 51
  21001.       T = 0.0E0
  21002.       TOUT = 8.0E0*ATAN(1.0E0)
  21003.       U(1) = 1.0E0
  21004.       U(2) = 0.0E0
  21005.       U(3) = 0.0E0
  21006.       U(4) = 1.0E0
  21007.       IPASS = 1
  21008.       RELTOL = SQRT(R1MACH(4))
  21009.       RELERR = 0.1E0*RELTOL
  21010.       ABSERR = RELERR**1.5E0
  21011.       INFO(1) = 0
  21012.       INFO(2) = 0
  21013.       INFO(3) = 1
  21014.       INFO(4) = 0
  21015.       IF (KPRINT .GT. 2) WRITE (LUN, 9010) RELERR, ABSERR, T, (1.0E0)
  21016. C
  21017.   100 CALL DEABM (FDEQC, N, T, U, TOUT, INFO, RELERR, ABSERR,
  21018.      +            IDID, RWORK, LRW, IWORK, LIW, RPAR, IPAR)
  21019.       R = SQRT(U(1)*U(1)+U(2)*U(2))
  21020.       IF (ABS(R-1.0E0) .GT. RELTOL) IPASS = 0
  21021.       IF (KPRINT .GT. 2) WRITE (LUN, 9020) T, R
  21022.       INFO(1) = 1
  21023.       IF (IDID .EQ. 1) GO TO 100
  21024. C
  21025. C     Finish up.
  21026. C
  21027.       IF (IDID .LT. 1) IPASS = 0
  21028.       IF (KPRINT.GT.1 .AND. IDID.LT.1)  WRITE (LUN, 9030) IDID
  21029.       IF (KPRINT.GT.1 .AND. IPASS.EQ.1) WRITE (LUN, 9040)
  21030.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN, 9050)
  21031.       RETURN
  21032. C
  21033. C     FORMATs.
  21034. C
  21035.  9000 FORMAT ('1'/' ------------  DEABM QUICK CHECK OUTPUT',
  21036.      +        ' ------------')
  21037.  9010 FORMAT (/ ' RELERR = ', E16.8, '   ABSERR =', E16.8 /
  21038.      +        12X, 'T', 19X, 'R' / 2E20.8)
  21039.  9020 FORMAT (2E20.8)
  21040.  9030 FORMAT (1X, 'ERROR RETURN FROM DEABM.  IDID = ', I3)
  21041.  9040 FORMAT (/ ' ------------  DEABM PASSED TESTS  ------------')
  21042.  9050 FORMAT (/ ' ************  DEABM FAILED TESTS  ************')
  21043.       END
  21044. *DECK QXBDF
  21045.       SUBROUTINE QXBDF (LUN, KPRINT, IPASS)
  21046. C***BEGIN PROLOGUE  QXBDF
  21047. C***PURPOSE  Test the DEPAC routine DEBDF.
  21048. C***LIBRARY   SLATEC
  21049. C***TYPE      SINGLE PRECISION (QXBDF-S, QXDBDF-D)
  21050. C***KEYWORDS  QUICK CHECK
  21051. C***AUTHOR  Chow, Jeff, (LANL)
  21052. C***DESCRIPTION
  21053. C
  21054. C *Usage:
  21055. C
  21056. C        INTEGER  LUN, KPRINT, IPASS
  21057. C
  21058. C        CALL QXBDF (LUN, KPRINT, IPASS)
  21059. C
  21060. C *Arguments:
  21061. C
  21062. C     LUN   :IN  is the unit number to which output is to be written.
  21063. C
  21064. C     KPRINT:IN  controls the amount of output, as specified in the
  21065. C                SLATEC Guidelines.
  21066. C
  21067. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  21068. C                IPASS=0 indicates one or more tests failed.
  21069. C
  21070. C *Description:
  21071. C
  21072. C   DEBDF is tested by solving the equations of motion of a body
  21073. C   moving in a plane about a spherical earth, namely
  21074. C           (D/DT)(D/DT)X = -G*X/R**3
  21075. C           (D/DT)(D/DT)Y = -G*Y/R**3
  21076. C   where G = 1, R = SQRT(X**2 + Y**2) and
  21077. C           X(0) = 1
  21078. C           (D/DT)X(0) = 0
  21079. C           Y(0) = 0
  21080. C           (D/DT)Y(0) = 1.
  21081. C
  21082. C***ROUTINES CALLED  DEBDF, FDEQC, JAC, R1MACH
  21083. C***REVISION HISTORY  (YYMMDD)
  21084. C   810801  DATE WRITTEN
  21085. C   890618  REVISION DATE from Version 3.2
  21086. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  21087. C   900415  Code extensively revised.  (WRB)
  21088. C***END PROLOGUE  QXBDF
  21089. C
  21090. C     Declare arguments.
  21091. C
  21092.       INTEGER  LUN, KPRINT, IPASS
  21093. C
  21094. C     Declare local variables.
  21095. C
  21096.       INTEGER  IDID, INFO(15), IPAR, IWORK(60), N, LIW, LRW
  21097.       REAL ABSERR, R, R1MACH, RELERR, RELTOL, RPAR, RWORK(306), T, TOUT,
  21098.      +     U(4)
  21099.       EXTERNAL FDEQC, JAC
  21100. C***FIRST EXECUTABLE STATEMENT  QXBDF
  21101.       IF (KPRINT .GE. 2)  WRITE (LUN, 9000)
  21102. C
  21103. C     Initialize problem.
  21104. C
  21105.       N = 4
  21106.       LRW = 306
  21107.       LIW = 60
  21108.       T = 0.0E0
  21109.       TOUT = 8.0E0*ATAN(1.0E0)
  21110.       U(1) = 1.0E0
  21111.       U(2) = 0.0E0
  21112.       U(3) = 0.0E0
  21113.       U(4) = 1.0E0
  21114.       IPASS = 1
  21115.       RELTOL = SQRT(R1MACH(4))
  21116.       RELERR = 0.001E0*RELTOL
  21117.       ABSERR = RELERR**1.5E0
  21118.       INFO(1) = 0
  21119.       INFO(2) = 0
  21120.       INFO(3) = 1
  21121.       INFO(4) = 0
  21122.       INFO(5) = 1
  21123.       INFO(6) = 0
  21124.       IF (KPRINT .GT. 2) WRITE (LUN, 9010) RELERR, ABSERR, T, (1.0E0)
  21125. C
  21126.   100 CALL DEBDF (FDEQC, N, T, U, TOUT, INFO, RELERR, ABSERR,
  21127.      +            IDID, RWORK, LRW, IWORK, LIW, RPAR, IPAR, JAC)
  21128.       R = SQRT(U(1)*U(1)+U(2)*U(2))
  21129.       IF (ABS(R-1.0E0) .GT. RELTOL) IPASS = 0
  21130.       IF (KPRINT .GT. 2) WRITE (LUN, 9020) T, R
  21131.       INFO(1) = 1
  21132.       IF (IDID .EQ. 1) GO TO 100
  21133. C
  21134. C     Finish up.
  21135. C
  21136.       IF (IDID .LT. 1) IPASS = 0
  21137.       IF (KPRINT.GT.1 .AND. IDID.LT.1)  WRITE (LUN, 9030) IDID
  21138.       IF (KPRINT.GT.1 .AND. IPASS.EQ.1) WRITE (LUN, 9040)
  21139.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN, 9050)
  21140.       RETURN
  21141. C
  21142. C     FORMATs.
  21143. C
  21144.  9000 FORMAT ('1'/' ------------  DEBDF QUICK CHECK OUTPUT',
  21145.      +        ' ------------')
  21146.  9010 FORMAT (/ ' RELERR = ', E16.8, '   ABSERR =', E16.8 /
  21147.      +        12X, 'T', 19X, 'R' / 2E20.8)
  21148.  9020 FORMAT (2E20.8)
  21149.  9030 FORMAT (1X, 'ERROR RETURN FROM DEBDF.  IDID = ', I3)
  21150.  9040 FORMAT (/ ' ------------  DEBDF PASSED TESTS  ------------')
  21151.  9050 FORMAT (/ ' ************  DEBDF FAILED TESTS  ************')
  21152.       END
  21153. *DECK QXBLKT
  21154.       SUBROUTINE QXBLKT (LUN, KPRINT, IPASS)
  21155. C***BEGIN PROLOGUE  QXBLKT
  21156. C***PURPOSE
  21157. C***LIBRARY   SLATEC
  21158. C***KEYWORDS  QUICK CHECK
  21159. C***AUTHOR  (UNKNOWN)
  21160. C***DESCRIPTION
  21161. C
  21162. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  21163. C     *                                                               *
  21164. C     *                        F I S H P A K                          *
  21165. C     *                                                               *
  21166. C     *                                                               *
  21167. C     *     A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF      *
  21168. C     *                                                               *
  21169. C     *      SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS        *
  21170. C     *                                                               *
  21171. C     *                  (VERSION  3 , JUNE 1979)                     *
  21172. C     *                                                               *
  21173. C     *                             BY                                *
  21174. C     *                                                               *
  21175. C     *        JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET         *
  21176. C     *                                                               *
  21177. C     *                             OF                                *
  21178. C     *                                                               *
  21179. C     *         THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH          *
  21180. C     *                                                               *
  21181. C     *                BOULDER, COLORADO  (80307)  U.S.A.             *
  21182. C     *                                                               *
  21183. C     *                   WHICH IS SPONSORED BY                       *
  21184. C     *                                                               *
  21185. C     *              THE NATIONAL SCIENCE FOUNDATION                  *
  21186. C     *                                                               *
  21187. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  21188. C
  21189. C
  21190. C     PROGRAM TO ILLUSTRATE THE USE OF BLKTRI
  21191. C
  21192. C***ROUTINES CALLED  BLKTRI
  21193. C***REVISION HISTORY  (YYMMDD)
  21194. C   800103  DATE WRITTEN
  21195. C   890911  Removed unnecessary intrinsics.  (WRB)
  21196. C   890911  REVISION DATE from Version 3.2
  21197. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  21198. C   901010  Added PASS/FAIL message and cleaned up FORMATs.  (RWC)
  21199. C***END PROLOGUE  QXBLKT
  21200.       DIMENSION Y(75,105), AM(75), BM(75), CM(75), AN(105), BN(105),
  21201.      1          CN(105), W(1952), S(75), T(105)
  21202. C***FIRST EXECUTABLE STATEMENT  QXBLKT
  21203.       ERMAX=1.E-3
  21204.       IFLG = 0
  21205.       NP = 1
  21206.       N = 63
  21207.       MP = 1
  21208.       M = 50
  21209.       IDIMY = 75
  21210. C
  21211. C     GENERATE AND STORE GRID POINTS FOR THE PURPOSE OF COMPUTING THE
  21212. C     COEFFICIENTS AND THE ARRAY Y.
  21213. C
  21214.       DELTAS = 1.0E0/(M+1)
  21215.       DO 101 I=1,M
  21216.          S(I) = I * DELTAS
  21217.   101 CONTINUE
  21218.       DELTAT = 1.0E0/(N+1)
  21219.       DO 102 J=1,N
  21220.          T(J) = J*DELTAT
  21221.   102 CONTINUE
  21222. C
  21223. C     COMPUTE THE COEFFICIENTS AM, BM AND CM CORRESPONDING TO THE S
  21224. C     DIRECTION.
  21225. C
  21226.       HDS = DELTAS/2.
  21227.       TDS = DELTAS+DELTAS
  21228.       DO 103 I=1,M
  21229.          TEMP1 = 1./(S(I)*TDS)
  21230.          TEMP2 = 1./((S(I)-HDS)*TDS)
  21231.          TEMP3 = 1./((S(I)+HDS)*TDS)
  21232.          AM(I) = TEMP1*TEMP2
  21233.          CM(I) = TEMP1*TEMP3
  21234.          BM(I) = -(AM(I)+CM(I))
  21235.   103 CONTINUE
  21236. C
  21237. C     COMPUTE THE COEFFICIENTS AN, BN AND CN CORRESPONDING TO THE T
  21238. C     DIRECTION.
  21239. C
  21240.       HDT = DELTAT/2.
  21241.       TDT = DELTAT+DELTAT
  21242.       DO 104 J=1,N
  21243.          TEMP1 = 1./(T(J)*TDT)
  21244.          TEMP2 = 1./((T(J)-HDT)*TDT)
  21245.          TEMP3 = 1./((T(J)+HDT)*TDT)
  21246.          AN(J) = TEMP1*TEMP2
  21247.          CN(J) = TEMP1*TEMP3
  21248.          BN(J) = -(AN(J)+CN(J))
  21249.   104 CONTINUE
  21250. C
  21251. C     COMPUTE RIGHT SIDE OF EQUATION
  21252. C
  21253.       DO 106 J=1,N
  21254.          DO 105 I=1,M
  21255.             Y(I,J) = 3.75*S(I)*T(J)*(S(I)**4.+T(J)**4.)
  21256.   105    CONTINUE
  21257.   106 CONTINUE
  21258. C
  21259. C     INCLUDE NONHOMOGENEOUS BOUNDARY INTO RIGHT SIDE. NOTE THAT THE
  21260. C     CORNER AT J=N,I=M INCLUDES CONTRIBUTIONS FROM BOTH BOUNDARIES.
  21261. C
  21262.       DO 107 J=1,N
  21263.          Y(M,J) = Y(M,J)-CM(M)*T(J)**5.
  21264.   107 CONTINUE
  21265.       DO 108 I=1,M
  21266.          Y(I,N) = Y(I,N)-CN(N)*S(I)**5.
  21267.   108 CONTINUE
  21268. C
  21269.   109 CALL BLKTRI (IFLG,NP,N,AN,BN,CN,MP,M,AM,BM,CM,IDIMY,Y,IERROR,W)
  21270.       IFLG = IFLG+1
  21271.       IF (IFLG-1) 109,109,110
  21272. C
  21273. C     COMPUTE DISCRETIZATION ERROR
  21274. C
  21275.   110 ERR = 0.
  21276.       DO 112 J=1,N
  21277.          DO 111 I=1,M
  21278.             Z = ABS(Y(I,J)-(S(I)*T(J))**5.)
  21279.             IF (Z .GT. ERR) ERR = Z
  21280.   111    CONTINUE
  21281.   112 CONTINUE
  21282. C
  21283.       IPASS = 1
  21284.       IF (ERR.GT.ERMAX) IPASS = 0
  21285.       IF (KPRINT.EQ.0) RETURN
  21286.       IF (KPRINT.GE.2 .OR. IPASS.EQ.0) THEN
  21287.          WRITE (LUN,1001) IERROR,ERR,INT(W(1))
  21288.          IF (IPASS.EQ.1) THEN
  21289.             WRITE (LUN, 1002)
  21290.          ELSE
  21291.             WRITE (LUN, 1003)
  21292.          ENDIF
  21293.       ENDIF
  21294.       RETURN
  21295. C
  21296.  1001 FORMAT ('1',20X,'SUBROUTINE BLKTRI EXAMPLE'///
  21297.      1        10X,'THE OUTPUT FROM THE NCAR CONTROL DATA 7600 WAS'//
  21298.      2        32X,'IERROR = 0'/
  21299.      3        18X,'DISCRETIZATION ERROR = 1.6478E-05'/
  21300.      4        12X,'REQUIRED LENGTH OF W ARRAY = 823'//
  21301.      5        10X,'THE OUTPUT FROM YOUR COMPUTER IS'//
  21302.      6        32X,'IERROR =',I2/
  21303.      7        18X,'DISCRETIZATION ERROR =',1PE12.5/
  21304.      8        12X,'REQUIRED LENGTH OF W ARRAY =', I4)
  21305.  1002 FORMAT (60X,'PASS'/)
  21306.  1003 FORMAT (60X,'FAIL'/)
  21307.       END
  21308. *DECK QXBVSP
  21309.       SUBROUTINE QXBVSP (LUN, KPRINT, IPASS)
  21310. C***BEGIN PROLOGUE  QXBVSP
  21311. C***PURPOSE  Quick check for BVSUP.
  21312. C***LIBRARY   SLATEC
  21313. C***TYPE      SINGLE PRECISION (QXBVSP-S, QXDBVS-D)
  21314. C***AUTHOR  (UNKNOWN)
  21315. C***ROUTINES CALLED  BVSUP, PASS
  21316. C***COMMON BLOCKS    SAVEX
  21317. C***REVISION HISTORY  (YYMMDD)
  21318. C   ??????  DATE WRITTEN
  21319. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  21320. C   901014  Made editorial changes and added correct result to
  21321. C           output.  (RWC)
  21322. C   910708  Minor modifications in use of KPRINT.  (WRB)
  21323. C***END PROLOGUE  QXBVSP
  21324.       INTEGER ITMP(9), IWORK(100)
  21325.       DIMENSION Y(4,15),XPTS(15),A(2,4),ALPHA(2),B(2,4),BETA(2),
  21326.      1          YANS(2,15),WORK(1000)
  21327.       CHARACTER*4 MSG
  21328.       COMMON /SAVEX/ XSAVE, TERM
  21329.       DATA YANS(1,1),YANS(2,1),YANS(1,2),YANS(2,2),
  21330.      1     YANS(1,3),YANS(2,3),YANS(1,4),YANS(2,4),
  21331.      2     YANS(1,5),YANS(2,5),YANS(1,6),YANS(2,6),
  21332.      3     YANS(1,7),YANS(2,7),YANS(1,8),YANS(2,8),
  21333.      4     YANS(1,9),YANS(2,9),YANS(1,10),YANS(2,10),
  21334.      5     YANS(1,11),YANS(2,11),YANS(1,12),YANS(2,12),
  21335.      6     YANS(1,13),YANS(2,13),YANS(1,14),YANS(2,14),
  21336.      7     YANS(1,15),YANS(2,15)/
  21337.      8      5.000000000E+00,-6.888880126E-01, 8.609248635E+00,
  21338.      9     -1.083092311E+00, 1.674923836E+01,-2.072210073E+00,
  21339.      1      3.351098494E+01,-4.479263780E+00, 6.601103894E+01,
  21340.      2     -8.909222513E+00, 8.579580988E+01,-1.098742758E+01,
  21341.      3      1.106536877E+02,-1.402469444E+01, 1.421228220E+02,
  21342.      4     -1.742236546E+01, 1.803383474E+02,-2.086465851E+01,
  21343.      5      2.017054332E+02,-1.990879843E+01, 2.051622475E+02,
  21344.      6     -1.324886978E+01, 2.059197452E+02, 1.051529813E+01,
  21345.      7      1.972191446E+02, 9.320592785E+01, 1.556894846E+02,
  21346.      8      3.801682434E+02, 1.818989404E-12, 1.379853993E+03/
  21347.       DATA XPTS(1),XPTS(2),XPTS(3),XPTS(4),XPTS(5),
  21348.      1     XPTS(6),XPTS(7),XPTS(8),XPTS(9),XPTS(10),
  21349.      2     XPTS(11),XPTS(12),XPTS(13),XPTS(14),XPTS(15)/
  21350.      3     60.,55.,50.,45.,40.,38.,36.,34.,32.,31.,30.8,30.6,
  21351.      4     30.4,30.2,30./
  21352. C***FIRST EXECUTABLE STATEMENT  QXBVSP
  21353.       IF (KPRINT.GE.2) THEN
  21354.          WRITE (LUN,800)
  21355.          WRITE (LUN,810)
  21356.       ENDIF
  21357. C
  21358. C-----INITIALIZE VARIABLES FOR TEST PROBLEM.
  21359. C
  21360.       DO 10 I = 1, 9
  21361.          ITMP(I) = 0
  21362.    10 CONTINUE
  21363. C
  21364.       TOL = 1.0E-03
  21365.       XSAVE = 0.
  21366.       NROWY = 4
  21367.       NCOMP = 2
  21368.       NXPTS = 15
  21369.       A(1,1) = 1.0
  21370.       A(1,2) = 0.0
  21371.       NROWA = 2
  21372.       ALPHA(1) = 5.0
  21373.       NIC = 1
  21374.       B(1,1) = 1.0
  21375.       B(1,2) = 0.0
  21376.       NROWB = 2
  21377.       BETA(1) = 0.0
  21378.       NFC = 1
  21379.       IGOFX = 1
  21380.       RE = 1.0E-05
  21381.       AE = 1.0E-05
  21382.       NDW = 1000
  21383.       NDIW = 100
  21384.       NEQIVP = 0
  21385.       IPASS = 1
  21386. C
  21387.       DO 20 I = 1, 15
  21388.          IWORK(I) = 0
  21389.    20 CONTINUE
  21390. C
  21391.       CALL BVSUP(Y,NROWY,NCOMP,XPTS,NXPTS,A,NROWA,ALPHA,NIC,B,NROWB,
  21392.      1     BETA,NFC,IGOFX,RE,AE,IFLAG,WORK,NDW,IWORK,NDIW,NEQIVP)
  21393. C
  21394. C-----IF IFLAG = 0, WE HAVE A SUCCESSFUL SOLUTION; OTHERWISE, SKIP
  21395. C     THE ARGUMENT CHECKING AND GO TO THE END.
  21396. C
  21397.       IF (IFLAG.NE.0) THEN
  21398.          IPASS = 0
  21399.          IF (KPRINT .GT. 1) WRITE (LUN,820) IFLAG
  21400.          GO TO 170
  21401.       ENDIF
  21402. C
  21403. C-----CHECK THE ACCURACY OF THE SOLUTION.
  21404. C
  21405.       NUMORT = IWORK(1)
  21406.       DO 50 J = 1, NXPTS
  21407.          DO 40 L = 1, 2
  21408.             ABSER = ABS(YANS(L,J)-Y(L,J))
  21409.             RELER = ABSER/ABS(YANS(L,J))
  21410.             IF (RELER.GT.TOL .AND. ABSER.GT.TOL) IPASS = 0
  21411.    40    CONTINUE
  21412.    50 CONTINUE
  21413. C
  21414. C-----CHECK FOR SUPPRESSION OF PRINTING.
  21415. C
  21416.       IF (KPRINT.EQ.0 .OR. (KPRINT.EQ.1 .AND. IPASS.EQ.1)) GO TO 190
  21417. C
  21418.       IF (KPRINT.NE.1 .OR. IPASS.NE.0) THEN
  21419.          IF (KPRINT.GE.3 .OR. IPASS.EQ.0) THEN
  21420.             WRITE (LUN,830)
  21421.             WRITE (LUN,840) NUMORT
  21422.             WRITE (LUN,850) (WORK(J),J = 1, NUMORT)
  21423.             WRITE (LUN,860)
  21424.             DO 60 J = 1, NXPTS
  21425.                MSG = 'PASS'
  21426.                ABSER = ABS(YANS(1,J)-Y(1,J))
  21427.                RELER = ABSER/ABS(YANS(1,J))
  21428.                IF (RELER.GT.TOL .AND. ABSER.GT.TOL) MSG = 'FAIL'
  21429.                ABSER = ABS(YANS(2,J)-Y(2,J))
  21430.                RELER = ABSER/ABS(YANS(2,J))
  21431.                IF (RELER.GT.TOL .AND. ABSER.GT.TOL) MSG = 'FAIL'
  21432.                WRITE (LUN,870) XPTS(J),Y(1,J),Y(2,J),YANS(1,J),
  21433.      *            YANS(2,J),MSG
  21434.    60       CONTINUE
  21435.          ENDIF
  21436.       ENDIF
  21437. C
  21438. C-----SEND MESSAGE INDICATING PASSAGE OR FAILURE OF TESTS.
  21439. C
  21440.       CALL PASS (LUN, 1, IPASS)
  21441. C
  21442. C-----ERROR MESSAGE TESTS.
  21443. C
  21444.       IF (KPRINT.EQ.1) GO TO 190
  21445.       KONT = 1
  21446.       WRITE (LUN,880)
  21447. C
  21448. C-----NROWY LESS THAN NCOMP
  21449. C
  21450.       KOUNT = 1
  21451.       NROWY = 1
  21452.   150 DO 160 I = 1, 15
  21453.         IWORK(I) = 0
  21454.   160 CONTINUE
  21455.       CALL BVSUP(Y,NROWY,NCOMP,XPTS,NXPTS,A,NROWA,ALPHA,NIC,B,NROWB,
  21456.      1     BETA,NFC,IGOFX,RE,AE,IFLAG,WORK,NDW,IWORK,NDIW,NEQIVP)
  21457.       GO TO (80,90,100,110,120,130,140), KOUNT
  21458. C
  21459.    80 WRITE (LUN,900) IFLAG
  21460.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  21461.       KONT = KONT + 1
  21462. C
  21463. C-----IGOFX NOT EQUAL TO 0 OR 1
  21464. C
  21465.       KOUNT = 2
  21466.       NROWY = 2
  21467.       IGOFX = 3
  21468.       GO TO 150
  21469. C
  21470.    90 WRITE (LUN,900) IFLAG
  21471.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  21472.       KONT = KONT + 1
  21473. C
  21474. C-----RE OR AE NEGATIVE
  21475. C
  21476.       KOUNT = 3
  21477.       IGOFX = 1
  21478.       RE = -1.
  21479.       AE = -2.
  21480.       GO TO 150
  21481. C
  21482.   100 WRITE (LUN,900) IFLAG
  21483.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  21484.       KONT = KONT + 1
  21485. C
  21486. C-----NROWA LESS THAN NIC
  21487. C
  21488.       KOUNT = 4
  21489.       RE = 1.0E-05
  21490.       AE = 1.0E-05
  21491.       NROWA = 0
  21492. C
  21493.   110 WRITE (LUN,900) IFLAG
  21494.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  21495.       KONT = KONT + 1
  21496. C-----NROWB LESS THAN NFC
  21497.       KOUNT = 5
  21498.       NROWA = 2
  21499.       NROWB = 0
  21500. C
  21501.   120 WRITE (LUN,900) IFLAG
  21502.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  21503.       KONT = KONT + 1
  21504. C-----STORAGE ALLOCATION IS INSUFFICIENT
  21505.       KOUNT = 6
  21506.       NROWB = 2
  21507.       NDIW = 17
  21508.       GO TO 150
  21509. C
  21510.   130 WRITE (LUN,910) IFLAG
  21511.       IF (IFLAG .EQ. -1) ITMP(KONT) = 1
  21512.       KONT = KONT + 1
  21513. C-----INCORRECT ORDERING OF XPTS
  21514.       KOUNT = 7
  21515.       NDIW = 100
  21516.       SVE = XPTS(1)
  21517.       XPTS(1) = XPTS(4)
  21518.       XPTS(4) = SVE
  21519.       GO TO 150
  21520. C
  21521.   140 WRITE (LUN,900) IFLAG
  21522.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  21523. C
  21524. C-----SEE IF IFLAG TESTS PASSED
  21525. C
  21526.   170 IPSS = 1
  21527.       DO 180 I = 1, KONT
  21528.          IPSS = IPSS*ITMP(I)
  21529.   180 CONTINUE
  21530. C
  21531.       CALL PASS (LUN, 2, IPSS)
  21532. C
  21533. C     SEE IF ALL TESTS PASSED.
  21534. C
  21535.       IPASS = IPASS*IPSS
  21536. C
  21537.   190 IF (IPASS .EQ. 1 .AND. KPRINT .GT. 1) WRITE (LUN,980)
  21538.       IF (IPASS .EQ. 0 .AND. KPRINT .NE. 0) WRITE (LUN,990)
  21539.       RETURN
  21540. C
  21541.   800 FORMAT ('1')
  21542.   810 FORMAT (/' BVSUP QUICK CHECK')
  21543.   820 FORMAT (10X,'IFLAG =',I2)
  21544.   830 FORMAT (/' ACCURACY TEST')
  21545.   840 FORMAT (/' NUMBER OF ORTHONORMALIZATIONS =',I3)
  21546.   850 FORMAT (/' ORTHONORMALIZATION POINTS ARE'/(1X,4F10.2))
  21547.   860 FORMAT (//20X,'CALCULATION',30X,'TRUE SOLUTION'/
  21548.      *   2X,'X',14X,'Y',17X,'Y-PRIME',15X,'Y',17X,'Y-PRIME'/)
  21549.   870 FORMAT (F5.1,4E20.7,5X,A)
  21550.   880 FORMAT (/' (7) TESTS OF IFLAG VALUES')
  21551.   900 FORMAT (/' IFLAG SHOULD BE -2, IFLAG =',I3)
  21552.   910 FORMAT (/' IFLAG SHOULD BE -1, IFLAG =',I3)
  21553.   980 FORMAT (/' ****************BVSUP PASSED ALL TESTS***************')
  21554.   990 FORMAT (/' ****************BVSUP FAILED SOME TESTS**************')
  21555.       END
  21556. *DECK QXCRT
  21557.       SUBROUTINE QXCRT (LUN, KPRINT, IPASS)
  21558. C***BEGIN PROLOGUE  QXCRT
  21559. C***PURPOSE
  21560. C***LIBRARY   SLATEC
  21561. C***KEYWORDS  QUICK CHECK
  21562. C***AUTHOR  (UNKNOWN)
  21563. C***DESCRIPTION
  21564. C
  21565. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  21566. C     *                                                               *
  21567. C     *                        F I S H P A K                          *
  21568. C     *                                                               *
  21569. C     *                                                               *
  21570. C     *     A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF      *
  21571. C     *                                                               *
  21572. C     *      SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS        *
  21573. C     *                                                               *
  21574. C     *                  (VERSION  3 , JUNE 1979)                     *
  21575. C     *                                                               *
  21576. C     *                             BY                                *
  21577. C     *                                                               *
  21578. C     *        JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET         *
  21579. C     *                                                               *
  21580. C     *                             OF                                *
  21581. C     *                                                               *
  21582. C     *         THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH          *
  21583. C     *                                                               *
  21584. C     *                BOULDER, COLORADO  (80307)  U.S.A.             *
  21585. C     *                                                               *
  21586. C     *                   WHICH IS SPONSORED BY                       *
  21587. C     *                                                               *
  21588. C     *              THE NATIONAL SCIENCE FOUNDATION                  *
  21589. C     *                                                               *
  21590. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  21591. C
  21592. C
  21593. C          PROGRAM TO ILLUSTRATE THE USE OF SUBROUTINE HWSCRT TO SOLVE
  21594. C     THE EQUATION
  21595. C
  21596. C     (D/DX)(DU/DX) + (D/DY)(DU/DY) - 4*U
  21597. C
  21598. C     = (2 - (4 + PI**2/4)*X**2)*COS((Y+1)*PI/2)
  21599. C
  21600. C     WITH THE BOUNDARY CONDITIONS
  21601. C     ON THE RECTANGLE 0 .LT. X .LT. 2, -1 .LT. Y .LT. 3 WITH THE
  21602. C
  21603. C     U(0,Y) = 0
  21604. C                                          -1 .LE. Y .LE. 3
  21605. C     (DU/DX)(2,Y) = 4*COS((Y+1)*PI/2)
  21606. C
  21607. C     AND WITH U PERIODIC IN Y.
  21608. C          THE X-INTERVAL WILL BE DIVIDED INTO 40 PANELS AND THE
  21609. C     Y-INTERVAL WILL BE DIVIDED INTO 80 PANELS.
  21610. C
  21611. C***ROUTINES CALLED  HWSCRT, PIMACH
  21612. C***REVISION HISTORY  (YYMMDD)
  21613. C   800103  DATE WRITTEN
  21614. C   890718  Changed computation of PI to use PIMACH.  (WRB)
  21615. C   890911  Removed unnecessary intrinsics.  (WRB)
  21616. C   890911  REVISION DATE from Version 3.2
  21617. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  21618. C   901010  Added PASS/FAIL message and cleaned up FORMATs.  (RWC)
  21619. C***END PROLOGUE  QXCRT
  21620.       DIMENSION F(45,82), BDB(81), W(1200), X(41), Y(81)
  21621. C***FIRST EXECUTABLE STATEMENT  QXCRT
  21622. C
  21623. C     FROM DIMENSION STATEMENT WE GET VALUE OF IDIMF.  ALSO NOTE THAT W
  21624. C     IS DIMENSIONED 6*(N+1) + 8*(M+1).
  21625. C
  21626.       IDIMF = 45
  21627.       ERMAX=1.E-3
  21628.       A = 0.
  21629.       B = 2.
  21630.       M = 40
  21631.       MBDCND = 2
  21632.       C = -1.
  21633.       D = 3.
  21634.       N = 80
  21635.       NBDCND = 0
  21636.       ELMBDA = -4.
  21637. C
  21638. C     AUXILIARY QUANTITIES.
  21639. C
  21640.       PI = PIMACH(DUM)
  21641.       PIBY2 = PI/2.
  21642.       PISQ = PI**2
  21643.       MP1 = M+1
  21644.       NP1 = N+1
  21645. C
  21646. C     GENERATE AND STORE GRID POINTS FOR THE PURPOSE OF COMPUTING
  21647. C     BOUNDARY DATA AND THE RIGHT SIDE OF THE HELMHOLTZ EQUATION.
  21648. C
  21649.       DO 101 I=1,MP1
  21650.          X(I) = (I-1)/20.0E0
  21651.   101 CONTINUE
  21652.       DO 102 J=1,NP1
  21653.          Y(J) = -1.0E0+(J-1)/20.0E0
  21654.   102 CONTINUE
  21655. C
  21656. C     GENERATE BOUNDARY DATA.
  21657. C
  21658.       DO 103 J=1,NP1
  21659.          BDB(J) = 4.*COS((Y(J)+1.)*PIBY2)
  21660.   103 CONTINUE
  21661. C
  21662. C     BDA, BDC, AND BDD ARE DUMMY VARIABLES.
  21663. C
  21664.       DO 104 J=1,NP1
  21665.          F(1,J) = 0.
  21666.   104 CONTINUE
  21667. C
  21668. C     GENERATE RIGHT SIDE OF EQUATION.
  21669. C
  21670.       DO 106 I=2,MP1
  21671.          DO 105 J=1,NP1
  21672.             F(I,J) = (2.-(4.+PISQ/4.)*X(I)**2)*COS((Y(J)+1.)*PIBY2)
  21673.   105    CONTINUE
  21674.   106 CONTINUE
  21675.       CALL HWSCRT(A,B,M,MBDCND,BDA,BDB,C,D,N,NBDCND,BDC,BDD,ELMBDA,F,
  21676.      1             IDIMF,PERTRB,IERROR,W)
  21677. C
  21678. C     COMPUTE DISCRETIZATION ERROR.  THE EXACT SOLUTION IS
  21679. C                U(X,Y) = X**2*COS((Y+1)*PIBY2)
  21680. C
  21681.       ERR = 0.
  21682.       DO 108 I=1,MP1
  21683.          DO 107 J=1,NP1
  21684.             Z = ABS(F(I,J)-X(I)**2*COS((Y(J)+1.)*PIBY2))
  21685.             IF (Z .GT. ERR) ERR = Z
  21686.   107    CONTINUE
  21687.   108 CONTINUE
  21688. C
  21689.       IPASS = 1
  21690.       IF (ERR.GT.ERMAX) IPASS = 0
  21691.       IF (KPRINT.EQ.0) RETURN
  21692.       IF (KPRINT.GE.2 .OR. IPASS.EQ.0) THEN
  21693.          WRITE (LUN,1001) IERROR,ERR,INT(W(1))
  21694.          IF (IPASS.EQ.1) THEN
  21695.             WRITE (LUN, 1002)
  21696.          ELSE
  21697.             WRITE (LUN, 1003)
  21698.          ENDIF
  21699.       ENDIF
  21700.       RETURN
  21701. C
  21702.  1001 FORMAT ('1',20X,'SUBROUTINE HWSCRT EXAMPLE'///
  21703.      1        10X,'THE OUTPUT FROM THE NCAR CONTROL DATA 7600 WAS'//
  21704.      2        32X,'IERROR = 0'/
  21705.      3        18X,'DISCRETIZATION ERROR = 5.36508E-04'/
  21706.      4        12X,'REQUIRED LENGTH OF W ARRAY = 880'//
  21707.      5        10X,'THE OUTPUT FROM YOUR COMPUTER IS'//
  21708.      6        32X,'IERROR =',I2/
  21709.      7        18X,'DISCRETIZATION ERROR =',1PE12.5/
  21710.      8        12X,'REQUIRED LENGTH OF W ARRAY =',I4)
  21711.  1002 FORMAT (60X,'PASS'/)
  21712.  1003 FORMAT (60X,'FAIL'/)
  21713.       END
  21714. *DECK QXCSP
  21715.       SUBROUTINE QXCSP (LUN, KPRINT, IPASS)
  21716. C***BEGIN PROLOGUE  QXCSP
  21717. C***PURPOSE
  21718. C***LIBRARY   SLATEC
  21719. C***KEYWORDS  QUICK CHECK
  21720. C***AUTHOR  (UNKNOWN)
  21721. C***DESCRIPTION
  21722. C
  21723. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  21724. C     *                                                               *
  21725. C     *                        F I S H P A K                          *
  21726. C     *                                                               *
  21727. C     *                                                               *
  21728. C     *     A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF      *
  21729. C     *                                                               *
  21730. C     *      SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS        *
  21731. C     *                                                               *
  21732. C     *                  (VERSION  3 , JUNE 1979)                     *
  21733. C     *                                                               *
  21734. C     *                             BY                                *
  21735. C     *                                                               *
  21736. C     *        JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET         *
  21737. C     *                                                               *
  21738. C     *                             OF                                *
  21739. C     *                                                               *
  21740. C     *         THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH          *
  21741. C     *                                                               *
  21742. C     *                BOULDER, COLORADO  (80307)  U.S.A.             *
  21743. C     *                                                               *
  21744. C     *                   WHICH IS SPONSORED BY                       *
  21745. C     *                                                               *
  21746. C     *              THE NATIONAL SCIENCE FOUNDATION                  *
  21747. C     *                                                               *
  21748. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  21749. C
  21750. C
  21751. C     PROGRAM TO ILLUSTRATE THE USE OF HWSCSP
  21752. C
  21753. C***ROUTINES CALLED  HWSCSP, PIMACH
  21754. C***REVISION HISTORY  (YYMMDD)
  21755. C   800103  DATE WRITTEN
  21756. C   890718  Changed computation of PI to use PIMACH.  (WRB)
  21757. C   890911  Removed unnecessary intrinsics.  (WRB)
  21758. C   890911  REVISION DATE from Version 3.2
  21759. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  21760. C   901010  Added PASS/FAIL message and cleaned up FORMATs.  (RWC)
  21761. C***END PROLOGUE  QXCSP
  21762.       DIMENSION F(48,33), BDTF(33), W(1200), R(33), THETA(48)
  21763. C***FIRST EXECUTABLE STATEMENT  QXCSP
  21764. C
  21765. C     THE VALUE OF IDIMF IS THE FIRST DIMENSION OF F.  SINCE M=36, N=32,
  21766. C     L=N THEREFORE K=5 AND W IS DIMENSIONED 2*(L+1)*(K-1) + 6*(M+N)
  21767. C     + MAX(4*N,6*M) + 14 = 902.
  21768. C
  21769.       ERMAX=1.E-3
  21770.       PI = PIMACH(DUM)
  21771.       INTL = 0
  21772.       TS = 0.
  21773.       TF = PI/2.
  21774.       M = 36
  21775.       MBDCND = 6
  21776.       RS = 0.
  21777.       RF = 1.
  21778.       N = 32
  21779.       NBDCND = 5
  21780.       ELMBDA = 0.
  21781.       IDIMF = 48
  21782. C
  21783. C     GENERATE AND STORE GRID POINTS FOR THE PURPOSE OF COMPUTING THE
  21784. C     BOUNDARY DATA AND THE RIGHT SIDE OF THE EQUATION.
  21785. C
  21786.       MP1 = M+1
  21787.       DTHETA = TF/M
  21788.       DO 101 I=1,MP1
  21789.          THETA(I) = (I-1)*DTHETA
  21790.   101 CONTINUE
  21791.       NP1 = N+1
  21792.       DR = 1.0E0/N
  21793.       DO 102 J=1,NP1
  21794.          R(J) = (J-1)*DR
  21795.   102 CONTINUE
  21796. C
  21797. C     GENERATE NORMAL DERIVATIVE DATA AT EQUATOR
  21798. C
  21799.       DO 103 J=1,NP1
  21800.          BDTF(J) = 0.
  21801.   103 CONTINUE
  21802. C
  21803. C     COMPUTE BOUNDARY DATA ON THE SURFACE OF THE SPHERE
  21804. C
  21805.       DO 104 I=1,MP1
  21806.          F(I,N+1) = COS(THETA(I))**4
  21807.   104 CONTINUE
  21808. C
  21809. C     COMPUTE RIGHT SIDE OF EQUATION
  21810. C
  21811.       DO 106 I=1,MP1
  21812.          CI4 = 12.0E0*COS(THETA(I))**2
  21813.          DO 105 J=1,N
  21814.             F(I,J) = CI4*R(J)**2
  21815.   105    CONTINUE
  21816.   106 CONTINUE
  21817. C
  21818.       CALL HWSCSP (INTL,TS,TF,M,MBDCND,BDTS,BDTF,RS,RF,N,NBDCND,BDRS,
  21819.      1             BDRF,ELMBDA,F,IDIMF,PERTRB,IERROR,W)
  21820. C
  21821. C     COMPUTE DISCRETIZATION ERROR
  21822. C
  21823.       ERR = 0.
  21824.       DO 108 I=1,MP1
  21825.          CI4 = COS(THETA(I))**4
  21826.          DO 107 J=1,N
  21827.             Z = ABS(F(I,J)-CI4*R(J)**4)
  21828.             IF (Z .GT. ERR) ERR = Z
  21829.   107    CONTINUE
  21830.   108 CONTINUE
  21831. C
  21832.       IPASS = 1
  21833.       IF (ERR.GT.ERMAX) IPASS = 0
  21834.       IF (KPRINT.NE.0) THEN
  21835.          IF (KPRINT.GE.2 .OR. IPASS.EQ.0) THEN
  21836.             WRITE (LUN,1001) IERROR,ERR,INT(W(1))
  21837.             IF (IPASS.EQ.1) THEN
  21838.                WRITE (LUN, 1003)
  21839.             ELSE
  21840.                WRITE (LUN, 1004)
  21841.             ENDIF
  21842.          ENDIF
  21843.       ENDIF
  21844. C
  21845. C     THE FOLLOWING PROGRAM ILLUSTRATES THE USE OF HWSCSP TO SOLVE
  21846. C     A THREE DIMENSIONAL PROBLEM WHICH HAS LONGITUDINAL DEPENDENCE
  21847. C
  21848.       MBDCND = 2
  21849.       NBDCND = 1
  21850.       DPHI = PI/72.
  21851.       ELMBDA = -2.0E0*(1.0E0-COS(DPHI))/DPHI**2
  21852. C
  21853. C     COMPUTE BOUNDARY DATA ON THE SURFACE OF THE SPHERE
  21854. C
  21855.       DO 109 I=1,MP1
  21856.          F(I,N+1) = SIN(THETA(I))
  21857.   109 CONTINUE
  21858. C
  21859. C     COMPUTE RIGHT SIDE OF THE EQUATION
  21860. C
  21861.       DO 111 J=1,N
  21862.          DO 110 I=1,MP1
  21863.             F(I,J) = 0.
  21864.   110    CONTINUE
  21865.   111 CONTINUE
  21866. C
  21867.       CALL HWSCSP (INTL,TS,TF,M,MBDCND,BDTS,BDTF,RS,RF,N,NBDCND,BDRS,
  21868.      1             BDRF,ELMBDA,F,IDIMF,PERTRB,IERROR,W)
  21869. C
  21870. C     COMPUTE DISCRETIZATION ERROR   (FOURIER COEFFICIENTS)
  21871. C
  21872.       ERR = 0.
  21873.       DO 113 I=1,MP1
  21874.          SI = SIN(THETA(I))
  21875.          DO 112 J=1,NP1
  21876.             Z = ABS(F(I,J)-R(J)*SI)
  21877.             IF (Z .GT. ERR) ERR = Z
  21878.   112    CONTINUE
  21879.   113 CONTINUE
  21880. C
  21881.       IF (ERR.GT.ERMAX) IPASS = 0
  21882.       IF (KPRINT.EQ.0) RETURN
  21883.       IF (KPRINT.GE.2 .OR. IPASS.EQ.0) THEN
  21884.          WRITE (LUN,1002) IERROR,ERR,INT(W(1))
  21885.          IF (IPASS.EQ.1) THEN
  21886.             WRITE (LUN, 1003)
  21887.          ELSE
  21888.             WRITE (LUN, 1004)
  21889.          ENDIF
  21890.       ENDIF
  21891.       RETURN
  21892. C
  21893.  1001 FORMAT ('1',20X,'SUBROUTINE HWSCSP EXAMPLE 1'///
  21894.      1        10X,'THE OUTPUT FROM THE NCAR CONTROL DATA 7600 WAS'//
  21895.      2        32X,'IERROR = 0'/
  21896.      3        18X,'DISCRETIZATION ERROR = 7.99842E-04'/
  21897.      4        12X,'REQUIRED LENGTH OF W ARRAY = 775'//
  21898.      5        10X,'THE OUTPUT FROM YOUR COMPUTER IS'//
  21899.      6        32X,'IERROR =',I2/
  21900.      7        18X,'DISCRETIZATION ERROR =',1PE12.5/
  21901.      8        12X,'REQUIRED LENGTH OF W ARRAY =',I4)
  21902.  1002 FORMAT ('1',20X,'SUBROUTINE HWSCSP EXAMPLE 2'///
  21903.      1        10X,'THE OUTPUT FROM THE NCAR CONTROL DATA 7600 WAS'//
  21904.      2        32X,'IERROR = 0'/
  21905.      3        18X,'DISCRETIZATION ERROR = 5.86824E-05'/
  21906.      4        12X,'REQUIRED LENGTH OF W ARRAY = 775'//
  21907.      5        10X,'THE OUTPUT FROM YOUR COMPUTER IS'//
  21908.      6        32X,'IERROR =',I2/
  21909.      7        18X,'DISCRETIZATION ERROR =',1PE12.5/
  21910.      8        12X,'REQUIRED LENGTH OF W ARRAY =',I4)
  21911.  1003 FORMAT (60X,'PASS'/)
  21912.  1004 FORMAT (60X,'FAIL'/)
  21913.       END
  21914. *DECK QXCYL
  21915.       SUBROUTINE QXCYL (LUN, KPRINT, IPASS)
  21916. C***BEGIN PROLOGUE  QXCYL
  21917. C***PURPOSE
  21918. C***LIBRARY   SLATEC
  21919. C***KEYWORDS  QUICK CHECK
  21920. C***AUTHOR  (UNKNOWN)
  21921. C***DESCRIPTION
  21922. C
  21923. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  21924. C     *                                                               *
  21925. C     *                        F I S H P A K                          *
  21926. C     *                                                               *
  21927. C     *                                                               *
  21928. C     *     A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF      *
  21929. C     *                                                               *
  21930. C     *      SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS        *
  21931. C     *                                                               *
  21932. C     *                  (VERSION  3 , JUNE 1979)                     *
  21933. C     *                                                               *
  21934. C     *                             BY                                *
  21935. C     *                                                               *
  21936. C     *        JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET         *
  21937. C     *                                                               *
  21938. C     *                             OF                                *
  21939. C     *                                                               *
  21940. C     *         THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH          *
  21941. C     *                                                               *
  21942. C     *                BOULDER, COLORADO  (80307)  U.S.A.             *
  21943. C     *                                                               *
  21944. C     *                   WHICH IS SPONSORED BY                       *
  21945. C     *                                                               *
  21946. C     *              THE NATIONAL SCIENCE FOUNDATION                  *
  21947. C     *                                                               *
  21948. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  21949. C
  21950. C
  21951. C          PROGRAM TO ILLUSTRATE THE USE OF SUBROUTINE HWSCYL TO SOLVE
  21952. C     THE EQUATION
  21953. C
  21954. C     (1/R)(D/DR)(R*(DU/DR)) + (D/DZ)(DU/DZ)
  21955. C
  21956. C     = (2*R*Z)**2*(4*Z**2 + 3*R**2)
  21957. C
  21958. C     ON THE RECTANGLE 0 .LT. R .LT. 1, 0 .LT. Z .LT. 1 WITH THE
  21959. C     BOUNDARY CONDITIONS
  21960. C
  21961. C     U(0,Z) UNSPECIFIED
  21962. C                                            0 .LE. Z .LE. 1
  21963. C     (DU/DR)(1,Z) = 4*Z**4
  21964. C
  21965. C     AND
  21966. C
  21967. C     (DU/DZ)(R,0) = 0
  21968. C                                            0 .LE. R .LE. 1
  21969. C     (DU/DZ)(R,1) = 4*R**4 .
  21970. C
  21971. C          THE R-INTERVAL WILL BE DIVIDED INTO 50 PANELS AND THE
  21972. C     Z-INTERVAL WILL BE DIVIDED INTO 100 PANELS.
  21973. C
  21974. C***ROUTINES CALLED  HWSCYL
  21975. C***REVISION HISTORY  (YYMMDD)
  21976. C   800103  DATE WRITTEN
  21977. C   890911  Removed unnecessary intrinsics.  (WRB)
  21978. C   890911  REVISION DATE from Version 3.2
  21979. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  21980. C   901010  Added PASS/FAIL message and cleaned up FORMATs.  (RWC)
  21981. C***END PROLOGUE  QXCYL
  21982.       DIMENSION F(75,105), BDA(101), BDB(101), BDC(51), BDD(51),
  21983.      1   W(1200), R(51), Z(101)
  21984. C***FIRST EXECUTABLE STATEMENT  QXCYL
  21985. C
  21986. C     FROM DIMENSION STATEMENT WE GET VALUE OF IDIMF.  ALSO NOTE THAT W
  21987. C     IS DIMENSIONED 6*(N+1) + 8*(M+1).
  21988. C
  21989.       IDIMF = 75
  21990.       ERMAX=1.E-3
  21991.       A = 0.
  21992.       B = 1.
  21993.       M = 50
  21994.       MBDCND = 6
  21995.       C = 0.
  21996.       D = 1.
  21997.       N = 100
  21998.       NBDCND = 3
  21999.       ELMBDA = 0.
  22000. C
  22001. C     AUXILIARY QUANTITIES.
  22002. C
  22003.       MP1 = M+1
  22004.       NP1 = N+1
  22005. C
  22006. C     GENERATE AND STORE GRID POINTS FOR THE PURPOSE OF COMPUTING
  22007. C     BOUNDARY DATA AND THE RIGHT SIDE OF THE POISSON EQUATION.
  22008. C
  22009.       DO 101 I=1,MP1
  22010.          R(I) = (I-1)/50.0E0
  22011.   101 CONTINUE
  22012.       DO 102 J=1,NP1
  22013.          Z(J) = (J-1)/100.0E0
  22014.   102 CONTINUE
  22015. C
  22016. C     GENERATE BOUNDARY DATA.
  22017. C
  22018.       DO 103 J=1,NP1
  22019.          BDB(J) = 4.*Z(J)**4
  22020.   103 CONTINUE
  22021.       DO 104 I=1,MP1
  22022.          BDC(I) = 0.
  22023.          BDD(I) = 4.*R(I)**4
  22024.   104 CONTINUE
  22025. C
  22026. C     BDA IS A DUMMY VARIABLE.
  22027. C
  22028. C
  22029. C     GENERATE RIGHT SIDE OF EQUATION.
  22030. C
  22031.       DO 106 I=1,MP1
  22032.          DO 105 J=1,NP1
  22033.             F(I,J) = 4.*R(I)**2*Z(J)**2*(4.*Z(J)**2+3.*R(I)**2)
  22034.   105    CONTINUE
  22035.   106 CONTINUE
  22036.       CALL HWSCYL(A,B,M,MBDCND,BDA,BDB,C,D,N,NBDCND,BDC,BDD,ELMBDA,F,
  22037.      1             IDIMF,PERTRB,IERROR,W)
  22038. C
  22039. C     COMPUTE DISCRETIZATION ERROR BY MINIMIZING OVER ALL A THE FUNCTION
  22040. C     NORM(F(I,J) - A*1 - U(R(I),Z(J))).  THE EXACT SOLUTION IS
  22041. C                U(R,Z) = (R*Z)**4 + ARBITRARY CONSTANT.
  22042. C
  22043.       X = 0.
  22044.       DO 108 I=1,MP1
  22045.          DO 107 J=1,NP1
  22046.             X = X+F(I,J)-(R(I)*Z(J))**4
  22047.   107    CONTINUE
  22048.   108 CONTINUE
  22049.       X = X/(NP1*MP1)
  22050.       DO 110 I=1,MP1
  22051.          DO 109 J=1,NP1
  22052.             F(I,J) = F(I,J)-X
  22053.   109    CONTINUE
  22054.   110 CONTINUE
  22055.       ERR = 0.
  22056.       DO 112 I=1,MP1
  22057.          DO 111 J=1,NP1
  22058.             X = ABS(F(I,J)-(R(I)*Z(J))**4)
  22059.             IF (X .GT. ERR) ERR = X
  22060.   111    CONTINUE
  22061.   112 CONTINUE
  22062. C
  22063.       IPASS = 1
  22064.       IF (ERR.GT.ERMAX) IPASS = 0
  22065.       IF (KPRINT.EQ.0) RETURN
  22066.       IF (KPRINT.GE.2 .OR. IPASS.EQ.0) THEN
  22067.          WRITE (LUN,1001) IERROR,PERTRB,ERR,INT(W(1))
  22068.          IF (IPASS.EQ.1) THEN
  22069.             WRITE (LUN, 1002)
  22070.          ELSE
  22071.             WRITE (LUN, 1003)
  22072.          ENDIF
  22073.       ENDIF
  22074.       RETURN
  22075. C
  22076.  1001 FORMAT ('1',20X,'SUBROUTINE HWSCYL EXAMPLE'///
  22077.      1        10X,'THE OUTPUT FROM THE NCAR CONTROL DATA 7600 WAS'//
  22078.      2        32X,'IERROR = 0'/
  22079.      3        32X,'PERTRB = 2.26734E-04'/
  22080.      4        18X,'DISCRETIZATION ERROR = 3.73672E-04'/
  22081.      5        12X,'REQUIRED LENGTH OF W ARRAY = 1118'//
  22082.      6        10X,'THE OUTPUT FROM YOUR COMPUTER IS'//
  22083.      7        32X,'IERROR =',I2/
  22084.      8        32X,'PERTRB =',E12.5/
  22085.      9        18X,'DISCRETIZATION ERROR =',1PE12.5/
  22086.      A        12X,'REQUIRED LENGTH OF W ARRAY =',I4)
  22087.  1002 FORMAT (60X,'PASS'/)
  22088.  1003 FORMAT (60X,'FAIL'/)
  22089.       END
  22090. *DECK QXDABM
  22091.       SUBROUTINE QXDABM (LUN, KPRINT, IPASS)
  22092. C***BEGIN PROLOGUE  QXDABM
  22093. C***PURPOSE  Test the DEPAC routine DDEABM.
  22094. C***LIBRARY   SLATEC
  22095. C***TYPE      DOUBLE PRECISION (QXABM-S, QXDABM-D)
  22096. C***KEYWORDS  QUICK CHECK
  22097. C***AUTHOR  Chow, Jeff, (LANL)
  22098. C***DESCRIPTION
  22099. C
  22100. C *Usage:
  22101. C
  22102. C        INTEGER  LUN, KPRINT, IPASS
  22103. C
  22104. C        CALL QXDABM (LUN, KPRINT, IPASS)
  22105. C
  22106. C *Arguments:
  22107. C
  22108. C     LUN   :IN  is the unit number to which output is to be written.
  22109. C
  22110. C     KPRINT:IN  controls the amount of output, as specified in the
  22111. C                SLATEC Guidelines.
  22112. C
  22113. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  22114. C                IPASS=0 indicates one or more tests failed.
  22115. C
  22116. C *Description:
  22117. C
  22118. C   DDEABM is tested by solving the equations of motion of a body
  22119. C   moving in a plane about a spherical earth, namely
  22120. C           (D/DT)(D/DT)X = -G*X/R**3
  22121. C           (D/DT)(D/DT)Y = -G*Y/R**3
  22122. C   where G = 1, R = SQRT(X**2 + Y**2) and
  22123. C           X(0) = 1
  22124. C           (D/DT)X(0) = 0
  22125. C           Y(0) = 0
  22126. C           (D/DT)Y(0) = 1.
  22127. C
  22128. C***ROUTINES CALLED  D1MACH, DDEABM, DFDEQC
  22129. C***REVISION HISTORY  (YYMMDD)
  22130. C   810801  DATE WRITTEN
  22131. C   890618  REVISION DATE from Version 3.2
  22132. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  22133. C   900415  Code extensively revised.  (WRB)
  22134. C***END PROLOGUE  QXDABM
  22135. C
  22136. C     Declare arguments.
  22137. C
  22138.       INTEGER  LUN, KPRINT, IPASS
  22139. C
  22140. C     Declare local variables.
  22141. C
  22142.       INTEGER  IDID, INFO(15), IPAR, IWORK(51), N, LIW, LRW, NSTEP
  22143.       DOUBLE PRECISION ABSERR, D1MACH, R, RELERR, RELTOL, RPAR,
  22144.      +                 RWORK(214), T, TOUT, U(4)
  22145.       EXTERNAL DFDEQC
  22146. C***FIRST EXECUTABLE STATEMENT  QXDABM
  22147.       IF (KPRINT .GE. 2)  WRITE (LUN, 9000)
  22148. C
  22149. C     Initialize problem.
  22150. C
  22151.       N = 4
  22152.       LRW = 214
  22153.       LIW = 51
  22154.       T = 0.0D0
  22155.       TOUT = 8.0D0*ATAN(1.0D0)
  22156.       U(1) = 1.0D0
  22157.       U(2) = 0.0D0
  22158.       U(3) = 0.0D0
  22159.       U(4) = 1.0D0
  22160.       IPASS = 1
  22161.       NSTEP = 0
  22162.       RELTOL = SQRT(D1MACH(4))
  22163.       RELERR = 0.1D0*RELTOL
  22164.       ABSERR = RELERR**1.5D0
  22165.       INFO(1) = 0
  22166.       INFO(2) = 0
  22167.       INFO(3) = 1
  22168.       INFO(4) = 0
  22169.       IF (KPRINT .GT. 2) WRITE (LUN, 9010) RELERR, ABSERR, T, (1.0D0)
  22170. C
  22171.   100 CALL DDEABM (DFDEQC, N, T, U, TOUT, INFO, RELERR, ABSERR,
  22172.      +             IDID, RWORK, LRW, IWORK, LIW, RPAR, IPAR)
  22173.       R = SQRT(U(1)*U(1)+U(2)*U(2))
  22174.       IF (ABS(R-1.0D0) .GT. RELTOL) IPASS = 0
  22175.       IF (KPRINT .GT. 2) WRITE (LUN, 9020) T, R
  22176.       INFO(1) = 1
  22177.       IF (IDID .EQ. 1) GO TO 100
  22178. C
  22179. C     For the double precision version, we allow the integrator to take
  22180. C     up to 2000 steps before we declare failure.
  22181. C
  22182.       IF (IDID .EQ. -1) THEN
  22183.          NSTEP = NSTEP + 500
  22184.          IF (NSTEP .LT. 2000) GOTO 100
  22185.       ENDIF
  22186. C
  22187. C     Finish up.
  22188. C
  22189.       IF (IDID .LT. 1) IPASS = 0
  22190.       IF (KPRINT.GT.1 .AND. IDID.LT.1)  WRITE (LUN, 9030) IDID
  22191.       IF (KPRINT.GT.1 .AND. IPASS.EQ.1) WRITE (LUN, 9040)
  22192.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN, 9050)
  22193.       RETURN
  22194. C
  22195. C     FORMATs.
  22196. C
  22197.  9000 FORMAT ('1'/' ------------  DDEABM QUICK CHECK OUTPUT',
  22198.      +        ' ------------')
  22199.  9010 FORMAT (/ ' RELERR = ', D16.8, '   ABSERR =', D16.8 /
  22200.      +        12X, 'T', 19X, 'R' / 2D20.8)
  22201.  9020 FORMAT (2D20.8)
  22202.  9030 FORMAT (1X, 'ERROR RETURN FROM DDEABM.  IDID = ', I3)
  22203.  9040 FORMAT (/ ' ------------  DDEABM PASSED TESTS  ------------')
  22204.  9050 FORMAT (/ ' ************  DDEABM FAILED TESTS  ************')
  22205.       END
  22206. *DECK QXDBDF
  22207.       SUBROUTINE QXDBDF (LUN, KPRINT, IPASS)
  22208. C***BEGIN PROLOGUE  QXDBDF
  22209. C***PURPOSE  Test the DEPAC routine DDEBDF.
  22210. C***LIBRARY   SLATEC
  22211. C***TYPE      DOUBLE PRECISION (QXBDF-S, QXDBDF-D)
  22212. C***KEYWORDS  QUICK CHECK
  22213. C***AUTHOR  Chow, Jeff, (LANL)
  22214. C***DESCRIPTION
  22215. C
  22216. C *Usage:
  22217. C
  22218. C        INTEGER  LUN, KPRINT, IPASS
  22219. C
  22220. C        CALL QXDBDF (LUN, KPRINT, IPASS)
  22221. C
  22222. C *Arguments:
  22223. C
  22224. C     LUN   :IN  is the unit number to which output is to be written.
  22225. C
  22226. C     KPRINT:IN  controls the amount of output, as specified in the
  22227. C                SLATEC Guidelines.
  22228. C
  22229. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  22230. C                IPASS=0 indicates one or more tests failed.
  22231. C
  22232. C *Description:
  22233. C
  22234. C   DDEBDF is tested by solving the equations of motion of a body
  22235. C   moving in a plane about a spherical earth, namely
  22236. C           (D/DT)(D/DT)X = -G*X/R**3
  22237. C           (D/DT)(D/DT)Y = -G*Y/R**3
  22238. C   where G = 1, R = SQRT(X**2 + Y**2) and
  22239. C           X(0) = 1
  22240. C           (D/DT)X(0) = 0
  22241. C           Y(0) = 0
  22242. C           (D/DT)Y(0) = 1.
  22243. C
  22244. C***ROUTINES CALLED  D1MACH, DDEBDF, DFDEQC, DJAC
  22245. C***REVISION HISTORY  (YYMMDD)
  22246. C   810801  DATE WRITTEN
  22247. C   890618  REVISION DATE from Version 3.2
  22248. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  22249. C   900415  Code extensively revised.  (WRB)
  22250. C***END PROLOGUE  QXDBDF
  22251. C
  22252. C     Declare arguments.
  22253. C
  22254.       INTEGER  LUN, KPRINT, IPASS
  22255. C
  22256. C     Declare local variables.
  22257. C
  22258.       INTEGER  IDID, INFO(15), IPAR, IWORK(60), N, LIW, LRW, NSTEP
  22259.       DOUBLE PRECISION ABSERR, D1MACH, R, RELTOL, RELERR, RPAR,
  22260.      +                 RWORK(306), T, TOUT, U(4)
  22261.       EXTERNAL DFDEQC, DJAC
  22262. C***FIRST EXECUTABLE STATEMENT  QXDBDF
  22263.       IF (KPRINT .GE. 2)  WRITE (LUN, 9000)
  22264. C
  22265. C     Initialize problem.
  22266. C
  22267.       N = 4
  22268.       LRW = 306
  22269.       LIW = 60
  22270.       T = 0.0D0
  22271.       TOUT = 8.0D0*ATAN(1.0D0)
  22272.       U(1) = 1.0D0
  22273.       U(2) = 0.0D0
  22274.       U(3) = 0.0D0
  22275.       U(4) = 1.0D0
  22276.       IPASS = 1
  22277.       NSTEP = 0
  22278.       RELTOL = MAX(SQRT(D1MACH(4)),1.D-9)
  22279.       RELERR = MAX(0.0001D0*RELTOL,1.D-12)
  22280.       ABSERR = RELERR**1.5D0
  22281.       INFO(1) = 0
  22282.       INFO(2) = 0
  22283.       INFO(3) = 1
  22284.       INFO(4) = 0
  22285.       INFO(5) = 1
  22286.       INFO(6) = 0
  22287.       IF (KPRINT .GT. 2) WRITE (LUN, 9010) RELERR, ABSERR, T, (1.0D0)
  22288. C
  22289.   100 CALL DDEBDF (DFDEQC, N, T, U, TOUT, INFO, RELERR, ABSERR,
  22290.      +             IDID, RWORK, LRW, IWORK, LIW, RPAR, IPAR, DJAC)
  22291.       R = SQRT(U(1)*U(1)+U(2)*U(2))
  22292.       IF (ABS(R-1.0D0) .GT. RELTOL) IPASS = 0
  22293.       IF (KPRINT .GT. 2) WRITE (LUN, 9020) T, R
  22294.       INFO(1) = 1
  22295.       IF (IDID .EQ. 1) GO TO 100
  22296. C
  22297. C     For the double precision version, we allow the integrator to take
  22298. C     up to 2000 steps before we declare failure.
  22299. C
  22300.       IF (IDID .EQ. -1) THEN
  22301.          NSTEP = NSTEP + 500
  22302.          IF (NSTEP .LT. 2000) GOTO 100
  22303.       ENDIF
  22304. C
  22305. C     Finish up.
  22306. C
  22307.       IF (IDID .LT. 1) IPASS = 0
  22308.       IF (KPRINT.GT.1 .AND. IDID.LT.1)  WRITE (LUN, 9030) IDID
  22309.       IF (KPRINT.GT.1 .AND. IPASS.EQ.1) WRITE (LUN, 9040)
  22310.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN, 9050)
  22311.       RETURN
  22312. C
  22313. C     FORMATs.
  22314. C
  22315.  9000 FORMAT ('1'/' ------------  DDEBDF QUICK CHECK OUTPUT',
  22316.      +        ' ------------')
  22317.  9010 FORMAT (/ ' RELERR = ', D16.8, '   ABSERR =', D16.8 /
  22318.      +        12X, 'T', 19X, 'R' / 2D20.8)
  22319.  9020 FORMAT (2D20.8)
  22320.  9030 FORMAT (1X, 'ERROR RETURN FROM DDEBDF.  IDID = ', I3)
  22321.  9040 FORMAT (/ ' ------------  DDEBDF PASSED TESTS  ------------')
  22322.  9050 FORMAT (/ ' ************  DDEBDF FAILED TESTS  ************')
  22323.       END
  22324. *DECK QXDBVS
  22325.       SUBROUTINE QXDBVS (LUN, KPRINT, IPASS)
  22326. C***BEGIN PROLOGUE  QXDBVS
  22327. C***PURPOSE  Quick check for DBVSUP.
  22328. C***LIBRARY   SLATEC
  22329. C***TYPE      DOUBLE PRECISION (QXBVSP-S, QXDBVS-D)
  22330. C***AUTHOR  (UNKNOWN)
  22331. C***ROUTINES CALLED  DBVSUP, PASS
  22332. C***COMMON BLOCKS    DSAVEX
  22333. C***REVISION HISTORY  (YYMMDD)
  22334. C   ??????  DATE WRITTEN
  22335. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  22336. C   901014  Made editorial changes and added correct result to
  22337. C           output. (RWC)
  22338. C   910708  Minor modifications in use of KPRINT.  (WRB)
  22339. C***END PROLOGUE  QXDBVS
  22340.       INTEGER ITMP(9), IWORK(100)
  22341.       DOUBLE PRECISION WORK(1000),AE,RE,XSAVE,SVE,TERM,TOL
  22342.       DOUBLE PRECISION Y(4,15),XPTS(15),A(2,4),ALPHA(2),B(2,4),BETA(2),
  22343.      * YANS(2,15),RELER,ABSER
  22344.       CHARACTER*4 MSG
  22345.       COMMON /DSAVEX/ XSAVE, TERM
  22346.       DATA YANS(1,1),YANS(2,1),YANS(1,2),YANS(2,2),
  22347.      1     YANS(1,3),YANS(2,3),YANS(1,4),YANS(2,4),
  22348.      2     YANS(1,5),YANS(2,5),YANS(1,6),YANS(2,6),
  22349.      3     YANS(1,7),YANS(2,7),YANS(1,8),YANS(2,8),
  22350.      4     YANS(1,9),YANS(2,9),YANS(1,10),YANS(2,10),
  22351.      5     YANS(1,11),YANS(2,11),YANS(1,12),YANS(2,12),
  22352.      6     YANS(1,13),YANS(2,13),YANS(1,14),YANS(2,14),
  22353.      7     YANS(1,15),YANS(2,15)/
  22354.      8      5.000000000D+00,-6.888880126D-01, 8.609248635D+00,
  22355.      9     -1.083092311D+00, 1.674923836D+01,-2.072210073D+00,
  22356.      1      3.351098494D+01,-4.479263780D+00, 6.601103894D+01,
  22357.      2     -8.909222513D+00, 8.579580988D+01,-1.098742758D+01,
  22358.      3      1.106536877D+02,-1.402469444D+01, 1.421228220D+02,
  22359.      4     -1.742236546D+01, 1.803383474D+02,-2.086465851D+01,
  22360.      5      2.017054332D+02,-1.990879843D+01, 2.051622475D+02,
  22361.      6     -1.324886978D+01, 2.059197452D+02, 1.051529813D+01,
  22362.      7      1.972191446D+02, 9.320592785D+01, 1.556894846D+02,
  22363.      8      3.801682434D+02, 1.818989404D-12, 1.379853993D+03/
  22364.       DATA XPTS(1),XPTS(2),XPTS(3),XPTS(4),XPTS(5),
  22365.      1     XPTS(6),XPTS(7),XPTS(8),XPTS(9),XPTS(10),
  22366.      2     XPTS(11),XPTS(12),XPTS(13),XPTS(14),XPTS(15)/
  22367.      3     60.0D+00,55.0D+00,50.0D+00,45.0D+00,40.0D+00,38.0D+00,
  22368.      4     36.0D+00,34.0D+00,32.0D+00,31.0D+00,30.8D+00,30.6D+00,
  22369.      5     30.4D+00,30.2D+00,30.0D+00/
  22370. C***FIRST EXECUTABLE STATEMENT  QXDBVS
  22371.       IF (KPRINT.GE.2) THEN
  22372.          WRITE (LUN,800)
  22373.          WRITE (LUN,810)
  22374.       ENDIF
  22375. C
  22376. C-----INITIALIZE VARIABLES FOR TEST PROBLEM.
  22377. C
  22378.       DO 10 I = 1, 9
  22379.          ITMP(I) = 0
  22380.    10 CONTINUE
  22381. C
  22382.       TOL = 1.0D-03
  22383.       XSAVE = 0.0D+00
  22384.       NROWY = 4
  22385.       NCOMP = 2
  22386.       NXPTS = 15
  22387.       A(1,1) = 1.0D+00
  22388.       A(1,2) = 0.0D+00
  22389.       NROWA = 2
  22390.       ALPHA(1) = 5.0D+00
  22391.       NIC = 1
  22392.       B(1,1) = 1.0D+00
  22393.       B(1,2) = 0.0D+00
  22394.       NROWB = 2
  22395.       BETA(1) = 0.0D+00
  22396.       NFC = 1
  22397.       IGOFX = 1
  22398.       RE = 1.0D-05
  22399.       AE = 1.0D-05
  22400.       NDW = 1000
  22401.       NDIW = 100
  22402.       NEQIVP = 0
  22403.       IPASS = 1
  22404. C
  22405.       DO 20 I = 1, 15
  22406.          IWORK(I) = 0
  22407.    20 CONTINUE
  22408. C
  22409.       CALL DBVSUP(Y,NROWY,NCOMP,XPTS,NXPTS,A,NROWA,ALPHA,NIC,B,NROWB,
  22410.      1     BETA,NFC,IGOFX,RE,AE,IFLAG,WORK,NDW,IWORK,NDIW,NEQIVP)
  22411. C
  22412. C-----IF IFLAG = 0, WE HAVE A SUCCESSFUL SOLUTION; OTHERWISE, SKIP
  22413. C     THE ARGUMENT CHECKING AND GO TO THE END.
  22414. C
  22415.       IF (IFLAG.NE.0) THEN
  22416.          IPASS = 0
  22417.          IF (KPRINT .GT. 1) WRITE (LUN,820) IFLAG
  22418.          GO TO 170
  22419.       ENDIF
  22420. C
  22421. C-----CHECK THE ACCURACY OF THE SOLUTION.
  22422. C
  22423.       NUMORT = IWORK(1)
  22424.       DO 50 J = 1, NXPTS
  22425.          DO 40 L = 1, 2
  22426.             ABSER = ABS(YANS(L,J)-Y(L,J))
  22427.             RELER = ABSER/ABS(YANS(L,J))
  22428.             IF (RELER.GT.TOL .AND. ABSER.GT.TOL) IPASS = 0
  22429.    40    CONTINUE
  22430.    50 CONTINUE
  22431. C
  22432. C-----CHECK FOR SUPPRESSION OF PRINTING.
  22433. C
  22434.       IF (KPRINT.EQ.0 .OR. (KPRINT.EQ.1 .AND. IPASS.EQ.1)) GO TO 190
  22435. C
  22436.       IF (KPRINT.NE.1 .OR. IPASS.NE.0) THEN
  22437.          IF (KPRINT.GE.3 .OR. IPASS.EQ.0) THEN
  22438.             WRITE (LUN,830)
  22439.             WRITE (LUN,840) NUMORT
  22440.             WRITE (LUN,850) (WORK(J),J = 1, NUMORT)
  22441.             WRITE (LUN,860)
  22442.             DO 60 J = 1, NXPTS
  22443.                MSG = 'PASS'
  22444.                ABSER = ABS(YANS(1,J)-Y(1,J))
  22445.                RELER = ABSER/ABS(YANS(1,J))
  22446.                IF (RELER.GT.TOL .AND. ABSER.GT.TOL) MSG = 'FAIL'
  22447.                ABSER = ABS(YANS(2,J)-Y(2,J))
  22448.                RELER = ABSER/ABS(YANS(2,J))
  22449.                IF (RELER.GT.TOL .AND. ABSER.GT.TOL) MSG = 'FAIL'
  22450.                WRITE (LUN,870) XPTS(J),Y(1,J),Y(2,J),YANS(1,J),
  22451.      *            YANS(2,J),MSG
  22452.    60       CONTINUE
  22453.          ENDIF
  22454.       ENDIF
  22455. C
  22456. C-----SEND MESSAGE INDICATING PASSAGE OR FAILURE OF TESTS.
  22457. C
  22458.       CALL PASS (LUN, 1, IPASS)
  22459. C
  22460. C-----ERROR MESSAGE TESTS.
  22461. C
  22462.       IF (KPRINT.EQ.1) GO TO 190
  22463.       KONT = 1
  22464.       WRITE (LUN,880)
  22465. C
  22466. C-----NROWY LESS THAN NCOMP
  22467. C
  22468.       KOUNT = 1
  22469.       NROWY = 1
  22470.   150 DO 160 I = 1, 15
  22471.          IWORK(I) = 0
  22472.   160 CONTINUE
  22473.       CALL DBVSUP(Y,NROWY,NCOMP,XPTS,NXPTS,A,NROWA,ALPHA,NIC,B,NROWB,
  22474.      1     BETA,NFC,IGOFX,RE,AE,IFLAG,WORK,NDW,IWORK,NDIW,NEQIVP)
  22475.       GO TO (80,90,100,110,120,130,140), KOUNT
  22476. C
  22477.    80 WRITE (LUN,900) IFLAG
  22478.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  22479.       KONT = KONT + 1
  22480. C
  22481. C-----IGOFX NOT EQUAL TO 0 OR 1
  22482. C
  22483.       KOUNT = 2
  22484.       NROWY = 2
  22485.       IGOFX = 3
  22486.       GO TO 150
  22487. C
  22488.    90 WRITE (LUN,900) IFLAG
  22489.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  22490.       KONT = KONT + 1
  22491. C
  22492. C-----RE OR AE NEGATIVE
  22493. C
  22494.       KOUNT = 3
  22495.       IGOFX = 1
  22496.       RE = -1.0D+00
  22497.       AE = -2.0D+00
  22498.       GO TO 150
  22499. C
  22500.   100 WRITE (LUN,900) IFLAG
  22501.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  22502.       KONT = KONT + 1
  22503. C
  22504. C-----NROWA LESS THAN NIC
  22505. C
  22506.       KOUNT = 4
  22507.       RE = 1.0D-05
  22508.       AE = 1.0D-05
  22509.       NROWA = 0
  22510. C
  22511.   110 WRITE (LUN,900) IFLAG
  22512.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  22513.       KONT = KONT + 1
  22514. C-----NROWB LESS THAN NFC
  22515.       KOUNT = 5
  22516.       NROWA = 2
  22517.       NROWB = 0
  22518. C
  22519.   120 WRITE (LUN,900) IFLAG
  22520.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  22521.       KONT = KONT + 1
  22522. C-----STORAGE ALLOCATION IS INSUFFICIENT
  22523.       KOUNT = 6
  22524.       NROWB = 2
  22525.       NDIW = 17
  22526.       GO TO 150
  22527. C
  22528.   130 WRITE (LUN,910) IFLAG
  22529.       IF (IFLAG .EQ. -1) ITMP(KONT) = 1
  22530.       KONT = KONT + 1
  22531. C-----INCORRECT ORDERING OF XPTS
  22532.       KOUNT = 7
  22533.       NDIW = 100
  22534.       SVE = XPTS(1)
  22535.       XPTS(1) = XPTS(4)
  22536.       XPTS(4) = SVE
  22537.       GO TO 150
  22538. C
  22539.   140 WRITE (LUN,900) IFLAG
  22540.       IF (IFLAG .EQ. -2) ITMP(KONT) = 1
  22541. C
  22542. C-----SEE IF IFLAG TESTS PASSED
  22543. C
  22544.   170 IPSS = 1
  22545.       DO 180 I = 1, KONT
  22546.          IPSS = IPSS*ITMP(I)
  22547.   180 CONTINUE
  22548. C
  22549.       CALL PASS (LUN, 2, IPSS)
  22550. C
  22551. C-----SEE IF ALL TESTS PASSED.
  22552. C
  22553.       IPASS = IPASS*IPSS
  22554. C
  22555.   190 IF (IPASS .EQ. 1 .AND. KPRINT .GT. 1) WRITE (LUN,980)
  22556.       IF (IPASS .EQ. 0 .AND. KPRINT .NE. 0) WRITE (LUN,990)
  22557.       RETURN
  22558. C
  22559.   800 FORMAT ('1')
  22560.   810 FORMAT (/' DBVSUP QUICK CHECK')
  22561.   820 FORMAT (10X,'IFLAG =',I2)
  22562.   830 FORMAT (/' ACCURACY TEST')
  22563.   840 FORMAT (/' NUMBER OF ORTHONORMALIZATIONS =',I3)
  22564.   850 FORMAT (/' ORTHONORMALIZATION POINTS ARE'/(1X,4F10.2))
  22565.   860 FORMAT (//20X,'CALCULATION',30X,'TRUE SOLUTION'/
  22566.      *   2X,'X',14X,'Y',17X,'Y-PRIME',15X,'Y',17X,'Y-PRIME'/)
  22567.   870 FORMAT (F5.1,4E20.7,5X,A)
  22568.   880 FORMAT (/' (7) TESTS OF IFLAG VALUES')
  22569.   900 FORMAT (/' IFLAG SHOULD BE -2, IFLAG =',I3)
  22570.   910 FORMAT (/' IFLAG SHOULD BE -1, IFLAG =',I3)
  22571.   980 FORMAT (/' ***************DBVSUP PASSED ALL TESTS***************')
  22572.   990 FORMAT (/' ***************DBVSUP FAILED SOME TESTS**************')
  22573.       END
  22574. *DECK QXDRKF
  22575.       SUBROUTINE QXDRKF (LUN, KPRINT, IPASS)
  22576. C***BEGIN PROLOGUE  QXDRKF
  22577. C***PURPOSE  Test the DEPAC routine DDERKF.
  22578. C***LIBRARY   SLATEC
  22579. C***TYPE      DOUBLE PRECISION (QXRKF-S, QXDRKF-D)
  22580. C***KEYWORDS  QUICK CHECK
  22581. C***AUTHOR  Chow, Jeff, (LANL)
  22582. C***DESCRIPTION
  22583. C
  22584. C *Usage:
  22585. C
  22586. C        INTEGER  LUN, KPRINT, IPASS
  22587. C
  22588. C        CALL QXDRKF (LUN, KPRINT, IPASS)
  22589. C
  22590. C *Arguments:
  22591. C
  22592. C     LUN   :IN  is the unit number to which output is to be written.
  22593. C
  22594. C     KPRINT:IN  controls the amount of output, as specified in the
  22595. C                SLATEC Guidelines.
  22596. C
  22597. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  22598. C                IPASS=0 indicates one or more tests failed.
  22599. C
  22600. C *Description:
  22601. C
  22602. C   DDERKF is tested by solving the equations of motion of a body
  22603. C   moving in a plane about a spherical earth, namely
  22604. C           (D/DT)(D/DT)X = -G*X/R**3
  22605. C           (D/DT)(D/DT)Y = -G*Y/R**3
  22606. C   where G = 1, R = SQRT(X**2 + Y**2) and
  22607. C           X(0) = 1
  22608. C           (D/DT)X(0) = 0
  22609. C           Y(0) = 0
  22610. C           (D/DT)Y(0) = 1.
  22611. C
  22612. C***ROUTINES CALLED  D1MACH, DDERKF, DFDEQC
  22613. C***REVISION HISTORY  (YYMMDD)
  22614. C   810801  DATE WRITTEN
  22615. C   890618  REVISION DATE from Version 3.2
  22616. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  22617. C   900415  Code extensively revised.  (WRB)
  22618. C***END PROLOGUE  QXDRKF
  22619. C
  22620. C     Declare arguments.
  22621. C
  22622.       INTEGER  LUN, KPRINT, IPASS
  22623. C
  22624. C     Declare local variables.
  22625. C
  22626.       INTEGER  IDID, INFO(15), IPAR, IWORK(34), N, LIW, LRW, NSTEP
  22627.       DOUBLE PRECISION ABSERR, D1MACH, R, RELERR, RELTOL, RPAR,
  22628.      +                 RWORK(61), T, TOUT, U(4)
  22629.       EXTERNAL DFDEQC
  22630. C***FIRST EXECUTABLE STATEMENT  QXDRKF
  22631.       IF (KPRINT .GE. 2)  WRITE (LUN, 9000)
  22632. C
  22633. C     Initialize problem.
  22634. C
  22635.       N = 4
  22636.       LRW = 61
  22637.       LIW = 34
  22638.       T = 0.0D0
  22639.       TOUT = 8.0D0*ATAN(1.0D0)
  22640.       U(1) = 1.0D0
  22641.       U(2) = 0.0D0
  22642.       U(3) = 0.0D0
  22643.       U(4) = 1.0D0
  22644.       IPASS = 1
  22645.       NSTEP = 0
  22646.       RELTOL = MAX(SQRT(D1MACH(4)),1.D-10)
  22647.       RELERR = MAX(.1D0*RELTOL,1.D-12)
  22648.       ABSERR = RELERR**1.5D0
  22649.       INFO(1) = 0
  22650.       INFO(2) = 0
  22651.       INFO(3) = 1
  22652.       INFO(4) = 0
  22653.       IF (KPRINT .GT. 2) WRITE (LUN, 9010) RELERR, ABSERR, T, (1.0D0)
  22654. C
  22655.   100 CALL DDERKF (DFDEQC, N, T, U, TOUT, INFO, RELERR, ABSERR,
  22656.      +            IDID, RWORK, LRW, IWORK, LIW, RPAR, IPAR)
  22657.       R = SQRT(U(1)*U(1)+U(2)*U(2))
  22658.       IF (ABS(R-1.0D0) .GT. RELTOL) IPASS = 0
  22659.       IF (KPRINT .GT. 2) WRITE (LUN, 9020) T, R
  22660.       INFO(1) = 1
  22661.       IF (IDID .EQ. 1) GO TO 100
  22662. C
  22663. C     For the double precision version, we allow the integrator to take
  22664. C     up to 2000 steps before we declare failure.
  22665. C
  22666.       IF (IDID .EQ. -1) THEN
  22667.          NSTEP = NSTEP + 500
  22668.          IF (NSTEP .LT. 2000) GOTO 100
  22669.       ENDIF
  22670. C
  22671. C     Finish up.
  22672. C
  22673.       IF (IDID .LT. 1) IPASS = 0
  22674.       IF (KPRINT.GT.1 .AND. IDID.LT.1)  WRITE (LUN, 9030) IDID
  22675.       IF (KPRINT.GT.1 .AND. IPASS.EQ.1) WRITE (LUN, 9040)
  22676.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN, 9050)
  22677.       RETURN
  22678. C
  22679. C     FORMATs.
  22680. C
  22681.  9000 FORMAT ('1'/' ------------  DDERKF QUICK CHECK OUTPUT',
  22682.      +        ' ------------')
  22683.  9010 FORMAT (/ ' RELERR = ', D16.8, '   ABSERR =', D16.8 /
  22684.      +        12X, 'T', 19X, 'R' / 2D20.8)
  22685.  9020 FORMAT (2D20.8)
  22686.  9030 FORMAT (1X, 'ERROR RETURN FROM DDERKF.  IDID = ', I3)
  22687.  9040 FORMAT (/ ' ------------  DDERKF PASSED TESTS  ------------')
  22688.  9050 FORMAT (/ ' ************  DDERKF FAILED TESTS  ************')
  22689.       END
  22690. *DECK QXGBUN
  22691.       SUBROUTINE QXGBUN (LUN, KPRINT, IPASS)
  22692. C***BEGIN PROLOGUE  QXGBUN
  22693. C***PURPOSE
  22694. C***LIBRARY   SLATEC
  22695. C***KEYWORDS  QUICK CHECK
  22696. C***AUTHOR  (UNKNOWN)
  22697. C***DESCRIPTION
  22698. C
  22699. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  22700. C     *                                                               *
  22701. C     *                        F I S H P A K                          *
  22702. C     *                                                               *
  22703. C     *                                                               *
  22704. C     *     A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF      *
  22705. C     *                                                               *
  22706. C     *      SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS        *
  22707. C     *                                                               *
  22708. C     *                  (VERSION  3 , JUNE 1979)                     *
  22709. C     *                                                               *
  22710. C     *                             BY                                *
  22711. C     *                                                               *
  22712. C     *        JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET         *
  22713. C     *                                                               *
  22714. C     *                             OF                                *
  22715. C     *                                                               *
  22716. C     *         THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH          *
  22717. C     *                                                               *
  22718. C     *                BOULDER, COLORADO  (80307)  U.S.A.             *
  22719. C     *                                                               *
  22720. C     *                   WHICH IS SPONSORED BY                       *
  22721. C     *                                                               *
  22722. C     *              THE NATIONAL SCIENCE FOUNDATION                  *
  22723. C     *                                                               *
  22724. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  22725. C
  22726. C     PROGRAM TO ILLUSTRATE THE USE OF SUBROUTINE GENBUN
  22727. C
  22728. C***ROUTINES CALLED  GENBUN, PIMACH
  22729. C***REVISION HISTORY  (YYMMDD)
  22730. C   750701  DATE WRITTEN
  22731. C   890718  Changed computation of PI to use PIMACH.  (WRB)
  22732. C   890911  Removed unnecessary intrinsics.  (WRB)
  22733. C   891009  Removed unreferenced variable.  (WRB)
  22734. C   891009  REVISION DATE from Version 3.2
  22735. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  22736. C   901010  Added PASS/FAIL message and cleaned up FORMATs.  (RWC)
  22737. C***END PROLOGUE  QXGBUN
  22738.       DIMENSION F(25,130), A(20), B(20), C(20), W(1200), X(20), Y(120)
  22739. C***FIRST EXECUTABLE STATEMENT  QXGBUN
  22740. C
  22741. C     FROM DIMENSION STATEMENT WE GET VALUE OF IDIMY.  ALSO NOTE THAT
  22742. C     W(.) IS DIMENSIONED 6*N + 5*M.
  22743. C
  22744.       ERMAX=1.E-2
  22745.       IDIMY = 25
  22746.       MPEROD = 1
  22747.       M = 20
  22748.       DELTAX = 1.0E0/M
  22749.       NPEROD = 0
  22750.       N = 120
  22751.       PI = PIMACH(DUM)
  22752.       DELTAY = 2.0E0*PI/N
  22753. C
  22754. C     GENERATE AND STORE GRID POINTS FOR THE PURPOSE OF COMPUTING
  22755. C     COEFFICIENTS AND RIGHT SIDE OF EQUATION.
  22756. C
  22757.       DO 100 I=1,M
  22758.          X(I) = (I-1)*DELTAX
  22759.   100    CONTINUE
  22760.       DO 105 J=1,N
  22761.          Y(J) = -PI + (J-1)*DELTAY
  22762.   105    CONTINUE
  22763. C
  22764. C     GENERATE COEFFICIENTS.
  22765. C
  22766.       S = (DELTAY/DELTAX)**2
  22767.       T = S*DELTAX
  22768.       A(1) = 0.
  22769.       B(1) = -2.0E0*S
  22770.       C(1) = 2.0E0*S
  22771.       DO 110 I=2,M
  22772.          A(I) = (1.+X(I))**2*S + (1.+X(I))*T
  22773.          C(I) = (1.+X(I))**2*S - (1.+X(I))*T
  22774.          B(I) = -2.0E0*(1.0E0+X(I))**2*S
  22775.   110    CONTINUE
  22776.       C(M) = 0.
  22777. C
  22778. C     GENERATE RIGHT SIDE OF EQUATION FOR I = 1 SHOWING INTRODUCTION OF
  22779. C     BOUNDARY DATA.
  22780. C
  22781.       DYSQ = DELTAY**2
  22782.       DO 115 J=1,N
  22783.          F(1,J) = DYSQ*(11. + 8./DELTAX)*SIN(Y(J))
  22784.   115    CONTINUE
  22785. C
  22786. C     GENERATE RIGHT SIDE.
  22787. C
  22788.       MM1 = M-1
  22789.       DO 125 I=2,MM1
  22790.          DO 120 J=1,N
  22791.             F(I,J) = DYSQ*3.*(1.+X(I))**4*SIN(Y(J))
  22792.   120       CONTINUE
  22793.   125    CONTINUE
  22794. C
  22795. C     GENERATE RIGHT SIDE FOR I = M SHOWING INTRODUCTION OF
  22796. C     BOUNDARY DATA.
  22797. C
  22798.       DO 130 J=1,N
  22799.          F(M,J) = DYSQ*(3.*(1.+X(M))**4 - 16.*((1.+X(M))/DELTAX)**2
  22800.      +                + 16.*(1.+X(M))/DELTAX)*SIN(Y(J))
  22801.   130    CONTINUE
  22802.       CALL GENBUN(NPEROD,N,MPEROD,M,A,B,C,IDIMY,F,IERROR,W)
  22803. C
  22804. C     COMPUTE DISCRETIZATION ERROR.  THE EXACT SOLUTION IS
  22805. C                   U(X,Y) = (1+X)**4*SIN(Y)
  22806. C
  22807.       ERR = 0.
  22808.       DO 140 I=1,M
  22809.          DO 135 J=1,N
  22810.             Z = ABS(F(I,J)-(1.+X(I))**4*SIN(Y(J)))
  22811.             IF (Z .GT. ERR) ERR = Z
  22812.   135       CONTINUE
  22813.   140    CONTINUE
  22814. C
  22815.       IPASS = 1
  22816.       IF (ERR.GT.ERMAX) IPASS = 0
  22817.       IF (KPRINT.EQ.0) RETURN
  22818.       IF (KPRINT.GE.2 .OR. IPASS.EQ.0) THEN
  22819.          WRITE (LUN,1001) IERROR, ERR, INT(W(1))
  22820.          IF (IPASS.EQ.1) THEN
  22821.             WRITE (LUN, 1002)
  22822.          ELSE
  22823.             WRITE (LUN, 1003)
  22824.          ENDIF
  22825.       ENDIF
  22826.       RETURN
  22827. C
  22828.  1001 FORMAT ('1',20X,'SUBROUTINE GENBUN EXAMPLE'///
  22829.      1        10X,'THE OUTPUT FROM THE NCAR CONTROL DATA 7600 WAS'//
  22830.      2        32X,'IERROR = 0'/
  22831.      3        18X,'DISCRETIZATION ERROR = 7.94113E-03'/
  22832.      4        12X,'REQUIRED LENGTH OF W ARRAY = 740'//
  22833.      5        10X,'THE OUTPUT FROM YOUR COMPUTER IS'//
  22834.      6        32X,'IERROR =',I2/
  22835.      7        18X,'DISCRETIZATION ERROR =',1PE12.5/
  22836.      8        12X,'REQUIRED LENGTH OF W ARRAY =',I4)
  22837.  1002 FORMAT (60X,'PASS'/)
  22838.  1003 FORMAT (60X,'FAIL'/)
  22839.       END
  22840. *DECK QXPLR
  22841.       SUBROUTINE QXPLR (LUN, KPRINT, IPASS)
  22842. C***BEGIN PROLOGUE  QXPLR
  22843. C***PURPOSE
  22844. C***LIBRARY   SLATEC
  22845. C***KEYWORDS  QUICK CHECK
  22846. C***AUTHOR  (UNKNOWN)
  22847. C***DESCRIPTION
  22848. C
  22849. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  22850. C     *                                                               *
  22851. C     *                        F I S H P A K                          *
  22852. C     *                                                               *
  22853. C     *                                                               *
  22854. C     *     A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF      *
  22855. C     *                                                               *
  22856. C     *      SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS        *
  22857. C     *                                                               *
  22858. C     *                  (VERSION  3 , JUNE 1979)                     *
  22859. C     *                                                               *
  22860. C     *                             BY                                *
  22861. C     *                                                               *
  22862. C     *        JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET         *
  22863. C     *                                                               *
  22864. C     *                             OF                                *
  22865. C     *                                                               *
  22866. C     *         THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH          *
  22867. C     *                                                               *
  22868. C     *                BOULDER, COLORADO  (80307)  U.S.A.             *
  22869. C     *                                                               *
  22870. C     *                   WHICH IS SPONSORED BY                       *
  22871. C     *                                                               *
  22872. C     *              THE NATIONAL SCIENCE FOUNDATION                  *
  22873. C     *                                                               *
  22874. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  22875. C
  22876. C
  22877. C          PROGRAM TO ILLUSTRATE THE USE OF SUBROUTINE HWSPLR TO SOLVE
  22878. C     THE EQUATION
  22879. C
  22880. C     (1/R)(D/DR)(R*(DU/DR)) + (1/R**2)(D/DTHETA)(DU/DTHETA) = 16*R**2
  22881. C
  22882. C     ON THE QUARTER-DISK 0 .LT. R .LT. 1, 0 .LT. THETA .LT. PI/2 WITH
  22883. C     WITH THE BOUNDARY CONDITIONS
  22884. C
  22885. C     U(1,THETA) = 1 - COS(4*THETA), 0 .LE. THETA .LE. 1
  22886. C
  22887. C     AND
  22888. C
  22889. C     (DU/DTHETA)(R,0) = (DU/DTHETA)(R,PI/2) = 0,  0 .LE. R .LE. 1.
  22890. C
  22891. C     (NOTE THAT THE SOLUTION U IS UNSPECIFIED AT R = 0.)
  22892. C          THE R-INTERVAL WILL BE DIVIDED INTO 50 PANELS AND THE
  22893. C     THETA-INTERVAL WILL BE DIVIDED INTO 48 PANELS.
  22894. C
  22895. C***ROUTINES CALLED  HWSPLR, PIMACH
  22896. C***REVISION HISTORY  (YYMMDD)
  22897. C   800103  DATE WRITTEN
  22898. C   890718  Changed computation of PI to use PIMACH.  (WRB)
  22899. C   890911  Removed unnecessary intrinsics.  (WRB)
  22900. C   890911  REVISION DATE from Version 3.2
  22901. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  22902. C   901010  Added PASS/FAIL message and cleaned up FORMATs.  (RWC)
  22903. C***END PROLOGUE  QXPLR
  22904.       DIMENSION F(100,50), BDC(51), BDD(51), W(1200), R(51), THETA(49)
  22905. C***FIRST EXECUTABLE STATEMENT  QXPLR
  22906. C
  22907. C     FROM DIMENSION STATEMENT WE GET VALUE OF IDIMF.  ALSO NOTE THAT W
  22908. C     IS DIMENSIONED 6*(N+1) + 8*(M+1).
  22909. C
  22910.       IDIMF = 100
  22911.       ERMAX=1.E-3
  22912.       A = 0.
  22913.       B = 1.
  22914.       M = 50
  22915.       MBDCND = 5
  22916.       C = 0.
  22917.       PI = PIMACH(DUM)
  22918.       D = PI/2.
  22919.       N = 48
  22920.       NBDCND = 3
  22921.       ELMBDA = 0.
  22922. C
  22923. C     AUXILIARY QUANTITIES.
  22924. C
  22925.       MP1 = M+1
  22926.       NP1 = N+1
  22927. C
  22928. C     GENERATE AND STORE GRID POINTS FOR THE PURPOSE OF COMPUTING
  22929. C     BOUNDARY DATA AND THE RIGHT SIDE OF THE POISSON EQUATION.
  22930. C
  22931.       DO 101 I=1,MP1
  22932.          R(I) = (I-1)/50.0E0
  22933.   101 CONTINUE
  22934.       DO 102 J=1,NP1
  22935.          THETA(J) = (J-1)*PI/96.0E0
  22936.   102 CONTINUE
  22937. C
  22938. C     GENERATE BOUNDARY DATA.
  22939. C
  22940.       DO 103 I=1,MP1
  22941.          BDC(I) = 0.
  22942.          BDD(I) = 0.
  22943.   103 CONTINUE
  22944. C
  22945. C     BDA AND BDB ARE DUMMY VARIABLES.
  22946. C
  22947.       DO 104 J=1,NP1
  22948.          F(MP1,J) = 1.-COS(4.*THETA(J))
  22949.   104 CONTINUE
  22950. C
  22951. C     GENERATE RIGHT SIDE OF EQUATION.
  22952. C
  22953.       DO 106 I=1,M
  22954.          DO 105 J=1,NP1
  22955.             F(I,J) = 16.*R(I)**2
  22956.   105    CONTINUE
  22957.   106 CONTINUE
  22958.       CALL HWSPLR(A,B,M,MBDCND,BDA,BDB,C,D,N,NBDCND,BDC,BDD,ELMBDA,F,
  22959.      1             IDIMF,PERTRB,IERROR,W)
  22960. C
  22961. C     COMPUTE DISCRETIZATION ERROR.  THE EXACT SOLUTION IS
  22962. C                U(R,THETA) = R**4*(1 - COS(4*THETA))
  22963. C
  22964.       ERR = 0.
  22965.       DO 108 I=1,MP1
  22966.          DO 107 J=1,NP1
  22967.             Z = ABS(F(I,J)-R(I)**4*(1.-COS(4.*THETA(J))))
  22968.             IF (Z .GT. ERR) ERR = Z
  22969.   107    CONTINUE
  22970.   108 CONTINUE
  22971. C
  22972.       IPASS = 1
  22973.       IF (ERR.GT.ERMAX) IPASS = 0
  22974.       IF (KPRINT.EQ.0) RETURN
  22975.       IF (KPRINT.GE.2 .OR. IPASS.EQ.0) THEN
  22976.          WRITE (LUN,1001) IERROR,ERR,INT(W(1))
  22977.          IF (IPASS.EQ.1) THEN
  22978.             WRITE (LUN, 1002)
  22979.          ELSE
  22980.             WRITE (LUN, 1003)
  22981.          ENDIF
  22982.       ENDIF
  22983.       RETURN
  22984. C
  22985.  1001 FORMAT ('1',20X,'SUBROUTINE HWSPLR EXAMPLE'///
  22986.      1        10X,'THE OUTPUT FROM THE NCAR CONTROL DATA 7600 WAS'//
  22987.      2        32X,'IERROR = 0'/
  22988.      3        18X,'DISCRETIZATION ERROR = 6.19134E-04'/
  22989.      4        12X,'REQUIRED LENGTH OF W ARRAY = 882'//
  22990.      5        10X,'THE OUTPUT FROM YOUR COMPUTER IS'//
  22991.      6        32X,'IERROR =',I2/
  22992.      7        18X,'DISCRETIZATION ERROR =',1PE12.5/
  22993.      8        12X,'REQUIRED LENGTH OF W ARRAY =',I4)
  22994.  1002 FORMAT (60X,'PASS'/)
  22995.  1003 FORMAT (60X,'FAIL'/)
  22996.       END
  22997. *DECK QXRKF
  22998.       SUBROUTINE QXRKF (LUN, KPRINT, IPASS)
  22999. C***BEGIN PROLOGUE  QXRKF
  23000. C***PURPOSE  Test the DEPAC routine DERKF.
  23001. C***LIBRARY   SLATEC
  23002. C***TYPE      SINGLE PRECISION (QXRKF-S, QXDRKF-D)
  23003. C***KEYWORDS  QUICK CHECK
  23004. C***AUTHOR  Chow, Jeff, (LANL)
  23005. C***DESCRIPTION
  23006. C
  23007. C *Usage:
  23008. C
  23009. C        INTEGER  LUN, KPRINT, IPASS
  23010. C
  23011. C        CALL QXRKF (LUN, KPRINT, IPASS)
  23012. C
  23013. C *Arguments:
  23014. C
  23015. C     LUN   :IN  is the unit number to which output is to be written.
  23016. C
  23017. C     KPRINT:IN  controls the amount of output, as specified in the
  23018. C                SLATEC Guidelines.
  23019. C
  23020. C     IPASS:OUT  will contain a pass/fail flag.  IPASS=1 is good.
  23021. C                IPASS=0 indicates one or more tests failed.
  23022. C
  23023. C *Description:
  23024. C
  23025. C   DERKF is tested by solving the equations of motion of a body
  23026. C   moving in a plane about a spherical earth, namely
  23027. C           (D/DT)(D/DT)X = -G*X/R**3
  23028. C           (D/DT)(D/DT)Y = -G*Y/R**3
  23029. C   where G = 1, R = SQRT(X**2 + Y**2) and
  23030. C           X(0) = 1
  23031. C           (D/DT)X(0) = 0
  23032. C           Y(0) = 0
  23033. C           (D/DT)Y(0) = 1.
  23034. C
  23035. C***ROUTINES CALLED  DERKF, FDEQC, R1MACH
  23036. C***REVISION HISTORY  (YYMMDD)
  23037. C   810801  DATE WRITTEN
  23038. C   890618  REVISION DATE from Version 3.2
  23039. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  23040. C   900415  Code extensively revised.  (WRB)
  23041. C***END PROLOGUE  QXRKF
  23042. C
  23043. C     Declare arguments.
  23044. C
  23045.       INTEGER  LUN, KPRINT, IPASS
  23046. C
  23047. C     Declare local variables.
  23048. C
  23049.       INTEGER  IDID, INFO(15), IPAR, IWORK(34), N, LIW, LRW
  23050.       REAL ABSERR, R, R1MACH, RELERR, RELTOL, RPAR, RWORK(61), T, TOUT,
  23051.      +     U(4)
  23052.       EXTERNAL FDEQC
  23053. C***FIRST EXECUTABLE STATEMENT  QXRKF
  23054.       IF (KPRINT .GE. 2)  WRITE (LUN, 9000)
  23055. C
  23056. C     Initialize problem.
  23057. C
  23058.       N = 4
  23059.       LRW = 61
  23060.       LIW = 34
  23061.       T = 0.0E0
  23062.       TOUT = 8.0E0*ATAN(1.0E0)
  23063.       U(1) = 1.0E0
  23064.       U(2) = 0.0E0
  23065.       U(3) = 0.0E0
  23066.       U(4) = 1.0E0
  23067.       IPASS = 1
  23068.       RELTOL = SQRT(R1MACH(4))
  23069.       RELERR = 0.1E0*RELTOL
  23070.       ABSERR = RELERR**1.5E0
  23071.       INFO(1) = 0
  23072.       INFO(2) = 0
  23073.       INFO(3) = 1
  23074.       INFO(4) = 0
  23075.       IF (KPRINT .GT. 2) WRITE (LUN, 9010) RELERR, ABSERR, T, (1.0E0)
  23076. C
  23077.   100 CALL DERKF (FDEQC, N, T, U, TOUT, INFO, RELERR, ABSERR,
  23078.      +            IDID, RWORK, LRW, IWORK, LIW, RPAR, IPAR)
  23079.       R = SQRT(U(1)*U(1)+U(2)*U(2))
  23080.       IF (ABS(R-1.0E0) .GT. RELTOL) IPASS = 0
  23081.       IF (KPRINT .GT. 2) WRITE (LUN, 9020) T, R
  23082.       INFO(1) = 1
  23083.       IF (IDID .EQ. 1) GO TO 100
  23084. C
  23085. C     Finish up.
  23086. C
  23087.       IF (IDID .LT. 1) IPASS = 0
  23088.       IF (KPRINT.GT.1 .AND. IDID.LT.1)  WRITE (LUN, 9030) IDID
  23089.       IF (KPRINT.GT.1 .AND. IPASS.EQ.1) WRITE (LUN, 9040)
  23090.       IF (KPRINT.GE.1 .AND. IPASS.EQ.0) WRITE (LUN, 9050)
  23091.       RETURN
  23092. C
  23093. C     FORMATs.
  23094. C
  23095.  9000 FORMAT ('1'/' ------------  DERKF QUICK CHECK OUTPUT',
  23096.      +        ' ------------')
  23097.  9010 FORMAT (/ ' RELERR = ', E16.8, '   ABSERR =', E16.8 /
  23098.      +        12X, 'T', 19X, 'R' / 2E20.8)
  23099.  9020 FORMAT (2E20.8)
  23100.  9030 FORMAT (1X, 'ERROR RETURN FROM DERKF.  IDID = ', I3)
  23101.  9040 FORMAT (/ ' ------------  DERKF PASSED TESTS  ------------')
  23102.  9050 FORMAT (/ ' ************  DERKF FAILED TESTS  ************')
  23103.       END
  23104. *DECK QXSSP
  23105.       SUBROUTINE QXSSP (LUN, KPRINT, IPASS)
  23106. C***BEGIN PROLOGUE  QXSSP
  23107. C***PURPOSE
  23108. C***LIBRARY   SLATEC
  23109. C***KEYWORDS  QUICK CHECK
  23110. C***AUTHOR  (UNKNOWN)
  23111. C***DESCRIPTION
  23112. C
  23113. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  23114. C     *                                                               *
  23115. C     *                        F I S H P A K                          *
  23116. C     *                                                               *
  23117. C     *                                                               *
  23118. C     *     A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF      *
  23119. C     *                                                               *
  23120. C     *      SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS        *
  23121. C     *                                                               *
  23122. C     *                  (VERSION  3 , JUNE 1979)                     *
  23123. C     *                                                               *
  23124. C     *                             BY                                *
  23125. C     *                                                               *
  23126. C     *        JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET         *
  23127. C     *                                                               *
  23128. C     *                             OF                                *
  23129. C     *                                                               *
  23130. C     *         THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH          *
  23131. C     *                                                               *
  23132. C     *                BOULDER, COLORADO  (80307)  U.S.A.             *
  23133. C     *                                                               *
  23134. C     *                   WHICH IS SPONSORED BY                       *
  23135. C     *                                                               *
  23136. C     *              THE NATIONAL SCIENCE FOUNDATION                  *
  23137. C     *                                                               *
  23138. C     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  23139. C
  23140. C
  23141. C
  23142. C     PROGRAM TO ILLUSTRATE THE USE OF HWSSSP
  23143. C
  23144. C***ROUTINES CALLED  HWSSSP, PIMACH
  23145. C***REVISION HISTORY  (YYMMDD)
  23146. C   800103  DATE WRITTEN
  23147. C   890718  Changed computation of PI to use PIMACH.  (WRB)
  23148. C   890911  Removed unnecessary intrinsics.  (WRB)
  23149. C   890911  REVISION DATE from Version 3.2
  23150. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  23151. C   901010  Added PASS/FAIL message and cleaned up FORMATs.  (RWC)
  23152. C***END PROLOGUE  QXSSP
  23153.       DIMENSION F(19,73), BDTF(73), SINT(19), SINP(73), W(1200)
  23154. C***FIRST EXECUTABLE STATEMENT  QXSSP
  23155. C
  23156. C     THE VALUE OF IDIMF IS THE FIRST DIMENSION OF F.  W IS
  23157. C     DIMENSIONED 11*(M+1)+6*(N+1)=647 SINCE M=18 AND N=72.
  23158. C
  23159.       PI = PIMACH(DUM)
  23160.       ERMAX=5.E-3
  23161.       TS = 0.0
  23162.       TF = PI/2.
  23163.       M = 18
  23164.       MBDCND = 6
  23165.       PS = 0.0
  23166.       PF = PI+PI
  23167.       N = 72
  23168.       NBDCND = 0
  23169.       ELMBDA = 0.
  23170.       IDIMF = 19
  23171. C
  23172. C     GENERATE SINES FOR USE IN SUBSEQUENT COMPUTATIONS
  23173. C
  23174.       DTHETA = TF/M
  23175.       MP1 = M+1
  23176.       DO 101 I=1,MP1
  23177.          SINT(I) = SIN((I-1)*DTHETA)
  23178.   101 CONTINUE
  23179.       DPHI = (PI+PI)/N
  23180.       NP1 = N+1
  23181.       DO 102 J=1,NP1
  23182.          SINP(J) = SIN((J-1)*DPHI)
  23183.   102 CONTINUE
  23184. C
  23185. C     COMPUTE RIGHT SIDE OF EQUATION AND STORE IN F
  23186. C
  23187.       DO 104 J=1,NP1
  23188.          DO 103 I=1,MP1
  23189.             F(I,J) = 2.-6.*(SINT(I)*SINP(J))**2
  23190.   103    CONTINUE
  23191.   104 CONTINUE
  23192. C
  23193. C     STORE DERIVATIVE DATA AT THE EQUATOR
  23194. C
  23195.       DO 105 J=1,NP1
  23196.          BDTF(J) = 0.
  23197.   105 CONTINUE
  23198. C
  23199.       CALL HWSSSP(TS,TF,M,MBDCND,BDTS,BDTF,PS,PF,N,NBDCND,BDPS,BDPF,
  23200.      1             ELMBDA,F,IDIMF,PERTRB,IERROR,W)
  23201. C
  23202. C     COMPUTE DISCRETIZATION ERROR. SINCE PROBLEM IS SINGULAR, THE
  23203. C     SOLUTION MUST BE NORMALIZED.
  23204. C
  23205.       ERR = 0.0
  23206.       DO 107 J=1,NP1
  23207.          DO 106 I=1,MP1
  23208.             Z = ABS(F(I,J)-(SINT(I)*SINP(J))**2-F(1,1))
  23209.             IF (Z .GT. ERR) ERR = Z
  23210.   106    CONTINUE
  23211.   107 CONTINUE
  23212. C
  23213.       IPASS = 1
  23214.       IF (ERR.GT.ERMAX) IPASS = 0
  23215.       IF (KPRINT.EQ.0) RETURN
  23216.       IF (KPRINT.GE.2 .OR. IPASS.EQ.0) THEN
  23217.          WRITE (LUN,1001) IERROR,ERR,INT(W(1))
  23218.          IF (IPASS.EQ.1) THEN
  23219.             WRITE (LUN, 1002)
  23220.          ELSE
  23221.             WRITE (LUN, 1003)
  23222.          ENDIF
  23223.       ENDIF
  23224.       RETURN
  23225. C
  23226.  1001 FORMAT ('1',20X,'SUBROUTINE HWSSSP EXAMPLE'///
  23227.      1        10X,'THE OUTPUT FROM THE NCAR CONTROL DATA 7600 WAS'//
  23228.      2        32X,'IERROR = 0'/
  23229.      3        18X,'DISCRETIZATION ERROR = 3.38107E-03'/
  23230.      4        12X,'REQUIRED LENGTH OF W ARRAY = 600'//
  23231.      5        10X,'THE OUTPUT FROM YOUR COMPUTER IS'//
  23232.      6        32X,'IERROR =',I2/
  23233.      7        18X,'DISCRETIZATION ERROR =',1PE12.5 /
  23234.      8        12X,'REQUIRED LENGTH OF W ARRAY =',I4)
  23235.  1002 FORMAT (60X,'PASS'/)
  23236.  1003 FORMAT (60X,'FAIL'/)
  23237.       END
  23238. *DECK RQRTST
  23239.       SUBROUTINE RQRTST (LUN, KPRINT, IPASS)
  23240. C***BEGIN PROLOGUE  RQRTST
  23241. C***PURPOSE  Quick check for RPQR79.
  23242. C***LIBRARY   SLATEC
  23243. C***TYPE      SINGLE PRECISION (RQRTST-S, CQRTST-C)
  23244. C***AUTHOR  (UNKNOWN)
  23245. C***ROUTINES CALLED  NUMXER, PASS, R1MACH, RPQR79, XERCLR, XGETF, XSETF
  23246. C***REVISION HISTORY  (YYMMDD)
  23247. C   ??????  DATE WRITTEN
  23248. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  23249. C   901010  Restructured using IF-THEN-ELSE-ENDIF, cleaned up FORMATs
  23250. C           and changed TOL from sqrt R1MACH(3) to sqrt R1MACH(4) for
  23251. C           the IBM 370 mainframes.  (RWC)
  23252. C   911010  Code reworked and simplified.  (RWC and WRB)
  23253. C***END PROLOGUE  RQRTST
  23254.       INTEGER ITMP(7)
  23255.       COMPLEX ROOT(7), CHK(7)
  23256.       DIMENSION WORK(63)
  23257.       REAL COEF(8)
  23258.       LOGICAL FATAL
  23259. C
  23260.       DATA CHK / ( 1.4142135623731,  1.4142135623731),
  23261.      *           ( 1.4142135623731, -1.4142135623731),
  23262.      *           (0.0, 2.0), (0.0, -2.0), (-2.0, 0.0),
  23263.      *           (-1.4142135623731,  1.4142135623731),
  23264.      *           (-1.4142135623731, -1.4142135623731) /
  23265. C***FIRST EXECUTABLE STATEMENT  RQRTST
  23266.       IF (KPRINT .GE. 2) WRITE (LUN, 90000)
  23267.       TOL = SQRT(R1MACH(4))
  23268.       IPASS = 1
  23269. C
  23270. C     Initialize variables for testing.
  23271. C
  23272.       BETA = 0.0078125
  23273.       DO 20 J=1,8
  23274.          COEF(J) = BETA
  23275.          BETA = 2.0*BETA
  23276.    20 CONTINUE
  23277. C
  23278.       CALL RPQR79 (7, COEF, ROOT, IERR, WORK)
  23279. C
  23280. C     Check to see if test passed.
  23281. C
  23282.       DO 10 I=1,7
  23283.          ITMP(I) = 0
  23284.    10 CONTINUE
  23285. C
  23286. C     Check for roots in any order.
  23287. C
  23288.       DO 40 I=1,7
  23289.          DO 30 J=1,7
  23290.             IF (ABS(ROOT(I)-CHK(J)) .LE. TOL) THEN
  23291.                ITMP(J) = 1
  23292.                GO TO 40
  23293.             ENDIF
  23294.    30    CONTINUE
  23295.    40 CONTINUE
  23296. C
  23297. C     Check that we found all 7 roots.
  23298. C
  23299.       IPASS = 1
  23300.       DO 50 I=1,7
  23301.          IPASS = IPASS*ITMP(I)
  23302.    50 CONTINUE
  23303. C
  23304. C     Print test results.
  23305. C
  23306.       IF (KPRINT.GE.3 .OR. (KPRINT.GE.2.AND.IPASS.EQ.0)) THEN
  23307.          WRITE (LUN, 90010)
  23308.          WRITE (LUN, 90020) (J,COEF(J), J=1,8)
  23309.          WRITE (LUN, 90030)
  23310.          WRITE (LUN, 90040) (J,ROOT(J), J=1,7)
  23311.       ENDIF
  23312.       IF (KPRINT .GE. 2) THEN
  23313.          CALL PASS (LUN, 1, IPASS)
  23314.       ENDIF
  23315. C
  23316. C     Trigger 2 error conditions
  23317. C
  23318.       CALL XGETF (KONTRL)
  23319.       IF (KPRINT .LE. 2) THEN
  23320.          CALL XSETF (0)
  23321.       ELSE
  23322.          CALL XSETF (1)
  23323.       ENDIF
  23324.       FATAL = .FALSE.
  23325.       CALL XERCLR
  23326.       IF (KPRINT .GE. 3) WRITE (LUN, 90060)
  23327. C
  23328. C     CALL RPQR79 with 0 degree polynomial.
  23329. C
  23330.       CALL RPQR79 (0, COEF, ROOT, IERR, WORK)
  23331.       IF (NUMXER(NERR) .NE. 3) THEN
  23332.          FATAL = .TRUE.
  23333.       ENDIF
  23334.       CALL XERCLR
  23335. C
  23336. C     CALL RPQR79 with zero leading coefficient.
  23337. C
  23338.       COEF(1) = 0.0
  23339.       CALL RPQR79 (2, COEF, ROOT, IERR, WORK)
  23340.       IF (NUMXER(NERR) .NE. 2) THEN
  23341.          FATAL = .TRUE.
  23342.       ENDIF
  23343.       CALL XERCLR
  23344. C
  23345.       CALL XSETF (KONTRL)
  23346.       IF (FATAL) THEN
  23347.          IPASS = 0
  23348.          IF (KPRINT .GE. 2) THEN
  23349.             WRITE (LUN, 90070)
  23350.          ENDIF
  23351.       ELSE
  23352.          IF (KPRINT .GE. 3) THEN
  23353.             WRITE (LUN, 90080)
  23354.          ENDIF
  23355.       ENDIF
  23356. C
  23357.       IF (IPASS.EQ.1 .AND. KPRINT.GT.1) WRITE (LUN,90100)
  23358.       IF (IPASS.EQ.0 .AND. KPRINT.NE.0) WRITE (LUN,90110)
  23359.       RETURN
  23360. C
  23361. 90000 FORMAT ('1', /,' RPQR79 QUICK CHECK')
  23362. 90010 FORMAT (/, ' CHECK REAL AND IMAGINARY PARTS OF ROOT' /
  23363.      *          ' COEFFICIENTS')
  23364. 90020 FORMAT (/ (I6, 3X, 1P, E22.14))
  23365. 90030 FORMAT (// 25X, 'TABLE of ROOTS' //
  23366.      *        '   ROOT         REAL  PART', 12X, 'IMAG  PART' /
  23367.      *        '  NUMBER', 8X, 2(' of  ZERO ', 12X))
  23368. 90040 FORMAT (I6, 3X, 1P, 2E22.14)
  23369. 90060 FORMAT (// ' TRIGGER 2 ERROR CONDITIONS' //)
  23370. 90070 FORMAT (/ ' AT LEAST ONE INCORRECT ARGUMENT TEST FAILED')
  23371. 90080 FORMAT (/ ' ALL INCORRECT ARGUMENT TESTS PASSED')
  23372. 90100 FORMAT (/' **************RPQR79 PASSED ALL TESTS**************')
  23373. 90110 FORMAT (/' **************RPQR79 FAILED SOME TESTS*************')
  23374.       END
  23375. *DECK SBOCQX
  23376.       SUBROUTINE SBOCQX (LUN, KPRINT, IPASS)
  23377. C***BEGIN PROLOGUE  SBOCQX
  23378. C***PURPOSE  Quick check for SBOCLS.
  23379. C***LIBRARY   SLATEC
  23380. C***TYPE      SINGLE PRECISION (SBOCQX-S, DBOCQX-D)
  23381. C***KEYWORDS  QUICK CHECK
  23382. C***AUTHOR  (UNKNOWN)
  23383. C***DESCRIPTION
  23384. C
  23385. C     MINIMAL TEST DRIVER FOR SBOCLS, BOUNDED CONSTRAINED LEAST
  23386. C     SQUARES SOLVER.  DELIVERS THE VALUE IPASS=1 IF 8 TESTS WERE
  23387. C     PASSED.  DELIVER THE VALUE IPASS=0 IF ANY ONE OF THEM FAILED.
  23388. C
  23389. C     RUN FOUR BOUNDED LEAST SQUARES PROBLEMS THAT COME FROM THE
  23390. C     DIPLOME WORK OF P. ZIMMERMANN.
  23391. C
  23392. C***ROUTINES CALLED  R1MACH, SBOCLS, SBOLS, SCOPY, SNRM2
  23393. C***REVISION HISTORY  (YYMMDD)
  23394. C   850310  DATE WRITTEN
  23395. C   890618  REVISION DATE from Version 3.2
  23396. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  23397. C   901013  Added PASS/FAIL message and cleaned up FORMATs.  (RWC)
  23398. C***END PROLOGUE  SBOCQX
  23399.       REAL D(6,5),W(11,11),BL(5,2),BU(5,2),X(30),RW(55),XTRUE(9)
  23400.       REAL C(5,5)
  23401.       REAL BL1(10),BU1(10)
  23402.       INTEGER IND(10),IW(20),IOPT(40)
  23403.       REAL RHS(6,2)
  23404.       CHARACTER*4 MSG
  23405. C
  23406.       DATA ((C(I,J),I=1,5),J=1,5) /1.,10.,4.,8.,1.,1.,10.,2.,-1.,1.,1.,
  23407.      *  -3.,-3.,2.,1.,1.,5.,5.,5.,1.,1.,4.,-1.,-3.,1./
  23408.       DATA ((D(I,J),I=1,6),J=1,5) /-74.,14.,66.,-12.,3.,4.,80.,-69.,
  23409.      *  -72.,66.,8.,-12.,18.,21.,-5.,-30.,-7.,4.,-11.,28.,7.,-23.,-4.,
  23410.      *  4.,-4.,0.,1.,3.,1.,0./
  23411.       DATA ((BL(I,J),I=1,5),J=1,2) /1.,0.,-1.,1.,-4.,-1.,0.,-3.,1.,-6./
  23412.       DATA ((BU(I,J),I=1,5),J=1,2) /3.,2.,1.,3.,-2.,3.,4.,1.,5.,-2./
  23413.       DATA ((RHS(I,J),I=1,6),J=1,2) /51.,-61.,-56.,69.,10.,-12.,-5.,-9.,
  23414.      *  708.,4165.,-13266.,8409./
  23415.       DATA (XTRUE(J),J=1,9) /1.,2.,-1.,3.,-4.,1.,32.,30.,31./
  23416. C***FIRST EXECUTABLE STATEMENT  SBOCQX
  23417.       MDW = 11
  23418.       MROWS = 6
  23419.       NCOLS = 5
  23420.       MCON = 4
  23421.       IOPT(1) = 99
  23422.       IPASS = 1
  23423.       ITEST = 0
  23424. C
  23425.       IF (KPRINT.GE.2) WRITE (LUN, 99998)
  23426. C
  23427.       DO 50 IB = 1,2
  23428.           DO 40 IRHS = 1,2
  23429. C
  23430. C           TRANSFER DATA TO WORKING ARRAY W(*,*).
  23431. C
  23432.               DO 10 J = 1,NCOLS
  23433.                   CALL SCOPY(MROWS,D(1,J),1,W(1,J),1)
  23434.    10         CONTINUE
  23435. C
  23436.               CALL SCOPY(MROWS,RHS(1,IRHS),1,W(1,NCOLS+1),1)
  23437. C
  23438. C             SET BOUND INDICATOR FLAGS.
  23439. C
  23440.               DO 20 J = 1,NCOLS
  23441.                   IND(J) = 3
  23442.    20         CONTINUE
  23443. C
  23444.               CALL SBOLS(W,MDW,MROWS,NCOLS,BL(1,IB),BU(1,IB),IND,IOPT,X,
  23445.      *                   RNORM,MODE,RW,IW)
  23446.               DO 30 J = 1,NCOLS
  23447.                   X(J) = X(J) - XTRUE(J)
  23448.    30         CONTINUE
  23449. C
  23450.               SR = SNRM2(NCOLS,X,1)
  23451.               MPASS = 1
  23452.               IF (SR.GT.10.E3*SQRT(R1MACH(4))) MPASS = 0
  23453.               IPASS = IPASS*MPASS
  23454.               IF (KPRINT.GE.2) THEN
  23455.                  MSG = 'PASS'
  23456.                  IF (MPASS.EQ.0) MSG = 'FAIL'
  23457.                  ITEST = ITEST + 1
  23458.                  WRITE (LUN, 99999) ITEST, IB, IRHS, SR, MSG
  23459.               ENDIF
  23460.    40     CONTINUE
  23461.    50 CONTINUE
  23462. C
  23463. C     RUN STOER'S PROBLEM FROM 1971 SIAM J. N. ANAL. PAPER.
  23464. C
  23465.       DO 90 IB = 1,2
  23466.          DO 80 IRHS = 1,2
  23467.             CALL SCOPY(11*10,0.E0,0,W,1)
  23468.             CALL SCOPY(NCOLS,BL(1,IB),1,BL1,1)
  23469.             CALL SCOPY(NCOLS,BU(1,IB),1,BU1,1)
  23470.             IND(NCOLS+1) = 2
  23471.             IND(NCOLS+2) = 1
  23472.             IND(NCOLS+3) = 2
  23473.             IND(NCOLS+4) = 3
  23474.             BU1(NCOLS+1) = 5.
  23475.             BL1(NCOLS+2) = 20.
  23476.             BU1(NCOLS+3) = 30.
  23477.             BL1(NCOLS+4) = 11.
  23478.             BU1(NCOLS+4) = 40.
  23479.             DO 60 J = 1,NCOLS
  23480.                CALL SCOPY(MCON,C(1,J),1,W(1,J),1)
  23481.                CALL SCOPY(MROWS,D(1,J),1,W(MCON+1,J),1)
  23482.    60       CONTINUE
  23483. C
  23484.             CALL SCOPY(MROWS,RHS(1,IRHS),1,W(MCON+1,NCOLS+1),1)
  23485. C
  23486. C           CHECK LENGTHS OF REQD. ARRAYS.
  23487. C
  23488.             IOPT(01) = 2
  23489.             IOPT(02) = 11
  23490.             IOPT(03) = 11
  23491.             IOPT(04) = 10
  23492.             IOPT(05) = 30
  23493.             IOPT(06) = 55
  23494.             IOPT(07) = 20
  23495.             IOPT(08) = 40
  23496.             IOPT(09) = 99
  23497.             CALL SBOCLS(W,MDW,MCON,MROWS,NCOLS,BL1,BU1,IND,IOPT,X,
  23498.      *                  RNORMC,RNORM,MODE,RW,IW)
  23499.             DO 70 J = 1,NCOLS + MCON
  23500.                X(J) = X(J) - XTRUE(J)
  23501.    70       CONTINUE
  23502. C
  23503.             SR = SNRM2(NCOLS+MCON,X,1)
  23504.             MPASS = 1
  23505.             IF (SR.GT.10.E3*SQRT(R1MACH(4))) MPASS = 0
  23506.             IPASS = IPASS*MPASS
  23507.             IF (KPRINT.GE.2) THEN
  23508.                MSG = 'PASS'
  23509.                IF (MPASS.EQ.0) MSG = 'FAIL'
  23510.                ITEST = ITEST + 1
  23511.                WRITE (LUN, 99999) ITEST, IB, IRHS, SR, MSG
  23512.             ENDIF
  23513.    80    CONTINUE
  23514.    90 CONTINUE
  23515. C
  23516. C     HERE THE VALUE OF IPASS=1 SAYS THAT SBOCLS() HAS PASSED ITS TESTS.
  23517. C          THE VALUE OF IPASS=0 SAYS THAT SBOCLS() HAS NOT PASSED.
  23518. C
  23519.       IF(KPRINT.GE.3)
  23520.      *WRITE(LUN,'('' IPASS VALUE. (A 1 IS GOOD, 0 IS BAD.)'',I4)')IPASS
  23521.       IF(KPRINT.GE.2.AND.IPASS.EQ.0) WRITE(LUN,10789)
  23522.       RETURN
  23523. C
  23524. 10789 FORMAT (' ERROR IN SBOCLS OR SBOLS')
  23525. 99998 FORMAT (' TEST   IB IRHS             SR')
  23526. 99999 FORMAT (3I5, 1P, E20.6, ' TEST ', A, 'ED.')
  23527.       END
  23528. *DECK SFNCK
  23529.       SUBROUTINE SFNCK (LUN, KPRINT, IPASS)
  23530. C***BEGIN PROLOGUE  SFNCK
  23531. C***PURPOSE  Quick check for the single precision Fullerton
  23532. C            special functions.
  23533. C***LIBRARY   SLATEC
  23534. C***KEYWORDS  QUICK CHECK
  23535. C***AUTHOR  Boland, W. Robert, (LANL)
  23536. C           Chow, Jeff, (LANL)
  23537. C***DESCRIPTION
  23538. C
  23539. C     This subroutine does a quick check for the single precision
  23540. C     routines in the Fullerton special function library.
  23541. C
  23542. C     Parameter list-
  23543. C
  23544. C     LUN      input integer value to designate the external
  23545. C              device unit for message output
  23546. C     KPRINT   input integer value to specify amount of
  23547. C              printing to be done by quick check
  23548. C     IPASS    output value indicating whether tests passed or
  23549. C              failed
  23550. C
  23551. C***ROUTINES CALLED  ACOSH, AI, AIE, ALI, ALNREL, ASINH, ATANH, BESI0,
  23552. C                    BESI0E, BESI1, BESI1E, BESJ0, BESJ1, BESK0, BESK0E,
  23553. C                    BESK1, BESK1E, BESKES, BESKS, BESY0, BESY1, BETA,
  23554. C                    BETAI, BI, BIE, BINOM, CBRT, CHU, COSDG, COT, DAWS,
  23555. C                    E1, EI, ERF, EXPREL, FAC, GAMI, GAMIC, GAMIT,
  23556. C                    GAMMA, GAMR, POCH, POCH1, PSI, R1MACH, R9ATN1,
  23557. C                    R9LN2R, SINDG, SPENC
  23558. C***REVISION HISTORY  (YYMMDD)
  23559. C   800901  DATE WRITTEN
  23560. C   891115  REVISION DATE from Version 3.2
  23561. C   891120  Checks of remainder of FNLIB routines added and code
  23562. C           reorganized.  (WRB)
  23563. C   900330  Prologue converted to Version 4.0 format.  (BAB)
  23564. C   900727  Added EXTERNAL statement.  (WRB)
  23565. C***END PROLOGUE  SFNCK
  23566.       INTEGER I,LUN,KPRINT,IPASS
  23567.       REAL R1MACH,
  23568.      +     Y(105),V(105),ERRMAX,ERRTOL,ABSERR,RELERR,
  23569.      +     BESI1,BESI1E,BESJ0,BESJ1,BESK0,BESK0E,BESK1,BESK1E,
  23570.      +     BESY0,BESY1,BETA,BETAI,BI,BIE,BINOM,CBRT,CHU,COSDG,COT,DAWS,
  23571.      +     E1,EI,ERF,EXPREL,FAC,GAMI,GAMIC,GAMIT,GAMMA,GAMR,POCH,POCH1,
  23572.      +     PSI,R9ATN1,R9LN2R,SINDG,SPENC
  23573.       EXTERNAL COT, ERF, GAMMA
  23574. C
  23575. C     Correct values through different calculations are stored in V(*)
  23576. C
  23577.       DATA V(  1) / .8344518000 0000000000 0000000000 E+09/
  23578.       DATA V(  2) / .2250829575 1200000000 0000000000 E+13/
  23579.       DATA V(  3) / .1307674368 0000000000 0000000000 E+13/
  23580.       DATA V(  4) / .8222838654 1779228177 2556288000 E+34/
  23581.       DATA V(  5) /-.2000000000 0000000000 0000000000 E+01/
  23582.       DATA V(  6) / .9983407900 0000000000 0000000000 E+02/
  23583.       DATA V(  7) / .8660254037 8443864676 3723170753 E+00/
  23584.       DATA V(  8) /-.7071067811 8654752440 0844362105 E+00/
  23585.       DATA V(  9) / .6420926159 3433070300 6419986594 E+00/
  23586.       DATA V( 10) /-.1830487721 7124519192 6801943897 E+01/
  23587.       DATA V( 11) /-.2908191279 9355107028 5950148310 E+00/
  23588.       DATA V( 12) /-.1116064102 7573868712 2866817478 E+00/
  23589.       DATA V( 13) / .5000000000 0000000000 0000000000 E+00/
  23590.       DATA V( 14) / .7071067811 8654752440 0844362105 E+00/
  23591.       DATA V( 15) / .1371498381 4723363824 3285631505 E+00/
  23592.       DATA V( 16) /-.1000000500 0003333335 8333416027 E-05/
  23593.       DATA V( 17) / .1001251042 3180339898 4880296644 E+01/
  23594.       DATA V( 18) / .9950166250 8319464260 9402280122 E+00/
  23595.       DATA V( 19) / .2437208648 6531505582 4104923715 E+00/
  23596.       DATA V( 20) / .1931471805 5994530941 7232121458 E+00/
  23597.       DATA V( 21) / .1111122222 3333344444 0000000000 E+00/
  23598.       DATA V( 22) / .3141592653 5900000000 0000000000 E+01/
  23599.       DATA V( 23) / .9983407900 0000000000 0000000000 E-01/
  23600.       DATA V( 24) /-.1194763217 0000000000 0000000000 E+01/
  23601.       DATA V( 25) /-.1111122222 3333344444 0000000000 E+00/
  23602.       DATA V( 26) / .2646652412 0000000000 0000000000 E+01/
  23603.       DATA V( 27) /-.3786710430 6108797672 7207184637 E+00/
  23604.       DATA V( 28) / .1045163780 1174927848 4458888919 E+01/
  23605.       DATA V( 29) / .5597735947 7616081174 6795939295 E+00/
  23606.       DATA V( 30) / .1000195824 0663265190 1909339800 E+00/
  23607.       DATA V( 31) / .4542199048 6317357992 0523812663 E+00/
  23608.       DATA V( 32) / .1895117816 3559367554 6652093433 E+01/
  23609.       DATA V( 33) / .5822405264 6501250590 2656320160 E+00/
  23610.       DATA V( 34) / .1644934066 8482264364 7241516665 E+01/
  23611.       DATA V( 35) / .8862269254 5275801364 9083741687 E+00/
  23612.       DATA V( 36) /-.3141592653 5897932384 6264338328 E+01/
  23613.       DATA V( 37) / .3183098861 8379067153 7767526733 E+00/
  23614.       DATA V( 38) / .8823957200 2038009055 0940262394 E-06/
  23615.       DATA V( 39) /-.2820947917 7387814347 4039725759 E+00/
  23616.       DATA V( 40) / .1875000000 0000000000 0000000000 E+01/
  23617.       DATA V( 41) / .5135166683 8205029558 4635612122 E-01/
  23618.       DATA V( 42) / .5987500000 0000000000 0000000000 E+02/
  23619.       DATA V( 43) / .1570796326 7948966192 3132169164 E+01/
  23620.       DATA V( 44) / .7550061690 3746404275 1871235437 E-03/
  23621.       DATA V( 45) / .4227843350 9846713939 3487909918 E+00/
  23622.       DATA V( 46) / .2303001034 2976863752 7259355045 E+01/
  23623.       DATA V( 47) / .9998566182 6372370688 5830759463 E+00/
  23624.       DATA V( 48) / .8882907071 8395673587 8281870759 E+00/
  23625.       DATA V( 49) / .1353352832 3661269189 3999494971 E+00/
  23626.       DATA V( 50) / .3469303062 9580145617 0933128256 E-03/
  23627.       DATA V( 51) / .7869386805 7473315279 2400930048 E+00/
  23628.       DATA V( 52) / .6316733917 7525812329 1222663623 E-01/
  23629.       DATA V( 53) / .3812815664 6177091614 9261183171 E+00/
  23630.       DATA V( 54) / .2656250000 0000000000 0000000000 E+00/
  23631.       DATA V( 55) / .5204998778 1304653768 2746653770 E+00/
  23632.       DATA V( 56) / .8883882317 0170776406 9578446749 E+00/
  23633.       DATA V( 57) / .4244363835 0202229593 4042352455 E+00/
  23634.       DATA V( 58) / .3370006597 4209342338 3019719632 E+00/
  23635.       DATA V( 59) /-.1775967713 1433830434 7397013056 E+00/
  23636.       DATA V( 60) / .2238907791 4123566805 1827454628 E+00/
  23637.       DATA V( 61) /-.3275791375 9146522203 7734321812 E+00/
  23638.       DATA V( 62) / .5767248077 5687338720 2448242187 E+00/
  23639.       DATA V( 63) / .5103756726 4974511959 6606592612 E+00/
  23640.       DATA V( 64) /-.3085176252 4903378007 3648984210 E+00/
  23641.       DATA V( 65) / .1478631433 9122684480 1050675510 E+00/
  23642.       DATA V( 66) /-.1070324315 4093754688 8370772230 E+00/
  23643.       DATA V( 67) / .2279585302 3360672674 3720444020 E+01/
  23644.       DATA V( 68) / .2723987182 3604446894 5442320700 E+02/
  23645.       DATA V( 69) / .1590636854 6373290633 8225442450 E+01/
  23646.       DATA V( 70) / .2433564214 2450527199 1430504400 E+02/
  23647.       DATA V( 71) / .1138938727 4953343565 2719574910 E+00/
  23648.       DATA V( 72) / .3691098334 0425942747 3526100740 E-02/
  23649.       DATA V( 73) / .1398658818 1652242728 4598806997 E+00/
  23650.       DATA V( 74) / .4044613445 4521642083 6502183700 E-02/
  23651.       DATA V( 75) / .3085083225 5367103953 3384319255 E+00/
  23652.       DATA V( 76) / .1835408126 0932835307 3650751820 E+00/
  23653.       DATA V( 77) / .1639722669 4454235692 6122903850 E+00/
  23654.       DATA V( 78) / .2152692892 4893765915 8505143243 E+00/
  23655.       DATA V( 79) / .8415682150 7077141791 9124867127 E+00/
  23656.       DATA V( 80) / .5478075643 1351898686 8201568700 E+00/
  23657.       DATA V( 81) / .6002738587 8831258293 6045656600 E+00/
  23658.       DATA V( 82) / .1033476847 0686885731 7535710603 E+01/
  23659.       DATA V( 83) / .8862269254 5275801364 9083741000 E+00/
  23660.       DATA V( 84) / .1329340388 1791370204 7362561200 E+01/
  23661.       DATA V( 85) / .2880237507 7214635443 5952215970 E+01/
  23662.       DATA V( 86) / .5604991216 3979286993 1128243359 E+00/
  23663.       DATA V( 87) / .6725989459 6775144391 7353892000 E+00/
  23664.       DATA V( 88) / .9640584892 2044373628 1540578570 E+00/
  23665.       DATA V( 89) / .4610685044 4789455843 9575873876 E+00/
  23666.       DATA V( 90) / .9221370088 9578911687 9151747751 E+00/
  23667.       DATA V( 91) / .2316936064 8083348976 9125254500 E+00/
  23668.       DATA V( 92) / .1572592338 0470489995 2660465400 E-01/
  23669.       DATA V( 93) / .2932771591 2994736245 0897433147 E+00/
  23670.       DATA V( 94) / .2193222051 2871206086 2850888400 E+00/
  23671.       DATA V( 95) / .8542770431 0315549330 0048798776 E+00/
  23672.       DATA V( 96) / .1878941503 7478950009 0933504950 E+01/
  23673.       DATA V( 97) / .6748924111 1563021286 5414309867 E+00/
  23674.       DATA V( 98) / .4647504801 9609251501 9775411670 E+00/
  23675.       DATA V( 99) / .2499999999 9999999999 9999999880 E+00/
  23676.       DATA V(100) / .7350086093 0037774536 9706799000 E+00/
  23677.       DATA V(101) / .4069617876 5067297974 2685260000 E+00/
  23678.       DATA V(102) / .4482566692 9158295391 6931735480 E+00/
  23679.       DATA V(103) / .5963473623 2319407434 1078499290 E+00/
  23680.       DATA V(104) / .7573420861 2217595345 4414369190 E+00/
  23681.       DATA V(105) / .7578721561 4131210604 3351240000 E+00/
  23682. C***FIRST EXECUTABLE STATEMENT  SFNCK
  23683. C
  23684. C     Exercise routines in Category C1.
  23685. C
  23686.       Y(  1) = BINOM(35,12)
  23687.       Y(  2) = BINOM(50,15)
  23688.       Y(  3) = FAC(15)
  23689.       Y(  4) = FAC(31)
  23690. C
  23691. C     Exercise routines in Category C2
  23692. C
  23693.       Y(  5) = CBRT(-8.E0)
  23694.       Y(  6) = CBRT(.9950306243 6570396447 5039000000 E6)
  23695. C
  23696. C     Exercise routines in Category C4A.
  23697. C
  23698.       Y(  7) = COSDG(30.E0)
  23699.       Y(  8) = COSDG(135.E0)
  23700.       Y(  9) = COT(1.E0)
  23701.       Y( 10) = COT(-.5E0)
  23702.       Y( 11) = R9ATN1(.5E0)
  23703.       Y( 12) = R9ATN1(2.E0)
  23704.       Y( 13) = SINDG(30.E0)
  23705.       Y( 14) = SINDG(135.E0)
  23706. C
  23707. C     Exercise routines in Category C4B.
  23708. C
  23709.       Y( 15) = ALNREL(.147E0)
  23710.       Y( 16) = ALNREL(-.1E-5)
  23711.       Y( 17) = EXPREL(.25E-2)
  23712.       Y( 18) = EXPREL(-.1E-1)
  23713.       Y( 19) = R9LN2R(.5E0)
  23714.       Y( 20) = R9LN2R(1.E0)
  23715. C
  23716. C     Exercise routines in Category C4C.
  23717. C
  23718.       Y( 21) = ACOSH(.1006179316 4909482374 7218929626 E1)
  23719.       Y( 22) = ACOSH(.1159195327 5523908462 8557897777 E2)
  23720.       Y( 23) = ASINH(.1000000001 0129514521 1538706587 E0)
  23721.       Y( 24) = ASINH(-.1499999999 4824063412 4264852207 E1)
  23722.       Y( 25) = ATANH(-.1106572080 4138399806 6515207788 E0)
  23723.       Y( 26) = ATANH(.9899999999 9279130066 3084082410 E0)
  23724. C
  23725. C     Exercise routines in Category C5.
  23726. C
  23727.       Y( 27) = ALI(.5E0)
  23728.       Y( 28) = ALI(2.E0)
  23729.       Y( 29) = E1(.5E0)
  23730.       Y( 30) = E1(1.5E0)
  23731.       Y( 31) = EI(.5E0)
  23732.       Y( 32) = EI(1.E0)
  23733.       Y( 33) = SPENC(.5E0)
  23734.       Y( 34) = SPENC(1.E0)
  23735.       Y( 35) = GAMMA(1.5E0)
  23736.       Y( 36) = GAMMA(-.5E0)*GAMMA(1.5E0)
  23737.       Y( 37) = GAMR(-1.5E0)*GAMR(2.5E0)
  23738.       Y( 38) = GAMR(10.5E0)
  23739. C
  23740. C     Exercise routines in Category C7A.
  23741. C
  23742.       Y( 39) = POCH(-.5E0,1.5E0)
  23743.       Y( 40) = POCH(.5E0,3.E0)
  23744.       Y( 41) = POCH1(.5E0,2.5E0)
  23745.       Y( 42) = POCH1(10.5E0,2.E0)
  23746. C
  23747. C     Exercise routines in Category C7B.
  23748. C
  23749.       Y( 43) = BETA(.5E0,1.5E0)
  23750.       Y( 44) = BETA(5.5E0,5.5E0)
  23751. C
  23752. C     Exercise routines in Category C7C.
  23753. C
  23754.       Y( 45) = PSI(2.E0)
  23755.       Y( 46) = PSI(10.5E0)
  23756. C
  23757. C     Exercise routines in Category C7E.
  23758. C
  23759.       Y( 47) = GAMI(1.E0,8.85E0)
  23760.       Y( 48) = GAMI(2.E0,3.75E0)
  23761.       Y( 49) = GAMIC(1.E0,2.E0)
  23762.       Y( 50) = GAMIC(2.E0,10.4E0)
  23763.       Y( 51) = GAMIT(1.E0,.5E0)
  23764.       Y( 52) = GAMIT(2.E0,3.75E0)
  23765. C
  23766. C     Exercise routines in Category C7F.
  23767. C
  23768.       Y( 53) = BETAI(.5E0,2.E0,1.5E0)
  23769.       Y( 54) = BETAI(.25E0,1.5E0,2.E0)
  23770. C
  23771. C     Exercise routines in Category C8A.
  23772. C
  23773.       Y( 55) = ERF(.5E0)
  23774.       Y( 56) = ERF(1.125E0)
  23775. C
  23776. C     Exercise routines in Category C8C.
  23777. C
  23778.       Y( 57) = DAWS(.5E0)
  23779.       Y( 58) = DAWS(1.84E0)
  23780. C
  23781. C     Exercise routines in Category C10A1.
  23782. C
  23783.       Y( 59) = BESJ0(5.E0)
  23784.       Y( 60) = BESJ0(2.E0)
  23785.       Y( 61) = BESJ1(5.E0)
  23786.       Y( 62) = BESJ1(2.E0)
  23787.       Y( 63) = BESY0(2.E0)
  23788.       Y( 64) = BESY0(5.E0)
  23789.       Y( 65) = BESY1(5.E0)
  23790.       Y( 66) = BESY1(2.E0)
  23791. C
  23792. C     Exercise routines in Category C10B1.
  23793. C
  23794.       Y( 67) = BESI0(2.E0)
  23795.       Y( 68) = BESI0(5.E0)
  23796.       Y( 69) = BESI1(2.E0)
  23797.       Y( 70) = BESI1(5.E0)
  23798.       Y( 71) = BESK0(2.E0)
  23799.       Y( 72) = BESK0(5.E0)
  23800.       Y( 73) = BESK1(2.E0)
  23801.       Y( 74) = BESK1(5.E0)
  23802.       Y( 75) = BESI0E(2.E0)
  23803.       Y( 76) = BESI0E(5.E0)
  23804.       Y( 77) = BESI1E(5.E0)
  23805.       Y( 78) = BESI1E(2.E0)
  23806.       Y( 79) = BESK0E(2.E0)
  23807.       Y( 80) = BESK0E(5.E0)
  23808.       Y( 81) = BESK1E(5.E0)
  23809.       Y( 82) = BESK1E(2.E0)
  23810. C
  23811. C     Exercise routines in Category C10B3.
  23812. C
  23813.       CALL BESKES(.5E0,2.E0,3,Y(83))
  23814.       CALL BESKES(.5E0,5.E0,3,Y(86))
  23815.       CALL BESKS(.5E0,1.E0,2,Y(89))
  23816. C
  23817. C     Exercise routines in Category C10D.
  23818. C
  23819.       Y( 91) = AI(.5E0)
  23820.       Y( 92) = AI(2.5E0)
  23821.       Y( 93) = AIE(.5E0)
  23822.       Y( 94) = AIE(2.5E0)
  23823.       Y( 95) = BI(.5E0)
  23824.       Y( 96) = BI(1.5E0)
  23825.       Y( 97) = BIE(.5E0)
  23826.       Y( 98) = BIE(2.5E0)
  23827. C
  23828. C     Exercise routines in Category C11.
  23829. C
  23830.       Y( 99) = CHU(1.E0,2.E0,4.E0)
  23831.       Y(100) = CHU(5.E0/6.E0,5.E0/3.E0,4.E0/3.E0)
  23832.       Y(101) = CHU(.75E0,.75E0,2.5E0)
  23833.       Y(102) = CHU(1.E0,1.E0,1.5E0)
  23834.       Y(103) = CHU(1.E0,1.E0,1.E0)
  23835.       Y(104) = CHU(1.E0,1.E0,-LOG(.5E0))
  23836.       Y(105) = CHU(.5E0,.5E0,1.E0)
  23837. C
  23838. C     Check for possible errors
  23839. C
  23840.       ERRMAX = R1MACH(4)
  23841.       ERRTOL = SQRT(ERRMAX)
  23842.       DO 10 I = 1,105
  23843.         ABSERR = ABS(V(I)-Y(I))
  23844.         RELERR = ABSERR/ABS(V(I))
  23845.         ERRMAX = MAX(RELERR,ERRMAX)
  23846.         IF (RELERR.GT.ERRTOL .AND. KPRINT.GE.2)
  23847.      +      WRITE (LUN,620) I,RELERR,ABSERR
  23848.    10 CONTINUE
  23849.       IPASS = 0
  23850.       IF (ERRMAX.LE.ERRTOL) IPASS = 1
  23851.       IF (IPASS.NE.0 .AND. KPRINT.GE.2) WRITE (LUN,610)
  23852.       RETURN
  23853. C
  23854.   610 FORMAT (' Single precision Fullerton special function ',
  23855.      +        ' routines o.k.')
  23856.   620 FORMAT (' For I  = ', I3, '  test fails with RELERR  = ',
  23857.      +        E38.30, '  and ABSERR  = ', E38.30)
  23858.       END
  23859. *DECK SGEQC
  23860.       SUBROUTINE SGEQC (LUN, KPRINT, NERR)
  23861. C***BEGIN PROLOGUE  SGEQC
  23862. C***PURPOSE  Quick check for SGEFS and SGEIR.
  23863. C***LIBRARY   SLATEC
  23864. C***TYPE      SINGLE PRECISION (SGEQC-S, DGEQC-D, CGEQC-C)
  23865. C***KEYWORDS  QUICK CHECK
  23866. C***AUTHOR  Jacobsen, Nancy, (LANL)
  23867. C***DESCRIPTION
  23868. C
  23869. C   Let A*X=B be a SINGLE PRECISION linear system where the
  23870. C   matrix is of the proper type for the Linpack subroutines
  23871. C   being called.  The values of A and B and the pre-computed
  23872. C   values of BXEX (the solution vector) are given in DATA
  23873. C   statements.  The computed test results for X are compared to
  23874. C   the stored pre-computed values.  Failure of the test occurs
  23875. C   when there is less than 80% agreement between the absolute
  23876. C   values.  There are 2 tests - one for the normal case and one
  23877. C   for the singular case.  A message is printed indicating
  23878. C   whether each subroutine has passed or failed for each case.
  23879. C
  23880. C   On return, NERR (INTEGER type) contains the total count of
  23881. C   all failures detected.
  23882. C
  23883. C***ROUTINES CALLED  R1MACH, SGEFS, SGEIR
  23884. C***REVISION HISTORY  (YYMMDD)
  23885. C   801022  DATE WRITTEN
  23886. C   891009  Removed unreferenced statement label.  (WRB)
  23887. C   891009  REVISION DATE from Version 3.2
  23888. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  23889. C   920601  Code reworked and TYPE section added.  (RWC, WRB)
  23890. C***END PROLOGUE  SGEQC
  23891. C     .. Scalar Arguments ..
  23892.       INTEGER KPRINT, LUN, NERR
  23893. C     .. Local Scalars ..
  23894.       REAL ERRCMP, ERRMAX
  23895.       INTEGER I, IND, ITASK, J, KPROG, LDA, N
  23896. C     .. Local Arrays ..
  23897.       REAL A(5,4), ATEMP(5,4), B(4), BTEMP(4), BXEX(4), WORK(20)
  23898.       INTEGER IWORK(4)
  23899.       CHARACTER LIST(2)*4
  23900. C     .. External Functions ..
  23901.       REAL R1MACH
  23902.       EXTERNAL R1MACH
  23903. C     .. External Subroutines ..
  23904.       EXTERNAL SGEFS, SGEIR
  23905. C     .. Intrinsic Functions ..
  23906.       INTRINSIC ABS, MAX
  23907. C     .. Data statements ..
  23908.       DATA A /5.0E0,  1.0E0,  0.3E0, 2.1E0, 0.0E0,
  23909.      +       -1.0E0, -0.5E0,  1.0E0, 1.0E0, 0.0E0,
  23910.      +        4.5E0, -1.0E0, -1.7E0, 2.0E0, 0.0E0,
  23911.      +        0.5E0,  2.0E0,  0.6E0, 1.3E0, 0.0E0/
  23912.       DATA B /0.0E0, 3.5E0, 3.6E0, 2.4E0/
  23913.       DATA BXEX /0.10E+01, 0.10E+01, -0.10E+01, 0.10E+01/
  23914.       DATA LIST /'GEFS', 'GEIR'/
  23915. C***FIRST EXECUTABLE STATEMENT  SGEQC
  23916.       N = 4
  23917.       LDA = 5
  23918.       NERR = 0
  23919.       ERRCMP = R1MACH(4)**0.8E0
  23920.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  23921. C
  23922.       DO 180 KPROG=1,2
  23923. C
  23924. C     First test case - normal
  23925. C
  23926.         ITASK = 1
  23927.         DO 100 I=1,N
  23928.           BTEMP(I) = B(I)
  23929.   100   CONTINUE
  23930.         DO 120 J=1,N
  23931.           DO 110 I=1,N
  23932.             ATEMP(I,J) = A(I,J)
  23933.   110     CONTINUE
  23934.   120   CONTINUE
  23935.         IF (KPROG .EQ. 1) THEN
  23936.           CALL SGEFS (ATEMP, LDA, N, BTEMP, ITASK, IND, WORK, IWORK)
  23937.         ELSE
  23938.           CALL SGEIR (ATEMP, LDA, N, BTEMP, ITASK, IND, WORK, IWORK)
  23939.         ENDIF
  23940.         IF (IND .LT. 0) THEN
  23941.           IF (KPRINT .GE. 2) WRITE (LUN, FMT=9010) LIST(KPROG), IND
  23942.           NERR = NERR + 1
  23943.         ENDIF
  23944. C
  23945. C       Calculate error for first test
  23946. C
  23947.         ERRMAX = 0.0E0
  23948. C
  23949.         DO 130 I=1,N
  23950.           ERRMAX = MAX(ERRMAX,ABS(BTEMP(I)-BXEX(I)))
  23951.   130   CONTINUE
  23952.         IF (ERRCMP .GT. ERRMAX) THEN
  23953.           IF (KPRINT .GE. 3) WRITE (LUN, FMT=9010) LIST(KPROG)
  23954.         ELSE
  23955.           IF (KPRINT .GE. 2) WRITE (LUN, FMT=9020) LIST(KPROG), ERRMAX
  23956.           NERR = NERR + 1
  23957.         ENDIF
  23958. C
  23959. C       Second test case - singular matrix
  23960. C
  23961.         ITASK = 1
  23962.         DO 140 I=1,N
  23963.           BTEMP(I) = B(I)
  23964.   140   CONTINUE
  23965.         DO 160 J=1,N
  23966.           DO 150 I=1,N
  23967.             ATEMP(I,J) = A(I,J)
  23968.   150     CONTINUE
  23969.   160   CONTINUE
  23970.         DO 170 J=1,N
  23971.           ATEMP(1,J) = 0.0E0
  23972.   170   CONTINUE
  23973.         IF (KPROG .EQ. 1) THEN
  23974.           CALL SGEFS (ATEMP, LDA, N, BTEMP, ITASK, IND, WORK, IWORK)
  23975.         ELSE
  23976.           CALL SGEIR (ATEMP, LDA, N, BTEMP, ITASK, IND, WORK, IWORK)
  23977.         ENDIF
  23978.         IF (IND .EQ. -4) THEN
  23979.           IF (KPRINT .GE. 3) WRITE (LUN, FMT=9030) LIST(KPROG)
  23980.         ELSE
  23981.           IF (KPRINT .GE. 2) WRITE (LUN, FMT=9040) LIST(KPROG), IND
  23982.           NERR = NERR + 1
  23983.         ENDIF
  23984. C
  23985.   180 CONTINUE
  23986. C
  23987.       IF (KPRINT.GE.3 .AND. NERR.EQ.0) WRITE (LUN,9050)
  23988.       IF (KPRINT.GE.2 .AND. NERR.NE.0) WRITE (LUN,9060)
  23989.       RETURN
  23990. C
  23991.  9000 FORMAT (//, 2X, 'SGEFS and SGEIR Quick Check' /)
  23992.  9010 FORMAT (/, 5X, 'S', A, ' Normal test PASSED')
  23993.  9020 FORMAT (/, 5X, 'S', A, ' Test FAILED, MAX ABS(ERROR) is', E13.5)
  23994.  9030 FORMAT (/, 5X, 'S', A, ' Singular test PASSED')
  23995.  9040 FORMAT (/, 5X, 'S', A, ' Singular test FAILED, IND=', I3)
  23996.  9050 FORMAT (/, 2X, 'SGEFS and SGEIR Quick Check PASSED' /)
  23997.  9060 FORMAT (/, 2X, 'SGEFS and SGEIR Quick Check FAILED' /)
  23998.       END
  23999. *DECK SNLS1Q
  24000.       SUBROUTINE SNLS1Q (LUN, KPRINT, IPASS)
  24001. C***BEGIN PROLOGUE  SNLS1Q
  24002. C***PURPOSE  Quick check for SNLS1E, SNLS1 and SCOV.
  24003. C***LIBRARY   SLATEC
  24004. C***KEYWORDS  QUICK CHECK
  24005. C***AUTHOR  (UNKNOWN)
  24006. C***DESCRIPTION
  24007. C
  24008. C     THIS SUBROUTINE PERFORMS A QUICK CHECK ON THE SUBROUTINES SNLS1E
  24009. C     (AND SNLS1) AND SCOV.
  24010. C
  24011. C***ROUTINES CALLED  ENORM, FCN1, FCN2, FCN3, FDJAC3, PASS, R1MACH,
  24012. C                    SCOV, SNLS1E
  24013. C***REVISION HISTORY  (YYMMDD)
  24014. C   ??????  DATE WRITTEN
  24015. C   890911  Removed unnecessary intrinsics.  (WRB)
  24016. C   890911  REVISION DATE from Version 3.2
  24017. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24018. C***END PROLOGUE  SNLS1Q
  24019.       INTEGER ICNT, ITEST(8)
  24020.       DIMENSION X(2),FVEC(10),FJAC(10,2),FJROW(2),WA(40),IW(2),FJTJ(3)
  24021.       EXTERNAL FCN1,FCN2,FCN3
  24022. C***FIRST EXECUTABLE STATEMENT  SNLS1Q
  24023.       INFOS=1
  24024.       FNORMS=0.11151779E+02
  24025.       M=10
  24026.       N=2
  24027.       LWA=40
  24028.       LDFJAC=10
  24029.       NPRINT=-1
  24030.       IFLAG=1
  24031.       ZERO=0.E0
  24032.       ONE=1.E0
  24033.       TOL=SQRT(40.*R1MACH(4))
  24034.       TOL2=SQRT(TOL)
  24035.       IF (KPRINT.GE.2) WRITE(LUN,1000)
  24036. C
  24037. C     OPTION=2, THE FULL JACOBIAN IS STORED AND THE USER PROVIDES THE
  24038. C     JACOBIAN.
  24039.       IOPT=2
  24040.       X(1)=3.E-1
  24041.       X(2)=4.E-1
  24042.       CALL SNLS1E(FCN2,IOPT,M,N,X,FVEC,TOL,NPRINT,INFO,
  24043.      * IW,WA,LWA)
  24044.       ICNT=1
  24045.       FNORM=ENORM(M,FVEC)
  24046.       ITEST(ICNT)=0
  24047.       IF ((INFO.EQ.INFOS) .AND. (ABS(FNORM-FNORMS)/FNORMS.LE.TOL))
  24048.      * ITEST(ICNT)=1
  24049.       IF (KPRINT.EQ.0) GO TO 15
  24050.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  24051.      * WRITE(LUN,1010) INFOS,FNORMS,INFO,FNORM
  24052.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24053.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  24054.    15 CONTINUE
  24055. C
  24056. C     FORM JAC-TRANSPOSE*JAC
  24057.       SIGMA=FNORM*FNORM/(M-N)
  24058.       IFLAG = 2
  24059.       CALL FCN2(IFLAG,M,N,X,FVEC,FJAC,LDFJAC)
  24060.       DO 10 I=1,3
  24061.    10 FJTJ(I)=ZERO
  24062.       DO 11 I=1,M
  24063.       FJTJ(1)=FJTJ(1)+FJAC(I,1)**2
  24064.       FJTJ(2)=FJTJ(2)+FJAC(I,1)*FJAC(I,2)
  24065.       FJTJ(3)=FJTJ(3)+FJAC(I,2)**2
  24066.    11 CONTINUE
  24067. C
  24068. C     CALCULATE COVARIANCE MATRIX
  24069.       CALL SCOV(FCN2,IOPT,M,N,X,FVEC,FJAC,LDFJAC,INFO,
  24070.      *WA(1),WA(N+1),WA(2*N+1),WA(3*N+1))
  24071. C
  24072. C     FORM JAC-TRANSPOSE*JAC * COVARIANCE MATRIX
  24073. C     (SHOULD = SIGMA*I)
  24074.       TEMP1=(FJTJ(1)*FJAC(1,1)+FJTJ(2)*FJAC(1,2))/SIGMA
  24075.       TEMP2=(FJTJ(1)*FJAC(1,2)+FJTJ(2)*FJAC(2,2))/SIGMA
  24076.       TEMP3=(FJTJ(2)*FJAC(1,2)+FJTJ(3)*FJAC(2,2))/SIGMA
  24077.       ICNT=5
  24078.       ITEST(ICNT)=0
  24079.       IF (INFO.EQ.INFOS .AND. ABS(TEMP1-ONE).LT.TOL2 .AND.
  24080.      * ABS(TEMP2).LT.TOL2 .AND. ABS(TEMP3-ONE).LT.TOL2)
  24081.      *ITEST(ICNT)=1
  24082.       IF (KPRINT.EQ.0) GO TO 20
  24083.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  24084.      * WRITE(LUN,1020) INFOS,INFO,TEMP1,TEMP2,TEMP3
  24085.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24086.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  24087. C
  24088. C     OPTION=1, THE FULL JACOBIAN IS STORED AND THE CODE APPROXIMATES
  24089. C     THE JACOBIAN.
  24090. 20    IOPT=1
  24091.       X(1)=3.E-1
  24092.       X(2)=4.E-1
  24093.       CALL SNLS1E(FCN1,IOPT,M,N,X,FVEC,TOL,NPRINT,INFO,
  24094.      * IW,WA,LWA)
  24095.       ICNT=2
  24096.       FNORM=ENORM(M,FVEC)
  24097.       ITEST(ICNT)=0
  24098.       IF ((INFO.EQ.INFOS).AND.(ABS(FNORM-FNORMS)/FNORMS.LE.TOL))
  24099.      * ITEST(ICNT)=1
  24100.       IF (KPRINT.EQ.0) GO TO 25
  24101.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  24102.      * WRITE(LUN,1010) INFOS,FNORMS,INFO,FNORM
  24103.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24104.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  24105.    25 CONTINUE
  24106. C
  24107. C     FORM JAC-TRANSPOSE*JAC
  24108.       SIGMA=FNORM*FNORM/(M-N)
  24109.       IFLAG = 1
  24110.       CALL FDJAC3(FCN1,M,N,X,FVEC,FJAC,LDFJAC,IFLAG,ZERO,WA)
  24111.       DO 26 I=1,3
  24112.    26 FJTJ(I)=ZERO
  24113.       DO 27 I=1,M
  24114.       FJTJ(1)=FJTJ(1)+FJAC(I,1)**2
  24115.       FJTJ(2)=FJTJ(2)+FJAC(I,1)*FJAC(I,2)
  24116.       FJTJ(3)=FJTJ(3)+FJAC(I,2)**2
  24117.    27 CONTINUE
  24118. C
  24119. C     CALCULATE COVARIANCE MATRIX
  24120.       CALL SCOV(FCN1,IOPT,M,N,X,FVEC,FJAC,LDFJAC,INFO,
  24121.      *WA(1),WA(N+1),WA(2*N+1),WA(3*N+1))
  24122. C
  24123. C     FORM JAC-TRANSPOSE*JAC * COVARIANCE MATRIX
  24124. C     (SHOULD = SIGMA*I)
  24125.       TEMP1=(FJTJ(1)*FJAC(1,1)+FJTJ(2)*FJAC(1,2))/SIGMA
  24126.       TEMP2=(FJTJ(1)*FJAC(1,2)+FJTJ(2)*FJAC(2,2))/SIGMA
  24127.       TEMP3=(FJTJ(2)*FJAC(1,2)+FJTJ(3)*FJAC(2,2))/SIGMA
  24128.       ICNT=6
  24129.       ITEST(ICNT)=0
  24130.       IF (INFO.EQ.INFOS .AND. ABS(TEMP1-ONE).LT.TOL2 .AND.
  24131.      * ABS(TEMP2).LT.TOL2 .AND. ABS(TEMP3-ONE).LT.TOL2)
  24132.      *ITEST(ICNT)=1
  24133.       IF (KPRINT.EQ.0) GO TO 30
  24134.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  24135.      * WRITE(LUN,1020) INFOS,INFO,TEMP1,TEMP2,TEMP3
  24136.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24137.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  24138. C
  24139. C     OPTION=3, THE FULL JACOBIAN IS NOT STORED ONLY THE PRODUCT OF THE
  24140. C     JACOBIAN TRANSPOSE AND JACOBIAN IS STORED. THE USER PROVIDES THE
  24141. C     THE JACOBIAN ONE ROW AT A TIME.
  24142. 30    IOPT=3
  24143.       X(1)=3.E-1
  24144.       X(2)=4.E-1
  24145.       CALL SNLS1E(FCN3,IOPT,M,N,X,FVEC,TOL,NPRINT,INFO,
  24146.      * IW,WA,LWA)
  24147.       ICNT=3
  24148.       FNORM=ENORM(M,FVEC)
  24149.       ITEST(ICNT)=0
  24150.       IF ((INFO.EQ.INFOS).AND.(ABS(FNORM-FNORMS)/FNORMS.LE.TOL))
  24151.      * ITEST(ICNT)=1
  24152.       IF (KPRINT.EQ.0) GO TO 35
  24153.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  24154.      * WRITE(LUN,1010) INFOS,FNORMS,INFO,FNORM
  24155.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24156.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  24157.    35 CONTINUE
  24158. C
  24159. C     FORM JAC-TRANSPOSE*JAC
  24160.       SIGMA=FNORM*FNORM/(M-N)
  24161.       DO 36 I=1,3
  24162.    36 FJTJ(I)=ZERO
  24163.       IFLAG=3
  24164.       DO 37 I=1,M
  24165.       CALL FCN3(IFLAG,M,N,X,FVEC,FJROW,I)
  24166.       FJTJ(1)=FJTJ(1)+FJROW(1)**2
  24167.       FJTJ(2)=FJTJ(2)+FJROW(1)*FJROW(2)
  24168.       FJTJ(3)=FJTJ(3)+FJROW(2)**2
  24169.    37 CONTINUE
  24170. C
  24171. C     CALCULATE COVARIANCE MATRIX
  24172.       CALL SCOV(FCN3,IOPT,M,N,X,FVEC,FJAC,LDFJAC,INFO,
  24173.      *WA(1),WA(N+1),WA(2*N+1),WA(3*N+1))
  24174. C
  24175. C     FORM JAC-TRANSPOSE*JAC * COVARIANCE MATRIX
  24176. C     (SHOULD = SIGMA*I)
  24177.       TEMP1=(FJTJ(1)*FJAC(1,1)+FJTJ(2)*FJAC(1,2))/SIGMA
  24178.       TEMP2=(FJTJ(1)*FJAC(1,2)+FJTJ(2)*FJAC(2,2))/SIGMA
  24179.       TEMP3=(FJTJ(2)*FJAC(1,2)+FJTJ(3)*FJAC(2,2))/SIGMA
  24180.       ICNT=7
  24181.       ITEST(ICNT)=0
  24182.       IF (INFO.EQ.INFOS .AND. ABS(TEMP1-ONE).LT.TOL2 .AND.
  24183.      * ABS(TEMP2).LT.TOL2 .AND. ABS(TEMP3-ONE).LT.TOL2)
  24184.      *ITEST(ICNT)=1
  24185.       IF (KPRINT.EQ.0) GO TO 40
  24186.       IF ((KPRINT.GE.2.AND.ITEST(ICNT).NE.1).OR.KPRINT.GE.3)
  24187.      * WRITE(LUN,1020) INFOS,INFO,TEMP1,TEMP2,TEMP3
  24188.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24189.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  24190. C
  24191. C     TEST IMPROPER INPUT PARAMETERS
  24192. 40    LWA=35
  24193.       IOPT=2
  24194.       X(1)=3.E-1
  24195.       X(2)=4.E-1
  24196.       CALL SNLS1E(FCN2,IOPT,M,N,X,FVEC,TOL,NPRINT,INFO,
  24197.      * IW,WA,LWA)
  24198.       ICNT=4
  24199.       ITEST(ICNT)=0
  24200.       IF (INFO.EQ.0) ITEST(ICNT)=1
  24201.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24202.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  24203.       ITEST(8)=1
  24204.       IF(KPRINT.LT.3) GO TO 999
  24205.       M=0
  24206.       CALL SCOV(FCN2,IOPT,M,N,X,FVEC,FJAC,LDFJAC,INFO,
  24207.      *WA(1),WA(N+1),WA(2*N+1),WA(3*N+1))
  24208.       ICNT=8
  24209.       ITEST(ICNT)=0
  24210.       IF (INFO.EQ.0) ITEST(ICNT)=1
  24211.       IF((KPRINT.GE.2).OR.(KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24212.      *   CALL PASS (LUN, ICNT, ITEST(ICNT))
  24213. C
  24214. C     SET IPASS
  24215. 999   IPASS=ITEST(1)*ITEST(2)*ITEST(3)*ITEST(4)
  24216.       IPASS=IPASS*ITEST(5)*ITEST(6)*ITEST(7)*ITEST(8)
  24217.       RETURN
  24218. 1000  FORMAT(1H1,19H SNLS1E QUICK CHECK/)
  24219. 1010  FORMAT(41H EXPECTED VALUE OF INFO AND RESIDUAL NORM,I5,E20.9/
  24220.      *       41H RETURNED VALUE OF INFO AND RESIDUAL NORM,I5,E20.9/)
  24221.  1020 FORMAT(36H EXPECTED AND RETURNED VALUE OF INFO,I5,10X,I5/
  24222.      *56H RETURNED PRODUCT OF (J-TRANS*J)*COVARIANCE MATRIX/SIGMA/
  24223.      *41H (SHOULD = THE IDENTITY -- 1.0, 0.0, 1.0)/3E20.9/)
  24224.       END
  24225. *DECK SNSQQK
  24226.       SUBROUTINE SNSQQK (LUN, KPRINT, IPASS)
  24227. C***BEGIN PROLOGUE  SNSQQK
  24228. C***PURPOSE  Quick check for SNSQE and SNSQ.
  24229. C***LIBRARY   SLATEC
  24230. C***TYPE      SINGLE PRECISION (SNSQQK-S, DNSQQK-D)
  24231. C***KEYWORDS  QUICK CHECK
  24232. C***AUTHOR  (UNKNOWN)
  24233. C***DESCRIPTION
  24234. C
  24235. C   This subroutine performs a quick check on the subroutine SNSQE
  24236. C   (and SNSQ).
  24237. C
  24238. C***ROUTINES CALLED  ENORM, PASS, R1MACH, SNSQE, SQFCN2, SQJAC2
  24239. C***REVISION HISTORY  (YYMMDD)
  24240. C   ??????  DATE WRITTEN
  24241. C   891009  Removed unreferenced variable.  (WRB)
  24242. C   891009  REVISION DATE from Version 3.2
  24243. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24244. C   920310  Code cleaned up and TYPE section added.  (RWC, WRB)
  24245. C***END PROLOGUE  SNSQQK
  24246. C     .. Scalar Arguments ..
  24247.       INTEGER IPASS, KPRINT, LUN
  24248. C     .. Local Scalars ..
  24249.       REAL FNORM, FNORMS, TOL
  24250.       INTEGER ICNT, INFO, INFOS, IOPT, LWA, N, NPRINT
  24251. C     .. Local Arrays ..
  24252.       REAL FVEC(2), WA(19), X(2)
  24253.       INTEGER ITEST(3)
  24254. C     .. External Functions ..
  24255.       REAL ENORM, R1MACH
  24256.       EXTERNAL ENORM, R1MACH
  24257. C     .. External Subroutines ..
  24258.       EXTERNAL PASS, SNSQE, SQFCN2, SQJAC2
  24259. C     .. Intrinsic Functions ..
  24260.       INTRINSIC SQRT
  24261. C***FIRST EXECUTABLE STATEMENT  SNSQQK
  24262.       INFOS = 1
  24263.       FNORMS = 0.0E0
  24264.       N = 2
  24265.       LWA = 19
  24266.       NPRINT = -1
  24267.       TOL = SQRT(R1MACH(4))
  24268.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  24269. C
  24270. C     Option 1, the user provides the Jacobian.
  24271. C
  24272.       IOPT = 1
  24273.       X(1) = -1.2E0
  24274.       X(2) = 1.0E0
  24275.       CALL SNSQE (SQFCN2,SQJAC2,IOPT,N,X,FVEC,TOL,NPRINT,INFO,WA,LWA)
  24276.       ICNT = 1
  24277.       FNORM = ENORM(N,FVEC)
  24278.       ITEST(ICNT) = 0
  24279.       IF ((INFO.EQ.INFOS) .AND. (FNORM-FNORMS.LE.TOL)) ITEST(ICNT) = 1
  24280. C
  24281.       IF (KPRINT .NE. 0) THEN
  24282.          IF ((KPRINT.GE.2 .AND. ITEST(ICNT).NE.1) .OR. KPRINT.GE.3)
  24283.      +       WRITE (LUN,9010) INFOS,FNORMS,INFO,FNORM
  24284.          IF ((KPRINT.GE.2) .OR. (KPRINT.EQ.1 .AND. ITEST(ICNT).NE.1))
  24285.      +       CALL PASS (LUN, ICNT, ITEST(ICNT))
  24286.       ENDIF
  24287. C
  24288. C     Option 2, the code approximates the Jacobian.
  24289. C
  24290.       IOPT = 2
  24291.       X(1) = -1.2E0
  24292.       X(2) = 1.0E0
  24293.       CALL SNSQE (SQFCN2,SQJAC2,IOPT,N,X,FVEC,TOL,NPRINT,INFO,WA,LWA)
  24294.       ICNT = 2
  24295.       FNORM = ENORM(N,FVEC)
  24296.       ITEST(ICNT) = 0
  24297.       IF ((INFO.EQ.INFOS) .AND. (FNORM-FNORMS.LE.TOL)) ITEST(ICNT) = 1
  24298. C
  24299.       IF (KPRINT .NE. 0) THEN
  24300.          IF (KPRINT.GE.3 .OR. (KPRINT.GE.2.AND.ITEST(ICNT).NE.1))
  24301.      +       WRITE (LUN,9010) INFOS, FNORMS, INFO, FNORM
  24302.          IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24303.      +       CALL PASS (LUN, ICNT, ITEST(ICNT))
  24304.       ENDIF
  24305. C
  24306. C     Test improper input parameters.
  24307. C
  24308.       LWA = 15
  24309.       IOPT = 1
  24310.       X(1) = -1.2E0
  24311.       X(2) = 1.0E0
  24312.       CALL SNSQE (SQFCN2,SQJAC2,IOPT,N,X,FVEC,TOL,NPRINT,INFO,WA,LWA)
  24313.       ICNT = 3
  24314.       ITEST(ICNT) = 0
  24315.       IF (INFO .EQ. 0) ITEST(ICNT) = 1
  24316.       IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24317.      +    CALL PASS (LUN, ICNT, ITEST(ICNT))
  24318. C
  24319. C     Set IPASS.
  24320. C
  24321.       IPASS = ITEST(1)*ITEST(2)*ITEST(3)
  24322.       IF (KPRINT.GE.1 .AND. IPASS.NE.1) WRITE (LUN,9020)
  24323.       IF (KPRINT.GE.2 .AND. IPASS.EQ.1) WRITE (LUN,9030)
  24324.       RETURN
  24325.  9000 FORMAT ('1' / '  SNSQE QUICK CHECK'/)
  24326.  9010 FORMAT (' EXPECTED VALUE OF INFO AND RESIDUAL NORM', I5, E20.5 /
  24327.      +        ' RETURNED VALUE OF INFO AND RESIDUAL NORM', I5, E20.5 /)
  24328.  9020 FORMAT (/' **********WARNING -- SNSQE/SNSQ FAILED SOME TESTS****',
  24329.      +        '******')
  24330.  9030 FORMAT (/' ----------SNSQE/SNSQ PASSED ALL TESTS----------')
  24331.       END
  24332. *DECK SORTQX
  24333.       SUBROUTINE SORTQX (LUN, KPRINT, IPASS)
  24334. C***BEGIN PROLOGUE  SORTQX
  24335. C***PURPOSE  Subsidiary to
  24336. C***LIBRARY   SLATEC
  24337. C***AUTHOR  (UNKNOWN)
  24338. C***ROUTINES CALLED  ISORT, SSORT
  24339. C***REVISION HISTORY  (YYMMDD)
  24340. C   ??????  DATE WRITTEN
  24341. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24342. C***END PROLOGUE  SORTQX
  24343.       DIMENSION X(10),Y(10),IX(10),IY(10)
  24344.       DATA X(1),Y(1),IX(1),IY(1),X(2),Y(2),IX(2),IY(2),X(3),Y(3),IX(3),
  24345.      1IY(3),X(4),Y(4),IX(4),IY(4),X(5),Y(5),IX(5),IY(5),X(6),Y(6),IX(6),
  24346.      2IY(6),X(7),Y(7),IX(7),IY(7),X(8),Y(8),IX(8),IY(8),X(9),Y(9),IX(9),
  24347.      3IY(9),X(10),Y(10),IX(10),IY(10)/
  24348.      4 1.,1.,3,3,-1.,-1.,2,2,2.,2.,4,4, -2.,-2.,-2,-2, 2.,2.,2,2,
  24349.      5 0.,0.,0,0, -2.,-2.,-1,-1, 9.,9.,9,9, -9.,-9.,-9,-9,-0.,-0.,0,0/
  24350. C***FIRST EXECUTABLE STATEMENT  SORTQX
  24351.       CALL SSORT(X,Y,10,2)
  24352.       IF(KPRINT.GT.2)WRITE(LUN,100) (X(I),Y(I),I=1,10)
  24353.       CALL ISORT(IX,IY,10,2)
  24354.       IF(KPRINT.GT.2)WRITE(LUN,101) (IX(I),IY(I),I=1,10)
  24355.       IPASS=0
  24356.       IF(IX(1).EQ.-9 .AND. X(1).EQ.-9.)IPASS=1
  24357.       IF(IPASS .EQ. 1.AND.KPRINT.GE.2) WRITE(LUN,200)
  24358.       IF(IPASS .EQ. 0.AND.KPRINT.NE.0) WRITE(LUN,201)
  24359.   200 FORMAT(26H NO ERROR IN SSORT PACKAGE  )
  24360.   201 FORMAT(31H ISORT OR SSORT HAS AN ERROR...  )
  24361.   100 FORMAT(2E16.8)
  24362.   101 FORMAT(2I5)
  24363.       RETURN
  24364.       END
  24365. *DECK SOSFNC
  24366.       REAL FUNCTION SOSFNC (X, K)
  24367. C***BEGIN PROLOGUE  SOSFNC
  24368. C***PURPOSE  Function evaluator for SOS quick check.
  24369. C***LIBRARY   SLATEC
  24370. C***KEYWORDS  QUICK CHECK
  24371. C***AUTHOR  Watts, H. A., (SNLA)
  24372. C***DESCRIPTION
  24373. C
  24374. C     FUNCTION WHICH EVALUATES THE FUNCTIONS, ONE AT A TIME,
  24375. C     FOR TEST PROGRAM USED IN QUICK CHECK OF SOS.
  24376. C
  24377. C***ROUTINES CALLED  (NONE)
  24378. C***REVISION HISTORY  (YYMMDD)
  24379. C   801001  DATE WRITTEN
  24380. C   890618  REVISION DATE from Version 3.2
  24381. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24382. C***END PROLOGUE  SOSFNC
  24383.       DIMENSION X(2)
  24384. C***FIRST EXECUTABLE STATEMENT  SOSFNC
  24385.       IF (K.EQ.1) SOSFNC=1.E0-X(1)
  24386.       IF (K.EQ.2) SOSFNC=1.E1*(X(2)-X(1)**2)
  24387.       RETURN
  24388.       END
  24389. *DECK SOSNQX
  24390.       SUBROUTINE SOSNQX (LUN, KPRINT, IPASS)
  24391. C***BEGIN PROLOGUE  SOSNQX
  24392. C***PURPOSE  Quick check for SOS.
  24393. C***LIBRARY   SLATEC
  24394. C***TYPE      SINGLE PRECISION (SOSNQX-S, DSOSQX-D)
  24395. C***KEYWORDS  QUICK CHECK
  24396. C***AUTHOR  Watts, H. A., (SNLA)
  24397. C***DESCRIPTION
  24398. C
  24399. C   This subroutine performs a quick check on the subroutine SOS.
  24400. C
  24401. C***ROUTINES CALLED  PASS, R1MACH, SNRM2, SOS, SOSFNC
  24402. C***REVISION HISTORY  (YYMMDD)
  24403. C   801001  DATE WRITTEN
  24404. C   890618  REVISION DATE from Version 3.2
  24405. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24406. C   920310  Code cleaned up and TYPE section added.  (RWC, WRB)
  24407. C***END PROLOGUE  SOSNQX
  24408. C     .. Scalar Arguments ..
  24409.       INTEGER IPASS, KPRINT, LUN
  24410. C     .. Local Scalars ..
  24411.       REAL AER, FNORM, FNORMS, RER, TOLF
  24412.       INTEGER ICNT, IFLAG, IFLAGS, LIW, LWA, N
  24413. C     .. Local Arrays ..
  24414.       REAL FVEC(2), WA(17), X(2)
  24415.       INTEGER ITEST(2), IW(6)
  24416. C     .. External Functions ..
  24417.       REAL R1MACH, SNRM2, SOSFNC
  24418.       EXTERNAL R1MACH, SNRM2, SOSFNC
  24419. C     .. External Subroutines ..
  24420.       EXTERNAL PASS, SOS
  24421. C     .. Intrinsic Functions ..
  24422.       INTRINSIC SQRT
  24423. C***FIRST EXECUTABLE STATEMENT  SOSNQX
  24424.       IFLAGS = 3
  24425.       FNORMS = 0.0E0
  24426.       N = 2
  24427.       LWA = 17
  24428.       LIW = 6
  24429.       TOLF = SQRT(R1MACH(4))
  24430.       RER = SQRT(R1MACH(4))
  24431.       AER = 0.0E0
  24432.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  24433. C
  24434. C     Test the code with proper input values.
  24435. C
  24436.       IFLAG = 0
  24437.       X(1) = -1.2E0
  24438.       X(2) = 1.0E0
  24439.       CALL SOS (SOSFNC,N,X,RER,AER,TOLF,IFLAG,WA,LWA,IW,LIW)
  24440.       ICNT = 1
  24441.       FVEC(1) = SOSFNC(X,1)
  24442.       FVEC(2) = SOSFNC(X,2)
  24443.       FNORM = SNRM2(N,FVEC,1)
  24444.       ITEST(ICNT) = 0
  24445.       IF (IFLAG.LE.IFLAGS .AND. FNORM-FNORMS.LE.RER) ITEST(ICNT) = 1
  24446. C
  24447.       IF (KPRINT .NE. 0) THEN
  24448.          IF (KPRINT.GE.3 .OR. (KPRINT.GE.2.AND.ITEST(ICNT).NE.1))
  24449.      +       WRITE (LUN,9010) IFLAGS,FNORMS,IFLAG,FNORM
  24450.          IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24451.      +       CALL PASS (LUN,ICNT,ITEST(ICNT))
  24452.       ENDIF
  24453. C
  24454. C     Test improper input parameters.
  24455. C
  24456.       LWA = 15
  24457.       IFLAG = 0
  24458.       X(1) = -1.2E0
  24459.       X(2) = 1.0E0
  24460.       CALL SOS (SOSFNC,N,X,RER,AER,TOLF,IFLAG,WA,LWA,IW,LIW)
  24461.       ICNT = 2
  24462.       ITEST(ICNT) = 0
  24463.       IF (IFLAG .EQ. 9) ITEST(ICNT) = 1
  24464.       IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.ITEST(ICNT).NE.1))
  24465.      +    CALL PASS (LUN,ICNT,ITEST(ICNT))
  24466. C
  24467. C     Set IPASS.
  24468. C
  24469.       IPASS = ITEST(1)*ITEST(2)
  24470.       IF (KPRINT.GE.1 .AND. IPASS.NE.1) WRITE (LUN,9020)
  24471.       IF (KPRINT.GE.2 .AND. IPASS.EQ.1) WRITE (LUN,9030)
  24472.       RETURN
  24473.  9000 FORMAT ('1' / '  SOS QUICK CHECK' /)
  24474.  9010 FORMAT (' EXPECTED VALUE OF IFLAG AND RESIDUAL NORM', I5, E20.5 /
  24475.      +        ' RETURNED VALUE OF IFLAG AND RESIDUAL NORM', I5, E20.5 /)
  24476.  9020 FORMAT (/' **********WARNING -- SOS FAILED SOME TESTS**********')
  24477.  9030 FORMAT (/' ----------SOS PASSED ALL TESTS----------')
  24478.       END
  24479. *DECK SPLPQX
  24480.       SUBROUTINE SPLPQX (LUN, KPRINT, IPASS)
  24481. C***BEGIN PROLOGUE  SPLPQX
  24482. C***PURPOSE  Quick check for SPLP.
  24483. C***LIBRARY   SLATEC
  24484. C***TYPE      SINGLE PRECISION (SPLPQX-S, DPLPQX-D)
  24485. C***AUTHOR  (UNKNOWN)
  24486. C***ROUTINES CALLED  PASS, SCOPY, SPLP, USRMAT
  24487. C***REVISION HISTORY  (YYMMDD)
  24488. C   ??????  DATE WRITTEN
  24489. C   890911  Removed unnecessary intrinsics.  (WRB)
  24490. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24491. C   901013  Added additional printout on failure.  (RWC)
  24492. C***END PROLOGUE  SPLPQX
  24493.       EXTERNAL USRMAT
  24494.       REAL COSTS(37)
  24495.       DIMENSION PRGOPT(50), DATTRV(210), BL(60), BU(60)
  24496.       DIMENSION IND(60), PRIMAL(60), DUALS(60), IBASIS(60)
  24497.       DIMENSION WORK(800), IWORK(900), ISOLN(14)
  24498.       DIMENSION D(14,37)
  24499. C***FIRST EXECUTABLE STATEMENT  SPLPQX
  24500.       IF(KPRINT.GE.2) WRITE(LUN,999)
  24501.   999 FORMAT ('1 SPLP QUICK CHECK')
  24502.       ICNT=1
  24503.       ZERO = 0.0
  24504. C
  24505. C     DEFINE WORKING ARRAY LENGTHS
  24506. C
  24507.       LIW = 900
  24508.       LW = 800
  24509.       MRELAS = 14
  24510.       NVARS = 37
  24511. C
  24512. C     DEFINE THE ARRAY COSTS(*) FOR THE OBJECTIVE FUNCTION
  24513. C
  24514.       COSTS(1) = 1.030
  24515.       COSTS(2) = 0.985
  24516.       COSTS(3) = 0.997
  24517.       COSTS(4) = 1.036
  24518.       COSTS(5) = 1.005
  24519.       COSTS(6) = 0.980
  24520.       COSTS(7) = 1.004
  24521.       COSTS(8) = 0.993
  24522.       COSTS(9) = 1.018
  24523.       COSTS(10) = 0.947
  24524.       COSTS(11) = 0.910
  24525.       COSTS(12) = 1.028
  24526.       COSTS(13) = 0.957
  24527.       COSTS(14) = 1.025
  24528.       COSTS(15) = 1.036
  24529.       COSTS(16) = 1.060
  24530.       COSTS(17) = 0.954
  24531.       COSTS(18) = 0.891
  24532.       COSTS(19) = 0.921
  24533.       COSTS(20) = 1.040
  24534.       COSTS(21) = 0.912
  24535.       COSTS(22) = 0.926
  24536.       COSTS(23) = 1.000
  24537.       COSTS(24) = 0.000
  24538.       COSTS(25) = 0.000
  24539.       COSTS(26) = 0.000
  24540.       COSTS(27) = 0.000
  24541.       COSTS(28) = 0.000
  24542.       COSTS(29) = 0.000
  24543.       COSTS(30) = 0.000
  24544.       COSTS(31) = 0.000
  24545.       COSTS(32) = 0.000
  24546.       COSTS(33) = 0.000
  24547.       COSTS(34) = 0.000
  24548.       COSTS(35) = 0.000
  24549.       COSTS(36) = 0.000
  24550.       COSTS(37) = 0.000
  24551. C
  24552. C     PLACE THE NONZERO INFORMATION ABOUT THE MATRIX IN DATTRV(*)
  24553. C
  24554.       CALL SCOPY(14*37, ZERO, 0, D, 1)
  24555.       D(1,1) = 1.04000
  24556.       D(1,23) = 1.00000
  24557.       D(1,24) = -1.00000
  24558.       D(2,6) = 0.04125
  24559.       D(2,7) = 0.05250
  24560.       D(2,17) = 0.04875
  24561.       D(2,24) = 1.00000
  24562.       D(2,25) = -1.00000
  24563.       D(3,8) = 0.05625
  24564.       D(3,9) = 0.06875
  24565.       D(3,11) = 0.02250
  24566.       D(3,25) = 1.00000
  24567.       D(3,26) = -1.00000
  24568.       D(4,2) = 1.04000
  24569.       D(4,3) = 1.05375
  24570.       D(4,5) = 1.06125
  24571.       D(4,12) = 0.08000
  24572.       D(4,16) = 0.09375
  24573.       D(4,18) = 0.03750
  24574.       D(4,19) = 0.04625
  24575.       D(4,20) = 0.08125
  24576.       D(4,22) = 0.05250
  24577.       D(4,26) = 1.00000
  24578.       D(4,27) = -1.00000
  24579.       D(5,10) = 0.04375
  24580.       D(5,27) = 1.00000
  24581.       D(5,28) = -1.00000
  24582.       D(6,4) = 1.05875
  24583.       D(6,13) = 0.04500
  24584.       D(6,14) = 0.06375
  24585.       D(6,15) = 0.06625
  24586.       D(6,21) = 0.05000
  24587.       D(6,28) = 1.00000
  24588.       D(6,29) = -1.00000
  24589.       D(7,6) = 1.04125
  24590.       D(7,7) = 1.05250
  24591.       D(7,8) = 1.05625
  24592.       D(7,9) = 1.06875
  24593.       D(7,11) = 0.02250
  24594.       D(7,17) = 0.04875
  24595.       D(7,29) = 1.00000
  24596.       D(7,30) = -1.00000
  24597.       D(8,10) = 1.04375
  24598.       D(8,12) = 0.08000
  24599.       D(8,13) = 0.04500
  24600.       D(8,14) = 0.06375
  24601.       D(8,15) = 0.06625
  24602.       D(8,16) = 0.09375
  24603.       D(8,18) = 0.03750
  24604.       D(8,19) = 0.04625
  24605.       D(8,20) = 0.08125
  24606.       D(8,21) = 0.05000
  24607.       D(8,22) = 0.05250
  24608.       D(8,30) = 1.00000
  24609.       D(8,31) = -1.00000
  24610.       D(9,11) = 1.02250
  24611.       D(9,17) = 0.04875
  24612.       D(9,31) = 1.00000
  24613.       D(9,32) = -1.00000
  24614.       D(10,12) = 1.08000
  24615.       D(10,13) = 1.04500
  24616.       D(10,14) = 1.06375
  24617.       D(10,15) = 1.06625
  24618.       D(10,16) = 1.09375
  24619.       D(10,18) = 0.03750
  24620.       D(10,19) = 0.04625
  24621.       D(10,20) = 0.08125
  24622.       D(10,21) = 0.05000
  24623.       D(10,22) = 0.05250
  24624.       D(10,32) = 1.00000
  24625.       D(10,33) = -1.00000
  24626.       D(11,17) = 1.04875
  24627.       D(11,33) = 1.00000
  24628.       D(11,34) = -1.00000
  24629.       D(12,18) = 1.03750
  24630.       D(12,19) = 1.04625
  24631.       D(12,20) = 1.08125
  24632.       D(12,21) = 1.05000
  24633.       D(12,22) = 0.05250
  24634.       D(12,34) = 1.00000
  24635.       D(12,35) = -1.00000
  24636.       D(13,35) = 1.00000
  24637.       D(13,36) = -1.00000
  24638.       D(14,22) = 1.05250
  24639.       D(14,36) = 1.00000
  24640.       D(14,37) = -1.00000
  24641.       KOUNT = 1
  24642.       DO 20 MM=1,NVARS
  24643.         DATTRV(KOUNT) = -MM
  24644.         DO 10 KK=1,MRELAS
  24645.           IF (D(KK,MM).EQ.ZERO) GO TO 10
  24646.           KOUNT = KOUNT + 1
  24647.           DATTRV(KOUNT) = KK
  24648.           KOUNT = KOUNT + 1
  24649.           DATTRV(KOUNT) = D(KK,MM)
  24650.    10   CONTINUE
  24651.         KOUNT = KOUNT + 1
  24652.    20 CONTINUE
  24653.       DATTRV(KOUNT) = ZERO
  24654. C
  24655. C     NON-NEGATIVITY CONSTRAINT
  24656. C
  24657.       DO 30 IC=1,NVARS
  24658.         BL(IC) = ZERO
  24659.         IND(IC) = 3
  24660.         BU(IC) = 10000000.000
  24661.    30 CONTINUE
  24662. C
  24663. C     LE CONSTRAINTS
  24664. C
  24665.       DO 40 IV=1,MRELAS
  24666.         IVV = IV + NVARS
  24667.         IND(IVV) = 3
  24668.         BL(IVV) = 100.00000
  24669.         BU(IVV) = 100000000.00000
  24670.    40 CONTINUE
  24671.       PRGOPT(01) = 18
  24672.       PRGOPT(02) = 59
  24673.       PRGOPT(03) = 0
  24674.       PRGOPT(04) = 1
  24675.       PRGOPT(05) = 3
  24676.       PRGOPT(06) = 8
  24677.       PRGOPT(07) = 10
  24678.       PRGOPT(08) = 11
  24679.       PRGOPT(09) = 16
  24680.       PRGOPT(10) = 17
  24681.       PRGOPT(11) = 21
  24682.       PRGOPT(12) = 22
  24683.       PRGOPT(13) = 24
  24684.       PRGOPT(14) = 25
  24685.       PRGOPT(15) = 27
  24686.       PRGOPT(16) = 28
  24687.       PRGOPT(17) = 35
  24688.       PRGOPT(18) = 21
  24689.       PRGOPT(19) =51
  24690.       PRGOPT(20) = 0
  24691.       PRGOPT(21) = 1
  24692.       CALL SPLP(USRMAT, MRELAS, NVARS, COSTS, PRGOPT, DATTRV, BL, BU,
  24693.      * IND, INFO, PRIMAL, DUALS, IBASIS, WORK, LW, IWORK, LIW)
  24694. C
  24695. C     LOOK FOR THE KNOWN BASIS AT THE SOLN., NOW IS ISOLN(*).
  24696. C
  24697.       DO 50 I=1,MRELAS
  24698.          ISOLN(I) = PRGOPT(I+3)
  24699.    50 CONTINUE
  24700. C
  24701.       IPASS = 1
  24702.       DO 70 J=1,MRELAS
  24703.          DO 60 I=1,MRELAS
  24704.             IF (ISOLN(I).EQ.IBASIS(J)) GO TO 70
  24705.    60    CONTINUE
  24706.          IPASS = 0
  24707.          GO TO 80
  24708.    70 CONTINUE
  24709. C
  24710.    80 IF (KPRINT.GE.2) WRITE (LUN, 99997) (ISOLN(I), IBASIS(I),
  24711.      *   I=1,MRELAS)
  24712. C
  24713.       IF (KPRINT.GE.2 .OR. (KPRINT.EQ.1.AND.IPASS.NE.1))
  24714.      *   CALL PASS (LUN, ICNT, IPASS)
  24715. C
  24716. C     HERE IPASS=0 IF CODE FAILED QUICK CHECK;
  24717. C               =1 IF CODE PASSED QUICK CHECK.
  24718. C
  24719.       IF (KPRINT.GE.1 .AND. IPASS.NE.1) WRITE (LUN,99999)
  24720.       IF (KPRINT.GE.2 .AND. IPASS.EQ.1) WRITE (LUN,99998)
  24721.       RETURN
  24722. C
  24723. 99997 FORMAT (/'     ISOLN    IBASIS'/(2I10))
  24724. 99998 FORMAT (/' ************ SPLP PASSED ALL TESTS *****************')
  24725. 99999 FORMAT (/' ************ SPLP FAILED SOME TESTS ****************')
  24726.       END
  24727. *DECK SQCK
  24728.       SUBROUTINE SQCK (LUN, KPRINT, NERR)
  24729. C***BEGIN PROLOGUE  SQCK
  24730. C***PURPOSE  Quick check for SPOFS, SPOIR, SNBFS and SNBIR.
  24731. C***LIBRARY   SLATEC
  24732. C***KEYWORDS  QUICK CHECK
  24733. C***AUTHOR  Voorhees, E. A., (LANL)
  24734. C***DESCRIPTION
  24735. C
  24736. C    QUICK CHECK SUBROUTINE SQCK TESTS THE EXECUTION OF THE
  24737. C    SLATEC SUBROUTINES SPOFS, SPOIR, SNBFS AND SNBIR.
  24738. C    A TITLE LINE AND A SUMMARY LINE ARE ALWAYS OUTPUTTED.
  24739. C
  24740. C    THE SUMMARY LINE GIVES A COUNT OF THE NUMBER OF
  24741. C    PROBLEMS ENCOUNTERED IN THE TEST IF ANY EXIST.  SQCK
  24742. C    CHECKS COMPUTED VS. EXACT SOLUTIONS TO AGREE TO
  24743. C    WITHIN 0.8 TIMES THE WORD LENGTH OF THE COMPUTER
  24744. C    (1.6 IF DOUBLE PRECISION) FOR CASE 1.  SQCK ALSO
  24745. C    TESTS ERROR HANDLING BY THE SUBROUTINE (CALLS TO
  24746. C    XERMSG (SQCK SETS IFLAG/KONTRL TO 0))
  24747. C    USING A SINGULAR MATRIX FOR CASE 2.  EACH EXECUTION
  24748. C    PROBLEM DETECTED BY SQCK RESULTS IN AN ADDITIONAL
  24749. C    EXPLANATORY LINE OF OUTPUT.
  24750. C
  24751. C    SQCK REQUIRES NO INPUT ARGUMENTS.
  24752. C    ON RETURN, NERR (INTEGER TYPE) CONTAINS THE TOTAL COUNT
  24753. C    OF ALL PROBLEMS DETECTED BY SQCK.
  24754. C
  24755. C***ROUTINES CALLED  R1MACH, SNBFS, SNBIR, SPOFS, SPOIR
  24756. C***REVISION HISTORY  (YYMMDD)
  24757. C   800930  DATE WRITTEN
  24758. C   890911  Removed unnecessary intrinsics.  (WRB)
  24759. C   891009  Removed unreferenced statement label.  (WRB)
  24760. C   891009  REVISION DATE from Version 3.2
  24761. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24762. C   901009  Routine writes illegal character to column 1, fixed.
  24763. C           Editorial changes made, code fixed to test all four
  24764. C           routines.  (RWC)
  24765. C   901009  Restructured using IF-THEN-ELSE-ENDIF, cleaned up FORMATs,
  24766. C           including removing an illegal character from column 1, and
  24767. C           fixed code to test all four routines.  (RWC)
  24768. C***END PROLOGUE  SQCK
  24769.       REAL A(4,4),AT(5,4),ABE(5,7),ABET(5,7),B(4),BT(4),C(4),WORK(35),
  24770.      1 R,DELX,DELMAX,SIGN,R1MACH
  24771.       CHARACTER*4 LIST(4)
  24772.       INTEGER LDA,N,ML,MU,IND,IWORK(4),NERR,I,J,J1,J2,JD,MLP,K,KCASE,
  24773.      1 KPROG
  24774.       DATA A/5.0E0,4.0E0,1.0E0,1.0E0,4.0E0,5.0E0,1.0E0,1.0E0,
  24775.      1 1.0E0,1.0E0,4.0E0,2.0E0,1.0E0,1.0E0,2.0E0,4.0E0/
  24776.       DATA LIST/'POFS','POIR','NBFS','NBIR'/
  24777. C***FIRST EXECUTABLE STATEMENT  SQCK
  24778.       IF (KPRINT.GE.3) WRITE (LUN,800)
  24779.       LDA = 5
  24780.       N = 4
  24781.       ML = 2
  24782.       MU = 1
  24783.       JD = 2*ML+MU+1
  24784.       NERR = 0
  24785.       R = R1MACH(4)**0.8E0
  24786. C
  24787. C     COMPUTE C VECTOR.
  24788. C
  24789.       SIGN = 1.0E0
  24790.       DO 10 I=1,N
  24791.          C(I) = SIGN/I
  24792.          SIGN = -SIGN
  24793.    10 CONTINUE
  24794. C
  24795. C     CASE 1 FOR WELL-CONDITIONED MATRIX, CASE 2 FOR SINGULAR MATRIX.
  24796. C
  24797.       DO 170 KCASE=1,2
  24798.          DO 140 KPROG=1,4
  24799. C           SET VECTOR B TO ZERO.
  24800.             DO 11 I=1,N
  24801.                B(I) = 0.0E0
  24802.    11       CONTINUE
  24803. C
  24804. C           FORM VECTOR B FOR NON-BANDED.
  24805. C
  24806.             IF (KPROG.LE.2) THEN
  24807.                DO 13 I=1,N
  24808.                   DO 12 J=1,N
  24809.                      B(I) = B(I)+A(I,J)*C(J)
  24810.    12             CONTINUE
  24811.    13          CONTINUE
  24812.             ELSE
  24813. C
  24814. C              FORM ABE(NB ARRAY) FROM MATRIX A
  24815. C              AND FORM VECTOR B FOR BANDED.
  24816. C
  24817.                DO 30 J=1,JD
  24818.                   DO 20 I=1,N
  24819.                      ABE(I,J) = 0.0E0
  24820.    20             CONTINUE
  24821.    30          CONTINUE
  24822. C
  24823.                MLP = ML+1
  24824.                DO 50 I=1,N
  24825.                   J1 = MAX(1,I-ML)
  24826.                   J2 = MIN(N,I+MU)
  24827.                   DO 40 J=J1,J2
  24828.                      K = J-I+MLP
  24829.                      ABE(I,K) = A(I,J)
  24830.                      B(I) = B(I)+(A(I,J)*C(J))
  24831.    40             CONTINUE
  24832.    50          CONTINUE
  24833.             ENDIF
  24834. C
  24835. C           FORM BT FROM B, AT FROM A, AND ABET FROM ABE.
  24836. C
  24837.             DO 60 I=1,N
  24838.                BT(I) = B(I)
  24839.                DO 58 J=1,N
  24840.                   AT(I,J) = A(I,J)
  24841.    58          CONTINUE
  24842.    60       CONTINUE
  24843. C
  24844.             DO 80 J=1,JD
  24845.                DO 70 I=1,N
  24846.                   ABET(I,J) = ABE(I,J)
  24847.    70          CONTINUE
  24848.    80       CONTINUE
  24849. C
  24850. C           MAKE AT AND ABET SINGULAR FOR CASE  =  2
  24851. C
  24852.             IF (KCASE.EQ.2) THEN
  24853.                DO 88 J=1,N
  24854.                   AT(1,J) = 0.0E0
  24855.    88          CONTINUE
  24856. C
  24857.                DO 90 J=1,JD
  24858.                   ABET(1,J) = 0.0E0
  24859.    90          CONTINUE
  24860.             ENDIF
  24861. C
  24862. C           SOLVE FOR X
  24863. C
  24864.             IF (KPROG.EQ.1) CALL SPOFS (AT,LDA,N,BT,1,IND,WORK)
  24865.             IF (KPROG.EQ.2) CALL SPOIR (AT,LDA,N,BT,1,IND,WORK)
  24866.             IF (KPROG.EQ.3) CALL SNBFS (ABET,LDA,N,ML,MU,BT,1,IND,WORK,
  24867.      *         IWORK)
  24868.             IF (KPROG.EQ.4) CALL SNBIR (ABET,LDA,N,ML,MU,BT,1,IND,WORK,
  24869.      *         IWORK)
  24870. C
  24871. C           COMPARE EXACT AND COMPUTED SOLUTIONS FOR CASE 1
  24872. C
  24873.             IF (KCASE.EQ.1) THEN
  24874.                DELMAX = 0.0E0
  24875.                DO 110 I=1,N
  24876.                   DELX = ABS(BT(I)-C(I))
  24877.                   DELMAX = MAX(DELMAX,DELX)
  24878.   110          CONTINUE
  24879. C
  24880.                IF (R.LE.DELMAX) THEN
  24881.                   NERR = NERR+1
  24882.                   WRITE (LUN,801) LIST(KPROG),KCASE,DELMAX
  24883.                ENDIF
  24884.             ELSE
  24885. C
  24886. C              CHECK CONTROL FOR SINGULAR MATRIX FOR CASE 2
  24887. C
  24888.                IF (IND.NE.-4) THEN
  24889.                   NERR = NERR+1
  24890.                   WRITE (LUN,802) LIST(KPROG),KCASE,IND
  24891.                ENDIF
  24892.             ENDIF
  24893.   140    CONTINUE
  24894.   170 CONTINUE
  24895. C
  24896. C     SUMMARY PRINT
  24897. C
  24898.       IF (NERR.NE.0) WRITE (LUN,803) NERR
  24899.       IF (KPRINT.GE.2 .AND. NERR.EQ.0) WRITE (LUN,804)
  24900.       RETURN
  24901. C
  24902.   800 FORMAT (/' *    SQCK - QUICK CHECK FOR SPOFS, SPOIR, SNBFS AND ',
  24903.      1   'SNBIR'/)
  24904.   801 FORMAT ('   PROBLEM WITH S', A, ', CASE ', I1,
  24905.      1 '.  MAX ABS ERROR OF', E11.4/)
  24906.   802 FORMAT ('   PROBLEM WITH S', A, ', CASE ', I1, '.  IND = ', I2,
  24907.      1  ' INSTEAD OF -4'/)
  24908.   803 FORMAT (/' **** SQCK DETECTED A TOTAL OF ', I2,' PROBLEMS. ****'/)
  24909.   804 FORMAT ('     SQCK DETECTED NO PROBLEMS.'/)
  24910.       END
  24911. *DECK SQFCN2
  24912.       SUBROUTINE SQFCN2 (N, X, FVEC, IFLAG)
  24913. C***BEGIN PROLOGUE  SQFCN2
  24914. C***PURPOSE  Evaluate function used in SNSQE.
  24915. C***LIBRARY   SLATEC
  24916. C***KEYWORDS  QUICK CHECK
  24917. C***AUTHOR  (UNKNOWN)
  24918. C***DESCRIPTION
  24919. C
  24920. C     SUBROUTINE WHICH EVALUATES THE FUNCTION FOR TEST
  24921. C     PROGRAM USED IN QUICK CHECK OF SNSQE.
  24922. C
  24923. C***ROUTINES CALLED  (NONE)
  24924. C***REVISION HISTORY  (YYMMDD)
  24925. C   ??????  DATE WRITTEN
  24926. C   890618  REVISION DATE from Version 3.2
  24927. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24928. C***END PROLOGUE  SQFCN2
  24929.       DIMENSION X(*),FVEC(*)
  24930. C***FIRST EXECUTABLE STATEMENT  SQFCN2
  24931.       FVEC(1)=1.E0-X(1)
  24932.       FVEC(2)=1.E1*(X(2)-X(1)**2)
  24933.       RETURN
  24934.       END
  24935. *DECK SQJAC2
  24936.       SUBROUTINE SQJAC2 (N, X, FVEC, FJAC, LDFJAC, IFLAG)
  24937. C***BEGIN PROLOGUE  SQJAC2
  24938. C***PURPOSE  Evaluate full Jacobian for SNSQE test.
  24939. C***LIBRARY   SLATEC
  24940. C***KEYWORDS  QUICK CHECK
  24941. C***AUTHOR  (UNKNOWN)
  24942. C***DESCRIPTION
  24943. C
  24944. C     SUBROUTINE TO EVALUATE THE FULL JACOBIAN FOR TEST PROBLEM USED
  24945. C     IN QUICK CHECK OF SNSQE.
  24946. C
  24947. C***ROUTINES CALLED  (NONE)
  24948. C***REVISION HISTORY  (YYMMDD)
  24949. C   ??????  DATE WRITTEN
  24950. C   890831  Modified array declarations.  (WRB)
  24951. C   890831  REVISION DATE from Version 3.2
  24952. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24953. C***END PROLOGUE  SQJAC2
  24954.       DIMENSION X(*),FVEC(*),FJAC(LDFJAC,*)
  24955. C***FIRST EXECUTABLE STATEMENT  SQJAC2
  24956.       FJAC(1,1)=-1.E0
  24957.       FJAC(1,2)=0.E0
  24958.       FJAC(2,1)=-2.E1*X(1)
  24959.       FJAC(2,2)=1.E1
  24960.       RETURN
  24961.       END
  24962. *DECK STEST
  24963.       SUBROUTINE STEST (LEN, SCOMP, STRUE, SSIZE, SFAC, KPRINT)
  24964. C***BEGIN PROLOGUE  STEST
  24965. C***PURPOSE  Compare arrays SCOMP and STRUE.
  24966. C***LIBRARY   SLATEC
  24967. C***TYPE      SINGLE PRECISION (STEST-S, DTEST-D)
  24968. C***KEYWORDS  QUICK CHECK
  24969. C***AUTHOR  Lawson, C. L., (JPL)
  24970. C***DESCRIPTION
  24971. C
  24972. C   This subroutine compares arrays SCOMP and STRUE of length LEN to
  24973. C   see if the term by term differences, multiplied by SFAC, are
  24974. C   negligible.  In the case of a significant difference, appropriate
  24975. C   messages are written.
  24976. C
  24977. C***ROUTINES CALLED  R1MACH
  24978. C***COMMON BLOCKS    COMBLA
  24979. C***REVISION HISTORY  (YYMMDD)
  24980. C   741210  DATE WRITTEN
  24981. C   890831  Modified array declarations.  (WRB)
  24982. C   890831  REVISION DATE from Version 3.2
  24983. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  24984. C   900820  Modified IF test to use function DIFF and made cosmetic
  24985. C           changes to routine.  (WRB)
  24986. C   901005  Removed usage of DIFF in favour of R1MACH.  (RWC)
  24987. C   910501  Added TYPE record.  (WRB)
  24988. C   920211  Code restructured and information added to the DESCRIPTION
  24989. C           section.  (WRB)
  24990. C***END PROLOGUE  STEST
  24991.       REAL SCOMP(*), STRUE(*), SSIZE(*), SFAC, SD, RELEPS, R1MACH
  24992.       LOGICAL PASS
  24993.       COMMON /COMBLA/ NPRINT, ICASE, N, INCX, INCY, MODE, PASS
  24994.       SAVE RELEPS
  24995.       DATA RELEPS /0.0E0/
  24996. C***FIRST EXECUTABLE STATEMENT  STEST
  24997.       IF (RELEPS .EQ. 0.0E0) RELEPS = R1MACH(4)
  24998.       DO 100 I = 1,LEN
  24999.         SD = ABS(SCOMP(I)-STRUE(I))
  25000.         IF (SFAC*SD .GT. ABS(SSIZE(I))*RELEPS) THEN
  25001. C
  25002. C         Here SCOMP(I) is not close to STRUE(I).
  25003. C
  25004.           IF (PASS) THEN
  25005. C
  25006. C           Print FAIL message and header.
  25007. C
  25008.             PASS = .FALSE.
  25009.             IF (KPRINT .GE. 3) THEN
  25010.               WRITE (NPRINT,9000)
  25011.               WRITE (NPRINT,9010)
  25012.             ENDIF
  25013.           ENDIF
  25014.           IF (KPRINT .GE. 3) WRITE (NPRINT,9020) ICASE, N, INCX, INCY,
  25015.      +                       MODE, I, SCOMP(I), STRUE(I), SD, SSIZE(I)
  25016.         ENDIF
  25017.   100 CONTINUE
  25018.       RETURN
  25019.  9000 FORMAT ('+', 39X, 'FAIL')
  25020.  9010 FORMAT ('0CASE  N INCX INCY MODE  I', 29X, 'COMP(I)', 29X,
  25021.      +        'TRUE(I)', 2X, 'DIFFERENCE', 5X, 'SIZE(I)' / 1X)
  25022.  9020 FORMAT (1X, I4, I3, 3I5, I3, 2E36.8, 2E12.4)
  25023.       END
  25024. *DECK T0
  25025.       REAL FUNCTION T0 (X)
  25026. C***BEGIN PROLOGUE  T0
  25027. C***PURPOSE  Subsidiary to
  25028. C***LIBRARY   SLATEC
  25029. C***AUTHOR  (UNKNOWN)
  25030. C***ROUTINES CALLED  F0S
  25031. C***REVISION HISTORY  (YYMMDD)
  25032. C   ??????  DATE WRITTEN
  25033. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25034. C***END PROLOGUE  T0
  25035.       REAL A,B,F0S,X,X1,Y
  25036. C***FIRST EXECUTABLE STATEMENT  T0
  25037.       A = 0.0E+00
  25038.       B = 0.1E+01
  25039.       X1 = X+0.1E+01
  25040.       Y = (B-A)/X1+A
  25041.       T0 = (B-A)*F0S(Y)/X1/X1
  25042.       RETURN
  25043.       END
  25044. *DECK T1
  25045.       REAL FUNCTION T1 (X)
  25046. C***BEGIN PROLOGUE  T1
  25047. C***PURPOSE  Subsidiary to
  25048. C***LIBRARY   SLATEC
  25049. C***AUTHOR  (UNKNOWN)
  25050. C***ROUTINES CALLED  F1S
  25051. C***REVISION HISTORY  (YYMMDD)
  25052. C   ??????  DATE WRITTEN
  25053. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25054. C***END PROLOGUE  T1
  25055.       REAL A,B,F1S,X,X1,Y
  25056. C***FIRST EXECUTABLE STATEMENT  T1
  25057.       A = 0.0E+00
  25058.       B = 0.1E+01
  25059.       X1 = X+0.1E+01
  25060.       Y = (B-A)/X1+A
  25061.       T1 = (B-A)*F1S(Y)/X1/X1
  25062.       RETURN
  25063.       END
  25064. *DECK T2
  25065.       REAL FUNCTION T2 (X)
  25066. C***BEGIN PROLOGUE  T2
  25067. C***PURPOSE  Subsidiary to
  25068. C***LIBRARY   SLATEC
  25069. C***AUTHOR  (UNKNOWN)
  25070. C***ROUTINES CALLED  F2S
  25071. C***REVISION HISTORY  (YYMMDD)
  25072. C   ??????  DATE WRITTEN
  25073. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25074. C***END PROLOGUE  T2
  25075.       REAL A,B,F2S,X,X1,Y
  25076. C***FIRST EXECUTABLE STATEMENT  T2
  25077.       A = 0.1E+00
  25078.       B = 0.1E+01
  25079.       X1 = X+0.1E+01
  25080.       Y = (B-A)/X1+A
  25081.       T2 = (B-A)*F2S(Y)/X1/X1
  25082.       RETURN
  25083.       END
  25084. *DECK T3
  25085.       REAL FUNCTION T3 (X)
  25086. C***BEGIN PROLOGUE  T3
  25087. C***PURPOSE  Subsidiary to
  25088. C***LIBRARY   SLATEC
  25089. C***AUTHOR  (UNKNOWN)
  25090. C***ROUTINES CALLED  F3S
  25091. C***REVISION HISTORY  (YYMMDD)
  25092. C   ??????  DATE WRITTEN
  25093. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25094. C***END PROLOGUE  T3
  25095.       REAL A,B,F3S,X,X1,Y
  25096. C***FIRST EXECUTABLE STATEMENT  T3
  25097.       A = 0.0E+00
  25098.       B = 0.5E+01
  25099.       X1 = X+0.1E+01
  25100.       Y = (B-A)/X1+A
  25101.       T3 = (B-A)*F3S(Y)/X1/X1
  25102.       RETURN
  25103.       END
  25104. *DECK T4
  25105.       REAL FUNCTION T4 (X)
  25106. C***BEGIN PROLOGUE  T4
  25107. C***PURPOSE  Subsidiary to
  25108. C***LIBRARY   SLATEC
  25109. C***AUTHOR  (UNKNOWN)
  25110. C***ROUTINES CALLED  F4S
  25111. C***REVISION HISTORY  (YYMMDD)
  25112. C   ??????  DATE WRITTEN
  25113. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25114. C***END PROLOGUE  T4
  25115.       REAL A,B,F4S,X,X1,Y
  25116. C***FIRST EXECUTABLE STATEMENT  T4
  25117.       A = 0.0E+00
  25118.       B = 0.1E+01
  25119.       X1 = X+0.1E+01
  25120.       Y = (B-A)/X1+A
  25121.       T4 = (B-A)*F4S(Y)/X1/X1
  25122.       RETURN
  25123.       END
  25124. *DECK T5
  25125.       REAL FUNCTION T5 (X)
  25126. C***BEGIN PROLOGUE  T5
  25127. C***PURPOSE  Subsidiary to
  25128. C***LIBRARY   SLATEC
  25129. C***AUTHOR  (UNKNOWN)
  25130. C***ROUTINES CALLED  F5S
  25131. C***REVISION HISTORY  (YYMMDD)
  25132. C   ??????  DATE WRITTEN
  25133. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25134. C***END PROLOGUE  T5
  25135.       REAL A,B,F5S,X,X1,Y
  25136. C***FIRST EXECUTABLE STATEMENT  T5
  25137.       A = 0.0E+00
  25138.       B = 0.1E+01
  25139.       X1 = X+0.1E+01
  25140.       Y = (B-A)/X1+A
  25141.       T5 = (B-A)*F5S(Y)/X1/X1
  25142.       RETURN
  25143.       END
  25144. *DECK TEST0
  25145.       PROGRAM TEST0
  25146. C***BEGIN PROLOGUE  TEST0
  25147. C***PURPOSE  Driver for testing SLATEC subprogram
  25148. C            AAAAAA
  25149. C***LIBRARY   SLATEC
  25150. C***CATEGORY  Z
  25151. C***TYPE      ALL (TEST0-A)
  25152. C***KEYWORDS  AAAAAA, QUICK CHECK DRIVER
  25153. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25154. C***DESCRIPTION
  25155. C
  25156. C *Usage:
  25157. C     One input data record is required
  25158. C         READ (LIN, '(I1)') KPRINT
  25159. C
  25160. C *Arguments:
  25161. C     KPRINT = 0  Quick checks - No printing.
  25162. C                 Driver       - Short pass or fail message printed.
  25163. C              1  Quick checks - No message printed for passed tests,
  25164. C                                short message printed for failed tests.
  25165. C                 Driver       - Short pass or fail message printed.
  25166. C              2  Quick checks - Print short message for passed tests,
  25167. C                                fuller information for failed tests.
  25168. C                 Driver       - Pass or fail message printed.
  25169. C              3  Quick checks - Print complete quick check results.
  25170. C                 Driver       - Pass or fail message printed.
  25171. C
  25172. C *Description:
  25173. C     Driver for testing SLATEC subprogram
  25174. C        AAAAAA
  25175. C
  25176. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25177. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25178. C                 tical Library, April 10, 1990.
  25179. C***ROUTINES CALLED  I1MACH, QC6A, XERMAX, XSETF, XSETUN
  25180. C***REVISION HISTORY  (YYMMDD)
  25181. C   890713  DATE WRITTEN
  25182. C   900524  Cosmetic changes to code.  (WRB)
  25183. C***END PROLOGUE  TEST0
  25184.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  25185. C***FIRST EXECUTABLE STATEMENT  TEST0
  25186.       LUN = I1MACH(2)
  25187.       LIN = I1MACH(1)
  25188.       NFAIL = 0
  25189. C
  25190. C     Read KPRINT parameter
  25191. C
  25192.       READ (LIN, '(I1)') KPRINT
  25193.       CALL XERMAX(1000)
  25194.       CALL XSETUN(LUN)
  25195.       IF (KPRINT .LE. 1) THEN
  25196.          CALL XSETF(0)
  25197.       ELSE
  25198.          CALL XSETF(1)
  25199.       ENDIF
  25200. C
  25201. C     Test AAAAAA
  25202. C
  25203.       CALL QC6A(LUN, KPRINT, IPASS)
  25204.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25205. C
  25206. C     Write PASS or FAIL message
  25207. C
  25208.       IF (NFAIL .EQ. 0) THEN
  25209.          WRITE (LUN, 9000)
  25210.       ELSE
  25211.          WRITE (LUN, 9010) NFAIL
  25212.       ENDIF
  25213.       STOP
  25214.  9000 FORMAT (/' --------------TEST0  PASSED ALL TESTS----------------')
  25215.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25216.      1        ' TEST(S) FAILED IN PROGRAM TEST0  *************')
  25217.       END
  25218. *DECK TEST1
  25219.       PROGRAM TEST1
  25220. C***BEGIN PROLOGUE  TEST1
  25221. C***PURPOSE  Driver for testing SLATEC subprograms
  25222. C***LIBRARY   SLATEC
  25223. C***CATEGORY  C
  25224. C***KEYWORDS  QUICK CHECK DRIVER
  25225. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25226. C***DESCRIPTION
  25227. C
  25228. C *Usage:
  25229. C     One input data record is required
  25230. C         READ (LIN, '(I1)') KPRINT
  25231. C
  25232. C *Arguments:
  25233. C     KPRINT = 0  Quick checks - No printing.
  25234. C                 Driver       - Short pass or fail message printed.
  25235. C              1  Quick checks - No message printed for passed tests,
  25236. C                                short message printed for failed tests.
  25237. C                 Driver       - Short pass or fail message printed.
  25238. C              2  Quick checks - Print short message for passed tests,
  25239. C                                fuller information for failed tests.
  25240. C                 Driver       - Pass or fail message printed.
  25241. C              3  Quick checks - Print complete quick check results.
  25242. C                 Driver       - Pass or fail message printed.
  25243. C
  25244. C *Description:
  25245. C     Driver for testing SLATEC subprograms
  25246. C        single precision Fullerton routines
  25247. C
  25248. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25249. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25250. C                 tical Library, April 10, 1990.
  25251. C***ROUTINES CALLED  I1MACH, SFNCK, XERMAX, XSETF, XSETUN
  25252. C***REVISION HISTORY  (YYMMDD)
  25253. C   890618  DATE WRITTEN
  25254. C   890618  REVISION DATE from Version 3.2
  25255. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25256. C   900524  Cosmetic changes to code.  (WRB)
  25257. C***END PROLOGUE  TEST1
  25258.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  25259. C***FIRST EXECUTABLE STATEMENT  TEST1
  25260.       LUN = I1MACH(2)
  25261.       LIN = I1MACH(1)
  25262.       NFAIL = 0
  25263. C
  25264. C     Read KPRINT parameter
  25265. C
  25266.       READ (LIN, '(I1)') KPRINT
  25267.       CALL XERMAX(1000)
  25268.       CALL XSETUN(LUN)
  25269.       IF (KPRINT .LE. 1) THEN
  25270.          CALL XSETF(0)
  25271.       ELSE
  25272.          CALL XSETF(1)
  25273.       ENDIF
  25274. C
  25275. C     Test single precision Fullerton routines
  25276. C
  25277.       CALL SFNCK(LUN,KPRINT,IPASS)
  25278.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25279. C
  25280. C     Write PASS or FAIL message
  25281. C
  25282.       IF (NFAIL .EQ. 0) THEN
  25283.          WRITE (LUN, 9000)
  25284.       ELSE
  25285.          WRITE (LUN, 9010) NFAIL
  25286.       ENDIF
  25287.       STOP
  25288.  9000 FORMAT (/' --------------TEST1  PASSED ALL TESTS----------------')
  25289.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25290.      1        ' TEST(S) FAILED IN PROGRAM TEST1  *************')
  25291.       END
  25292. *DECK TEST10
  25293.       PROGRAM TEST10
  25294. C***BEGIN PROLOGUE  TEST10
  25295. C***PURPOSE  Driver for testing SLATEC subprograms
  25296. C***LIBRARY   SLATEC
  25297. C***CATEGORY  D1
  25298. C***KEYWORDS  QUICK CHECK DRIVER
  25299. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25300. C***DESCRIPTION
  25301. C
  25302. C *Usage:
  25303. C     One input data record is required
  25304. C         READ (LIN, '(I1)') KPRINT
  25305. C
  25306. C *Arguments:
  25307. C     KPRINT = 0  Quick checks - No printing.
  25308. C                 Driver       - Short pass or fail message printed.
  25309. C              1  Quick checks - No message printed for passed tests,
  25310. C                                short message printed for failed tests.
  25311. C                 Driver       - Short pass or fail message printed.
  25312. C              2  Quick checks - Print short message for passed tests,
  25313. C                                fuller information for failed tests.
  25314. C                 Driver       - Pass or fail message printed.
  25315. C              3  Quick checks - Print complete quick check results.
  25316. C                 Driver       - Pass or fail message printed.
  25317. C
  25318. C *Description:
  25319. C     Driver for testing SLATEC subprograms
  25320. C        BLAS SUBPROGRAMS
  25321. C
  25322. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25323. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25324. C                 tical Library, April 10, 1990.
  25325. C***ROUTINES CALLED  BLACHK, I1MACH, XERMAX, XSETF, XSETUN
  25326. C***REVISION HISTORY  (YYMMDD)
  25327. C   890618  DATE WRITTEN
  25328. C   890618  REVISION DATE from Version 3.2
  25329. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25330. C   900524  Cosmetic changes to code.  (WRB)
  25331. C***END PROLOGUE  TEST10
  25332.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  25333. C***FIRST EXECUTABLE STATEMENT  TEST10
  25334.       LUN = I1MACH(2)
  25335.       LIN = I1MACH(1)
  25336.       NFAIL = 0
  25337. C
  25338. C     Read KPRINT parameter
  25339. C
  25340.       READ (LIN, '(I1)') KPRINT
  25341.       CALL XERMAX(1000)
  25342.       CALL XSETUN(LUN)
  25343.       IF (KPRINT .LE. 1) THEN
  25344.          CALL XSETF(0)
  25345.       ELSE
  25346.          CALL XSETF(1)
  25347.       ENDIF
  25348. C
  25349. C     Test BLAS
  25350. C
  25351.       CALL BLACHK(LUN,KPRINT,IPASS)
  25352.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25353. C
  25354. C     Write PASS or FAIL message
  25355. C
  25356.       IF (NFAIL .EQ. 0) THEN
  25357.          WRITE (LUN, 9000)
  25358.       ELSE
  25359.          WRITE (LUN, 9010) NFAIL
  25360.       ENDIF
  25361.       STOP
  25362.  9000 FORMAT (/' --------------TEST10 PASSED ALL TESTS----------------')
  25363.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25364.      1        ' TEST(S) FAILED IN PROGRAM TEST10 *************')
  25365.       END
  25366. *DECK TEST11
  25367.       PROGRAM TEST11
  25368. C***BEGIN PROLOGUE  TEST11
  25369. C***PURPOSE  Driver for testing SLATEC subprograms
  25370. C***LIBRARY   SLATEC
  25371. C***CATEGORY  D2
  25372. C***KEYWORDS  QUICK CHECK DRIVER
  25373. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25374. C***DESCRIPTION
  25375. C
  25376. C *Usage:
  25377. C     One input data record is required
  25378. C         READ (LIN, '(I1)') KPRINT
  25379. C
  25380. C *Arguments:
  25381. C     KPRINT = 0  Quick checks - No printing.
  25382. C                 Driver       - Short pass or fail message printed.
  25383. C              1  Quick checks - No message printed for passed tests,
  25384. C                                short message printed for failed tests.
  25385. C                 Driver       - Short pass or fail message printed.
  25386. C              2  Quick checks - Print short message for passed tests,
  25387. C                                fuller information for failed tests.
  25388. C                 Driver       - Pass or fail message printed.
  25389. C              3  Quick checks - Print complete quick check results.
  25390. C                 Driver       - Pass or fail message printed.
  25391. C
  25392. C *Description:
  25393. C     Driver for testing SLATEC subprograms
  25394. C        SGEFS    SGEIR
  25395. C        DGEFS
  25396. C        CGEFS    CGEIR
  25397. C
  25398. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25399. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25400. C                 tical Library, April 10, 1990.
  25401. C***ROUTINES CALLED  CGEQC, DGEQC, I1MACH, SGEQC, XERMAX, XSETF, XSETUN
  25402. C***REVISION HISTORY  (YYMMDD)
  25403. C   890618  DATE WRITTEN
  25404. C   890618  REVISION DATE from Version 3.2
  25405. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25406. C   900524  Cosmetic changes to code.  (WRB)
  25407. C***END PROLOGUE  TEST11
  25408.       INTEGER KPRINT, LIN, LUN, NERR, NFAIL
  25409. C***FIRST EXECUTABLE STATEMENT  TEST11
  25410.       LUN = I1MACH(2)
  25411.       LIN = I1MACH(1)
  25412.       NFAIL = 0
  25413. C
  25414. C     Read KPRINT parameter
  25415. C
  25416.       READ (LIN, '(I1)') KPRINT
  25417.       CALL XERMAX(1000)
  25418.       CALL XSETUN(LUN)
  25419.       IF (KPRINT .LE. 1) THEN
  25420.          CALL XSETF(0)
  25421.       ELSE
  25422.          CALL XSETF(1)
  25423.       ENDIF
  25424. C
  25425. C     Test LINPACK routines
  25426. C
  25427.       CALL SGEQC(LUN,KPRINT,NERR)
  25428.       NFAIL = NFAIL + NERR
  25429.       CALL DGEQC(LUN,KPRINT,NERR)
  25430.       NFAIL = NFAIL + NERR
  25431.       CALL CGEQC(LUN,KPRINT,NERR)
  25432.       NFAIL = NFAIL + NERR
  25433. C
  25434. C     Write PASS or FAIL message
  25435. C
  25436.       IF (NFAIL .EQ. 0) THEN
  25437.          WRITE (LUN, 9000)
  25438.       ELSE
  25439.          WRITE (LUN, 9010) NFAIL
  25440.       ENDIF
  25441.       STOP
  25442.  9000 FORMAT (/' --------------TEST11 PASSED ALL TESTS----------------')
  25443.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25444.      1        ' TEST(S) FAILED IN PROGRAM TEST11 *************')
  25445.       END
  25446. *DECK TEST12
  25447.       PROGRAM TEST12
  25448. C***BEGIN PROLOGUE  TEST12
  25449. C***PURPOSE  Driver for testing SLATEC subprograms
  25450. C***LIBRARY   SLATEC
  25451. C***CATEGORY  D2
  25452. C***KEYWORDS  QUICK CHECK DRIVER
  25453. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25454. C***DESCRIPTION
  25455. C
  25456. C *Usage:
  25457. C     One input data record is required
  25458. C         READ (LIN, '(I1)') KPRINT
  25459. C
  25460. C *Arguments:
  25461. C     KPRINT = 0  Quick checks - No printing.
  25462. C                 Driver       - Short pass or fail message printed.
  25463. C              1  Quick checks - No message printed for passed tests,
  25464. C                                short message printed for failed tests.
  25465. C                 Driver       - Short pass or fail message printed.
  25466. C              2  Quick checks - Print short message for passed tests,
  25467. C                                fuller information for failed tests.
  25468. C                 Driver       - Pass or fail message printed.
  25469. C              3  Quick checks - Print complete quick check results.
  25470. C                 Driver       - Pass or fail message printed.
  25471. C
  25472. C *Description:
  25473. C     Driver for testing SLATEC subprograms
  25474. C        SNBFS    SNBIR    SPOFS    SPOIR
  25475. C        DNBFS             DPOFS
  25476. C        CNBFS    CNBIR    CPOFS    CPOIR
  25477. C
  25478. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25479. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25480. C                 tical Library, April 10, 1990.
  25481. C***ROUTINES CALLED  CQCK, DQCK, I1MACH, SQCK, XERMAX, XSETF, XSETUN
  25482. C***REVISION HISTORY  (YYMMDD)
  25483. C   890618  DATE WRITTEN
  25484. C   890618  REVISION DATE from Version 3.2
  25485. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25486. C   900524  Cosmetic changes to code.  (WRB)
  25487. C***END PROLOGUE  TEST12
  25488.       INTEGER KPRINT, LIN, LUN, NERR, NFAIL
  25489. C***FIRST EXECUTABLE STATEMENT  TEST12
  25490.       LUN = I1MACH(2)
  25491.       LIN = I1MACH(1)
  25492.       NFAIL = 0
  25493. C
  25494. C     Read KPRINT parameter
  25495. C
  25496.       READ (LIN, '(I1)') KPRINT
  25497.       CALL XERMAX(1000)
  25498.       CALL XSETUN(LUN)
  25499.       IF (KPRINT .LE. 1) THEN
  25500.          CALL XSETF(0)
  25501.       ELSE
  25502.          CALL XSETF(1)
  25503.       ENDIF
  25504. C
  25505. C     Test LINPACK routines
  25506. C
  25507.       CALL SQCK(LUN,KPRINT,NERR)
  25508.       NFAIL = NFAIL+NERR
  25509.       CALL DQCK(LUN,KPRINT,NERR)
  25510.       NFAIL = NFAIL+NERR
  25511.       CALL CQCK(LUN,KPRINT,NERR)
  25512.       NFAIL = NFAIL+NERR
  25513. C
  25514. C     Write PASS or FAIL message
  25515. C
  25516.       IF (NFAIL .EQ. 0) THEN
  25517.          WRITE (LUN, 9000)
  25518.       ELSE
  25519.          WRITE (LUN, 9010) NFAIL
  25520.       ENDIF
  25521.       STOP
  25522.  9000 FORMAT (/' --------------TEST12 PASSED ALL TESTS----------------')
  25523.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25524.      1        ' TEST(S) FAILED IN PROGRAM TEST12 *************')
  25525.       END
  25526. *DECK TEST13
  25527.       PROGRAM TEST13
  25528. C***BEGIN PROLOGUE  TEST13
  25529. C***PURPOSE  Driver for testing SLATEC subprograms
  25530. C***LIBRARY   SLATEC
  25531. C***CATEGORY  D2
  25532. C***KEYWORDS  QUICK CHECK DRIVER
  25533. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25534. C***DESCRIPTION
  25535. C
  25536. C *Usage:
  25537. C     One input data record is required
  25538. C         READ (LIN, '(I1)') KPRINT
  25539. C
  25540. C *Arguments:
  25541. C     KPRINT = 0  Quick checks - No printing.
  25542. C                 Driver       - Short pass or fail message printed.
  25543. C              1  Quick checks - No message printed for passed tests,
  25544. C                                short message printed for failed tests.
  25545. C                 Driver       - Short pass or fail message printed.
  25546. C              2  Quick checks - Print short message for passed tests,
  25547. C                                fuller information for failed tests.
  25548. C                 Driver       - Pass or fail message printed.
  25549. C              3  Quick checks - Print complete quick check results.
  25550. C                 Driver       - Pass or fail message printed.
  25551. C
  25552. C *Description:
  25553. C     Driver for testing SLATEC subprograms
  25554. C        CGECO    CGEDI    CGEFA    CGESL
  25555. C        CGBCO    CGBDI    CGBFA    CGBSL
  25556. C        CPOCO    CPODI    CPOFA    CPOSL
  25557. C        CPPCO    CPPDI    CPPFA    CPPSL
  25558. C        CPBCO    CPBDI    CPBFA    CPBSL
  25559. C        CSICO    CSIDI    CSIFA    CSISL
  25560. C        CSPCO    CSPDI    CSPFA    CSPSL
  25561. C        CHICO    CHIDI    CHIFA    CHISL
  25562. C        CHPCO    CHPDI    CHPFA    CHPSL
  25563. C        CTRCO    CTRDI      -      CTRSL
  25564. C        CGTSL
  25565. C        CPTSL
  25566. C        CCHDC
  25567. C        CQRDC    CQRSL
  25568. C        CSVDC
  25569. C
  25570. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25571. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25572. C                 tical Library, April 10, 1990.
  25573. C***ROUTINES CALLED  CCHQC, CGBQC, CGECK, CGTQC, CHIQC, CHPQC, CPBQC,
  25574. C                    CPOQC, CPPQC, CPTQC, CQRQC, CSIQC, CSPQC, CSVQC,
  25575. C                    CTRQC, I1MACH, XERMAX, XSETF, XSETUN
  25576. C***REVISION HISTORY  (YYMMDD)
  25577. C   890618  DATE WRITTEN
  25578. C   890618  REVISION DATE from Version 3.2
  25579. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25580. C   900524  Cosmetic changes to code.  (WRB)
  25581. C***END PROLOGUE  TEST13
  25582.       INTEGER KPRINT, LIN, LUN, NERR, NFAIL
  25583. C***FIRST EXECUTABLE STATEMENT  TEST13
  25584.       LUN = I1MACH(2)
  25585.       LIN = I1MACH(1)
  25586.       NFAIL = 0
  25587. C
  25588. C     Read KPRINT parameter
  25589. C
  25590.       READ (LIN, '(I1)') KPRINT
  25591.       CALL XERMAX(1000)
  25592.       CALL XSETUN(LUN)
  25593.       IF (KPRINT .LE. 1) THEN
  25594.          CALL XSETF(0)
  25595.       ELSE
  25596.          CALL XSETF(1)
  25597.       ENDIF
  25598. C
  25599. C     Test LINPACK routines
  25600. C
  25601.       CALL CGECK(LUN,KPRINT,NERR)
  25602.       NFAIL = NFAIL + NERR
  25603.       CALL CGBQC(LUN,KPRINT,NERR)
  25604.       NFAIL = NFAIL + NERR
  25605.       CALL CPOQC(LUN,KPRINT,NERR)
  25606.       NFAIL = NFAIL + NERR
  25607.       CALL CPPQC(LUN,KPRINT,NERR)
  25608.       NFAIL = NFAIL + NERR
  25609.       CALL CPBQC(LUN,KPRINT,NERR)
  25610.       NFAIL = NFAIL + NERR
  25611.       CALL CSIQC(LUN,KPRINT,NERR)
  25612.       NFAIL = NFAIL + NERR
  25613.       CALL CSPQC(LUN,KPRINT,NERR)
  25614.       NFAIL = NFAIL + NERR
  25615.       CALL CHIQC(LUN,KPRINT,NERR)
  25616.       NFAIL = NFAIL + NERR
  25617.       CALL CHPQC(LUN,KPRINT,NERR)
  25618.       NFAIL = NFAIL + NERR
  25619.       CALL CTRQC(LUN,KPRINT,NERR)
  25620.       NFAIL = NFAIL + NERR
  25621.       CALL CGTQC(LUN,KPRINT,NERR)
  25622.       NFAIL = NFAIL + NERR
  25623.       CALL CPTQC(LUN,KPRINT,NERR)
  25624.       NFAIL = NFAIL + NERR
  25625.       CALL CCHQC(LUN,KPRINT,NERR)
  25626.       NFAIL = NFAIL + NERR
  25627.       CALL CQRQC(LUN,KPRINT,NERR)
  25628.       NFAIL = NFAIL + NERR
  25629.       CALL CSVQC(LUN,KPRINT,NERR)
  25630.       NFAIL = NFAIL + NERR
  25631. C
  25632. C
  25633. C     Write PASS or FAIL message
  25634. C
  25635.       IF (NFAIL .EQ. 0) THEN
  25636.          WRITE (LUN, 9000)
  25637.       ELSE
  25638.          WRITE (LUN, 9010) NFAIL
  25639.       ENDIF
  25640.       STOP
  25641.  9000 FORMAT (/' --------------TEST13 PASSED ALL TESTS----------------')
  25642.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25643.      1        ' TEST(S) FAILED IN PROGRAM TEST13 *************')
  25644.       END
  25645. *DECK TEST14
  25646.       PROGRAM TEST14
  25647. C***BEGIN PROLOGUE  TEST14
  25648. C***PURPOSE  Driver for testing SLATEC subprograms
  25649. C***LIBRARY   SLATEC
  25650. C***CATEGORY  D2
  25651. C***KEYWORDS  QUICK CHECK DRIVER
  25652. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25653. C***DESCRIPTION
  25654. C
  25655. C *Usage:
  25656. C     One input data record is required
  25657. C         READ (LIN, '(I1)') KPRINT
  25658. C
  25659. C *Arguments:
  25660. C     KPRINT = 0  Quick checks - No printing.
  25661. C                 Driver       - Short pass or fail message printed.
  25662. C              1  Quick checks - No message printed for passed tests,
  25663. C                                short message printed for failed tests.
  25664. C                 Driver       - Short pass or fail message printed.
  25665. C              2  Quick checks - Print short message for passed tests,
  25666. C                                fuller information for failed tests.
  25667. C                 Driver       - Pass or fail message printed.
  25668. C              3  Quick checks - Print complete quick check results.
  25669. C                 Driver       - Pass or fail message printed.
  25670. C
  25671. C *Description:
  25672. C     Driver for testing SLATEC subprograms
  25673. C        SGEEV    CGEEV
  25674. C        SSIEV    CHIEV
  25675. C        SSPEV
  25676. C
  25677. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25678. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25679. C                 tical Library, April 10, 1990.
  25680. C***ROUTINES CALLED  EISQX1, EISQX2, I1MACH, XERMAX, XSETF, XSETUN
  25681. C***REVISION HISTORY  (YYMMDD)
  25682. C   890618  DATE WRITTEN
  25683. C   890618  REVISION DATE from Version 3.2
  25684. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25685. C   900524  Cosmetic changes to code.  (WRB)
  25686. C***END PROLOGUE  TEST14
  25687.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  25688. C***FIRST EXECUTABLE STATEMENT  TEST14
  25689.       LUN = I1MACH(2)
  25690.       LIN = I1MACH(1)
  25691.       NFAIL = 0
  25692. C
  25693. C     Read KPRINT parameter
  25694. C
  25695.       READ (LIN, '(I1)') KPRINT
  25696.       CALL XERMAX(1000)
  25697.       CALL XSETUN(LUN)
  25698.       IF (KPRINT .LE. 1) THEN
  25699.          CALL XSETF(0)
  25700.       ELSE
  25701.          CALL XSETF(1)
  25702.       ENDIF
  25703. C
  25704. C     Test SGEEV and CGEEV
  25705. C
  25706.       CALL EISQX1(LUN,KPRINT,IPASS)
  25707.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25708. C
  25709. C     Test SSIEV, CHIEV and SSPEV
  25710. C
  25711.       CALL EISQX2(LUN,KPRINT,IPASS)
  25712.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25713. C
  25714. C     Write PASS or FAIL message
  25715. C
  25716.       IF (NFAIL .EQ. 0) THEN
  25717.          WRITE (LUN, 9000)
  25718.       ELSE
  25719.          WRITE (LUN, 9010) NFAIL
  25720.       ENDIF
  25721.       STOP
  25722.  9000 FORMAT (/' --------------TEST14 PASSED ALL TESTS----------------')
  25723.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25724.      1        ' TEST(S) FAILED IN PROGRAM TEST14 *************')
  25725.       END
  25726. *DECK TEST15
  25727.       PROGRAM TEST15
  25728. C***BEGIN PROLOGUE  TEST15
  25729. C***PURPOSE  Driver for testing SLATEC subprograms
  25730. C***LIBRARY   SLATEC
  25731. C***CATEGORY  D5, D9
  25732. C***KEYWORDS  QUICK CHECK DRIVER
  25733. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25734. C***DESCRIPTION
  25735. C
  25736. C *Usage:
  25737. C     One input data record is required
  25738. C         READ (LIN, '(I1)') KPRINT
  25739. C
  25740. C *Arguments:
  25741. C     KPRINT = 0  Quick checks - No printing.
  25742. C                 Driver       - Short pass or fail message printed.
  25743. C              1  Quick checks - No message printed for passed tests,
  25744. C                                short message printed for failed tests.
  25745. C                 Driver       - Short pass or fail message printed.
  25746. C              2  Quick checks - Print short message for passed tests,
  25747. C                                fuller information for failed tests.
  25748. C                 Driver       - Pass or fail message printed.
  25749. C              3  Quick checks - Print complete quick check results.
  25750. C                 Driver       - Pass or fail message printed.
  25751. C
  25752. C *Description:
  25753. C     Driver for testing SLATEC subprograms
  25754. C        LSEI     SGLSS
  25755. C
  25756. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25757. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25758. C                 tical Library, April 10, 1990.
  25759. C***ROUTINES CALLED  I1MACH, LSEIQX, QCGLSS, XERMAX, XSETF, XSETUN
  25760. C***REVISION HISTORY  (YYMMDD)
  25761. C   890618  DATE WRITTEN
  25762. C   890618  REVISION DATE from Version 3.2
  25763. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25764. C   900524  Cosmetic changes to code.  (WRB)
  25765. C***END PROLOGUE  TEST15
  25766.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  25767. C***FIRST EXECUTABLE STATEMENT  TEST15
  25768.       LUN = I1MACH(2)
  25769.       LIN = I1MACH(1)
  25770.       NFAIL = 0
  25771. C
  25772. C     Read KPRINT parameter
  25773. C
  25774.       READ (LIN, '(I1)') KPRINT
  25775.       CALL XERMAX(1000)
  25776.       CALL XSETUN(LUN)
  25777.       IF (KPRINT .LE. 1) THEN
  25778.          CALL XSETF(0)
  25779.       ELSE
  25780.          CALL XSETF(1)
  25781.       ENDIF
  25782. C
  25783. C     Test LSEI
  25784. C
  25785.       CALL LSEIQX(LUN,KPRINT,IPASS)
  25786.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25787. C
  25788. C     Test SGLSS
  25789. C
  25790.       CALL QCGLSS(LUN,KPRINT,IPASS)
  25791.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25792. C
  25793. C     Write PASS or FAIL message
  25794. C
  25795.       IF (NFAIL .EQ. 0) THEN
  25796.          WRITE (LUN, 9000)
  25797.       ELSE
  25798.          WRITE (LUN, 9010) NFAIL
  25799.       ENDIF
  25800.       STOP
  25801.  9000 FORMAT (/' --------------TEST15 PASSED ALL TESTS----------------')
  25802.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25803.      1        ' TEST(S) FAILED IN PROGRAM TEST15 *************')
  25804.       END
  25805. *DECK TEST16
  25806.       PROGRAM TEST16
  25807. C***BEGIN PROLOGUE  TEST16
  25808. C***PURPOSE  Driver for testing SLATEC subprograms
  25809. C***LIBRARY   SLATEC
  25810. C***CATEGORY  D5, D9
  25811. C***KEYWORDS  QUICK CHECK DRIVER
  25812. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25813. C***DESCRIPTION
  25814. C
  25815. C *Usage:
  25816. C     One input data record is required
  25817. C         READ (LIN, '(I1)') KPRINT
  25818. C
  25819. C *Arguments:
  25820. C     KPRINT = 0  Quick checks - No printing.
  25821. C                 Driver       - Short pass or fail message printed.
  25822. C              1  Quick checks - No message printed for passed tests,
  25823. C                                short message printed for failed tests.
  25824. C                 Driver       - Short pass or fail message printed.
  25825. C              2  Quick checks - Print short message for passed tests,
  25826. C                                fuller information for failed tests.
  25827. C                 Driver       - Pass or fail message printed.
  25828. C              3  Quick checks - Print complete quick check results.
  25829. C                 Driver       - Pass or fail message printed.
  25830. C
  25831. C *Description:
  25832. C     Driver for testing SLATEC subprograms
  25833. C        DLSEI    DGLSS
  25834. C
  25835. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25836. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25837. C                 tical Library, April 10, 1990.
  25838. C***ROUTINES CALLED  DLSEIT, DQCGLS, I1MACH, XERMAX, XSETF, XSETUN
  25839. C***REVISION HISTORY  (YYMMDD)
  25840. C   890618  DATE WRITTEN
  25841. C   890618  REVISION DATE from Version 3.2
  25842. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25843. C   900524  Cosmetic changes to code.  (WRB)
  25844. C***END PROLOGUE  TEST16
  25845.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  25846. C***FIRST EXECUTABLE STATEMENT  TEST16
  25847.       LUN = I1MACH(2)
  25848.       LIN = I1MACH(1)
  25849.       NFAIL = 0
  25850. C
  25851. C     Read KPRINT parameter
  25852. C
  25853.       READ (LIN, '(I1)') KPRINT
  25854.       CALL XERMAX(1000)
  25855.       CALL XSETUN(LUN)
  25856.       IF (KPRINT .LE. 1) THEN
  25857.          CALL XSETF(0)
  25858.       ELSE
  25859.          CALL XSETF(1)
  25860.       ENDIF
  25861. C
  25862. C     Test DLSEI
  25863. C
  25864.       CALL DLSEIT(LUN,KPRINT,IPASS)
  25865.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25866. C
  25867. C     Test DGLSS
  25868. C
  25869.       CALL DQCGLS(LUN,KPRINT,IPASS)
  25870.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25871. C
  25872. C     Write PASS or FAIL message
  25873. C
  25874.       IF (NFAIL .EQ. 0) THEN
  25875.          WRITE (LUN, 9000)
  25876.       ELSE
  25877.          WRITE (LUN, 9010) NFAIL
  25878.       ENDIF
  25879.       STOP
  25880.  9000 FORMAT (/' --------------TEST16 PASSED ALL TESTS----------------')
  25881.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25882.      1        ' TEST(S) FAILED IN PROGRAM TEST16 *************')
  25883.       END
  25884. *DECK TEST17
  25885.       PROGRAM TEST17
  25886. C***BEGIN PROLOGUE  TEST17
  25887. C***PURPOSE  Driver for testing SLATEC subprograms
  25888. C***LIBRARY   SLATEC
  25889. C***CATEGORY  E1, E3
  25890. C***KEYWORDS  QUICK CHECK DRIVER
  25891. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25892. C***DESCRIPTION
  25893. C
  25894. C *Usage:
  25895. C     One input data record is required
  25896. C         READ (LIN, '(I1)') KPRINT
  25897. C
  25898. C *Arguments:
  25899. C     KPRINT = 0  Quick checks - No printing.
  25900. C                 Driver       - Short pass or fail message printed.
  25901. C              1  Quick checks - No message printed for passed tests,
  25902. C                                short message printed for failed tests.
  25903. C                 Driver       - Short pass or fail message printed.
  25904. C              2  Quick checks - Print short message for passed tests,
  25905. C                                fuller information for failed tests.
  25906. C                 Driver       - Pass or fail message printed.
  25907. C              3  Quick checks - Print complete quick check results.
  25908. C                 Driver       - Pass or fail message printed.
  25909. C
  25910. C *Description:
  25911. C     Driver for testing SLATEC subprograms
  25912. C        POLINT   POLCOF   POLYVL
  25913. C        DPLINT   DPOLCF   DPOLVL
  25914. C
  25915. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25916. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25917. C                 tical Library, April 10, 1990.
  25918. C***ROUTINES CALLED  DPNTCK, I1MACH, PNTCHK, XERMAX, XSETF, XSETUN
  25919. C***REVISION HISTORY  (YYMMDD)
  25920. C   890618  DATE WRITTEN
  25921. C   890618  REVISION DATE from Version 3.2
  25922. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  25923. C   900524  Cosmetic changes to code.  (WRB)
  25924. C   920225  Added CALL to DPNTCK.  (WRB)
  25925. C***END PROLOGUE  TEST17
  25926.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  25927. C***FIRST EXECUTABLE STATEMENT  TEST17
  25928.       LUN = I1MACH(2)
  25929.       LIN = I1MACH(1)
  25930.       NFAIL = 0
  25931. C
  25932. C     Read KPRINT parameter
  25933. C
  25934.       READ (LIN, '(I1)') KPRINT
  25935.       CALL XERMAX(1000)
  25936.       CALL XSETUN(LUN)
  25937.       IF (KPRINT .LE. 1) THEN
  25938.          CALL XSETF(0)
  25939.       ELSE
  25940.          CALL XSETF(1)
  25941.       ENDIF
  25942. C
  25943. C     Test POLINT, POLCOF and POLYVL.
  25944. C
  25945.       CALL PNTCHK(LUN,KPRINT,IPASS)
  25946.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25947. C
  25948. C     Test DPLINT, DPOLCF and DPOLVL.
  25949. C
  25950.       CALL DPNTCK(LUN,KPRINT,IPASS)
  25951.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  25952. C
  25953. C     Write PASS or FAIL message
  25954. C
  25955.       IF (NFAIL .EQ. 0) THEN
  25956.          WRITE (LUN, 9000)
  25957.       ELSE
  25958.          WRITE (LUN, 9010) NFAIL
  25959.       ENDIF
  25960.       STOP
  25961.  9000 FORMAT (/' --------------TEST17 PASSED ALL TESTS----------------')
  25962.  9010 FORMAT (/' ************* WARNING -- ', I5,
  25963.      1        ' TEST(S) FAILED IN PROGRAM TEST17 *************')
  25964.       END
  25965. *DECK TEST18
  25966.       PROGRAM TEST18
  25967. C***BEGIN PROLOGUE  TEST18
  25968. C***PURPOSE  Driver for testing SLATEC subprograms
  25969. C***LIBRARY   SLATEC
  25970. C***CATEGORY  E, E1A, E3
  25971. C***KEYWORDS  QUICK CHECK DRIVER
  25972. C***AUTHOR  SLATEC Common Mathematical Library Committee
  25973. C***DESCRIPTION
  25974. C
  25975. C *Usage:
  25976. C     One input data record is required
  25977. C         READ (LIN, '(I1)') KPRINT
  25978. C
  25979. C *Arguments:
  25980. C     KPRINT = 0  Quick checks - No printing.
  25981. C                 Driver       - Short pass or fail message printed.
  25982. C              1  Quick checks - No message printed for passed tests,
  25983. C                                short message printed for failed tests.
  25984. C                 Driver       - Short pass or fail message printed.
  25985. C              2  Quick checks - Print short message for passed tests,
  25986. C                                fuller information for failed tests.
  25987. C                 Driver       - Pass or fail message printed.
  25988. C              3  Quick checks - Print complete quick check results.
  25989. C                 Driver       - Pass or fail message printed.
  25990. C
  25991. C *Description:
  25992. C     Driver for testing SLATEC subprograms
  25993. C        BFQAD    BINT4    BINTK    BSPDR    BSPEV    BSPPP
  25994. C        BSPVD    BSPVN    BSQAD    BVALU    INTRV    PFQAD
  25995. C        PPQAD    PPVAL
  25996. C
  25997. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  25998. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  25999. C                 tical Library, April 10, 1990.
  26000. C***ROUTINES CALLED  BSPCK, I1MACH, XERMAX, XSETF, XSETUN
  26001. C***REVISION HISTORY  (YYMMDD)
  26002. C   890618  DATE WRITTEN
  26003. C   890618  REVISION DATE from Version 3.2
  26004. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26005. C   900524  Cosmetic changes to code.  (WRB)
  26006. C***END PROLOGUE  TEST18
  26007.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26008. C***FIRST EXECUTABLE STATEMENT  TEST18
  26009.       LUN = I1MACH(2)
  26010.       LIN = I1MACH(1)
  26011.       NFAIL = 0
  26012. C
  26013. C     Read KPRINT parameter
  26014. C
  26015.       READ (LIN, '(I1)') KPRINT
  26016.       CALL XERMAX(1000)
  26017.       CALL XSETUN(LUN)
  26018.       IF (KPRINT .LE. 1) THEN
  26019.          CALL XSETF(0)
  26020.       ELSE
  26021.          CALL XSETF(1)
  26022.       ENDIF
  26023. C
  26024. C     Test single precision B-Spline package
  26025. C
  26026.       CALL BSPCK(LUN,KPRINT,IPASS)
  26027.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26028. C
  26029. C     Write PASS or FAIL message
  26030. C
  26031.       IF (NFAIL .EQ. 0) THEN
  26032.          WRITE (LUN, 9000)
  26033.       ELSE
  26034.          WRITE (LUN, 9010) NFAIL
  26035.       ENDIF
  26036.       STOP
  26037.  9000 FORMAT (/' --------------TEST18 PASSED ALL TESTS----------------')
  26038.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26039.      1        ' TEST(S) FAILED IN PROGRAM TEST18 *************')
  26040.       END
  26041. *DECK TEST19
  26042.       PROGRAM TEST19
  26043. C***BEGIN PROLOGUE  TEST19
  26044. C***PURPOSE  Driver for testing SLATEC subprograms
  26045. C***LIBRARY   SLATEC
  26046. C***CATEGORY  E, E1A, E3
  26047. C***KEYWORDS  QUICK CHECK DRIVER
  26048. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26049. C***DESCRIPTION
  26050. C
  26051. C *Usage:
  26052. C     One input data record is required
  26053. C         READ (LIN, '(I1)') KPRINT
  26054. C
  26055. C *Arguments:
  26056. C     KPRINT = 0  Quick checks - No printing.
  26057. C                 Driver       - Short pass or fail message printed.
  26058. C              1  Quick checks - No message printed for passed tests,
  26059. C                                short message printed for failed tests.
  26060. C                 Driver       - Short pass or fail message printed.
  26061. C              2  Quick checks - Print short message for passed tests,
  26062. C                                fuller information for failed tests.
  26063. C                 Driver       - Pass or fail message printed.
  26064. C              3  Quick checks - Print complete quick check results.
  26065. C                 Driver       - Pass or fail message printed.
  26066. C
  26067. C *Description:
  26068. C     Driver for testing SLATEC subprograms
  26069. C        DBFQAD   DBINT4   DBINTK   DBSPDR   DBSPEV   DBSPPP
  26070. C        DBSPVD   DBSPVN   DBSQAD   DBVALU   DINTRV   DPFQAD
  26071. C        DPPQAD   DPPVAL
  26072. C
  26073. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26074. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26075. C                 tical Library, April 10, 1990.
  26076. C***ROUTINES CALLED  DBSPCK, I1MACH, XERMAX, XSETF, XSETUN
  26077. C***REVISION HISTORY  (YYMMDD)
  26078. C   890618  DATE WRITTEN
  26079. C   890618  REVISION DATE from Version 3.2
  26080. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26081. C   900524  Cosmetic changes to code.  (WRB)
  26082. C***END PROLOGUE  TEST19
  26083.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26084. C***FIRST EXECUTABLE STATEMENT  TEST19
  26085.       LUN = I1MACH(2)
  26086.       LIN = I1MACH(1)
  26087.       NFAIL = 0
  26088. C
  26089. C     Read KPRINT parameter
  26090. C
  26091.       READ (LIN, '(I1)') KPRINT
  26092.       CALL XERMAX(1000)
  26093.       CALL XSETUN(LUN)
  26094.       IF (KPRINT .LE. 1) THEN
  26095.          CALL XSETF(0)
  26096.       ELSE
  26097.          CALL XSETF(1)
  26098.       ENDIF
  26099. C
  26100. C     Test double precision B-Spline package
  26101. C
  26102.       CALL DBSPCK(LUN,KPRINT,IPASS)
  26103.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26104. C
  26105. C     Write PASS or FAIL message
  26106. C
  26107.       IF (NFAIL .EQ. 0) THEN
  26108.          WRITE (LUN, 9000)
  26109.       ELSE
  26110.          WRITE (LUN, 9010) NFAIL
  26111.       ENDIF
  26112.       STOP
  26113.  9000 FORMAT (/' --------------TEST19 PASSED ALL TESTS----------------')
  26114.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26115.      1        ' TEST(S) FAILED IN PROGRAM TEST19 *************')
  26116.       END
  26117. *DECK TEST2
  26118.       PROGRAM TEST2
  26119. C***BEGIN PROLOGUE  TEST2
  26120. C***PURPOSE  Driver for testing SLATEC subprograms
  26121. C***LIBRARY   SLATEC
  26122. C***CATEGORY  C
  26123. C***KEYWORDS  QUICK CHECK DRIVER
  26124. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26125. C***DESCRIPTION
  26126. C
  26127. C *Usage:
  26128. C     One input data record is required
  26129. C         READ (LIN, '(I1)') KPRINT
  26130. C
  26131. C *Arguments:
  26132. C     KPRINT = 0  Quick checks - No printing.
  26133. C                 Driver       - Short pass or fail message printed.
  26134. C              1  Quick checks - No message printed for passed tests,
  26135. C                                short message printed for failed tests.
  26136. C                 Driver       - Short pass or fail message printed.
  26137. C              2  Quick checks - Print short message for passed tests,
  26138. C                                fuller information for failed tests.
  26139. C                 Driver       - Pass or fail message printed.
  26140. C              3  Quick checks - Print complete quick check results.
  26141. C                 Driver       - Pass or fail message printed.
  26142. C
  26143. C *Description:
  26144. C     Driver for testing SLATEC subprograms
  26145. C        double precision Fullerton routines
  26146. C
  26147. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26148. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26149. C                 tical Library, April 10, 1990.
  26150. C***ROUTINES CALLED  DFNCK, I1MACH, XERMAX, XSETF, XSETUN
  26151. C***REVISION HISTORY  (YYMMDD)
  26152. C   890618  DATE WRITTEN
  26153. C   890618  REVISION DATE from Version 3.2
  26154. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26155. C   900524  Cosmetic changes to code.  (WRB)
  26156. C***END PROLOGUE  TEST2
  26157.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26158. C***FIRST EXECUTABLE STATEMENT  TEST2
  26159.       LUN = I1MACH(2)
  26160.       LIN = I1MACH(1)
  26161.       NFAIL = 0
  26162. C
  26163. C     Read KPRINT parameter
  26164. C
  26165.       READ (LIN, '(I1)') KPRINT
  26166.       CALL XERMAX(1000)
  26167.       CALL XSETUN(LUN)
  26168.       IF (KPRINT .LE. 1) THEN
  26169.          CALL XSETF(0)
  26170.       ELSE
  26171.          CALL XSETF(1)
  26172.       ENDIF
  26173. C
  26174. C     Test double precision Fullerton routines
  26175. C
  26176.       CALL DFNCK(LUN,KPRINT,IPASS)
  26177.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26178. C
  26179. C     Write PASS or FAIL message
  26180. C
  26181.       IF (NFAIL .EQ. 0) THEN
  26182.          WRITE (LUN, 9000)
  26183.       ELSE
  26184.          WRITE (LUN, 9010) NFAIL
  26185.       ENDIF
  26186.       STOP
  26187.  9000 FORMAT (/' --------------TEST2  PASSED ALL TESTS----------------')
  26188.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26189.      1        ' TEST(S) FAILED IN PROGRAM TEST2  *************')
  26190.       END
  26191. *DECK TEST20
  26192.       PROGRAM TEST20
  26193. C***BEGIN PROLOGUE  TEST20
  26194. C***PURPOSE  Driver for testing SLATEC subprograms
  26195. C***LIBRARY   SLATEC
  26196. C***CATEGORY  E1A
  26197. C***KEYWORDS  QUICK CHECK DRIVER
  26198. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26199. C***DESCRIPTION
  26200. C
  26201. C *Usage:
  26202. C     One input data record is required
  26203. C         READ (LIN, '(I1)') KPRINT
  26204. C
  26205. C *Arguments:
  26206. C     KPRINT = 0  Quick checks - No printing.
  26207. C                 Driver       - Short pass or fail message printed.
  26208. C              1  Quick checks - No message printed for passed tests,
  26209. C                                short message printed for failed tests.
  26210. C                 Driver       - Short pass or fail message printed.
  26211. C              2  Quick checks - Print short message for passed tests,
  26212. C                                fuller information for failed tests.
  26213. C                 Driver       - Pass or fail message printed.
  26214. C              3  Quick checks - Print complete quick check results.
  26215. C                 Driver       - Pass or fail message printed.
  26216. C
  26217. C *Description:
  26218. C     Driver for testing SLATEC subprograms
  26219. C        PCHIP
  26220. C
  26221. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26222. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26223. C                 tical Library, April 10, 1990.
  26224. C***ROUTINES CALLED  I1MACH, PCHQK1, PCHQK2, PCHQK3, PCHQK4, XERMAX,
  26225. C                    XSETF, XSETUN
  26226. C***REVISION HISTORY  (YYMMDD)
  26227. C   890618  DATE WRITTEN
  26228. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26229. C   900314  Added new quick checks PCHQK3, PCHQK4.  (FNF)
  26230. C   900315  Corrected category record.  (FNF)
  26231. C   900321  Moved IPASS to call sequences for SLATEC standards.  (FNF)
  26232. C   900524  Cosmetic changes to code.  (WRB)
  26233. C***END PROLOGUE  TEST20
  26234.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26235. C***FIRST EXECUTABLE STATEMENT  TEST20
  26236.       LUN   = I1MACH(2)
  26237.       LIN   = I1MACH(1)
  26238.       NFAIL = 0
  26239. C
  26240. C     Read KPRINT parameter
  26241. C
  26242.       READ (LIN, '(I1)') KPRINT
  26243.       CALL XERMAX(1000)
  26244.       CALL XSETUN(LUN)
  26245.       IF (KPRINT .LE. 1) THEN
  26246.          CALL XSETF(0)
  26247.       ELSE
  26248.          CALL XSETF(1)
  26249.       ENDIF
  26250. C
  26251. C     Test PCHIP evaluators
  26252. C
  26253.       CALL PCHQK1(LUN,KPRINT,IPASS)
  26254.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26255. C
  26256. C     Test PCHIP integrators
  26257. C
  26258.       CALL PCHQK2(LUN,KPRINT,IPASS)
  26259.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26260. C
  26261. C     Test PCHIP interpolators
  26262. C
  26263.       CALL PCHQK3(LUN,KPRINT,IPASS)
  26264.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26265. C
  26266. C     Test PCHIP monotonicity checker
  26267. C
  26268.       CALL PCHQK4(LUN,KPRINT,IPASS)
  26269.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26270. C
  26271. C     Write PASS or FAIL message
  26272. C
  26273.       IF (NFAIL .EQ. 0) THEN
  26274.          WRITE (LUN, 9000)
  26275.       ELSE
  26276.          WRITE (LUN, 9010) NFAIL
  26277.       ENDIF
  26278.       STOP
  26279.  9000 FORMAT (/' --------------TEST20 PASSED ALL TESTS----------------')
  26280.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26281.      1        ' TEST(S) FAILED IN PROGRAM TEST20 *************')
  26282.       END
  26283. *DECK TEST21
  26284.       PROGRAM TEST21
  26285. C***BEGIN PROLOGUE  TEST21
  26286. C***PURPOSE  Driver for testing SLATEC subprograms
  26287. C***LIBRARY   SLATEC
  26288. C***CATEGORY  E1A
  26289. C***KEYWORDS  QUICK CHECK DRIVER
  26290. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26291. C***DESCRIPTION
  26292. C
  26293. C *Usage:
  26294. C     One input data record is required
  26295. C         READ (LIN, '(I1)') KPRINT
  26296. C
  26297. C *Arguments:
  26298. C     KPRINT = 0  Quick checks - No printing.
  26299. C                 Driver       - Short pass or fail message printed.
  26300. C              1  Quick checks - No message printed for passed tests,
  26301. C                                short message printed for failed tests.
  26302. C                 Driver       - Short pass or fail message printed.
  26303. C              2  Quick checks - Print short message for passed tests,
  26304. C                                fuller information for failed tests.
  26305. C                 Driver       - Pass or fail message printed.
  26306. C              3  Quick checks - Print complete quick check results.
  26307. C                 Driver       - Pass or fail message printed.
  26308. C
  26309. C *Description:
  26310. C     Driver for testing SLATEC subprograms
  26311. C        DPCHIP
  26312. C
  26313. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26314. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26315. C                 tical Library, April 10, 1990.
  26316. C***ROUTINES CALLED  DPCHQ1, DPCHQ2, DPCHQ3, DPCHQ4, I1MACH, XERMAX,
  26317. C                    XSETF, XSETUN
  26318. C***REVISION HISTORY  (YYMMDD)
  26319. C   890618  DATE WRITTEN
  26320. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26321. C   900319  Corrected category record.  (FNF)
  26322. C   900320  Added new quick checks DPCHQ3, DPCHQ4.  (FNF)
  26323. C   900321  Moved IPASS to call sequences for SLATEC standards.  (FNF)
  26324. C   900322  Corrected list of routines called.  (FNF)
  26325. C   900524  Cosmetic changes to code.  (WRB)
  26326. C***END PROLOGUE  TEST21
  26327.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26328. C***FIRST EXECUTABLE STATEMENT  TEST21
  26329.       LUN   = I1MACH(2)
  26330.       LIN   = I1MACH(1)
  26331.       NFAIL = 0
  26332. C
  26333. C     Read KPRINT parameter
  26334. C
  26335.       READ (LIN, '(I1)') KPRINT
  26336.       CALL XERMAX(1000)
  26337.       CALL XSETUN(LUN)
  26338.       IF (KPRINT .LE. 1) THEN
  26339.          CALL XSETF(0)
  26340.       ELSE
  26341.          CALL XSETF(1)
  26342.       ENDIF
  26343. C
  26344. C     Test DPCHIP evaluators
  26345. C
  26346.       CALL DPCHQ1(LUN,KPRINT,IPASS)
  26347.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26348. C
  26349. C     Test DPCHIP integrators
  26350. C
  26351.       CALL DPCHQ2(LUN,KPRINT,IPASS)
  26352.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26353. C
  26354. C     Test DPCHIP interpolators
  26355. C
  26356.       CALL DPCHQ3(LUN,KPRINT,IPASS)
  26357.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26358. C
  26359. C     Test DPCHIP monotonicity checker
  26360. C
  26361.       CALL DPCHQ4(LUN,KPRINT,IPASS)
  26362.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26363. C
  26364. C     Write PASS or FAIL message
  26365. C
  26366.       IF (NFAIL .EQ. 0) THEN
  26367.          WRITE (LUN, 9000)
  26368.       ELSE
  26369.          WRITE (LUN, 9010) NFAIL
  26370.       ENDIF
  26371.       STOP
  26372.  9000 FORMAT (/' --------------TEST21 PASSED ALL TESTS----------------')
  26373.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26374.      1        ' TEST(S) FAILED IN PROGRAM TEST21 *************')
  26375.       END
  26376. *DECK TEST22
  26377.       PROGRAM TEST22
  26378. C***BEGIN PROLOGUE  TEST22
  26379. C***PURPOSE  Driver for testing SLATEC subprograms
  26380. C***LIBRARY   SLATEC
  26381. C***CATEGORY  F1A
  26382. C***KEYWORDS  QUICK CHECK DRIVER
  26383. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26384. C***DESCRIPTION
  26385. C
  26386. C *Usage:
  26387. C     One input data record is required
  26388. C         READ (LIN, '(I1)') KPRINT
  26389. C
  26390. C *Arguments:
  26391. C     KPRINT = 0  Quick checks - No printing.
  26392. C                 Driver       - Short pass or fail message printed.
  26393. C              1  Quick checks - No message printed for passed tests,
  26394. C                                short message printed for failed tests.
  26395. C                 Driver       - Short pass or fail message printed.
  26396. C              2  Quick checks - Print short message for passed tests,
  26397. C                                fuller information for failed tests.
  26398. C                 Driver       - Pass or fail message printed.
  26399. C              3  Quick checks - Print complete quick check results.
  26400. C                 Driver       - Pass or fail message printed.
  26401. C
  26402. C *Description:
  26403. C     Driver for testing SLATEC subprograms
  26404. C        RPZERO   CPZERO
  26405. C        FZERO    DFZERO
  26406. C        RPQR79   CPQR79
  26407. C
  26408. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26409. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26410. C                 tical Library, April 10, 1990.
  26411. C***ROUTINES CALLED  CPRPQX, CQRTST, DFZTST, FZTEST, I1MACH, RQRTST,
  26412. C                    XERMAX, XSETF, XSETUN
  26413. C***REVISION HISTORY  (YYMMDD)
  26414. C   890618  DATE WRITTEN
  26415. C   890618  REVISION DATE from Version 3.2
  26416. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26417. C   900524  Cosmetic changes to code.  (WRB)
  26418. C***END PROLOGUE  TEST22
  26419.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26420. C***FIRST EXECUTABLE STATEMENT  TEST22
  26421.       LUN = I1MACH(2)
  26422.       LIN = I1MACH(1)
  26423.       NFAIL = 0
  26424. C
  26425. C     Read KPRINT parameter
  26426. C
  26427.       READ (LIN, '(I1)') KPRINT
  26428.       CALL XERMAX(1000)
  26429.       CALL XSETUN(LUN)
  26430.       IF (KPRINT .LE. 1) THEN
  26431.          CALL XSETF(0)
  26432.       ELSE
  26433.          CALL XSETF(1)
  26434.       ENDIF
  26435. C
  26436. C     Test CPZERO and RPZERO
  26437. C
  26438.       CALL CPRPQX(LUN,KPRINT,IPASS)
  26439.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26440. C
  26441. C     Test FZERO
  26442. C
  26443.       CALL FZTEST(LUN,KPRINT,IPASS)
  26444.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26445. C
  26446. C     Test DFZERO
  26447. C
  26448.       CALL DFZTST(LUN,KPRINT,IPASS)
  26449.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26450. C
  26451. C     Test RPQR79
  26452. C
  26453.       CALL RQRTST(LUN,KPRINT,IPASS)
  26454.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26455. C
  26456. C     Test CPQR79
  26457. C
  26458.       CALL CQRTST(LUN,KPRINT,IPASS)
  26459.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26460. C
  26461. C     Write PASS or FAIL message
  26462. C
  26463.       IF (NFAIL .EQ. 0) THEN
  26464.          WRITE (LUN, 9000)
  26465.       ELSE
  26466.          WRITE (LUN, 9010) NFAIL
  26467.       ENDIF
  26468.       STOP
  26469.  9000 FORMAT (/' --------------TEST22 PASSED ALL TESTS----------------')
  26470.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26471.      1        ' TEST(S) FAILED IN PROGRAM TEST22 *************')
  26472.       END
  26473. *DECK TEST23
  26474.       PROGRAM TEST23
  26475. C***BEGIN PROLOGUE  TEST23
  26476. C***PURPOSE  Driver for testing SLATEC subprograms
  26477. C***LIBRARY   SLATEC
  26478. C***CATEGORY  F2
  26479. C***KEYWORDS  QUICK CHECK DRIVER
  26480. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26481. C***DESCRIPTION
  26482. C
  26483. C *Usage:
  26484. C     One input data record is required
  26485. C         READ (LIN, '(I1)') KPRINT
  26486. C
  26487. C *Arguments:
  26488. C     KPRINT = 0  Quick checks - No printing.
  26489. C                 Driver       - Short pass or fail message printed.
  26490. C              1  Quick checks - No message printed for passed tests,
  26491. C                                short message printed for failed tests.
  26492. C                 Driver       - Short pass or fail message printed.
  26493. C              2  Quick checks - Print short message for passed tests,
  26494. C                                fuller information for failed tests.
  26495. C                 Driver       - Pass or fail message printed.
  26496. C              3  Quick checks - Print complete quick check results.
  26497. C                 Driver       - Pass or fail message printed.
  26498. C
  26499. C *Description:
  26500. C     Driver for testing SLATEC subprograms
  26501. C        SNSQE    SNSQ     SOS
  26502. C
  26503. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26504. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26505. C                 tical Library, April 10, 1990.
  26506. C***ROUTINES CALLED  I1MACH, SNSQQK, SOSNQX, XERMAX, XSETF, XSETUN
  26507. C***REVISION HISTORY  (YYMMDD)
  26508. C   890618  DATE WRITTEN
  26509. C   890618  REVISION DATE from Version 3.2
  26510. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26511. C   900524  Cosmetic changes to code.  (WRB)
  26512. C***END PROLOGUE  TEST23
  26513.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26514. C***FIRST EXECUTABLE STATEMENT  TEST23
  26515.       LUN = I1MACH(2)
  26516.       LIN = I1MACH(1)
  26517.       NFAIL = 0
  26518. C
  26519. C     Read KPRINT parameter
  26520. C
  26521.       READ (LIN, '(I1)') KPRINT
  26522.       CALL XERMAX(1000)
  26523.       CALL XSETUN(LUN)
  26524.       IF (KPRINT .LE. 1) THEN
  26525.          CALL XSETF(0)
  26526.       ELSE
  26527.          CALL XSETF(1)
  26528.       ENDIF
  26529. C
  26530. C     Test SNSQE and SNSQ
  26531. C
  26532.       CALL SNSQQK(LUN,KPRINT,IPASS)
  26533.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26534. C
  26535. C     Test SOS
  26536. C
  26537.       CALL SOSNQX(LUN,KPRINT,IPASS)
  26538.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26539. C
  26540. C     Write PASS or FAIL message
  26541. C
  26542.       IF (NFAIL .EQ. 0) THEN
  26543.          WRITE (LUN, 9000)
  26544.       ELSE
  26545.          WRITE (LUN, 9010) NFAIL
  26546.       ENDIF
  26547.       STOP
  26548.  9000 FORMAT (/' --------------TEST23 PASSED ALL TESTS----------------')
  26549.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26550.      1        ' TEST(S) FAILED IN PROGRAM TEST23 *************')
  26551.       END
  26552. *DECK TEST24
  26553.       PROGRAM TEST24
  26554. C***BEGIN PROLOGUE  TEST24
  26555. C***PURPOSE  Driver for testing SLATEC subprograms
  26556. C***LIBRARY   SLATEC
  26557. C***CATEGORY  F2
  26558. C***KEYWORDS  QUICK CHECK DRIVER
  26559. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26560. C***DESCRIPTION
  26561. C
  26562. C *Usage:
  26563. C     One input data record is required
  26564. C         READ (LIN, '(I1)') KPRINT
  26565. C
  26566. C *Arguments:
  26567. C     KPRINT = 0  Quick checks - No printing.
  26568. C                 Driver       - Short pass or fail message printed.
  26569. C              1  Quick checks - No message printed for passed tests,
  26570. C                                short message printed for failed tests.
  26571. C                 Driver       - Short pass or fail message printed.
  26572. C              2  Quick checks - Print short message for passed tests,
  26573. C                                fuller information for failed tests.
  26574. C                 Driver       - Pass or fail message printed.
  26575. C              3  Quick checks - Print complete quick check results.
  26576. C                 Driver       - Pass or fail message printed.
  26577. C
  26578. C *Description:
  26579. C     Driver for testing SLATEC subprograms
  26580. C        DNSQE    DNSQ     DSOS
  26581. C
  26582. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26583. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26584. C                 tical Library, April 10, 1990.
  26585. C***ROUTINES CALLED  DNSQQK, DSOSQX, I1MACH, XERMAX, XSETF, XSETUN
  26586. C***REVISION HISTORY  (YYMMDD)
  26587. C   890618  DATE WRITTEN
  26588. C   890618  REVISION DATE from Version 3.2
  26589. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26590. C   900524  Cosmetic changes to code.  (WRB)
  26591. C***END PROLOGUE  TEST24
  26592.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26593. C***FIRST EXECUTABLE STATEMENT  TEST24
  26594.       LUN = I1MACH(2)
  26595.       LIN = I1MACH(1)
  26596.       NFAIL = 0
  26597. C
  26598. C     Read KPRINT parameter
  26599. C
  26600.       READ (LIN, '(I1)') KPRINT
  26601.       CALL XERMAX(1000)
  26602.       CALL XSETUN(LUN)
  26603.       IF (KPRINT .LE. 1) THEN
  26604.          CALL XSETF(0)
  26605.       ELSE
  26606.          CALL XSETF(1)
  26607.       ENDIF
  26608. C
  26609. C     Test DNSQE and DNSQ
  26610. C
  26611.       CALL DNSQQK(LUN,KPRINT,IPASS)
  26612.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26613. C
  26614. C     Test DSOS
  26615. C
  26616.       CALL DSOSQX(LUN,KPRINT,IPASS)
  26617.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26618. C
  26619. C     Write PASS or FAIL message
  26620. C
  26621.       IF (NFAIL .EQ. 0) THEN
  26622.          WRITE (LUN, 9000)
  26623.       ELSE
  26624.          WRITE (LUN, 9010) NFAIL
  26625.       ENDIF
  26626.       STOP
  26627.  9000 FORMAT (/' --------------TEST24 PASSED ALL TESTS----------------')
  26628.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26629.      1        ' TEST(S) FAILED IN PROGRAM TEST24 *************')
  26630.       END
  26631. *DECK TEST25
  26632.       PROGRAM TEST25
  26633. C***BEGIN PROLOGUE  TEST25
  26634. C***PURPOSE  Driver for testing SLATEC subprograms
  26635. C***LIBRARY   SLATEC
  26636. C***CATEGORY  G2
  26637. C***KEYWORDS  QUICK CHECK DRIVER
  26638. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26639. C***DESCRIPTION
  26640. C
  26641. C *Usage:
  26642. C     One input data record is required
  26643. C         READ (LIN, '(I1)') KPRINT
  26644. C
  26645. C *Arguments:
  26646. C     KPRINT = 0  Quick checks - No printing.
  26647. C                 Driver       - Short pass or fail message printed.
  26648. C              1  Quick checks - No message printed for passed tests,
  26649. C                                short message printed for failed tests.
  26650. C                 Driver       - Short pass or fail message printed.
  26651. C              2  Quick checks - Print short message for passed tests,
  26652. C                                fuller information for failed tests.
  26653. C                 Driver       - Pass or fail message printed.
  26654. C              3  Quick checks - Print complete quick check results.
  26655. C                 Driver       - Pass or fail message printed.
  26656. C
  26657. C *Description:
  26658. C     Driver for testing SLATEC subprograms
  26659. C        SPLP     SBOCLS
  26660. C
  26661. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26662. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26663. C                 tical Library, April 10, 1990.
  26664. C***ROUTINES CALLED  I1MACH, SBOCQX, SPLPQX, XERMAX, XSETF, XSETUN
  26665. C***REVISION HISTORY  (YYMMDD)
  26666. C   890618  DATE WRITTEN
  26667. C   890618  REVISION DATE from Version 3.2
  26668. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26669. C   900524  Cosmetic changes to code.  (WRB)
  26670. C***END PROLOGUE  TEST25
  26671.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26672. C***FIRST EXECUTABLE STATEMENT  TEST25
  26673.       LUN = I1MACH(2)
  26674.       LIN = I1MACH(1)
  26675.       NFAIL = 0
  26676. C
  26677. C     Read KPRINT parameter
  26678. C
  26679.       READ (LIN, '(I1)') KPRINT
  26680.       CALL XERMAX(1000)
  26681.       CALL XSETUN(LUN)
  26682.       IF (KPRINT .LE. 1) THEN
  26683.          CALL XSETF(0)
  26684.       ELSE
  26685.          CALL XSETF(1)
  26686.       ENDIF
  26687. C
  26688. C     Test SPLP package
  26689. C
  26690.       CALL SPLPQX(LUN,KPRINT,IPASS)
  26691.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26692. C
  26693. C     Test SBOCLS package
  26694. C
  26695.       CALL SBOCQX(LUN,KPRINT,IPASS)
  26696.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26697. C
  26698. C     Write PASS or FAIL message
  26699. C
  26700.       IF (NFAIL .EQ. 0) THEN
  26701.          WRITE (LUN, 9000)
  26702.       ELSE
  26703.          WRITE (LUN, 9010) NFAIL
  26704.       ENDIF
  26705.       STOP
  26706.  9000 FORMAT (/' --------------TEST25 PASSED ALL TESTS----------------')
  26707.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26708.      1        ' TEST(S) FAILED IN PROGRAM TEST25 *************')
  26709.       END
  26710. *DECK TEST26
  26711.       PROGRAM TEST26
  26712. C***BEGIN PROLOGUE  TEST26
  26713. C***PURPOSE  Driver for testing SLATEC subprograms
  26714. C***LIBRARY   SLATEC
  26715. C***CATEGORY  G2
  26716. C***KEYWORDS  QUICK CHECK DRIVER
  26717. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26718. C***DESCRIPTION
  26719. C
  26720. C *Usage:
  26721. C     One input data record is required
  26722. C         READ (LIN, '(I1)') KPRINT
  26723. C
  26724. C *Arguments:
  26725. C     KPRINT = 0  Quick checks - No printing.
  26726. C                 Driver       - Short pass or fail message printed.
  26727. C              1  Quick checks - No message printed for passed tests,
  26728. C                                short message printed for failed tests.
  26729. C                 Driver       - Short pass or fail message printed.
  26730. C              2  Quick checks - Print short message for passed tests,
  26731. C                                fuller information for failed tests.
  26732. C                 Driver       - Pass or fail message printed.
  26733. C              3  Quick checks - Print complete quick check results.
  26734. C                 Driver       - Pass or fail message printed.
  26735. C
  26736. C *Description:
  26737. C     Driver for testing SLATEC subprograms
  26738. C        DSPLP    DBOCLS
  26739. C
  26740. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26741. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26742. C                 tical Library, April 10, 1990.
  26743. C***ROUTINES CALLED  DBOCQX, DPLPQX, I1MACH, XERMAX, XSETF, XSETUN
  26744. C***REVISION HISTORY  (YYMMDD)
  26745. C   890618  DATE WRITTEN
  26746. C   890618  REVISION DATE from Version 3.2
  26747. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26748. C   900524  Cosmetic changes to code.  (WRB)
  26749. C***END PROLOGUE  TEST26
  26750.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26751. C***FIRST EXECUTABLE STATEMENT  TEST26
  26752.       LUN = I1MACH(2)
  26753.       LIN = I1MACH(1)
  26754.       NFAIL = 0
  26755. C
  26756. C     Read KPRINT parameter
  26757. C
  26758.       READ (LIN, '(I1)') KPRINT
  26759.       CALL XERMAX(1000)
  26760.       CALL XSETUN(LUN)
  26761.       IF (KPRINT .LE. 1) THEN
  26762.          CALL XSETF(0)
  26763.       ELSE
  26764.          CALL XSETF(1)
  26765.       ENDIF
  26766. C
  26767. C     Test DSPLP package
  26768. C
  26769.       CALL DPLPQX(LUN,KPRINT,IPASS)
  26770.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26771. C
  26772. C     Test DBOCLS package
  26773. C
  26774.       CALL DBOCQX(LUN,KPRINT,IPASS)
  26775.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26776. C
  26777. C     Write PASS or FAIL message
  26778. C
  26779.       IF (NFAIL .EQ. 0) THEN
  26780.          WRITE (LUN, 9000)
  26781.       ELSE
  26782.          WRITE (LUN, 9010) NFAIL
  26783.       ENDIF
  26784.       STOP
  26785.  9000 FORMAT (/' --------------TEST26 PASSED ALL TESTS----------------')
  26786.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26787.      1        ' TEST(S) FAILED IN PROGRAM TEST26 *************')
  26788.       END
  26789. *DECK TEST27
  26790.       PROGRAM TEST27
  26791. C***BEGIN PROLOGUE  TEST27
  26792. C***PURPOSE  Driver for testing SLATEC subprograms
  26793. C***LIBRARY   SLATEC
  26794. C***CATEGORY  H2
  26795. C***KEYWORDS  QUICK CHECK DRIVER
  26796. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26797. C***DESCRIPTION
  26798. C
  26799. C *Usage:
  26800. C     One input data record is required
  26801. C         READ (LIN, '(I1)') KPRINT
  26802. C
  26803. C *Arguments:
  26804. C     KPRINT = 0  Quick checks - No printing.
  26805. C                 Driver       - Short pass or fail message printed.
  26806. C              1  Quick checks - No message printed for passed tests,
  26807. C                                short message printed for failed tests.
  26808. C                 Driver       - Short pass or fail message printed.
  26809. C              2  Quick checks - Print short message for passed tests,
  26810. C                                fuller information for failed tests.
  26811. C                 Driver       - Pass or fail message printed.
  26812. C              3  Quick checks - Print complete quick check results.
  26813. C                 Driver       - Pass or fail message printed.
  26814. C
  26815. C *Description:
  26816. C     Driver for testing SLATEC subprograms
  26817. C        QAG      QAGI     QAGP     QAGS     QAWC
  26818. C        QAWF     QAWO     QAWS     QNG
  26819. C
  26820. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26821. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26822. C                 tical Library, April 10, 1990.
  26823. C***ROUTINES CALLED  CQAG, CQAGI, CQAGP, CQAGS, CQAWC, CQAWF, CQAWO,
  26824. C                    CQAWS, CQNG, I1MACH, XERMAX, XSETF, XSETUN
  26825. C***REVISION HISTORY  (YYMMDD)
  26826. C   890618  DATE WRITTEN
  26827. C   890618  REVISION DATE from Version 3.2
  26828. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26829. C   900524  Cosmetic changes to code.  (WRB)
  26830. C***END PROLOGUE  TEST27
  26831.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26832. C***FIRST EXECUTABLE STATEMENT  TEST27
  26833.       LUN = I1MACH(2)
  26834.       LIN = I1MACH(1)
  26835.       NFAIL = 0
  26836. C
  26837. C     Read KPRINT parameter
  26838. C
  26839.       READ (LIN, '(I1)') KPRINT
  26840.       CALL XERMAX(1000)
  26841.       CALL XSETUN(LUN)
  26842.       IF (KPRINT .LE. 1) THEN
  26843.          CALL XSETF(0)
  26844.       ELSE
  26845.          CALL XSETF(1)
  26846.       ENDIF
  26847. C
  26848. C     Test single precision QUADPACK routines
  26849. C
  26850. C     Test QAG.
  26851. C
  26852.       CALL CQAG (LUN, KPRINT, IPASS)
  26853.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26854. C
  26855. C     Test QAGS.
  26856. C
  26857.       CALL CQAGS (LUN, KPRINT, IPASS)
  26858.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26859. C
  26860. C     Test QAGP.
  26861. C
  26862.       CALL CQAGP (LUN, KPRINT, IPASS)
  26863.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26864. C
  26865. C     Test QAGI.
  26866. C
  26867.       CALL CQAGI (LUN, KPRINT, IPASS)
  26868.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26869. C
  26870. C     Test QAWO.
  26871. C
  26872.       CALL CQAWO (LUN, KPRINT, IPASS)
  26873.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26874. C
  26875. C     Test QAWF.
  26876. C
  26877.       CALL CQAWF (LUN, KPRINT, IPASS)
  26878.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26879. C
  26880. C     Test QAWS.
  26881. C
  26882.       CALL CQAWS (LUN, KPRINT, IPASS)
  26883.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26884. C
  26885. C     Test QAWC.
  26886. C
  26887.       CALL CQAWC (LUN, KPRINT, IPASS)
  26888.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26889. C
  26890. C     Test QNG.
  26891. C
  26892.       CALL CQNG (LUN, KPRINT, IPASS)
  26893.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26894. C
  26895. C     Write PASS or FAIL message
  26896. C
  26897.       IF (NFAIL .EQ. 0) THEN
  26898.          WRITE (LUN, 9000)
  26899.       ELSE
  26900.          WRITE (LUN, 9010) NFAIL
  26901.       ENDIF
  26902.       STOP
  26903.  9000 FORMAT (/' --------------TEST27 PASSED ALL TESTS----------------')
  26904.  9010 FORMAT (/' ************* WARNING -- ', I5,
  26905.      1        ' TEST(S) FAILED IN PROGRAM TEST27 *************')
  26906.       END
  26907. *DECK TEST28
  26908.       PROGRAM TEST28
  26909. C***BEGIN PROLOGUE  TEST28
  26910. C***PURPOSE  Driver for testing SLATEC subprograms
  26911. C***LIBRARY   SLATEC
  26912. C***CATEGORY  H2
  26913. C***KEYWORDS  QUICK CHECK DRIVER
  26914. C***AUTHOR  SLATEC Common Mathematical Library Committee
  26915. C***DESCRIPTION
  26916. C
  26917. C *Usage:
  26918. C     One input data record is required
  26919. C         READ (LIN, '(I1)') KPRINT
  26920. C
  26921. C *Arguments:
  26922. C     KPRINT = 0  Quick checks - No printing.
  26923. C                 Driver       - Short pass or fail message printed.
  26924. C              1  Quick checks - No message printed for passed tests,
  26925. C                                short message printed for failed tests.
  26926. C                 Driver       - Short pass or fail message printed.
  26927. C              2  Quick checks - Print short message for passed tests,
  26928. C                                fuller information for failed tests.
  26929. C                 Driver       - Pass or fail message printed.
  26930. C              3  Quick checks - Print complete quick check results.
  26931. C                 Driver       - Pass or fail message printed.
  26932. C
  26933. C *Description:
  26934. C     Driver for testing SLATEC subprograms
  26935. C        DQAG     DQAGI    DQAGP    DQAGS    DQAWC
  26936. C        DQAWF    DQAWO    DQAWS    DQNG
  26937. C
  26938. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  26939. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  26940. C                 tical Library, April 10, 1990.
  26941. C***ROUTINES CALLED  CDQAG, CDQAGI, CDQAGP, CDQAGS, CDQAWC, CDQAWF,
  26942. C                    CDQAWO, CDQAWS, CDQNG, I1MACH, XERMAX, XSETF,
  26943. C                    XSETUN
  26944. C***REVISION HISTORY  (YYMMDD)
  26945. C   890618  DATE WRITTEN
  26946. C   890618  REVISION DATE from Version 3.2
  26947. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  26948. C   900524  Cosmetic changes to code.  (WRB)
  26949. C***END PROLOGUE  TEST28
  26950.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  26951. C***FIRST EXECUTABLE STATEMENT  TEST28
  26952.       LUN = I1MACH(2)
  26953.       LIN = I1MACH(1)
  26954.       NFAIL = 0
  26955. C
  26956. C     Read KPRINT parameter
  26957. C
  26958.       READ (LIN, '(I1)') KPRINT
  26959.       CALL XERMAX(1000)
  26960.       CALL XSETUN(LUN)
  26961.       IF (KPRINT .LE. 1) THEN
  26962.          CALL XSETF(0)
  26963.       ELSE
  26964.          CALL XSETF(1)
  26965.       ENDIF
  26966. C
  26967. C     Test double precision QUADPACK routines
  26968. C
  26969. C     Test DQAG.
  26970. C
  26971.       CALL CDQAG (LUN, KPRINT, IPASS)
  26972.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26973. C
  26974. C     Test DQAGS.
  26975. C
  26976.       CALL CDQAGS (LUN, KPRINT, IPASS)
  26977.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26978. C
  26979. C     Test DQAGP.
  26980. C
  26981.       CALL CDQAGP (LUN, KPRINT, IPASS)
  26982.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26983. C
  26984. C     Test DQAGI.
  26985. C
  26986.       CALL CDQAGI (LUN, KPRINT, IPASS)
  26987.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26988. C
  26989. C     Test DQAWO.
  26990. C
  26991.       CALL CDQAWO (LUN, KPRINT, IPASS)
  26992.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26993. C
  26994. C     Test DQAWF.
  26995. C
  26996.       CALL CDQAWF (LUN, KPRINT, IPASS)
  26997.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  26998. C
  26999. C     Test DQAWS.
  27000. C
  27001.       CALL CDQAWS (LUN, KPRINT, IPASS)
  27002.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27003. C
  27004. C     Test DQAWC.
  27005. C
  27006.       CALL CDQAWC (LUN, KPRINT, IPASS)
  27007.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27008. C
  27009. C     Test DQNG.
  27010. C
  27011.       CALL CDQNG (LUN, KPRINT, IPASS)
  27012.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27013. C
  27014. C     Write PASS or FAIL message
  27015. C
  27016.       IF (NFAIL .EQ. 0) THEN
  27017.          WRITE (LUN, 9000)
  27018.       ELSE
  27019.          WRITE (LUN, 9010) NFAIL
  27020.       ENDIF
  27021.       STOP
  27022.  9000 FORMAT (/' --------------TEST28 PASSED ALL TESTS----------------')
  27023.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27024.      1        ' TEST(S) FAILED IN PROGRAM TEST28 *************')
  27025.       END
  27026. *DECK TEST29
  27027.       PROGRAM TEST29
  27028. C***BEGIN PROLOGUE  TEST29
  27029. C***PURPOSE  Driver for testing SLATEC subprograms
  27030. C***LIBRARY   SLATEC
  27031. C***CATEGORY  H2
  27032. C***KEYWORDS  QUICK CHECK DRIVER
  27033. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27034. C***DESCRIPTION
  27035. C
  27036. C *Usage:
  27037. C     One input data record is required
  27038. C         READ (LIN, '(I1)') KPRINT
  27039. C
  27040. C *Arguments:
  27041. C     KPRINT = 0  Quick checks - No printing.
  27042. C                 Driver       - Short pass or fail message printed.
  27043. C              1  Quick checks - No message printed for passed tests,
  27044. C                                short message printed for failed tests.
  27045. C                 Driver       - Short pass or fail message printed.
  27046. C              2  Quick checks - Print short message for passed tests,
  27047. C                                fuller information for failed tests.
  27048. C                 Driver       - Pass or fail message printed.
  27049. C              3  Quick checks - Print complete quick check results.
  27050. C                 Driver       - Pass or fail message printed.
  27051. C
  27052. C *Description:
  27053. C     Driver for testing SLATEC subprograms
  27054. C        AVINT    GAUS8    QNC79
  27055. C
  27056. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27057. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27058. C                 tical Library, April 10, 1990.
  27059. C***ROUTINES CALLED  AVNTST, I1MACH, QG8TST, QN79QX, XERMAX, XSETF,
  27060. C                    XSETUN
  27061. C***REVISION HISTORY  (YYMMDD)
  27062. C   890618  DATE WRITTEN
  27063. C   890618  REVISION DATE from Version 3.2
  27064. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27065. C   900524  Cosmetic changes to code.  (WRB)
  27066. C***END PROLOGUE  TEST29
  27067.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27068. C***FIRST EXECUTABLE STATEMENT  TEST29
  27069.       LUN = I1MACH(2)
  27070.       LIN = I1MACH(1)
  27071.       NFAIL = 0
  27072. C
  27073. C     Read KPRINT parameter
  27074. C
  27075.       READ (LIN, '(I1)') KPRINT
  27076.       CALL XERMAX(1000)
  27077.       CALL XSETUN(LUN)
  27078.       IF (KPRINT .LE. 1) THEN
  27079.          CALL XSETF(0)
  27080.       ELSE
  27081.          CALL XSETF(1)
  27082.       ENDIF
  27083. C
  27084. C     Test AVINT
  27085. C
  27086.       CALL AVNTST(LUN,KPRINT,IPASS)
  27087.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27088. C
  27089. C     Test GAUS8
  27090. C
  27091.       CALL QG8TST(LUN,KPRINT,IPASS)
  27092.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27093. C
  27094. C     Test QNC79
  27095. C
  27096.       CALL QN79QX(LUN,KPRINT,IPASS)
  27097.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27098. C
  27099. C     Write PASS or FAIL message
  27100. C
  27101.       IF (NFAIL .EQ. 0) THEN
  27102.          WRITE (LUN, 9000)
  27103.       ELSE
  27104.          WRITE (LUN, 9010) NFAIL
  27105.       ENDIF
  27106.       STOP
  27107.  9000 FORMAT (/' --------------TEST29 PASSED ALL TESTS----------------')
  27108.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27109.      1        ' TEST(S) FAILED IN PROGRAM TEST29 *************')
  27110.       END
  27111. *DECK TEST3
  27112.       PROGRAM TEST3
  27113. C***BEGIN PROLOGUE  TEST3
  27114. C***PURPOSE  Driver for testing SLATEC subprograms
  27115. C***LIBRARY   SLATEC
  27116. C***CATEGORY  C
  27117. C***KEYWORDS  QUICK CHECK DRIVER
  27118. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27119. C***DESCRIPTION
  27120. C
  27121. C *Usage:
  27122. C     One input data record is required
  27123. C         READ (LIN, '(I1)') KPRINT
  27124. C
  27125. C *Arguments:
  27126. C     KPRINT = 0  Quick checks - No printing.
  27127. C                 Driver       - Short pass or fail message printed.
  27128. C              1  Quick checks - No message printed for passed tests,
  27129. C                                short message printed for failed tests.
  27130. C                 Driver       - Short pass or fail message printed.
  27131. C              2  Quick checks - Print short message for passed tests,
  27132. C                                fuller information for failed tests.
  27133. C                 Driver       - Pass or fail message printed.
  27134. C              3  Quick checks - Print complete quick check results.
  27135. C                 Driver       - Pass or fail message printed.
  27136. C
  27137. C *Description:
  27138. C     Driver for testing SLATEC subprograms
  27139. C        complex Fullerton routines
  27140. C
  27141. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27142. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27143. C                 tical Library, April 10, 1990.
  27144. C***ROUTINES CALLED  CFNCK, I1MACH, XERMAX, XSETF, XSETUN
  27145. C***REVISION HISTORY  (YYMMDD)
  27146. C   890618  DATE WRITTEN
  27147. C   890618  REVISION DATE from Version 3.2
  27148. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27149. C   900524  Cosmetic changes to code.  (WRB)
  27150. C***END PROLOGUE  TEST3
  27151.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27152. C***FIRST EXECUTABLE STATEMENT  TEST3
  27153.       LUN = I1MACH(2)
  27154.       LIN = I1MACH(1)
  27155.       NFAIL = 0
  27156. C
  27157. C     Read KPRINT parameter
  27158. C
  27159.       READ (LIN, '(I1)') KPRINT
  27160.       CALL XERMAX(1000)
  27161.       CALL XSETUN(LUN)
  27162.       IF (KPRINT .LE. 1) THEN
  27163.          CALL XSETF(0)
  27164.       ELSE
  27165.          CALL XSETF(1)
  27166.       ENDIF
  27167. C
  27168. C     Test complex Fullerton routines
  27169. C
  27170.       CALL CFNCK(LUN,KPRINT,IPASS)
  27171.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27172. C
  27173. C     Write PASS or FAIL message
  27174. C
  27175.       IF (NFAIL .EQ. 0) THEN
  27176.          WRITE (LUN, 9000)
  27177.       ELSE
  27178.          WRITE (LUN, 9010) NFAIL
  27179.       ENDIF
  27180.       STOP
  27181.  9000 FORMAT (/' --------------TEST3  PASSED ALL TESTS----------------')
  27182.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27183.      1        ' TEST(S) FAILED IN PROGRAM TEST3  *************')
  27184.       END
  27185. *DECK TEST30
  27186.       PROGRAM TEST30
  27187. C***BEGIN PROLOGUE  TEST30
  27188. C***PURPOSE  Driver for testing SLATEC subprograms
  27189. C***LIBRARY   SLATEC
  27190. C***CATEGORY  H2
  27191. C***KEYWORDS  QUICK CHECK DRIVER
  27192. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27193. C***DESCRIPTION
  27194. C
  27195. C *Usage:
  27196. C     One input data record is required
  27197. C         READ (LIN, '(I1)') KPRINT
  27198. C
  27199. C *Arguments:
  27200. C     KPRINT = 0  Quick checks - No printing.
  27201. C                 Driver       - Short pass or fail message printed.
  27202. C              1  Quick checks - No message printed for passed tests,
  27203. C                                short message printed for failed tests.
  27204. C                 Driver       - Short pass or fail message printed.
  27205. C              2  Quick checks - Print short message for passed tests,
  27206. C                                fuller information for failed tests.
  27207. C                 Driver       - Pass or fail message printed.
  27208. C              3  Quick checks - Print complete quick check results.
  27209. C                 Driver       - Pass or fail message printed.
  27210. C
  27211. C *Description:
  27212. C     Driver for testing SLATEC subprograms
  27213. C        DAVINT   DGAUS8   DQNC79
  27214. C
  27215. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27216. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27217. C                 tical Library, April 10, 1990.
  27218. C***ROUTINES CALLED  DAVNTS, DQG8TS, DQN79Q, I1MACH, XERMAX, XSETF,
  27219. C                    XSETUN
  27220. C***REVISION HISTORY  (YYMMDD)
  27221. C   890618  DATE WRITTEN
  27222. C   890618  REVISION DATE from Version 3.2
  27223. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27224. C   900524  Cosmetic changes to code.  (WRB)
  27225. C***END PROLOGUE  TEST30
  27226.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27227. C***FIRST EXECUTABLE STATEMENT  TEST30
  27228.       LUN = I1MACH(2)
  27229.       LIN = I1MACH(1)
  27230.       NFAIL = 0
  27231. C
  27232. C     Read KPRINT parameter
  27233. C
  27234.       READ (LIN, '(I1)') KPRINT
  27235.       CALL XERMAX(1000)
  27236.       CALL XSETUN(LUN)
  27237.       IF (KPRINT .LE. 1) THEN
  27238.          CALL XSETF(0)
  27239.       ELSE
  27240.          CALL XSETF(1)
  27241.       ENDIF
  27242. C
  27243. C     Test DAVINT
  27244. C
  27245.       CALL DAVNTS(LUN,KPRINT,IPASS)
  27246.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27247. C
  27248. C     Test DGAUS8
  27249. C
  27250.       CALL DQG8TS(LUN,KPRINT,IPASS)
  27251.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27252. C
  27253. C     Test DQNC79
  27254. C
  27255.       CALL DQN79Q(LUN,KPRINT,IPASS)
  27256.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27257. C
  27258. C     Write PASS or FAIL message
  27259. C
  27260.       IF (NFAIL .EQ. 0) THEN
  27261.          WRITE (LUN, 9000)
  27262.       ELSE
  27263.          WRITE (LUN, 9010) NFAIL
  27264.       ENDIF
  27265.       STOP
  27266.  9000 FORMAT (/' --------------TEST30 PASSED ALL TESTS----------------')
  27267.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27268.      1        ' TEST(S) FAILED IN PROGRAM TEST30 *************')
  27269.       END
  27270. *DECK TEST31
  27271.       PROGRAM TEST31
  27272. C***BEGIN PROLOGUE  TEST31
  27273. C***PURPOSE  Driver for testing SLATEC subprograms
  27274. C***LIBRARY   SLATEC
  27275. C***CATEGORY  I1
  27276. C***TYPE      SINGLE PRECISION (TEST31-S, TEST32-D)
  27277. C***KEYWORDS  QUICK CHECK DRIVER
  27278. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27279. C***DESCRIPTION
  27280. C
  27281. C *Usage:
  27282. C     One input data record is required
  27283. C         READ (LIN, '(I1)') KPRINT
  27284. C
  27285. C *Arguments:
  27286. C     KPRINT = 0  Quick checks - No printing.
  27287. C                 Driver       - Short pass or fail message printed.
  27288. C              1  Quick checks - No message printed for passed tests,
  27289. C                                short message printed for failed tests.
  27290. C                 Driver       - Short pass or fail message printed.
  27291. C              2  Quick checks - Print short message for passed tests,
  27292. C                                fuller information for failed tests.
  27293. C                 Driver       - Pass or fail message printed.
  27294. C              3  Quick checks - Print complete quick check results.
  27295. C                 Driver       - Pass or fail message printed.
  27296. C
  27297. C *Description:
  27298. C     Driver for testing SLATEC subprograms
  27299. C        DEABM    DEBDF    DERKF    BVSUP
  27300. C
  27301. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27302. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27303. C                 tical Library, April 10, 1990.
  27304. C***ROUTINES CALLED  I1MACH, QXABM, QXBDF, QXBVSP, QXRKF, XERMAX, XSETF,
  27305. C                    XSETUN
  27306. C***REVISION HISTORY  (YYMMDD)
  27307. C   890618  DATE WRITTEN
  27308. C   890618  REVISION DATE from Version 3.2
  27309. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27310. C   900524  Cosmetic changes to code.  (WRB)
  27311. C***END PROLOGUE  TEST31
  27312.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27313. C***FIRST EXECUTABLE STATEMENT  TEST31
  27314.       LUN = I1MACH(2)
  27315.       LIN = I1MACH(1)
  27316.       NFAIL = 0
  27317. C
  27318. C     Read KPRINT parameter
  27319. C
  27320.       READ (LIN, '(I1)') KPRINT
  27321.       CALL XERMAX(1000)
  27322.       CALL XSETUN(LUN)
  27323.       IF (KPRINT .LE. 1) THEN
  27324.          CALL XSETF(0)
  27325.       ELSE
  27326.          CALL XSETF(1)
  27327.       ENDIF
  27328. C
  27329. C     Test DEABM
  27330. C
  27331.       CALL QXABM(LUN,KPRINT,IPASS)
  27332.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27333. C
  27334. C     Test DEBDF
  27335. C
  27336.       CALL QXBDF(LUN,KPRINT,IPASS)
  27337.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27338. C
  27339. C     Test DERKF
  27340. C
  27341.       CALL QXRKF(LUN,KPRINT,IPASS)
  27342.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27343. C
  27344. C     Test BVSUP
  27345. C
  27346.       CALL QXBVSP(LUN,KPRINT,IPASS)
  27347.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27348. C
  27349. C     Write PASS or FAIL message
  27350. C
  27351.       IF (NFAIL .EQ. 0) THEN
  27352.          WRITE (LUN, 9000)
  27353.       ELSE
  27354.          WRITE (LUN, 9010) NFAIL
  27355.       ENDIF
  27356.       STOP
  27357.  9000 FORMAT (/' --------------TEST31 PASSED ALL TESTS----------------')
  27358.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27359.      1        ' TEST(S) FAILED IN PROGRAM TEST31 *************')
  27360.       END
  27361. *DECK TEST32
  27362.       PROGRAM TEST32
  27363. C***BEGIN PROLOGUE  TEST32
  27364. C***PURPOSE  Driver for testing SLATEC subprograms
  27365. C***LIBRARY   SLATEC
  27366. C***CATEGORY  I1
  27367. C***TYPE      DOUBLE PRECISION (TEST31-S, TEST32-D)
  27368. C***KEYWORDS  QUICK CHECK DRIVER
  27369. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27370. C***DESCRIPTION
  27371. C
  27372. C *Usage:
  27373. C     One input data record is required
  27374. C         READ (LIN, '(I1)') KPRINT
  27375. C
  27376. C *Arguments:
  27377. C     KPRINT = 0  Quick checks - No printing.
  27378. C                 Driver       - Short pass or fail message printed.
  27379. C              1  Quick checks - No message printed for passed tests,
  27380. C                                short message printed for failed tests.
  27381. C                 Driver       - Short pass or fail message printed.
  27382. C              2  Quick checks - Print short message for passed tests,
  27383. C                                fuller information for failed tests.
  27384. C                 Driver       - Pass or fail message printed.
  27385. C              3  Quick checks - Print complete quick check results.
  27386. C                 Driver       - Pass or fail message printed.
  27387. C
  27388. C *Description:
  27389. C     Driver for testing SLATEC subprograms
  27390. C        DDEABM   DDEBDF   DDERKF   DBVSUP
  27391. C
  27392. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27393. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27394. C                 tical Library, April 10, 1990.
  27395. C***ROUTINES CALLED  I1MACH, QXDABM, QXDBDF, QXDBVS, QXDRKF, XERMAX,
  27396. C                    XSETF, XSETUN
  27397. C***REVISION HISTORY  (YYMMDD)
  27398. C   890618  DATE WRITTEN
  27399. C   890618  REVISION DATE from Version 3.2
  27400. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27401. C   900524  Cosmetic changes to code.  (WRB)
  27402. C***END PROLOGUE  TEST32
  27403.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27404. C***FIRST EXECUTABLE STATEMENT  TEST32
  27405.       LUN = I1MACH(2)
  27406.       LIN = I1MACH(1)
  27407.       NFAIL = 0
  27408. C
  27409. C     Read KPRINT parameter
  27410. C
  27411.       READ (LIN, '(I1)') KPRINT
  27412.       CALL XERMAX(1000)
  27413.       CALL XSETUN(LUN)
  27414.       IF (KPRINT .LE. 1) THEN
  27415.          CALL XSETF(0)
  27416.       ELSE
  27417.          CALL XSETF(1)
  27418.       ENDIF
  27419. C
  27420. C     Test DDEABM
  27421. C
  27422.       CALL QXDABM(LUN,KPRINT,IPASS)
  27423.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27424. C
  27425. C     Test DDEBDF
  27426. C
  27427.       CALL QXDBDF(LUN,KPRINT,IPASS)
  27428.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27429. C
  27430. C     Test DDERKF
  27431. C
  27432.       CALL QXDRKF(LUN,KPRINT,IPASS)
  27433.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27434. C
  27435. C     Test DBVSUP
  27436. C
  27437.       CALL QXDBVS(LUN,KPRINT,IPASS)
  27438.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27439. C
  27440. C     Write PASS or FAIL message
  27441. C
  27442.       IF (NFAIL .EQ. 0) THEN
  27443.          WRITE (LUN, 9000)
  27444.       ELSE
  27445.          WRITE (LUN, 9010) NFAIL
  27446.       ENDIF
  27447.       STOP
  27448.  9000 FORMAT (/' --------------TEST32 PASSED ALL TESTS----------------')
  27449.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27450.      1        ' TEST(S) FAILED IN PROGRAM TEST32 *************')
  27451.       END
  27452. *DECK TEST33
  27453.       PROGRAM TEST33
  27454. C***BEGIN PROLOGUE  TEST33
  27455. C***PURPOSE  Driver for testing SLATEC subprograms
  27456. C***LIBRARY   SLATEC
  27457. C***CATEGORY  I2
  27458. C***KEYWORDS  QUICK CHECK DRIVER
  27459. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27460. C***DESCRIPTION
  27461. C
  27462. C *Usage:
  27463. C     One input data record is required
  27464. C         READ (LIN, '(I1)') KPRINT
  27465. C
  27466. C *Arguments:
  27467. C     KPRINT = 0  Quick checks - No printing.
  27468. C                 Driver       - Short pass or fail message printed.
  27469. C              1  Quick checks - No message printed for passed tests,
  27470. C                                short message printed for failed tests.
  27471. C                 Driver       - Short pass or fail message printed.
  27472. C              2  Quick checks - Print short message for passed tests,
  27473. C                                fuller information for failed tests.
  27474. C                 Driver       - Pass or fail message printed.
  27475. C              3  Quick checks - Print complete quick check results.
  27476. C                 Driver       - Pass or fail message printed.
  27477. C
  27478. C *Description:
  27479. C     Driver for testing SLATEC subprograms
  27480. C        HWSCRT
  27481. C        HWSPLR
  27482. C        HWSCYL
  27483. C        HWSSSP
  27484. C        HWSCSP
  27485. C        GENBUN
  27486. C        BLKTRI
  27487. C
  27488. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27489. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27490. C                 tical Library, April 10, 1990.
  27491. C***ROUTINES CALLED  I1MACH, QXBLKT, QXCRT, QXCSP, QXCYL, QXGBUN, QXPLR,
  27492. C                    QXSSP, XERMAX, XSETF, XSETUN
  27493. C***REVISION HISTORY  (YYMMDD)
  27494. C   890618  DATE WRITTEN
  27495. C   890618  REVISION DATE from Version 3.2
  27496. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27497. C   900524  Cosmetic changes to code.  (WRB)
  27498. C***END PROLOGUE  TEST33
  27499.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27500. C***FIRST EXECUTABLE STATEMENT  TEST33
  27501.       LUN = I1MACH(2)
  27502.       LIN = I1MACH(1)
  27503.       NFAIL = 0
  27504. C
  27505. C     Read KPRINT parameter
  27506. C
  27507.       READ (LIN, '(I1)') KPRINT
  27508.       CALL XERMAX(1000)
  27509.       CALL XSETUN(LUN)
  27510.       IF (KPRINT .LE. 1) THEN
  27511.          CALL XSETF(0)
  27512.       ELSE
  27513.          CALL XSETF(1)
  27514.       ENDIF
  27515. C
  27516. C     Test HWSCRT
  27517. C
  27518.       CALL QXCRT(LUN,KPRINT,IPASS)
  27519.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27520. C
  27521. C     Test HWSPLR
  27522. C
  27523.       CALL QXPLR(LUN,KPRINT,IPASS)
  27524.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27525. C
  27526. C     Test HWSCYL
  27527. C
  27528.       CALL QXCYL(LUN,KPRINT,IPASS)
  27529.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27530. C
  27531. C     Test HWSSSP
  27532. C
  27533.       CALL QXSSP(LUN,KPRINT,IPASS)
  27534.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27535. C
  27536. C     Test HWSCSP
  27537. C
  27538.       CALL QXCSP(LUN,KPRINT,IPASS)
  27539.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27540. C
  27541. C     Test GENBUN
  27542. C
  27543.       CALL QXGBUN(LUN,KPRINT,IPASS)
  27544.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27545. C
  27546. C     Test BLKTRI
  27547. C
  27548.       CALL QXBLKT(LUN,KPRINT,IPASS)
  27549.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27550. C
  27551. C     Write PASS or FAIL message
  27552. C
  27553.       IF (NFAIL .EQ. 0) THEN
  27554.          WRITE (LUN, 9000)
  27555.       ELSE
  27556.          WRITE (LUN, 9010) NFAIL
  27557.       ENDIF
  27558.       STOP
  27559.  9000 FORMAT (/' --------------TEST33 PASSED ALL TESTS----------------')
  27560.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27561.      1        ' TEST(S) FAILED IN PROGRAM TEST33 *************')
  27562.       END
  27563. *DECK TEST34
  27564.       PROGRAM TEST34
  27565. C***BEGIN PROLOGUE  TEST34
  27566. C***PURPOSE  Driver for testing SLATEC subprograms
  27567. C***LIBRARY   SLATEC
  27568. C***CATEGORY  J1
  27569. C***KEYWORDS  QUICK CHECK DRIVER
  27570. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27571. C***DESCRIPTION
  27572. C
  27573. C *Usage:
  27574. C     One input data record is required
  27575. C         READ (LIN, '(I1)') KPRINT
  27576. C
  27577. C *Arguments:
  27578. C     KPRINT = 0  Quick checks - No printing.
  27579. C                 Driver       - Short pass or fail message printed.
  27580. C              1  Quick checks - No message printed for passed tests,
  27581. C                                short message printed for failed tests.
  27582. C                 Driver       - Short pass or fail message printed.
  27583. C              2  Quick checks - Print short message for passed tests,
  27584. C                                fuller information for failed tests.
  27585. C                 Driver       - Pass or fail message printed.
  27586. C              3  Quick checks - Print complete quick check results.
  27587. C                 Driver       - Pass or fail message printed.
  27588. C
  27589. C *Description:
  27590. C     Driver for testing SLATEC subprograms
  27591. C        COSQB    COSQF    COSQI    COST     COSTI    EZFFTB
  27592. C        EZFFTF   RFFTB    RFFTF    RFFTI    SINQB    SINQF
  27593. C        SINQI    SINT     SINTI
  27594. C
  27595. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27596. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27597. C                 tical Library, April 10, 1990.
  27598. C***ROUTINES CALLED  FFTQX, I1MACH, XERMAX, XSETF, XSETUN
  27599. C***REVISION HISTORY  (YYMMDD)
  27600. C   890618  DATE WRITTEN
  27601. C   890618  REVISION DATE from Version 3.2
  27602. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27603. C   900524  Cosmetic changes to code.  (WRB)
  27604. C***END PROLOGUE  TEST34
  27605.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27606. C***FIRST EXECUTABLE STATEMENT  TEST34
  27607.       LUN = I1MACH(2)
  27608.       LIN = I1MACH(1)
  27609.       NFAIL = 0
  27610. C
  27611. C     Read KPRINT parameter
  27612. C
  27613.       READ (LIN, '(I1)') KPRINT
  27614.       CALL XERMAX(1000)
  27615.       CALL XSETUN(LUN)
  27616.       IF (KPRINT .LE. 1) THEN
  27617.          CALL XSETF(0)
  27618.       ELSE
  27619.          CALL XSETF(1)
  27620.       ENDIF
  27621. C
  27622. C     Test FFT package
  27623. C
  27624.       CALL FFTQX(LUN,KPRINT,IPASS)
  27625.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27626. C
  27627. C     Write PASS or FAIL message
  27628. C
  27629.       IF (NFAIL .EQ. 0) THEN
  27630.          WRITE (LUN, 9000)
  27631.       ELSE
  27632.          WRITE (LUN, 9010) NFAIL
  27633.       ENDIF
  27634.       STOP
  27635.  9000 FORMAT (/' --------------TEST34 PASSED ALL TESTS----------------')
  27636.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27637.      1        ' TEST(S) FAILED IN PROGRAM TEST34 *************')
  27638.       END
  27639. *DECK TEST35
  27640.       PROGRAM TEST35
  27641. C***BEGIN PROLOGUE  TEST35
  27642. C***PURPOSE  Driver for testing SLATEC subprograms
  27643. C***LIBRARY   SLATEC
  27644. C***CATEGORY  K1, E3, K6, L
  27645. C***KEYWORDS  QUICK CHECK DRIVER
  27646. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27647. C***DESCRIPTION
  27648. C
  27649. C *Usage:
  27650. C     One input data record is required
  27651. C         READ (LIN, '(I1)') KPRINT
  27652. C
  27653. C *Arguments:
  27654. C     KPRINT = 0  Quick checks - No printing.
  27655. C                 Driver       - Short pass or fail message printed.
  27656. C              1  Quick checks - No message printed for passed tests,
  27657. C                                short message printed for failed tests.
  27658. C                 Driver       - Short pass or fail message printed.
  27659. C              2  Quick checks - Print short message for passed tests,
  27660. C                                fuller information for failed tests.
  27661. C                 Driver       - Pass or fail message printed.
  27662. C              3  Quick checks - Print complete quick check results.
  27663. C                 Driver       - Pass or fail message printed.
  27664. C
  27665. C *Description:
  27666. C     Driver for testing SLATEC subprograms
  27667. C        SNLS1E   SNLS1    SCOV
  27668. C        BVALU    CV       FC
  27669. C        POLFIT   PCOEF    PVALUE
  27670. C
  27671. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27672. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27673. C                 tical Library, April 10, 1990.
  27674. C***ROUTINES CALLED  FCQX, I1MACH, PFITQX, SNLS1Q, XERMAX, XSETF, XSETUN
  27675. C***REVISION HISTORY  (YYMMDD)
  27676. C   890618  DATE WRITTEN
  27677. C   890618  REVISION DATE from Version 3.2
  27678. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27679. C   900524  Cosmetic changes to code.  (WRB)
  27680. C***END PROLOGUE  TEST35
  27681.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27682. C***FIRST EXECUTABLE STATEMENT  TEST35
  27683.       LUN = I1MACH(2)
  27684.       LIN = I1MACH(1)
  27685.       NFAIL = 0
  27686. C
  27687. C     Read KPRINT parameter
  27688. C
  27689.       READ (LIN, '(I1)') KPRINT
  27690.       CALL XERMAX(1000)
  27691.       CALL XSETUN(LUN)
  27692.       IF (KPRINT .LE. 1) THEN
  27693.          CALL XSETF(0)
  27694.       ELSE
  27695.          CALL XSETF(1)
  27696.       ENDIF
  27697. C
  27698. C     Test SNLS1E and SNLS1
  27699. C
  27700.       CALL SNLS1Q(LUN,KPRINT,IPASS)
  27701.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27702. C
  27703. C     Test FC (also BVALU and CV)
  27704. C
  27705.       CALL FCQX(LUN,KPRINT,IPASS)
  27706.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27707. C
  27708. C     Test POLFIT (also PCOEF and PVALUE)
  27709. C
  27710.       CALL PFITQX(LUN,KPRINT,IPASS)
  27711.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27712. C
  27713. C     Write PASS or FAIL message
  27714. C
  27715.       IF (NFAIL .EQ. 0) THEN
  27716.          WRITE (LUN, 9000)
  27717.       ELSE
  27718.          WRITE (LUN, 9010) NFAIL
  27719.       ENDIF
  27720.       STOP
  27721.  9000 FORMAT (/' --------------TEST35 PASSED ALL TESTS----------------')
  27722.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27723.      1        ' TEST(S) FAILED IN PROGRAM TEST35 *************')
  27724.       END
  27725. *DECK TEST36
  27726.       PROGRAM TEST36
  27727. C***BEGIN PROLOGUE  TEST36
  27728. C***PURPOSE  Driver for testing SLATEC subprograms
  27729. C***LIBRARY   SLATEC
  27730. C***CATEGORY  K1, E3, K6, L
  27731. C***KEYWORDS  QUICK CHECK DRIVER
  27732. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27733. C***DESCRIPTION
  27734. C
  27735. C *Usage:
  27736. C     One input data record is required
  27737. C         READ (LIN, '(I1)') KPRINT
  27738. C
  27739. C *Arguments:
  27740. C     KPRINT = 0  Quick checks - No printing.
  27741. C                 Driver       - Short pass or fail message printed.
  27742. C              1  Quick checks - No message printed for passed tests,
  27743. C                                short message printed for failed tests.
  27744. C                 Driver       - Short pass or fail message printed.
  27745. C              2  Quick checks - Print short message for passed tests,
  27746. C                                fuller information for failed tests.
  27747. C                 Driver       - Pass or fail message printed.
  27748. C              3  Quick checks - Print complete quick check results.
  27749. C                 Driver       - Pass or fail message printed.
  27750. C
  27751. C *Description:
  27752. C     Driver for testing SLATEC subprograms
  27753. C        DNLS1E   DNLS1    DCOV
  27754. C        DBVALU   DCV      DFC
  27755. C        DPOLFT   DPCOEF   DP1VLU
  27756. C
  27757. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27758. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27759. C                 tical Library, April 10, 1990.
  27760. C***ROUTINES CALLED  DFCQX, DNLS1Q, DPFITT, I1MACH, XERMAX, XSETF,
  27761. C                    XSETUN
  27762. C***REVISION HISTORY  (YYMMDD)
  27763. C   890618  DATE WRITTEN
  27764. C   890618  REVISION DATE from Version 3.2
  27765. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27766. C   900524  Cosmetic changes to code.  (WRB)
  27767. C***END PROLOGUE  TEST36
  27768.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27769. C***FIRST EXECUTABLE STATEMENT  TEST36
  27770.       LUN = I1MACH(2)
  27771.       LIN = I1MACH(1)
  27772.       NFAIL = 0
  27773. C
  27774. C     Read KPRINT parameter
  27775. C
  27776.       READ (LIN, '(I1)') KPRINT
  27777.       CALL XERMAX(1000)
  27778.       CALL XSETUN(LUN)
  27779.       IF (KPRINT .LE. 1) THEN
  27780.          CALL XSETF(0)
  27781.       ELSE
  27782.          CALL XSETF(1)
  27783.       ENDIF
  27784. C
  27785. C     Test DNLS1E and DNLS1
  27786. C
  27787.       CALL DNLS1Q(LUN,KPRINT,IPASS)
  27788.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27789. C
  27790. C     Test DFC (also DBVALU and DCV)
  27791. C
  27792.       CALL DFCQX(LUN,KPRINT,IPASS)
  27793.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27794. C
  27795. C     Test DPOLFT (also DPCOEF and DPLVlU)
  27796. C
  27797.       CALL DPFITT(LUN,KPRINT,IPASS)
  27798.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27799. C
  27800. C     Write PASS or FAIL message
  27801. C
  27802.       IF (NFAIL .EQ. 0) THEN
  27803.          WRITE (LUN, 9000)
  27804.       ELSE
  27805.          WRITE (LUN, 9010) NFAIL
  27806.       ENDIF
  27807.       STOP
  27808.  9000 FORMAT (/' --------------TEST36 PASSED ALL TESTS----------------')
  27809.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27810.      1        ' TEST(S) FAILED IN PROGRAM TEST36 *************')
  27811.       END
  27812. *DECK TEST37
  27813.       PROGRAM TEST37
  27814. C***BEGIN PROLOGUE  TEST37
  27815. C***PURPOSE  Driver for testing SLATEC subprograms
  27816. C***LIBRARY   SLATEC
  27817. C***CATEGORY  N6
  27818. C***KEYWORDS  QUICK CHECK DRIVER
  27819. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27820. C***DESCRIPTION
  27821. C
  27822. C *Usage:
  27823. C     One input data record is required
  27824. C         READ (LIN, '(I1)') KPRINT
  27825. C
  27826. C *Arguments:
  27827. C     KPRINT = 0  Quick checks - No printing.
  27828. C                 Driver       - Short pass or fail message printed.
  27829. C              1  Quick checks - No message printed for passed tests,
  27830. C                                short message printed for failed tests.
  27831. C                 Driver       - Short pass or fail message printed.
  27832. C              2  Quick checks - Print short message for passed tests,
  27833. C                                fuller information for failed tests.
  27834. C                 Driver       - Pass or fail message printed.
  27835. C              3  Quick checks - Print complete quick check results.
  27836. C                 Driver       - Pass or fail message printed.
  27837. C
  27838. C *Description:
  27839. C     Driver for testing SLATEC subprograms
  27840. C        ISORT    SSORT
  27841. C
  27842. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27843. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27844. C                 tical Library, April 10, 1990.
  27845. C***ROUTINES CALLED  I1MACH, SORTQX, XERMAX, XSETF, XSETUN
  27846. C***REVISION HISTORY  (YYMMDD)
  27847. C   890618  DATE WRITTEN
  27848. C   890618  REVISION DATE from Version 3.2
  27849. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27850. C   900524  Cosmetic changes to code.  (WRB)
  27851. C***END PROLOGUE  TEST37
  27852.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27853. C***FIRST EXECUTABLE STATEMENT  TEST37
  27854.       LUN = I1MACH(2)
  27855.       LIN = I1MACH(1)
  27856.       NFAIL = 0
  27857. C
  27858. C     Read KPRINT parameter
  27859. C
  27860.       READ (LIN, '(I1)') KPRINT
  27861.       CALL XERMAX(1000)
  27862.       CALL XSETUN(LUN)
  27863.       IF (KPRINT .LE. 1) THEN
  27864.          CALL XSETF(0)
  27865.       ELSE
  27866.          CALL XSETF(1)
  27867.       ENDIF
  27868. C
  27869. C     Test SORT programs
  27870. C
  27871.       CALL SORTQX(LUN,KPRINT,IPASS)
  27872.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27873. C
  27874. C     Write PASS or FAIL message
  27875. C
  27876.       IF (NFAIL .EQ. 0) THEN
  27877.          WRITE (LUN, 9000)
  27878.       ELSE
  27879.          WRITE (LUN, 9010) NFAIL
  27880.       ENDIF
  27881.       STOP
  27882.  9000 FORMAT (/' --------------TEST37 PASSED ALL TESTS----------------')
  27883.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27884.      1        ' TEST(S) FAILED IN PROGRAM TEST37 *************')
  27885.       END
  27886. *DECK TEST4
  27887.       PROGRAM TEST4
  27888. C***BEGIN PROLOGUE  TEST4
  27889. C***PURPOSE  Driver for testing SLATEC subprograms
  27890. C***LIBRARY   SLATEC
  27891. C***CATEGORY  C
  27892. C***KEYWORDS  QUICK CHECK DRIVER
  27893. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27894. C***DESCRIPTION
  27895. C
  27896. C *Usage:
  27897. C     One input data record is required
  27898. C         READ (LIN, '(I1)') KPRINT
  27899. C
  27900. C *Arguments:
  27901. C     KPRINT = 0  Quick checks - No printing.
  27902. C                 Driver       - Short pass or fail message printed.
  27903. C              1  Quick checks - No message printed for passed tests,
  27904. C                                short message printed for failed tests.
  27905. C                 Driver       - Short pass or fail message printed.
  27906. C              2  Quick checks - Print short message for passed tests,
  27907. C                                fuller information for failed tests.
  27908. C                 Driver       - Pass or fail message printed.
  27909. C              3  Quick checks - Print complete quick check results.
  27910. C                 Driver       - Pass or fail message printed.
  27911. C
  27912. C *Description:
  27913. C     Driver for testing SLATEC subprograms
  27914. C        EXINT    GAUS8
  27915. C        BESI     BESK
  27916. C        BESJ     BESY
  27917. C
  27918. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  27919. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  27920. C                 tical Library, April 10, 1990.
  27921. C***ROUTINES CALLED  BIKCK, BJYCK, EG8CK, I1MACH, XERMAX, XSETF, XSETUN
  27922. C***REVISION HISTORY  (YYMMDD)
  27923. C   890618  DATE WRITTEN
  27924. C   890618  REVISION DATE from Version 3.2
  27925. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  27926. C   900524  Cosmetic changes to code.  (WRB)
  27927. C***END PROLOGUE  TEST4
  27928.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  27929. C***FIRST EXECUTABLE STATEMENT  TEST4
  27930.       LUN = I1MACH(2)
  27931.       LIN = I1MACH(1)
  27932.       NFAIL = 0
  27933. C
  27934. C     Read KPRINT parameter
  27935. C
  27936.       READ (LIN, '(I1)') KPRINT
  27937.       CALL XERMAX(1000)
  27938.       CALL XSETUN(LUN)
  27939.       IF (KPRINT .LE. 1) THEN
  27940.          CALL XSETF(0)
  27941.       ELSE
  27942.          CALL XSETF(1)
  27943.       ENDIF
  27944. C
  27945. C     Test EXINT and GAUS8
  27946. C
  27947.       CALL EG8CK(LUN,KPRINT,IPASS)
  27948.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27949. C
  27950. C     Test BESI and BESK
  27951. C
  27952.       CALL BIKCK(LUN,KPRINT,IPASS)
  27953.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27954. C
  27955. C     Test BESJ and BESY
  27956. C
  27957.       CALL BJYCK(LUN,KPRINT,IPASS)
  27958.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  27959. C
  27960. C     Write PASS or FAIL message
  27961. C
  27962.       IF (NFAIL .EQ. 0) THEN
  27963.          WRITE (LUN, 9000)
  27964.       ELSE
  27965.          WRITE (LUN, 9010) NFAIL
  27966.       ENDIF
  27967.       STOP
  27968.  9000 FORMAT (/' --------------TEST4  PASSED ALL TESTS----------------')
  27969.  9010 FORMAT (/' ************* WARNING -- ', I5,
  27970.      1        ' TEST(S) FAILED IN PROGRAM TEST4  *************')
  27971.       END
  27972. *DECK TEST5
  27973.       PROGRAM TEST5
  27974. C***BEGIN PROLOGUE  TEST5
  27975. C***PURPOSE  Driver for testing SLATEC subprograms
  27976. C***LIBRARY   SLATEC
  27977. C***CATEGORY  C
  27978. C***KEYWORDS  QUICK CHECK DRIVER
  27979. C***AUTHOR  SLATEC Common Mathematical Library Committee
  27980. C***DESCRIPTION
  27981. C
  27982. C *Usage:
  27983. C     One input data record is required
  27984. C         READ (LIN, '(I1)') KPRINT
  27985. C
  27986. C *Arguments:
  27987. C     KPRINT = 0  Quick checks - No printing.
  27988. C                 Driver       - Short pass or fail message printed.
  27989. C              1  Quick checks - No message printed for passed tests,
  27990. C                                short message printed for failed tests.
  27991. C                 Driver       - Short pass or fail message printed.
  27992. C              2  Quick checks - Print short message for passed tests,
  27993. C                                fuller information for failed tests.
  27994. C                 Driver       - Pass or fail message printed.
  27995. C              3  Quick checks - Print complete quick check results.
  27996. C                 Driver       - Pass or fail message printed.
  27997. C
  27998. C *Description:
  27999. C     Driver for testing SLATEC subprograms
  28000. C        DEXINT   DGAUS8
  28001. C        DBESI    DBESK
  28002. C        DBESJ    DBESY
  28003. C
  28004. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  28005. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  28006. C                 tical Library, April 10, 1990.
  28007. C***ROUTINES CALLED  DBIKCK, DBJYCK, DEG8CK, I1MACH, XERMAX, XSETF,
  28008. C                    XSETUN
  28009. C***REVISION HISTORY  (YYMMDD)
  28010. C   890618  DATE WRITTEN
  28011. C   890618  REVISION DATE from Version 3.2
  28012. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  28013. C   900524  Cosmetic changes to code.  (WRB)
  28014. C***END PROLOGUE  TEST5
  28015.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  28016. C***FIRST EXECUTABLE STATEMENT  TEST5
  28017.       LUN = I1MACH(2)
  28018.       LIN = I1MACH(1)
  28019.       NFAIL = 0
  28020. C
  28021. C     Read KPRINT parameter
  28022. C
  28023.       READ (LIN, '(I1)') KPRINT
  28024.       CALL XERMAX(1000)
  28025.       CALL XSETUN(LUN)
  28026.       IF (KPRINT .LE. 1) THEN
  28027.          CALL XSETF(0)
  28028.       ELSE
  28029.          CALL XSETF(1)
  28030.       ENDIF
  28031. C
  28032. C     Test DEXINT and DQAUS8
  28033. C
  28034.       CALL DEG8CK(LUN,KPRINT,IPASS)
  28035.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28036. C
  28037. C     Test DBESI and DBESK
  28038. C
  28039.       CALL DBIKCK(LUN,KPRINT,IPASS)
  28040.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28041. C
  28042. C     Test DBESJ and DBESY
  28043. C
  28044.       CALL DBJYCK(LUN,KPRINT,IPASS)
  28045.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28046. C
  28047. C     Write PASS or FAIL message
  28048. C
  28049.       IF (NFAIL .EQ. 0) THEN
  28050.          WRITE (LUN, 9000)
  28051.       ELSE
  28052.          WRITE (LUN, 9010) NFAIL
  28053.       ENDIF
  28054.       STOP
  28055.  9000 FORMAT (/' --------------TEST5  PASSED ALL TESTS----------------')
  28056.  9010 FORMAT (/' ************* WARNING -- ', I5,
  28057.      1        ' TEST(S) FAILED IN PROGRAM TEST5  *************')
  28058.       END
  28059. *DECK TEST6
  28060.       PROGRAM TEST6
  28061. C***BEGIN PROLOGUE  TEST6
  28062. C***PURPOSE  Driver for testing SLATEC subprograms
  28063. C***LIBRARY   SLATEC
  28064. C***CATEGORY  C
  28065. C***KEYWORDS  QUICK CHECK DRIVER
  28066. C***AUTHOR  SLATEC Common Mathematical Library Committee
  28067. C***DESCRIPTION
  28068. C
  28069. C *Usage:
  28070. C     One input data record is required
  28071. C         READ (LIN, '(I1)') KPRINT
  28072. C
  28073. C *Arguments:
  28074. C     KPRINT = 0  Quick checks - No printing.
  28075. C                 Driver       - Short pass or fail message printed.
  28076. C              1  Quick checks - No message printed for passed tests,
  28077. C                                short message printed for failed tests.
  28078. C                 Driver       - Short pass or fail message printed.
  28079. C              2  Quick checks - Print short message for passed tests,
  28080. C                                fuller information for failed tests.
  28081. C                 Driver       - Pass or fail message printed.
  28082. C              3  Quick checks - Print complete quick check results.
  28083. C                 Driver       - Pass or fail message printed.
  28084. C
  28085. C *Description:
  28086. C     Driver for testing SLATEC subprograms
  28087. C        BSKIN    PSIFN
  28088. C
  28089. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  28090. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  28091. C                 tical Library, April 10, 1990.
  28092. C***ROUTINES CALLED  I1MACH, QCKIN, QCPSI, XERMAX, XSETF, XSETUN
  28093. C***REVISION HISTORY  (YYMMDD)
  28094. C   890618  DATE WRITTEN
  28095. C   890618  REVISION DATE from Version 3.2
  28096. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  28097. C   900524  Cosmetic changes to code.  (WRB)
  28098. C***END PROLOGUE  TEST6
  28099.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  28100. C***FIRST EXECUTABLE STATEMENT  TEST6
  28101.       LUN = I1MACH(2)
  28102.       LIN = I1MACH(1)
  28103.       NFAIL = 0
  28104. C
  28105. C     Read KPRINT parameter
  28106. C
  28107.       READ (LIN, '(I1)') KPRINT
  28108.       CALL XERMAX(1000)
  28109.       CALL XSETUN(LUN)
  28110.       IF (KPRINT .LE. 1) THEN
  28111.          CALL XSETF(0)
  28112.       ELSE
  28113.          CALL XSETF(1)
  28114.       ENDIF
  28115. C
  28116. C     Test single precision special function routines
  28117. C
  28118.       CALL QCKIN(LUN,KPRINT,IPASS)
  28119.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28120.       CALL QCPSI(LUN,KPRINT,IPASS)
  28121.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28122. C
  28123. C     Write PASS or FAIL message
  28124. C
  28125.       IF (NFAIL .EQ. 0) THEN
  28126.          WRITE (LUN, 9000)
  28127.       ELSE
  28128.          WRITE (LUN, 9010) NFAIL
  28129.       ENDIF
  28130.       STOP
  28131.  9000 FORMAT (/' --------------TEST6  PASSED ALL TESTS----------------')
  28132.  9010 FORMAT (/' ************* WARNING -- ', I5,
  28133.      1        ' TEST(S) FAILED IN PROGRAM TEST6  *************')
  28134.       END
  28135. *DECK TEST7
  28136.       PROGRAM TEST7
  28137. C***BEGIN PROLOGUE  TEST7
  28138. C***PURPOSE  Driver for testing SLATEC subprograms
  28139. C***LIBRARY   SLATEC
  28140. C***CATEGORY  C
  28141. C***KEYWORDS  QUICK CHECK DRIVER
  28142. C***AUTHOR  SLATEC Common Mathematical Library Committee
  28143. C***DESCRIPTION
  28144. C
  28145. C *Usage:
  28146. C     One input data record is required
  28147. C         READ (LIN, '(I1)') KPRINT
  28148. C
  28149. C *Arguments:
  28150. C     KPRINT = 0  Quick checks - No printing.
  28151. C                 Driver       - Short pass or fail message printed.
  28152. C              1  Quick checks - No message printed for passed tests,
  28153. C                                short message printed for failed tests.
  28154. C                 Driver       - Short pass or fail message printed.
  28155. C              2  Quick checks - Print short message for passed tests,
  28156. C                                fuller information for failed tests.
  28157. C                 Driver       - Pass or fail message printed.
  28158. C              3  Quick checks - Print complete quick check results.
  28159. C                 Driver       - Pass or fail message printed.
  28160. C
  28161. C *Description:
  28162. C     Driver for testing SLATEC subprograms
  28163. C        DBSKIN   DPSIFN
  28164. C
  28165. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  28166. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  28167. C                 tical Library, April 10, 1990.
  28168. C***ROUTINES CALLED  DQCKIN, DQCPSI, I1MACH, XERMAX, XSETF, XSETUN
  28169. C***REVISION HISTORY  (YYMMDD)
  28170. C   890618  DATE WRITTEN
  28171. C   890618  REVISION DATE from Version 3.2
  28172. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  28173. C   900524  Cosmetic changes to code.  (WRB)
  28174. C***END PROLOGUE  TEST7
  28175.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  28176. C***FIRST EXECUTABLE STATEMENT  TEST7
  28177.       LUN = I1MACH(2)
  28178.       LIN = I1MACH(1)
  28179.       NFAIL = 0
  28180. C
  28181. C     Read KPRINT parameter
  28182. C
  28183.       READ (LIN, '(I1)') KPRINT
  28184.       CALL XERMAX(1000)
  28185.       CALL XSETUN(LUN)
  28186.       IF (KPRINT .LE. 1) THEN
  28187.          CALL XSETF(0)
  28188.       ELSE
  28189.          CALL XSETF(1)
  28190.       ENDIF
  28191. C
  28192. C     Test double precision special function routines
  28193. C
  28194.       CALL DQCKIN(LUN,KPRINT,IPASS)
  28195.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28196.       CALL DQCPSI(LUN,KPRINT,IPASS)
  28197.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28198. C
  28199. C     Write PASS or FAIL message
  28200. C
  28201.       IF (NFAIL .EQ. 0) THEN
  28202.          WRITE (LUN, 9000)
  28203.       ELSE
  28204.          WRITE (LUN, 9010) NFAIL
  28205.       ENDIF
  28206.       STOP
  28207.  9000 FORMAT (/' --------------TEST7  PASSED ALL TESTS----------------')
  28208.  9010 FORMAT (/' ************* WARNING -- ', I5,
  28209.      1        ' TEST(S) FAILED IN PROGRAM TEST7  *************')
  28210.       END
  28211. *DECK TEST8
  28212.       PROGRAM TEST8
  28213. C***BEGIN PROLOGUE  TEST8
  28214. C***PURPOSE  Driver for testing SLATEC subprograms
  28215. C***LIBRARY   SLATEC
  28216. C***CATEGORY  C14
  28217. C***KEYWORDS  QUICK CHECK DRIVER
  28218. C***AUTHOR  SLATEC Common Mathematical Library Committee
  28219. C***DESCRIPTION
  28220. C
  28221. C *Usage:
  28222. C     One input data record is required
  28223. C         READ (LIN, '(I1)') KPRINT
  28224. C
  28225. C *Arguments:
  28226. C     KPRINT = 0  Quick checks - No printing.
  28227. C                 Driver       - Short pass or fail message printed.
  28228. C              1  Quick checks - No message printed for passed tests,
  28229. C                                short message printed for failed tests.
  28230. C                 Driver       - Short pass or fail message printed.
  28231. C              2  Quick checks - Print short message for passed tests,
  28232. C                                fuller information for failed tests.
  28233. C                 Driver       - Pass or fail message printed.
  28234. C              3  Quick checks - Print complete quick check results.
  28235. C                 Driver       - Pass or fail message printed.
  28236. C
  28237. C *Description:
  28238. C     Driver for testing SLATEC subprograms
  28239. C        RC       RD       RF       RJ
  28240. C
  28241. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  28242. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  28243. C                 tical Library, April 10, 1990.
  28244. C***ROUTINES CALLED  I1MACH, QCRC, QCRD, QCRF, QCRJ, XERMAX, XSETF,
  28245. C                    XSETUN
  28246. C***REVISION HISTORY  (YYMMDD)
  28247. C   890618  DATE WRITTEN
  28248. C   890618  REVISION DATE from Version 3.2
  28249. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  28250. C   900524  Cosmetic changes to code.  (WRB)
  28251. C***END PROLOGUE  TEST8
  28252.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  28253. C***FIRST EXECUTABLE STATEMENT  TEST8
  28254.       LUN = I1MACH(2)
  28255.       LIN = I1MACH(1)
  28256.       NFAIL = 0
  28257. C
  28258. C     Read KPRINT parameter
  28259. C
  28260.       READ (LIN, '(I1)') KPRINT
  28261.       CALL XERMAX(1000)
  28262.       CALL XSETUN(LUN)
  28263.       IF (KPRINT .LE. 1) THEN
  28264.          CALL XSETF(0)
  28265.       ELSE
  28266.          CALL XSETF(1)
  28267.       ENDIF
  28268. C
  28269. C     Test single precision Carlson elliptic routines
  28270. C
  28271.       CALL QCRC(LUN,KPRINT,IPASS)
  28272.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28273.       CALL QCRD(LUN,KPRINT,IPASS)
  28274.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28275.       CALL QCRF(LUN,KPRINT,IPASS)
  28276.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28277.       CALL QCRJ(LUN,KPRINT,IPASS)
  28278.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28279. C
  28280. C     Write PASS or FAIL message
  28281. C
  28282.       IF (NFAIL .EQ. 0) THEN
  28283.          WRITE (LUN, 9000)
  28284.       ELSE
  28285.          WRITE (LUN, 9010) NFAIL
  28286.       ENDIF
  28287.       STOP
  28288.  9000 FORMAT (/' --------------TEST8  PASSED ALL TESTS----------------')
  28289.  9010 FORMAT (/' ************* WARNING -- ', I5,
  28290.      1        ' TEST(S) FAILED IN PROGRAM TEST8  *************')
  28291.       END
  28292. *DECK TEST9
  28293.       PROGRAM TEST9
  28294. C***BEGIN PROLOGUE  TEST9
  28295. C***PURPOSE  Driver for testing SLATEC subprograms
  28296. C***LIBRARY   SLATEC
  28297. C***CATEGORY  C14
  28298. C***KEYWORDS  QUICK CHECK DRIVER
  28299. C***AUTHOR  SLATEC Common Mathematical Library Committee
  28300. C***DESCRIPTION
  28301. C
  28302. C *Usage:
  28303. C     One input data record is required
  28304. C         READ (LIN, '(I1)') KPRINT
  28305. C
  28306. C *Arguments:
  28307. C     KPRINT = 0  Quick checks - No printing.
  28308. C                 Driver       - Short pass or fail message printed.
  28309. C              1  Quick checks - No message printed for passed tests,
  28310. C                                short message printed for failed tests.
  28311. C                 Driver       - Short pass or fail message printed.
  28312. C              2  Quick checks - Print short message for passed tests,
  28313. C                                fuller information for failed tests.
  28314. C                 Driver       - Pass or fail message printed.
  28315. C              3  Quick checks - Print complete quick check results.
  28316. C                 Driver       - Pass or fail message printed.
  28317. C
  28318. C *Description:
  28319. C     Driver for testing SLATEC subprograms
  28320. C        DRC      DRD      DRF      DRJ
  28321. C
  28322. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  28323. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  28324. C                 tical Library, April 10, 1990.
  28325. C***ROUTINES CALLED  I1MACH, QCDRC, QCDRD, QCDRF, QCDRJ, XERMAX, XSETF,
  28326. C                    XSETUN
  28327. C***REVISION HISTORY  (YYMMDD)
  28328. C   890618  DATE WRITTEN
  28329. C   890618  REVISION DATE from Version 3.2
  28330. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  28331. C   900524  Cosmetic changes to code.  (WRB)
  28332. C***END PROLOGUE  TEST9
  28333.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  28334. C***FIRST EXECUTABLE STATEMENT  TEST9
  28335.       LUN = I1MACH(2)
  28336.       LIN = I1MACH(1)
  28337.       NFAIL = 0
  28338. C
  28339. C     Read KPRINT parameter
  28340. C
  28341.       READ (LIN, '(I1)') KPRINT
  28342.       CALL XERMAX(1000)
  28343.       CALL XSETUN(LUN)
  28344.       IF (KPRINT .LE. 1) THEN
  28345.          CALL XSETF(0)
  28346.       ELSE
  28347.          CALL XSETF(1)
  28348.       ENDIF
  28349. C
  28350. C     Test double precision Carlson elliptic routines
  28351. C
  28352.       CALL QCDRC(LUN,KPRINT,IPASS)
  28353.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28354.       CALL QCDRD(LUN,KPRINT,IPASS)
  28355.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28356.       CALL QCDRF(LUN,KPRINT,IPASS)
  28357.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28358.       CALL QCDRJ(LUN,KPRINT,IPASS)
  28359.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  28360. C
  28361. C     Write PASS or FAIL message
  28362. C
  28363.       IF (NFAIL .EQ. 0) THEN
  28364.          WRITE (LUN, 9000)
  28365.       ELSE
  28366.          WRITE (LUN, 9010) NFAIL
  28367.       ENDIF
  28368.       STOP
  28369.  9000 FORMAT (/' --------------TEST9  PASSED ALL TESTS----------------')
  28370.  9010 FORMAT (/' ************* WARNING -- ', I5,
  28371.      1        ' TEST(S) FAILED IN PROGRAM TEST9  *************')
  28372.       END
  28373. *DECK UIVP
  28374.       SUBROUTINE UIVP (X, Y, YP)
  28375. C***BEGIN PROLOGUE  UIVP
  28376. C***PURPOSE  Dummy routine for BVSUP quick check.
  28377. C***LIBRARY   SLATEC
  28378. C***TYPE      SINGLE PRECISION (UIVP-S, DUIVP-D)
  28379. C***KEYWORDS  QUICK CHECK
  28380. C***AUTHOR  Watts, H. A., (SNLA)
  28381. C***DESCRIPTION
  28382. C
  28383. C   This routine is never called;  it is here to prevent loaders from
  28384. C   complaining about undefined externals while testing BVSUP.
  28385. C
  28386. C***ROUTINES CALLED  (NONE)
  28387. C***REVISION HISTORY  (YYMMDD)
  28388. C   750601  DATE WRITTEN
  28389. C   890618  REVISION DATE from Version 3.2
  28390. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  28391. C   920401  Variables declaration and TYPE sections added.  (WRB)
  28392. C***END PROLOGUE  UIVP
  28393. C     .. Scalar Arguments ..
  28394.       REAL X
  28395. C     .. Array Arguments ..
  28396.       REAL Y(*), YP(*)
  28397. C***FIRST EXECUTABLE STATEMENT  UIVP
  28398.       STOP
  28399.       END
  28400. *DECK UVEC
  28401.       SUBROUTINE UVEC (X, Y, YP)
  28402. C***BEGIN PROLOGUE  UVEC
  28403. C***PURPOSE  Dummy routine for BVSUP quick check.
  28404. C***LIBRARY   SLATEC
  28405. C***TYPE      SINGLE PRECISION (UVEC-S, DUVEC-D)
  28406. C***KEYWORDS  QUICK CHECK
  28407. C***AUTHOR  Watts, H. A., (SNLA)
  28408. C***DESCRIPTION
  28409. C
  28410. C   This routine is never called;  it is here to prevent loaders from
  28411. C   complaining about undefined externals while testing BVSUP.
  28412. C
  28413. C***ROUTINES CALLED  (NONE)
  28414. C***REVISION HISTORY  (YYMMDD)
  28415. C   750601  DATE WRITTEN
  28416. C   890618  REVISION DATE from Version 3.2
  28417. C   891214  Prologue converted to Version 4.0 format.  (BAB)
  28418. C   920401  Variables declaration and TYPE sections added.  (WRB)
  28419. C***END PROLOGUE  UVEC
  28420. C     .. Scalar Arguments ..
  28421.       REAL X
  28422. C     .. Array Arguments ..
  28423.       REAL Y(*), YP(*)
  28424. C***FIRST EXECUTABLE STATEMENT  UVEC
  28425.       STOP
  28426.       END
  28427. *DECK CDB2QX
  28428.       SUBROUTINE CDB2QX (LUN, KPRINT, IPASS)
  28429. C***BEGIN PROLOGUE  CDB2QX
  28430. C***PURPOSE  Quick check for CDRVB2.
  28431. C***LIBRARY   CLAMS
  28432. C***AUTHOR  Kahaner, D. K., (NIST)
  28433. C           Sutherland, C. D., (LANL)
  28434. C***DESCRIPTION
  28435. C
  28436. C   ALL CHECK PROGRAM
  28437. C
  28438. C   PART OF CDRVB1,2,3 PACKAGE, COMPLEX VERSION
  28439. C
  28440. C***ROUTINES CALLED  CDRVB2, CF2, CG2, R1MACH
  28441. C***COMMON BLOCKS    CCONS2
  28442. C***REVISION HISTORY  (YYMMDD)
  28443. C   ??????  DATE WRITTEN
  28444. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28445. C           standard.  (WRB)
  28446. C***END PROLOGUE  CDB2QX
  28447.       PARAMETER(LENW=263, LENIW=23)
  28448.       EXTERNAL CF2, CG2
  28449.       COMPLEX WORK(LENW), Y(3)
  28450.       REAL ALFA, EPS, EWT(1), R1MACH, T, TOUT
  28451.       INTEGER IWORK(LENIW)
  28452.       COMMON /CCONS2/ ALFA
  28453.       DATA N /3/, EWT(1) /.00001E0/, MITER /0/, IMPL /0/
  28454. C***FIRST EXECUTABLE STATEMENT  CDB2QX
  28455.       EPS = R1MACH(4)**(1.E0/3.E0)
  28456.       ALFA = 1.E0
  28457.       IF (KPRINT .GE. 3) THEN
  28458.       WRITE(LUN, '(// ''     *****'' / '' CDRVB2 TEST'' /
  28459.      8  '' IF THE FOLLOWING TEST IS SUCCESSFUL, THE LAST LINE OF THIS''
  28460.      8  / '' OUTPUT FILE (APPROXIMATELY 45 LINES BEYOND THIS POINT)''
  28461.      8  / '' SHOULD BE -- CDRVB2 TEST PASSED.''
  28462.      8  / '' ANY OTHER FINAL MESSAGE INDICATES SOME TEST FAILURE.''
  28463.      8  / ''     *****'')')
  28464.       WRITE(LUN, '(/ '' EPS ='', 1PE15.5)') EPS
  28465.       WRITE(LUN, '(/ '' A = '',  1PE10.2 // 1X, ''CYCLE'', 3X,
  28466.      8  ''TIME'', 6X, ''Y(1)'', 16X, ''Y(2)'', 14X, ''MINT'', 1X,
  28467.      8  ''MITER'', 1X, ''IMPL'', 1X, ''NFE'', 1X, ''NJE'')') ALFA
  28468.       ENDIF
  28469.       DO 50 MINT = 1,3
  28470.         IF (MINT.EQ.2) THEN
  28471.           NROOT = 1
  28472.         ELSE
  28473.           NROOT = 0
  28474.         ENDIF
  28475.         T = 0.E0
  28476.         Y(1) = CMPLX(10.E0, 10.E0)
  28477.         Y(2) = CMPLX(0.E0)
  28478.         Y(3) = CMPLX(10.E0, 10.E0)
  28479.         NSTATE = 1
  28480.         TOUT = 10.E0
  28481.  10     CALL CDRVB2 (N, T, Y, CF2, TOUT, NSTATE, NROOT, EPS, EWT,
  28482.      8               MINT,WORK,LENW,IWORK,LENIW,CG2)
  28483.         IF (NSTATE.NE.2 .AND. NSTATE.NE.5) GO TO 60
  28484.         NSTEP = IWORK(3)
  28485.         NFE = IWORK(4)
  28486.         NJE = IWORK(5)
  28487.         IF (NSTATE.EQ.5) THEN
  28488.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P5E10.2, I5, I6, I5, 2I4)')
  28489.      8    NSTEP, T, (Y(I), I=1,2), MINT, MITER, IMPL, NFE, NJE
  28490.           IF (ABS(ABS(Y(1)) - 1.E0).GT.EPS**(2.E0/3.E0)) GO TO 60
  28491.           GO TO 10
  28492.         ELSE
  28493.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P5E10.2, I5, I6, I5, 2I4)')
  28494.      8    NSTEP, TOUT, (Y(I), I=1,2), MINT, MITER, IMPL, NFE, NJE
  28495.           IF (ABS(1.E0 - ABS(Y(1))*1.5E0).GT.EPS**(2.E0/3.E0) .OR.
  28496.      8    ABS(1.E0 - ABS(Y(2))*3.E0).GT.EPS**(2.E0/3.E0) .OR.
  28497.      8    ABS(1.E0 - ABS(Y(3))).GT.EPS**(2.E0/3.E0)) GO TO 60
  28498.         ENDIF
  28499.  50     CONTINUE
  28500.       IPASS = 1
  28501.       IF (KPRINT .GT. 1) THEN
  28502.       WRITE(LUN,
  28503.      8  '(// ''     *****'' /'' CDRVB2 TEST PASSED'' / ''     *****'')')
  28504.       ENDIF
  28505.       RETURN
  28506.  60   IPASS = 0
  28507.       IF (KPRINT .GT. 0) THEN
  28508.       WRITE(LUN, '(// ''     *****'' / '' CDRVB2 TEST FAILED'' /
  28509.      8  ''     *****'' //)')
  28510.       ENDIF
  28511.       RETURN
  28512.       END
  28513. *DECK CDB3QX
  28514.       SUBROUTINE CDB3QX (LUN, KPRINT, IPASS)
  28515. C***BEGIN PROLOGUE  CDB3QX
  28516. C***PURPOSE  Quick check for CDRVB3.
  28517. C***LIBRARY   CLAMS
  28518. C***AUTHOR  Kahaner, D. K., (NIST)
  28519. C           Sutherland, C. D., (LANL)
  28520. C***DESCRIPTION
  28521. C
  28522. C   ALL CHECK PROGRAM
  28523. C
  28524. C   PART OF CDRVB1,2,3 PACKAGE, COMPLEX VERSION
  28525. C
  28526. C***ROUTINES CALLED  CDRVB3, CF3, CFA3, CG3, CJAC3, R1MACH
  28527. C***COMMON BLOCKS    CCONS3
  28528. C***REVISION HISTORY  (YYMMDD)
  28529. C   ??????  DATE WRITTEN
  28530. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28531. C           standard.  (WRB)
  28532. C***END PROLOGUE  CDB3QX
  28533.       PARAMETER(LENW=294, LENIW=23)
  28534.       EXTERNAL CF3, CJAC3, CFA3, CG3
  28535.       COMPLEX WORK(LENW), Y(3)
  28536.       REAL ALFA, EPS, EWT(1), HMAX, R1MACH, T, TOUT
  28537.       INTEGER IWORK(LENIW)
  28538.       COMMON /CCONS3/ ALFA, IMPL, MITER
  28539.       DATA N /3/, EWT(1) /.00001E0/, IERROR /3/, ML /2/, MU /2/,
  28540.      8     HMAX /15.E0/, NDE /2/, MXSTEP /1000/
  28541. C***FIRST EXECUTABLE STATEMENT  CDB3QX
  28542.       EPS = R1MACH(4)**(1.E0/3.E0)
  28543.       ALFA = 1.E0
  28544.       IF (KPRINT .GE. 3) THEN
  28545.       WRITE(LUN, '(// ''     *****'' / '' CDRVB3 TEST'' /
  28546.      8  '' IF THE FOLLOWING TEST IS SUCCESSFUL, THE LAST LINE OF THIS''
  28547.      8  / '' OUTPUT FILE (APPROXIMATELY 45 LINES BEYOND THIS POINT)''
  28548.      8  / '' SHOULD BE -- CDRVB3 TEST PASSED.''
  28549.      8  / '' ANY OTHER FINAL MESSAGE INDICATES SOME TEST FAILURE.''
  28550.      8  / ''     *****'')')
  28551.       WRITE(LUN, '(/ '' EPS ='', 1PE15.5)') EPS
  28552.       WRITE(LUN, '(/ '' A = '',  1PE10.2 // 1X, ''CYCLE'', 3X,
  28553.      8  ''TIME'', 6X, ''Y(1)'', 16X, ''Y(2)'', 14X, ''MINT'', 1X,
  28554.      8  ''MITER'', 1X, ''IMPL'', 1X, ''NFE'', 1X, ''NJE'')') ALFA
  28555.       ENDIF
  28556.       DO 50 IMPLP1 = 1,3
  28557.       DO 50 MINT = 1,3
  28558.       DO 50 MITERP = 1,6
  28559.         MITER = MITERP - 1
  28560.         IMPL = IMPLP1 - 1
  28561.         IF (MITER .EQ. 3) GO TO 50
  28562.         IF (IMPL.GT.0 .AND. MITER.EQ.0) GO TO 50
  28563.         IF (IMPL.EQ.2 .AND. MINT.EQ.1) GO TO 50
  28564.         IF (MINT.EQ.3 .AND. (IMPL.NE.0 .OR. MITER.EQ.0 .OR.
  28565.      8  MITER.EQ.3)) GO TO 50
  28566.         IF (MINT.EQ.1 .OR. MINT.EQ.3) THEN
  28567.           MXORD = 12
  28568.         ELSE IF (MINT.EQ.2) THEN
  28569.           MXORD = 5
  28570.         ENDIF
  28571.         IF (MINT.EQ.2 .AND. MITER.EQ.2 .AND. IMPL.EQ.0) THEN
  28572.           NROOT = 1
  28573.         ELSE
  28574.           NROOT = 0
  28575.         ENDIF
  28576.         T = 0.E0
  28577.         Y(1) = CMPLX(10.E0, 10.E0)
  28578.         Y(2) = CMPLX(0.E0)
  28579.         Y(3) = CMPLX(10.E0, 10.E0)
  28580.         NSTATE = 1
  28581.         TOUT = 10.E0
  28582.         NTASK = 1
  28583.  10     CALL CDRVB3 (N, T, Y, CF3, NSTATE, TOUT, NTASK, NROOT, EPS, EWT,
  28584.      8               IERROR, MINT, MITER, IMPL, ML, MU, MXORD, HMAX,
  28585.      8               WORK,LENW,IWORK,LENIW,CJAC3,CFA3,NDE,MXSTEP,CG3)
  28586.         IF (NSTATE.NE.2 .AND. NSTATE.NE.5) GO TO 60
  28587.         NSTEP = IWORK(3)
  28588.         NFE = IWORK(4)
  28589.         NJE = IWORK(5)
  28590.         IF (NSTATE.EQ.5) THEN
  28591.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P5E10.2, I5, I6, I5, 2I4)')
  28592.      8    NSTEP, T, (Y(I), I=1,2), MINT, MITER, IMPL, NFE, NJE
  28593.           IF (ABS(ABS(Y(1)) - 1.E0).GT.EPS**(2.E0/3.E0)) GO TO 60
  28594.           GO TO 10
  28595.         ELSE
  28596.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P5E10.2, I5, I6, I5, 2I4)')
  28597.      8    NSTEP, TOUT, (Y(I), I=1,2), MINT, MITER, IMPL, NFE, NJE
  28598.           IF (ABS(1.E0 - ABS(Y(1))*1.5E0).GT.EPS**(2.E0/3.E0) .OR.
  28599.      8    ABS(1.E0 - ABS(Y(2))*3.E0).GT.EPS**(2.E0/3.E0) .OR.
  28600.      8    ABS(1.E0 - ABS(Y(3))).GT.EPS**(2.E0/3.E0)) GO TO 60
  28601.         ENDIF
  28602.  50     CONTINUE
  28603.       IPASS = 1
  28604.       IF (KPRINT .GT. 1) THEN
  28605.       WRITE(LUN,
  28606.      8  '(// ''     *****'' /'' CDRVB3 TEST PASSED'' / ''     *****'')')
  28607.       ENDIF
  28608.       RETURN
  28609.  60   IPASS = 0
  28610.       IF (KPRINT .GT. 0) THEN
  28611.       WRITE(LUN, '(// ''     *****'' / '' CDRVB3 TEST FAILED'' /
  28612.      8  ''     *****'' //)')
  28613.       ENDIF
  28614.       RETURN
  28615.       END
  28616. *DECK CF2
  28617.       SUBROUTINE CF2 (N, T, Y, YP)
  28618. C***BEGIN PROLOGUE  CF2
  28619. C***PURPOSE  Derivative evaluator for CDB2QX.
  28620. C***LIBRARY   CLAMS
  28621. C***AUTHOR  Kahaner, D. K., (NIST)
  28622. C           Sutherland, C. D., (LANL)
  28623. C***ROUTINES CALLED  (NONE)
  28624. C***COMMON BLOCKS    CCONS2
  28625. C***REVISION HISTORY  (YYMMDD)
  28626. C   ??????  DATE WRITTEN
  28627. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28628. C           standard.  (WRB)
  28629. C***END PROLOGUE  CF2
  28630.       COMPLEX Y(*), YP(*)
  28631.       REAL ALFA,T
  28632.       COMMON /CCONS2/ ALFA
  28633. C***FIRST EXECUTABLE STATEMENT  CF2
  28634.       YP(1) = 1.E0 + ALFA*(Y(2) - Y(1)) - Y(1)*Y(3)
  28635.       YP(2) = ALFA*(Y(1) - Y(2)) - Y(2)*Y(3)
  28636.       YP(3) = 1.E0 - Y(3)*(Y(1) + Y(2))
  28637.       END
  28638. *DECK CF3
  28639.       SUBROUTINE CF3 (N, T, Y, YP)
  28640. C***BEGIN PROLOGUE  CF3
  28641. C***PURPOSE  Derivative evaluator for CDB3QX.
  28642. C***LIBRARY   CLAMS
  28643. C***AUTHOR  Kahaner, D. K., (NIST)
  28644. C           Sutherland, C. D., (LANL)
  28645. C***ROUTINES CALLED  (NONE)
  28646. C***COMMON BLOCKS    CCONS3
  28647. C***REVISION HISTORY  (YYMMDD)
  28648. C   ??????  DATE WRITTEN
  28649. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28650. C           standard.  (WRB)
  28651. C***END PROLOGUE  CF3
  28652.       COMPLEX Y(*), YP(*)
  28653.       REAL ALFA,T
  28654.       COMMON /CCONS3/ ALFA, IMPL, MITER
  28655. C***FIRST EXECUTABLE STATEMENT  CF3
  28656.       YP(1) = 1.E0 + ALFA*(Y(2) - Y(1)) - Y(1)*Y(3)
  28657.       YP(2) = ALFA*(Y(1) - Y(2)) - Y(2)*Y(3)
  28658.       IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  28659.         YP(3) = 1.E0 - Y(3)*(Y(1) + Y(2))
  28660.       ELSE IF (IMPL.EQ.2) THEN
  28661.         YP(3) = Y(1) + Y(2) - Y(3)
  28662.       ENDIF
  28663.       END
  28664. *DECK CFA3
  28665.       SUBROUTINE CFA3 (N, T, Y, A, MATDIM, ML, MU, NDE)
  28666. C***BEGIN PROLOGUE  CFA3
  28667. C***PURPOSE  Matrix evaluator for CDB3QX.
  28668. C***LIBRARY   CLAMS
  28669. C***AUTHOR  Kahaner, D. K., (NIST)
  28670. C           Sutherland, C. D., (LANL)
  28671. C***ROUTINES CALLED  (NONE)
  28672. C***COMMON BLOCKS    CCONS3
  28673. C***REVISION HISTORY  (YYMMDD)
  28674. C   ??????  DATE WRITTEN
  28675. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28676. C           standard.  (WRB)
  28677. C***END PROLOGUE  CFA3
  28678.       COMPLEX A(MATDIM,*),Y(*)
  28679.       REAL ALFA,T
  28680.       COMMON /CCONS3/ ALFA, IMPL, MITER
  28681. C***FIRST EXECUTABLE STATEMENT  CFA3
  28682.       IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  28683.         IF (MITER.EQ.1 .OR. MITER.EQ.2 .OR. MITER.EQ.3) THEN
  28684.           DO 20 J = 1,N
  28685.             DO 10 I = 1,N
  28686.  10           A(I,J) = 0.E0
  28687.  20         A(J,J) = 1.E0
  28688.         ELSE IF (MITER.EQ.4) THEN
  28689.           DO 50 J = 1,N
  28690.             DO 40 I = 1,N
  28691.               I1 = I + MU + 1 - J
  28692.  40           A(I1,J) = 0.E0
  28693.  50         A(MU+1,J) = 1.E0
  28694.         ENDIF
  28695.       ELSE IF (IMPL.EQ.2) THEN
  28696.         A(1,1) = 1.E0
  28697.         A(2,1) = 1.E0
  28698.       ENDIF
  28699.       END
  28700. *DECK CG2
  28701.       REAL FUNCTION CG2 (N, T, Y, IROOT)
  28702. C***BEGIN PROLOGUE  CG2
  28703. C***PURPOSE  Algebric equation evaluator for CDB2QX.
  28704. C***LIBRARY   CLAMS
  28705. C***AUTHOR  Kahaner, D. K., (NIST)
  28706. C           Sutherland, C. D., (LANL)
  28707. C***ROUTINES CALLED  (NONE)
  28708. C***REVISION HISTORY  (YYMMDD)
  28709. C   ??????  DATE WRITTEN
  28710. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28711. C           standard.  (WRB)
  28712. C***END PROLOGUE  CG2
  28713.       COMPLEX Y(*)
  28714.       REAL T
  28715. C***FIRST EXECUTABLE STATEMENT  CG2
  28716.       CG2 = ABS(Y(1)) - 1.E0
  28717.       END
  28718. *DECK CG3
  28719.       REAL FUNCTION CG3 (N, T, Y, IROOT)
  28720. C***BEGIN PROLOGUE  CG3
  28721. C***PURPOSE  Algebric equation evaluator for CDB3QX.
  28722. C***LIBRARY   CLAMS
  28723. C***AUTHOR  Kahaner, D. K., (NIST)
  28724. C           Sutherland, C. D., (LANL)
  28725. C***ROUTINES CALLED  (NONE)
  28726. C***REVISION HISTORY  (YYMMDD)
  28727. C   ??????  DATE WRITTEN
  28728. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28729. C           standard.  (WRB)
  28730. C***END PROLOGUE  CG3
  28731.       COMPLEX Y(*)
  28732.       REAL T
  28733. C***FIRST EXECUTABLE STATEMENT  CG3
  28734.       CG3 = ABS(Y(1)) - 1.E0
  28735.       END
  28736. *DECK CJAC3
  28737.       SUBROUTINE CJAC3 (N, T, Y, DFDY, MATDIM, ML, MU)
  28738. C***BEGIN PROLOGUE  CJAC3
  28739. C***PURPOSE  Jacobian evaluator for CDB3QX.
  28740. C***LIBRARY   CLAMS
  28741. C***AUTHOR  Kahaner, D. K., (NIST)
  28742. C           Sutherland, C. D., (LANL)
  28743. C***ROUTINES CALLED  (NONE)
  28744. C***COMMON BLOCKS    CCONS3
  28745. C***REVISION HISTORY  (YYMMDD)
  28746. C   ??????  DATE WRITTEN
  28747. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28748. C           standard.  (WRB)
  28749. C***END PROLOGUE  CJAC3
  28750.       COMPLEX DFDY(MATDIM,*),Y(*)
  28751.       REAL ALFA,T
  28752.       COMMON /CCONS3/ ALFA, IMPL, MITER
  28753. C***FIRST EXECUTABLE STATEMENT  CJAC3
  28754.       IF (MITER.EQ.1 .OR. MITER.EQ.3) THEN
  28755.         DFDY(1,1) = -ALFA - Y(3)
  28756.         DFDY(1,2) = ALFA
  28757.         DFDY(1,3) = -Y(1)
  28758.         DFDY(2,1) = ALFA
  28759.         DFDY(2,2) = -ALFA - Y(3)
  28760.         DFDY(2,3) = -Y(2)
  28761.         IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  28762.           DFDY(3,1) = -Y(3)
  28763.           DFDY(3,2) = -Y(3)
  28764.           DFDY(3,3) = -Y(1) - Y(2)
  28765.         ELSE IF (IMPL.EQ.2) THEN
  28766.           DFDY(3,1) = 1.E0
  28767.           DFDY(3,2) = 1.E0
  28768.           DFDY(3,3) = -1.E0
  28769.         ENDIF
  28770.       ELSE IF (MITER.EQ.4) THEN
  28771.         DFDY(3,1) = -ALFA - Y(3)
  28772.         DFDY(2,2) = ALFA
  28773.         DFDY(1,3) = -Y(1)
  28774.         DFDY(4,1) = ALFA
  28775.         DFDY(3,2) = DFDY(3,1)
  28776.         DFDY(2,3) = -Y(2)
  28777.         IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  28778.           DFDY(5,1) = -Y(3)
  28779.           DFDY(4,2) = -Y(3)
  28780.           DFDY(3,3) = -Y(1) - Y(2)
  28781.         ELSE IF (IMPL.EQ.2) THEN
  28782.           DFDY(5,1) = 1.E0
  28783.           DFDY(4,2) = 1.E0
  28784.           DFDY(3,3) = -1.E0
  28785.         ENDIF
  28786.       ENDIF
  28787.       END
  28788. *DECK D114F0
  28789.       REAL FUNCTION D114F0 (K, X)
  28790. C***BEGIN PROLOGUE  D114F0
  28791. C***PURPOSE  Integrand evaluator for GAUSS quick check D114QX.
  28792. C***LIBRARY   CLAMS
  28793. C***AUTHOR  (UNKNOWN)
  28794. C***ROUTINES CALLED  XERMSG
  28795. C***REVISION HISTORY  (YYMMDD)
  28796. C   ??????  DATE WRITTEN
  28797. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28798. C           standard.  (WRB)
  28799. C   920701  Declarations section restructured.  (WRB)
  28800. C***END PROLOGUE  D114F0
  28801. C     .. Scalar Arguments ..
  28802.       REAL X
  28803.       INTEGER K
  28804. C     .. External Subroutines ..
  28805.       EXTERNAL XERMSG
  28806. C***FIRST EXECUTABLE STATEMENT  D114F0
  28807.       IF (K .EQ. 1) THEN
  28808.         D114F0 = X**3
  28809.       ELSE
  28810.         CALL XERMSG ('CLAMS', 'D114F0', 'K .NE. 1', 300, 2)
  28811.       ENDIF
  28812.       RETURN
  28813.       END
  28814. *DECK D114F1
  28815.       REAL FUNCTION D114F1 (K, X)
  28816. C***BEGIN PROLOGUE  D114F1
  28817. C***PURPOSE  Integrand evaluator for GAUSS quick check D114QX.
  28818. C***LIBRARY   CLAMS
  28819. C***AUTHOR  (UNKNOWN)
  28820. C***ROUTINES CALLED  XERMSG
  28821. C***REVISION HISTORY  (YYMMDD)
  28822. C   ??????  DATE WRITTEN
  28823. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28824. C           standard.  (WRB)
  28825. C   920701  Declarations section restructured.  (WRB)
  28826. C***END PROLOGUE  D114F1
  28827. C     .. Scalar Arguments ..
  28828.       REAL X
  28829.       INTEGER K
  28830. C     .. External Subroutines ..
  28831.       EXTERNAL XERMSG
  28832. C***FIRST EXECUTABLE STATEMENT  D114F1
  28833.       IF (K .EQ. 1) THEN
  28834.         D114F1 = X**2
  28835.       ELSE
  28836.         CALL XERMSG ('CLAMS', 'D114F1', 'K .NE. 1', 301, 2)
  28837.       ENDIF
  28838.       RETURN
  28839.       END
  28840. *DECK D114F2
  28841.       REAL FUNCTION D114F2 (K, X)
  28842. C***BEGIN PROLOGUE  D114F2
  28843. C***PURPOSE  Integrand evaluator for GAUSS quick check D114QX.
  28844. C***LIBRARY   CLAMS
  28845. C***AUTHOR  (UNKNOWN)
  28846. C***ROUTINES CALLED  XERMSG
  28847. C***REVISION HISTORY  (YYMMDD)
  28848. C   ??????  DATE WRITTEN
  28849. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28850. C           standard.  (WRB)
  28851. C   920701  Declarations section restructured.  (WRB)
  28852. C***END PROLOGUE  D114F2
  28853. C     .. Scalar Arguments ..
  28854.       REAL X
  28855.       INTEGER K
  28856. C     .. External Subroutines ..
  28857.       EXTERNAL XERMSG
  28858. C***FIRST EXECUTABLE STATEMENT  D114F2
  28859.       IF (K .EQ. 1) THEN
  28860.          D114F2 = X**2
  28861.       ELSE
  28862.          CALL XERMSG ('CLAMS', 'D114F2', 'K .NE. 1', 302, 2)
  28863.       ENDIF
  28864.       RETURN
  28865.       END
  28866. *DECK D114F3
  28867.       REAL FUNCTION D114F3 (K, X)
  28868. C***BEGIN PROLOGUE  D114F3
  28869. C***PURPOSE  Integrand evaluator for GAUSS quick check D114QX.
  28870. C***LIBRARY   CLAMS
  28871. C***AUTHOR  (UNKNOWN)
  28872. C***ROUTINES CALLED  XERMSG
  28873. C***REVISION HISTORY  (YYMMDD)
  28874. C   ??????  DATE WRITTEN
  28875. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28876. C           standard.  (WRB)
  28877. C   920701  Declarations section restructured.  (WRB)
  28878. C***END PROLOGUE  D114F3
  28879. C     .. Scalar Arguments ..
  28880.       REAL X
  28881.       INTEGER K
  28882. C     .. External Subroutines ..
  28883.       EXTERNAL XERMSG
  28884. C***FIRST EXECUTABLE STATEMENT  D114F3
  28885.       IF (K .EQ. 1) THEN
  28886.         D114F3 = X**7
  28887.       ELSE
  28888.         CALL XERMSG ('CLAMS', 'D114F3', 'K .NE. 1', 303, 2)
  28889.       ENDIF
  28890.       RETURN
  28891.       END
  28892. *DECK D114F4
  28893.       REAL FUNCTION D114F4 (K, X)
  28894. C***BEGIN PROLOGUE  D114F4
  28895. C***PURPOSE  Integrand evaluator for GAUSS quick check D114QX.
  28896. C***LIBRARY   CLAMS
  28897. C***AUTHOR  (UNKNOWN)
  28898. C***ROUTINES CALLED  XERMSG
  28899. C***REVISION HISTORY  (YYMMDD)
  28900. C   ??????  DATE WRITTEN
  28901. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28902. C           standard.  (WRB)
  28903. C   920701  Declarations section restructured.  (WRB)
  28904. C***END PROLOGUE  D114F4
  28905. C     .. Scalar Arguments ..
  28906.       REAL X
  28907.       INTEGER K
  28908. C     .. External Subroutines ..
  28909.       EXTERNAL XERMSG
  28910. C***FIRST EXECUTABLE STATEMENT  D114F4
  28911.       IF (K .EQ. 1) THEN
  28912.         D114F4 = X**19
  28913.       ELSE
  28914.         CALL XERMSG ('CLAMS', 'D114F4', 'K .NE. 1', 304, 2)
  28915.       ENDIF
  28916.       RETURN
  28917.       END
  28918. *DECK D114QX
  28919.       SUBROUTINE D114QX (LUN, KPRINT, IPASS)
  28920. C***BEGIN PROLOGUE  D114QX
  28921. C***PURPOSE  Quick check for GAUSS.
  28922. C***LIBRARY   CLAMS
  28923. C***AUTHOR  (UNKNOWN)
  28924. C***ROUTINES CALLED  CBSHV, D114F0, D114F1, D114F2, D114F3, D114F4,
  28925. C                    GAUSS, HRMTE, LAGRE, LGNDR, LGNDRX, R1MACH
  28926. C***REVISION HISTORY  (YYMMDD)
  28927. C   ??????  DATE WRITTEN
  28928. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28929. C           standard.  (WRB)
  28930. C   920701  Declarations section restructured and some code cleaned.
  28931. C           (WRB)
  28932. C***END PROLOGUE  D114QX
  28933. C     .. Scalar Arguments ..
  28934.       INTEGER IPASS, KPRINT, LUN
  28935. C     .. Local Scalars ..
  28936.       REAL ERRTOL, PI, RELERR
  28937.       INTEGER I, M, N
  28938. C     .. Local Arrays ..
  28939.       REAL ANS(5), Y(5)
  28940. C     .. External Functions ..
  28941.       REAL D114F0, D114F1, D114F2, D114F3, D114F4, GAUSS, R1MACH
  28942.       EXTERNAL D114F0, D114F1, D114F2, D114F3, D114F4, GAUSS, R1MACH
  28943. C     .. External Subroutines ..
  28944.       EXTERNAL CBSHV, HRMTE, LAGRE, LGNDR, LGNDRX
  28945. C     .. Intrinsic Functions ..
  28946.       INTRINSIC ABS, SQRT
  28947. C     .. Data statements ..
  28948.       DATA PI /3.141592653589793238462643/
  28949. C***FIRST EXECUTABLE STATEMENT  D114QX
  28950.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  28951. C
  28952.       IPASS = 1
  28953.       ANS(1) = 0.25
  28954.       ANS(2) = 0.5*PI
  28955.       ANS(3) = 0.5*SQRT(PI)
  28956.       ANS(4) = 5040.0
  28957.       ANS(5) = 0.05
  28958.       N = 1
  28959.       M = 8
  28960.       Y(1) = GAUSS (N,D114F0,M,LGNDR)
  28961.       Y(2) = GAUSS (N,D114F1,M,CBSHV)
  28962.       Y(3) = GAUSS (N,D114F2,M,HRMTE)
  28963.       Y(4) = GAUSS (N,D114F3,M,LAGRE)
  28964.       M = 19
  28965.       Y(5) = GAUSS (N,D114F4,M,LGNDRX)
  28966.       ERRTOL = SQRT(R1MACH(4))
  28967.       DO 10 I = 1,5
  28968.         IF (KPRINT .GE. 3) WRITE (LUN, 9010) I,Y(I),I,ANS(I)
  28969.         RELERR = ABS(Y(I)-ANS(I))/ANS(I)
  28970.          IF (RELERR .GT. ERRTOL) THEN
  28971.            IPASS = 0
  28972.            IF (KPRINT .GE. 2) WRITE (LUN,9020) I,Y(I),I,ANS(I)
  28973.          ENDIF
  28974.    10 CONTINUE
  28975.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 9030)
  28976.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 9040)
  28977.       RETURN
  28978. C
  28979.  9000 FORMAT (/ ' GAUSS Quick Check' /)
  28980.  9010 FORMAT (' Y(', I2, ') =', E22.13, 10X, 'ANS(', I2, ') =',
  28981.      +        E22.13)
  28982.  9020 FORMAT (' D114QX FAILED, Y(', I2, ') =', E22.13, 5X,
  28983.      +        'ANS(', I2, ') =', E22.13)
  28984.  9030 FORMAT (' GAUSS and its associated routines are correct.' /)
  28985.  9040 FORMAT (' GAUSS and its associated routines are incorrect.' /)
  28986.       END
  28987. *DECK D117QX
  28988.       SUBROUTINE D117QX (LUN, KPRINT, IPASS)
  28989. C***BEGIN PROLOGUE  D117QX
  28990. C***PURPOSE  Quick check for SPL1D1 and SPL1D2.
  28991. C***LIBRARY   CLAMS
  28992. C***AUTHOR  (UNKNOWN)
  28993. C***ROUTINES CALLED  R1MACH, SPL1D1, SPL1D2, SPLINT
  28994. C***REVISION HISTORY  (YYMMDD)
  28995. C   ??????  DATE WRITTEN
  28996. C   910815  Prologue filled out and brought up to the SLATEC 1990
  28997. C           standard.  (WRB)
  28998. C   920701  Declarations section restructured and some code cleaned.
  28999. C           (WRB)
  29000. C***END PROLOGUE  D117QX
  29001. C     .. Scalar Arguments ..
  29002.       INTEGER IPASS, KPRINT, LUN
  29003. C     .. Local Scalars ..
  29004.       REAL ERRTOL, RELERR
  29005.       INTEGER I, IJ, N
  29006. C     .. Local Arrays ..
  29007.       REAL A(4), ANS(4), B(4), C(4), F(4), W(4), X(4), Y(4)
  29008.       INTEGER IOP(2)
  29009. C     .. External Functions ..
  29010.       REAL R1MACH, SPLINT
  29011.       EXTERNAL R1MACH, SPLINT
  29012. C     .. External Subroutines ..
  29013.       EXTERNAL SPL1D1, SPL1D2
  29014. C     .. Intrinsic Functions ..
  29015.       INTRINSIC ABS, SQRT
  29016. C     .. Data statements ..
  29017.       DATA X /-1.0, 0.0, 1.0, 3.0/, F /4*0.0/
  29018.       DATA ANS(1), ANS(2), ANS(3)/0.5, 0.5, -1.0/
  29019. C***FIRST EXECUTABLE STATEMENT  D117QX
  29020.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  29021. C
  29022.       IPASS = 1
  29023.       N = 4
  29024.       IJ = 1
  29025.       W(1) = -4.0
  29026.       W(N) = -2.0
  29027.       IOP(1) = 3
  29028.       IOP(2) = 3
  29029.       CALL SPL1D1 (N,X,F,W,IOP,IJ,A,B,C)
  29030.       CALL SPL1D2 (N,X,F,W,IJ,2.,Y)
  29031.       ANS(4) = 1.0/3.0
  29032.       Y(4) = SPLINT (N,X,F,W,IJ,X(1),X(4))
  29033.       ERRTOL = SQRT (R1MACH(4))
  29034.       DO 10 I = 1,4
  29035.         IF (KPRINT .GE. 3) WRITE(LUN,9010) I,Y(I),I,ANS(I)
  29036.         RELERR = ABS((Y(I)-ANS(I))/ANS(I))
  29037.         IF (RELERR .GT. ERRTOL) THEN
  29038.           IPASS = 0
  29039.           IF (KPRINT .GE. 2) WRITE (LUN,9020) I,Y(I),I,ANS(I)
  29040.         ENDIF
  29041.    10 CONTINUE
  29042.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 9030)
  29043.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 9040)
  29044.       RETURN
  29045. C
  29046.  9000 FORMAT (/ ' SPLINT Quick Check' /)
  29047.  9010 FORMAT (' Y(', I2, ') =', E22.13, 10X, 'ANS(', I2, ') =',
  29048.      +        E22.13)
  29049.  9020 FORMAT (' D117QX FAILED, Y(', I2, ') =', E22.13, ' ANS(', I2,
  29050.      +        ') =', E22.13)
  29051.  9030 FORMAT (' SPLINT and its associated routines are correct.' /)
  29052.  9040 FORMAT (' SPLINT and its associated routines are incorrect.' /)
  29053.       END
  29054. *DECK D118QX
  29055.       SUBROUTINE D118QX (LUN, KPRINT, IPASS)
  29056. C***BEGIN PROLOGUE  D118QX
  29057. C***PURPOSE  Quick check for SPL2D1, SPL2D2 and SPLIN2.
  29058. C***LIBRARY   CLAMS
  29059. C***AUTHOR  (UNKNOWN)
  29060. C***ROUTINES CALLED  R1MACH, SPL2D1, SPL2D2, SPLIN2
  29061. C***REVISION HISTORY  (YYMMDD)
  29062. C   ??????  DATE WRITTEN
  29063. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29064. C           standard.  (WRB)
  29065. C   920701  Declarations section restructured and some code cleaned.
  29066. C           (WRB)
  29067. C***END PROLOGUE  D118QX
  29068. C     .. Scalar Arguments ..
  29069.       INTEGER IPASS, KPRINT, LUN
  29070. C     .. Local Scalars ..
  29071.       REAL ERRTOL, RELERR
  29072.       INTEGER I, MAXY, NX, NY
  29073. C     .. Local Arrays ..
  29074.       REAL ANS(2), APP(2), F(4,4), FX(4,4), FXY(4,4), FY(4,4), T1(4),
  29075.      +     T2(4), T3(4), X(4), Y(4)
  29076.       INTEGER IBD(6)
  29077. C     .. External Functions ..
  29078.       REAL R1MACH, SPL2D2, SPLIN2
  29079.       EXTERNAL R1MACH, SPL2D2, SPLIN2
  29080. C     .. External Subroutines ..
  29081.       EXTERNAL SPL2D1
  29082. C     .. Intrinsic Functions ..
  29083.       INTRINSIC ABS, SQRT
  29084. C     .. Data statements ..
  29085.       DATA X /0.0, 1.0, 2.0, 3.0/
  29086.       DATA Y /0.0, 1.0, 2.0, 3.0/
  29087.       DATA F /0.0, 1.0, 8.0, 27.0, 1.0, 2.0, 9.0, 28.0, 8.0, 9.0, 16.0,
  29088.      +        35.0, 27.0, 28.0, 35.0, 54.0/
  29089.       DATA ANS /9.0, 7.5/
  29090. C***FIRST EXECUTABLE STATEMENT  D118QX
  29091.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  29092. C
  29093.       IPASS = 1
  29094.       NX = 4
  29095.       NY = 4
  29096.       MAXY = 4
  29097.       DO 10 I = 1,4
  29098.         FX(I,1) = 0.0
  29099.         FY(1,I) = 0.0
  29100.         FX(I,4) = 27.0
  29101.         FY(4,I) = 27.0
  29102.    10 CONTINUE
  29103.       FXY(1,1) = 0.0
  29104.       FXY(4,1) = 0.0
  29105.       FXY(1,4) = 0.0
  29106.       FXY(4,4) = 0.0
  29107.       IBD(1) = 3
  29108.       IBD(2) = 3
  29109.       IBD(3) = 3
  29110.       IBD(4) = 3
  29111.       IBD(5) = 1
  29112.       IBD(6) = 1
  29113.       CALL SPL2D1 (NX,X,NY,Y,F,FX,FY,FXY,MAXY,IBD,T1,T2,T3)
  29114.       APP(1) = SPL2D2 (1.5,1.5,NX,X,NY,Y,F,FX,FY,FXY,MAXY,0,2)
  29115.       APP(2) = SPLIN2 (NX,X,NY,Y,F,FX,FY,FXY,MAXY,1.0,2.0,1.0,2.0,T1,T2)
  29116.       ERRTOL = SQRT(R1MACH(4))
  29117.       DO 20 I = 1,2
  29118.         IF (KPRINT .GE. 3) WRITE (LUN, 9010) I,APP(I),I,ANS(I)
  29119.         RELERR = ABS(APP(I)-ANS(I))/ANS(I)
  29120.         IF (RELERR .GT. ERRTOL) THEN
  29121.           IPASS = 0
  29122.           IF (KPRINT .GE. 2) WRITE (LUN,9020) I,APP(I),I,ANS(I)
  29123.         ENDIF
  29124.    20 CONTINUE
  29125.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 9030)
  29126.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 9040)
  29127.       RETURN
  29128. C
  29129.  9000 FORMAT (/ ' SPLIN2 Quick Check' /)
  29130.  9010 FORMAT (' APP(', I2, ') =', E22.13, 10X, 'ANS(', I2, ') =',
  29131.      +        E22.13)
  29132.  9020 FORMAT (' D118QX FAILED, APP(', I2, ') =', E22.13, 5X, 'ANS(',
  29133.      +        I2,') =', E22.13)
  29134.  9030 FORMAT (' SPLIN2 and its associated routines are correct.' /)
  29135.  9040 FORMAT (' SPLIN2 and its associated routines are incorrect.' /)
  29136.       END
  29137. *DECK D123F1
  29138.       DOUBLE PRECISION FUNCTION D123F1 (X)
  29139. C***BEGIN PROLOGUE  D123F1
  29140. C***PURPOSE  Integrand evaluator for GENGSQ quick check D123QX.
  29141. C***LIBRARY   CLAMS
  29142. C***AUTHOR  (UNKNOWN)
  29143. C***ROUTINES CALLED  (NONE)
  29144. C***REVISION HISTORY  (YYMMDD)
  29145. C   ??????  DATE WRITTEN
  29146. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29147. C           standard.  (WRB)
  29148. C   920701  Declarations section restructured.  (WRB)
  29149. C***END PROLOGUE  D123F1
  29150. C     .. Scalar Arguments ..
  29151.       DOUBLE PRECISION X
  29152. C***FIRST EXECUTABLE STATEMENT  D123F1
  29153.       D123F1 = X**6
  29154.       RETURN
  29155.       END
  29156. *DECK D123F2
  29157.       DOUBLE PRECISION FUNCTION D123F2 (X)
  29158. C***BEGIN PROLOGUE  D123F2
  29159. C***PURPOSE  Integrand evaluator for GENGSQ quick check D123QX.
  29160. C***LIBRARY   CLAMS
  29161. C***AUTHOR  (UNKNOWN)
  29162. C***ROUTINES CALLED  (NONE)
  29163. C***REVISION HISTORY  (YYMMDD)
  29164. C   ??????  DATE WRITTEN
  29165. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29166. C           standard.  (WRB)
  29167. C   920701  Declarations section restructured.  (WRB)
  29168. C***END PROLOGUE  D123F2
  29169. C     .. Scalar Arguments ..
  29170.       DOUBLE PRECISION X
  29171. C***FIRST EXECUTABLE STATEMENT  D123F2
  29172.       D123F2 = X**2
  29173.       RETURN
  29174.       END
  29175. *DECK D123QX
  29176.       SUBROUTINE D123QX (LUN, KPRINT, IPASS)
  29177. C***BEGIN PROLOGUE  D123QX
  29178. C***PURPOSE  Quick check for GENGSQ.
  29179. C***LIBRARY   CLAMS
  29180. C***AUTHOR  (UNKNOWN)
  29181. C***ROUTINES CALLED  D123F1, D123F2, D123W1, D123W2, D1MACH, GENGSQ
  29182. C***REVISION HISTORY  (YYMMDD)
  29183. C   ??????  DATE WRITTEN
  29184. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29185. C           standard.  (WRB)
  29186. C   920701  Declarations section restructured and some code cleaned.
  29187. C           (WRB)
  29188. C***END PROLOGUE  D123QX
  29189. C     .. Scalar Arguments ..
  29190.       INTEGER IPASS, KPRINT, LUN
  29191. C     .. Local Scalars ..
  29192.       DOUBLE PRECISION EL, EPS, ER, ERRTOL, FM, HALFPI, RELERR
  29193.       INTEGER I, ISWTCH, JORTH, JS, N, NIT
  29194. C     .. Local Arrays ..
  29195.       DOUBLE PRECISION A(8), ANS(2), B(8), G(8), W(8), Y(2)
  29196. C     .. External Functions ..
  29197.       DOUBLE PRECISION D123F1, D123F2, D123W1, D123W2, D1MACH
  29198.       EXTERNAL D123F1, D123F2, D123W1, D123W2, D1MACH
  29199. C     .. External Subroutines ..
  29200.       EXTERNAL GENGSQ
  29201. C     .. Intrinsic Functions ..
  29202.       INTRINSIC ABS, SQRT
  29203. C     .. Data statements ..
  29204.       DATA HALFPI /1.570796326794896619231322D0/
  29205. C***FIRST EXECUTABLE STATEMENT  D123QX
  29206.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  29207. C
  29208.       IPASS = 1
  29209.       ANS(1) = 2.0D0/7.0D0
  29210.       ANS(2) = HALFPI
  29211.       ERRTOL = SQRT(D1MACH(4))
  29212.       EPS = D1MACH(4)**0.75D0
  29213.       EL = -1.0D0
  29214.       ER = 1.0D0
  29215.       N = 8
  29216.       JORTH = 0
  29217.       JS = 0
  29218.       CALL GENGSQ (N,B,G,A,W,D123W1,JS,EL,ER,FM,JORTH,EPS,ISWTCH,NIT)
  29219.       Y(1) = 0.0D0
  29220.       DO 10 I = 1,N
  29221.         Y(1) = Y(1) + W(I)*D123F1(A(I))
  29222.    10 CONTINUE
  29223.       JS = 1
  29224.       CALL GENGSQ (N,B,G,A,W,D123W2,JS,EL,ER,FM,JORTH,EPS,ISWTCH,NIT)
  29225.       Y(2) = 0.0D0
  29226.       DO 20 I = 1,N
  29227.         Y(2) = Y(2) + W(I)*D123F2(A(I))
  29228.    20 CONTINUE
  29229.       DO 30 I = 1,2
  29230.         IF (KPRINT .GE. 3) THEN
  29231.           WRITE (UNIT=LUN,FMT=9010) I,Y(I),I,ANS(I)
  29232.         ENDIF
  29233.         RELERR = ABS(Y(I)-ANS(I))/ANS(I)
  29234.         IF (RELERR .GT. ERRTOL) THEN
  29235.           IPASS = 0
  29236.           IF (KPRINT .GE. 2) WRITE (UNIT=LUN,FMT=9020) I,Y(I),I,ANS(I)
  29237.         ENDIF
  29238.    30 CONTINUE
  29239.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 9030)
  29240.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 9040)
  29241.       RETURN
  29242. C
  29243.  9000 FORMAT (/ ' GENGSQ Quick Check' /)
  29244.  9010 FORMAT (' Y(', I2, ')   =', D35.26 / ' ANS(', I2, ') =', D35.26)
  29245.  9020 FORMAT (' D123QX FAILED, Y(', I2, ') =', D35.26 / 14X, 'ANS(',
  29246.      +        I2, ') =', D35.26)
  29247.  9030 FORMAT (' GENGSQ and its associated routines are correct.' /)
  29248.  9040 FORMAT (' GENGSQ and its associated routines are incorrect. '/)
  29249.       END
  29250. *DECK D123W1
  29251.       DOUBLE PRECISION FUNCTION D123W1 (X)
  29252. C***BEGIN PROLOGUE  D123W1
  29253. C***PURPOSE  Weight function evaluator for GENGSQ quick check D123QX.
  29254. C***LIBRARY   CLAMS
  29255. C***AUTHOR  (UNKNOWN)
  29256. C***ROUTINES CALLED  (NONE)
  29257. C***REVISION HISTORY  (YYMMDD)
  29258. C   ??????  DATE WRITTEN
  29259. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29260. C           standard.  (WRB)
  29261. C   920701  Declarations section restructured.  (WRB)
  29262. C***END PROLOGUE  D123W1
  29263. C     .. Scalar Arguments ..
  29264.       DOUBLE PRECISION X
  29265. C***FIRST EXECUTABLE STATEMENT  D123W1
  29266.       D123W1 = 1.0D0
  29267.       RETURN
  29268.       END
  29269. *DECK D123W2
  29270.       DOUBLE PRECISION FUNCTION D123W2 (X)
  29271. C***BEGIN PROLOGUE  D123W2
  29272. C***PURPOSE  Weight function evaluator for GENGSQ quick check D123QX.
  29273. C***LIBRARY   CLAMS
  29274. C***AUTHOR  (UNKNOWN)
  29275. C***ROUTINES CALLED  (NONE)
  29276. C***REVISION HISTORY  (YYMMDD)
  29277. C   ??????  DATE WRITTEN
  29278. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29279. C           standard.  (WRB)
  29280. C   920701  Declarations section restructured.  (WRB)
  29281. C***END PROLOGUE  D123W2
  29282. C     .. Scalar Arguments ..
  29283.       DOUBLE PRECISION X
  29284. C     .. Intrinsic Functions ..
  29285.       INTRINSIC SQRT
  29286. C***FIRST EXECUTABLE STATEMENT  D123W2
  29287.       D123W2 = 1.0D0/SQRT(1.0D0-X**2)
  29288.       RETURN
  29289.       END
  29290. *DECK DDB2QX
  29291.       SUBROUTINE DDB2QX (LUN, KPRINT, IPASS)
  29292. C***BEGIN PROLOGUE  DDB2QX
  29293. C***PURPOSE  Quick check for DDRVB2.
  29294. C***LIBRARY   CLAMS
  29295. C***AUTHOR  Kahaner, D. K., (NIST)
  29296. C           Sutherland, C. D., (LANL)
  29297. C***DESCRIPTION
  29298. C
  29299. C   ALL CHECK PROGRAM
  29300. C
  29301. C   PART OF DDRVB1,2,3 PACKAGE, DOUBLE PRECISION VERSION
  29302. C
  29303. C***ROUTINES CALLED  D1MACH, DDRVB2, DF2, DG2
  29304. C***COMMON BLOCKS    DCONS2
  29305. C***REVISION HISTORY  (YYMMDD)
  29306. C   ??????  DATE WRITTEN
  29307. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29308. C           standard.  (WRB)
  29309. C   920715  Modified code to allow a second call to DDRVB2.  (WRB)
  29310. C***END PROLOGUE  DDB2QX
  29311.       PARAMETER(LENW=263, LENIW=23)
  29312.       EXTERNAL DF2, DG2
  29313.       DOUBLE PRECISION ALFA, EPS, EWT(1), D1MACH, T, TOUT,
  29314.      1 WORK(LENW), Y(3)
  29315.       INTEGER IWORK(LENIW)
  29316.       COMMON /DCONS2/ ALFA
  29317.       DATA N /3/, EWT(1) /.00001D0/, MITER /0/, IMPL /0/
  29318. C***FIRST EXECUTABLE STATEMENT  DDB2QX
  29319.       EPS = D1MACH(4)**(1.D0/3.D0)
  29320.       ALFA = 1.D0
  29321.       IF (KPRINT .GE. 3) THEN
  29322.       WRITE(LUN, '(// ''     *****'' / '' DDRVB2 TEST'' /
  29323.      8  '' IF THE FOLLOWING TEST IS SUCCESSFUL, THE LAST LINE OF THIS''
  29324.      8  / '' OUTPUT FILE (APPROXIMATELY 45 LINES BEYOND THIS POINT)''
  29325.      8  / '' SHOULD BE -- DDRVB2 TEST PASSED.''
  29326.      8  / '' ANY OTHER FINAL MESSAGE INDICATES SOME TEST FAILURE.''
  29327.      8  / ''     *****'')')
  29328.       WRITE(LUN, '(/ '' EPS ='', 1PD15.5)') EPS
  29329.       WRITE(LUN, '(/ '' A = '',  1PD10.2 // 1X, ''CYCLE'', 3X,
  29330.      8  ''TIME'', 6X, ''Y(1)'', 6X, ''Y(2)'', 6X, ''Y(3)'', 4X,
  29331.      8  ''MINT'', 1X, ''MITER'', 1X, ''IMPL'', 1X, ''NFE'', 1X,
  29332.      8  ''NJE'')') ALFA
  29333.       ENDIF
  29334.       DO 50 MINT = 1,3
  29335.         IF (MINT.EQ.2) THEN
  29336.           NROOT = 1
  29337.         ELSE
  29338.           NROOT = 0
  29339.         ENDIF
  29340.         T = 0.D0
  29341.         Y(1) = 10.D0
  29342.         Y(2) = 0.D0
  29343.         Y(3) = 10.D0
  29344.         NSTATE = 1
  29345.         TOUT = 10.D0
  29346.         CALL XGETF (KONTRL)
  29347.         CALL XSETF (0)
  29348.         CALL XERCLR
  29349.         ICALL = 0
  29350.  10     CALL DDRVB2 (N, T, Y, DF2, TOUT, NSTATE, NROOT, EPS, EWT,
  29351.      8               MINT,WORK,LENW,IWORK,LENIW,DG2)
  29352.         ICALL = ICALL + 1
  29353.         IF (MSTATE.EQ.3 .AND. ICALL.LE.2) GO TO 10
  29354.         CALL XSETF (KONTRL)
  29355.         CALL XERCLR
  29356.         IF (NSTATE.NE.2 .AND. NSTATE.NE.5) GO TO 60
  29357.         NSTEP = IWORK(3)
  29358.         NFE = IWORK(4)
  29359.         NJE = IWORK(5)
  29360.         IF (NSTATE.EQ.5) THEN
  29361.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P4D10.2, I5, I6, I5, 2I4)')
  29362.      8    NSTEP, T, (Y(I), I=1,3), MINT, MITER, IMPL, NFE, NJE
  29363.           IF (ABS(Y(1) - 1.D0).GT.EPS**(2.D0/3.D0)) GO TO 60
  29364.           GO TO 10
  29365.         ELSE
  29366.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P4D10.2, I5, I6, I5, 2I4)')
  29367.      8    NSTEP, TOUT, (Y(I), I=1,3), MINT, MITER, IMPL, NFE, NJE
  29368.           IF (ABS(1.D0 - Y(1)*1.5D0).GT.EPS**(2.D0/3.D0) .OR.
  29369.      8    ABS(1.D0 - Y(2)*3.D0).GT.EPS**(2.D0/3.D0) .OR.
  29370.      8    ABS(1.D0 - Y(3)).GT.EPS**(2.D0/3.D0)) GO TO 60
  29371.         ENDIF
  29372.  50     CONTINUE
  29373.       IPASS = 1
  29374.       IF (KPRINT .GT. 1) THEN
  29375.       WRITE(LUN,
  29376.      8  '(// ''     *****'' /'' DDRVB2 TEST PASSED'' / ''     *****'')')
  29377.       ENDIF
  29378.       RETURN
  29379.  60   IPASS = 0
  29380.       IF (KPRINT .GT. 0) THEN
  29381.       WRITE(LUN, '(// ''     *****'' / '' DDRVB2 TEST FAILED'' /
  29382.      8  ''     *****'' //)')
  29383.       ENDIF
  29384.       RETURN
  29385.       END
  29386. *DECK DDB3QX
  29387.       SUBROUTINE DDB3QX (LUN, KPRINT, IPASS)
  29388. C***BEGIN PROLOGUE  DDB3QX
  29389. C***PURPOSE  Quick check for DDRVB3.
  29390. C***LIBRARY   CLAMS
  29391. C***AUTHOR  Kahaner, D. K., (NIST)
  29392. C           Sutherland, C. D., (LANL)
  29393. C***DESCRIPTION
  29394. C
  29395. C   ALL CHECK PROGRAM
  29396. C
  29397. C   PART OF DDRVB1,2,3 PACKAGE, DOUBLE PRECISION VERSION
  29398. C
  29399. C***ROUTINES CALLED  D1MACH, DDRVB3, DF3, DFA3, DG3, DJAC3
  29400. C***COMMON BLOCKS    DCONS3
  29401. C***REVISION HISTORY  (YYMMDD)
  29402. C   ??????  DATE WRITTEN
  29403. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29404. C           standard.  (WRB)
  29405. C   920715  Changed MXSTEP to 1500.  (WRB)
  29406. C***END PROLOGUE  DDB3QX
  29407.       PARAMETER(LENW=294, LENIW=23)
  29408.       EXTERNAL DF3, DJAC3, DFA3, DG3
  29409.       DOUBLE PRECISION ALFA, EPS, EWT(1), HMAX, D1MACH, T, TOUT,
  29410.      1 WORK(LENW), Y(3)
  29411.       INTEGER IWORK(LENIW)
  29412.       COMMON /DCONS3/ ALFA, IMPL, MITER
  29413.       DATA N /3/, EWT(1) /.00001D0/, IERROR /3/, ML /2/, MU /2/,
  29414.      8     HMAX /15.D0/, NDE /2/, MXSTEP /1500/
  29415. C***FIRST EXECUTABLE STATEMENT  DDB3QX
  29416.       EPS = D1MACH(4)**(1.D0/3.D0)
  29417.       ALFA = 1.D0
  29418.       IF (KPRINT .GE. 3) THEN
  29419.       WRITE(LUN, '(// ''     *****'' / '' DDRVB3 TEST'' /
  29420.      8  '' IF THE FOLLOWING TEST IS SUCCESSFUL, THE LAST LINE OF THIS''
  29421.      8  / '' OUTPUT FILE (APPROXIMATELY 45 LINES BEYOND THIS POINT)''
  29422.      8  / '' SHOULD BE -- DDRVB3 TEST PASSED.''
  29423.      8  / '' ANY OTHER FINAL MESSAGE INDICATES SOME TEST FAILURE.''
  29424.      8  / ''     *****'')')
  29425.       WRITE(LUN, '(/ '' EPS ='', 1PD15.5)') EPS
  29426.       WRITE(LUN, '(/ '' A = '',  1PD10.2 // 1X, ''CYCLE'', 3X,
  29427.      8  ''TIME'', 6X, ''Y(1)'', 6X, ''Y(2)'', 6X, ''Y(3)'', 4X,
  29428.      8  ''MINT'', 1X, ''MITER'', 1X, ''IMPL'', 1X, ''NFE'', 1X,
  29429.      8  ''NJE'')') ALFA
  29430.       ENDIF
  29431.       DO 50 IMPLP1 = 1,3
  29432.       DO 50 MINT = 1,3
  29433.       DO 50 MITERP = 1,6
  29434.         MITER = MITERP - 1
  29435.         IMPL = IMPLP1 - 1
  29436.         IF (MITER .EQ. 3) GO TO 50
  29437.         IF (IMPL.GT.0 .AND. MITER.EQ.0) GO TO 50
  29438.         IF (IMPL.EQ.2 .AND. MINT.EQ.1) GO TO 50
  29439.         IF (MINT.EQ.3 .AND. (IMPL.NE.0 .OR. MITER.EQ.0 .OR.
  29440.      8  MITER.EQ.3)) GO TO 50
  29441.         IF (MINT.EQ.1 .OR. MINT.EQ.3) THEN
  29442.           MXORD = 12
  29443.         ELSE IF (MINT.EQ.2) THEN
  29444.           MXORD = 5
  29445.         ENDIF
  29446.         IF (MINT.EQ.2 .AND. MITER.EQ.2 .AND. IMPL.EQ.0) THEN
  29447.           NROOT = 1
  29448.         ELSE
  29449.           NROOT = 0
  29450.         ENDIF
  29451.         T = 0.D0
  29452.         Y(1) = 10.D0
  29453.         Y(2) = 0.D0
  29454.         Y(3) = 10.D0
  29455.         NSTATE = 1
  29456.         TOUT = 10.D0
  29457.         NTASK = 1
  29458.  10     CALL DDRVB3 (N, T, Y, DF3, NSTATE, TOUT, NTASK, NROOT, EPS, EWT,
  29459.      8               IERROR, MINT, MITER, IMPL, ML, MU, MXORD, HMAX,
  29460.      8               WORK,LENW,IWORK,LENIW,DJAC3,DFA3,NDE,MXSTEP,DG3)
  29461.         IF (NSTATE.NE.2 .AND. NSTATE.NE.5) GO TO 60
  29462.         NSTEP = IWORK(3)
  29463.         NFE = IWORK(4)
  29464.         NJE = IWORK(5)
  29465.         IF (NSTATE.EQ.5) THEN
  29466.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P4D10.2, I5, I6, I5, 2I4)')
  29467.      8    NSTEP, T, (Y(I), I=1,3), MINT, MITER, IMPL, NFE, NJE
  29468.           IF (ABS(Y(1) - 1.D0).GT.EPS**(2.D0/3.D0)) GO TO 60
  29469.           GO TO 10
  29470.         ELSE
  29471.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P4D10.2, I5, I6, I5, 2I4)')
  29472.      8    NSTEP, TOUT, (Y(I), I=1,3), MINT, MITER, IMPL, NFE, NJE
  29473.           IF (ABS(1.D0 - Y(1)*1.5D0).GT.EPS**(2.D0/3.D0) .OR.
  29474.      8    ABS(1.D0 - Y(2)*3.D0).GT.EPS**(2.D0/3.D0) .OR.
  29475.      8    ABS(1.D0 - Y(3)).GT.EPS**(2.D0/3.D0)) GO TO 60
  29476.         ENDIF
  29477.  50     CONTINUE
  29478.       IPASS = 1
  29479.       IF (KPRINT .GT. 1) THEN
  29480.       WRITE(LUN,
  29481.      8  '(// ''     *****'' /'' DDRVB3 TEST PASSED'' / ''     *****'')')
  29482.       ENDIF
  29483.       RETURN
  29484.  60   IPASS = 0
  29485.       IF (KPRINT .GT. 0) THEN
  29486.       WRITE(LUN, '(// ''     *****'' / '' DDRVB3 TEST FAILED'' /
  29487.      8  ''     *****'' //)')
  29488.       ENDIF
  29489.       RETURN
  29490.       END
  29491. *DECK DF2
  29492.       SUBROUTINE DF2 (N, T, Y, YP)
  29493. C***BEGIN PROLOGUE  DF2
  29494. C***PURPOSE  Derivative evaluator for DDB2QX.
  29495. C***LIBRARY   CLAMS
  29496. C***AUTHOR  Kahaner, D. K., (NIST)
  29497. C           Sutherland, C. D., (LANL)
  29498. C***ROUTINES CALLED  (NONE)
  29499. C***COMMON BLOCKS    DCONS2
  29500. C***REVISION HISTORY  (YYMMDD)
  29501. C   ??????  DATE WRITTEN
  29502. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29503. C           standard.  (WRB)
  29504. C***END PROLOGUE  DF2
  29505.       DOUBLE PRECISION ALFA,T,Y(*),YP(*)
  29506.       COMMON /DCONS2/ ALFA
  29507. C***FIRST EXECUTABLE STATEMENT  DF2
  29508.       YP(1) = 1.D0 + ALFA*(Y(2) - Y(1)) - Y(1)*Y(3)
  29509.       YP(2) = ALFA*(Y(1) - Y(2)) - Y(2)*Y(3)
  29510.       YP(3) = 1.D0 - Y(3)*(Y(1) + Y(2))
  29511.       END
  29512. *DECK DF3
  29513.       SUBROUTINE DF3 (N, T, Y, YP)
  29514. C***BEGIN PROLOGUE  DF3
  29515. C***PURPOSE  Derivative evaluator for DDB3QX.
  29516. C***LIBRARY   CLAMS
  29517. C***AUTHOR  Kahaner, D. K., (NIST)
  29518. C           Sutherland, C. D., (LANL)
  29519. C***ROUTINES CALLED  (NONE)
  29520. C***COMMON BLOCKS    DCONS3
  29521. C***REVISION HISTORY  (YYMMDD)
  29522. C   ??????  DATE WRITTEN
  29523. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29524. C           standard.  (WRB)
  29525. C***END PROLOGUE  DF3
  29526.       DOUBLE PRECISION ALFA,T,Y(*),YP(*)
  29527.       COMMON /DCONS3/ ALFA, IMPL, MITER
  29528. C***FIRST EXECUTABLE STATEMENT  DF3
  29529.       YP(1) = 1.D0 + ALFA*(Y(2) - Y(1)) - Y(1)*Y(3)
  29530.       YP(2) = ALFA*(Y(1) - Y(2)) - Y(2)*Y(3)
  29531.       IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  29532.         YP(3) = 1.D0 - Y(3)*(Y(1) + Y(2))
  29533.       ELSE IF (IMPL.EQ.2) THEN
  29534.         YP(3) = Y(1) + Y(2) - Y(3)
  29535.       ENDIF
  29536.       END
  29537. *DECK DFA3
  29538.       SUBROUTINE DFA3 (N, T, Y, A, MATDIM, ML, MU, NDE)
  29539. C***BEGIN PROLOGUE  DFA3
  29540. C***PURPOSE  Matrix evaluator for DDB3QX.
  29541. C***LIBRARY   CLAMS
  29542. C***AUTHOR  Kahaner, D. K., (NIST)
  29543. C           Sutherland, C. D., (LANL)
  29544. C***ROUTINES CALLED  (NONE)
  29545. C***COMMON BLOCKS    DCONS3
  29546. C***REVISION HISTORY  (YYMMDD)
  29547. C   ??????  DATE WRITTEN
  29548. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29549. C           standard.  (WRB)
  29550. C***END PROLOGUE  DFA3
  29551.       DOUBLE PRECISION A(MATDIM,*),ALFA,T,Y(*)
  29552.       COMMON /DCONS3/ ALFA, IMPL, MITER
  29553. C***FIRST EXECUTABLE STATEMENT  DFA3
  29554.       IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  29555.         IF (MITER.EQ.1 .OR. MITER.EQ.2 .OR. MITER.EQ.3) THEN
  29556.           DO 20 J = 1,N
  29557.             DO 10 I = 1,N
  29558.  10           A(I,J) = 0.D0
  29559.  20         A(J,J) = 1.D0
  29560.         ELSE IF (MITER.EQ.4) THEN
  29561.           DO 50 J = 1,N
  29562.             DO 40 I = 1,N
  29563.               I1 = I + MU + 1 - J
  29564.  40           A(I1,J) = 0.D0
  29565.  50         A(MU+1,J) = 1.D0
  29566.         ENDIF
  29567.       ELSE IF (IMPL.EQ.2) THEN
  29568.         A(1,1) = 1.D0
  29569.         A(2,1) = 1.D0
  29570.       ENDIF
  29571.       END
  29572. *DECK DG2
  29573.       DOUBLE PRECISION FUNCTION DG2 (N, T, Y, IROOT)
  29574. C***BEGIN PROLOGUE  DG2
  29575. C***PURPOSE  Algebric equation evaluator for DDB2QX.
  29576. C***LIBRARY   CLAMS
  29577. C***AUTHOR  Kahaner, D. K., (NIST)
  29578. C           Sutherland, C. D., (LANL)
  29579. C***ROUTINES CALLED  (NONE)
  29580. C***REVISION HISTORY  (YYMMDD)
  29581. C   ??????  DATE WRITTEN
  29582. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29583. C           standard.  (WRB)
  29584. C***END PROLOGUE  DG2
  29585.       DOUBLE PRECISION T, Y(*)
  29586. C***FIRST EXECUTABLE STATEMENT  DG2
  29587.       DG2 = Y(1) - 1.D0
  29588.       END
  29589. *DECK DG3
  29590.       DOUBLE PRECISION FUNCTION DG3 (N, T, Y, IROOT)
  29591. C***BEGIN PROLOGUE  DG3
  29592. C***PURPOSE  Algebric equation evaluator for DDB3QX.
  29593. C***LIBRARY   CLAMS
  29594. C***AUTHOR  Kahaner, D. K., (NIST)
  29595. C           Sutherland, C. D., (LANL)
  29596. C***ROUTINES CALLED  (NONE)
  29597. C***REVISION HISTORY  (YYMMDD)
  29598. C   ??????  DATE WRITTEN
  29599. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29600. C           standard.  (WRB)
  29601. C***END PROLOGUE  DG3
  29602.       DOUBLE PRECISION T, Y(*)
  29603. C***FIRST EXECUTABLE STATEMENT  DG3
  29604.       DG3 = Y(1) - 1.D0
  29605.       END
  29606. *DECK DJAC3
  29607.       SUBROUTINE DJAC3 (N, T, Y, DFDY, MATDIM, ML, MU)
  29608. C***BEGIN PROLOGUE  DJAC3
  29609. C***PURPOSE  Jacobian evaluator for DDB3QX.
  29610. C***LIBRARY   CLAMS
  29611. C***AUTHOR  Kahaner, D. K., (NIST)
  29612. C           Sutherland, C. D., (LANL)
  29613. C***ROUTINES CALLED  (NONE)
  29614. C***COMMON BLOCKS    DCONS3
  29615. C***REVISION HISTORY  (YYMMDD)
  29616. C   ??????  DATE WRITTEN
  29617. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29618. C           standard.  (WRB)
  29619. C***END PROLOGUE  DJAC3
  29620.       DOUBLE PRECISION ALFA,DFDY(MATDIM,*),T,Y(*)
  29621.       COMMON /DCONS3/ ALFA, IMPL, MITER
  29622. C***FIRST EXECUTABLE STATEMENT  DJAC3
  29623.       IF (MITER.EQ.1 .OR. MITER.EQ.3) THEN
  29624.         DFDY(1,1) = -ALFA - Y(3)
  29625.         DFDY(1,2) = ALFA
  29626.         DFDY(1,3) = -Y(1)
  29627.         DFDY(2,1) = ALFA
  29628.         DFDY(2,2) = -ALFA - Y(3)
  29629.         DFDY(2,3) = -Y(2)
  29630.         IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  29631.           DFDY(3,1) = -Y(3)
  29632.           DFDY(3,2) = -Y(3)
  29633.           DFDY(3,3) = -Y(1) - Y(2)
  29634.         ELSE IF (IMPL.EQ.2) THEN
  29635.           DFDY(3,1) = 1.D0
  29636.           DFDY(3,2) = 1.D0
  29637.           DFDY(3,3) = -1.D0
  29638.         ENDIF
  29639.       ELSE IF (MITER.EQ.4) THEN
  29640.         DFDY(3,1) = -ALFA - Y(3)
  29641.         DFDY(2,2) = ALFA
  29642.         DFDY(1,3) = -Y(1)
  29643.         DFDY(4,1) = ALFA
  29644.         DFDY(3,2) = DFDY(3,1)
  29645.         DFDY(2,3) = -Y(2)
  29646.         IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  29647.           DFDY(5,1) = -Y(3)
  29648.           DFDY(4,2) = -Y(3)
  29649.           DFDY(3,3) = -Y(1) - Y(2)
  29650.         ELSE IF (IMPL.EQ.2) THEN
  29651.           DFDY(5,1) = 1.D0
  29652.           DFDY(4,2) = 1.D0
  29653.           DFDY(3,3) = -1.D0
  29654.         ENDIF
  29655.       ENDIF
  29656.       END
  29657. *DECK F146QX
  29658.       SUBROUTINE F146QX (LUN, KPRINT, IPASS)
  29659. C***BEGIN PROLOGUE  F146QX
  29660. C***PURPOSE  Quick check for ISAMIN, ISMAX and ISMIN.
  29661. C***LIBRARY   CLAMS
  29662. C***AUTHOR  (UNKNOWN)
  29663. C***ROUTINES CALLED  ISAMIN, ISMAX, ISMIN
  29664. C***REVISION HISTORY  (YYMMDD)
  29665. C   ??????  DATE WRITTEN
  29666. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29667. C           standard.  (WRB)
  29668. C   920701  Declarations section restructured and some code cleaned.
  29669. C           (WRB)
  29670. C***END PROLOGUE  F146QX
  29671. C     .. Scalar Arguments ..
  29672.       INTEGER IPASS, KPRINT, LUN
  29673. C     .. Local Scalars ..
  29674.       INTEGER I, INC, N
  29675. C     .. Local Arrays ..
  29676.       REAL X(19)
  29677.       INTEGER IANS(3), IND(3)
  29678. C     .. External Functions ..
  29679.       INTEGER ISAMIN, ISMAX, ISMIN
  29680.       EXTERNAL ISAMIN, ISMAX, ISMIN
  29681. C     .. Data statements ..
  29682.       DATA X / 0.0, -1.0, 1.0, -2.0, 2.0, -3.0, 3.0, -4.0, 4.0,
  29683.      +        -5.0, 5.0, -6.0, 6.0, -7.0, 7.0, -8.0, 8.0, -9.0, 9.0 /
  29684. C***FIRST EXECUTABLE STATEMENT  F146QX
  29685.       IF (KPRINT .GE. 2) WRITE (UNIT=LUN,FMT=9000)
  29686. C
  29687.       IPASS = 1
  29688.       N = 19
  29689.       INC = 1
  29690.       IF (KPRINT .GE. 3) WRITE (UNIT=LUN,FMT=9010) (X(I),I=1,N)
  29691.       IND(1) = ISAMIN (N,X,INC)
  29692.       IND(2) = ISMAX (N,X,INC)
  29693.       IND(3) = ISMIN (N,X,INC)
  29694.       IF (KPRINT .GE. 3) THEN
  29695.         DO 10 I = 1,3
  29696.           WRITE (UNIT=LUN,FMT=9020) I,IND(I),IND(I),X(IND(I))
  29697.    10   CONTINUE
  29698.       ENDIF
  29699.       IANS(1) = 1
  29700.       IANS(2) = 19
  29701.       IANS(3) = 18
  29702.       DO 20 I = 1,3
  29703.         IF (IND(I) .NE. IANS(I)) THEN
  29704.           IPASS = 0
  29705.           IF (KPRINT .GE. 2)
  29706.      +      WRITE (UNIT=LUN,FMT=9030) I,IND(I),I,IANS(I)
  29707.         ENDIF
  29708.    20 CONTINUE
  29709.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 9040)
  29710.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 9050)
  29711.       RETURN
  29712. C
  29713.  9000 FORMAT (/ ' ISAMIN, ISMAX, and ISMIN Quick Check' /)
  29714.  9010 FORMAT (' Elements of array X:', 2(/ 10F7.2))
  29715.  9020 FORMAT (' IND(', I2, ') =', I2, 5X, 'X(', I2, ') =', F7.2)
  29716.  9030 FORMAT (' F146QX FAILED, IND(', I2, ') =', I2, 5X, 'IANS(', I2,
  29717.      +        ') =', I2)
  29718.  9040 FORMAT (' ISAMIN, ISMAX, and ISMIN are correct.' /)
  29719.  9050 FORMAT (' At least one of ISAMIN, ISMAX and ISMIN is incorrect.'
  29720.      +        /)
  29721.       END
  29722. *DECK FA
  29723.       SUBROUTINE FA (N, T, Y, A, MATDIM, ML, MU, NDE)
  29724. C***BEGIN PROLOGUE  FA
  29725. C***SUBSIDIARY
  29726. C***PURPOSE  Dummy matrix evaluation routine for SDRIVE quick checks.
  29727. C***LIBRARY   CLAMS
  29728. C***AUTHOR  Kahaner, D. K., (NIST)
  29729. C           Sutherland, C. D., (LANL)
  29730. C***ROUTINES CALLED  (NONE)
  29731. C***REVISION HISTORY  (YYMMDD)
  29732. C   ??????  DATE WRITTEN
  29733. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29734. C           standard.  (WRB)
  29735. C***END PROLOGUE  FA
  29736. C***FIRST EXECUTABLE STATEMENT  FA
  29737.       RETURN
  29738.       END
  29739. *DECK ICMMQX
  29740.       SUBROUTINE ICMMQX (LUN, KPRINT, IPASS)
  29741. C***BEGIN PROLOGUE  ICMMQX
  29742. C***PURPOSE  Quick check for ICAMIN.
  29743. C***LIBRARY   CLAMS
  29744. C***AUTHOR  Boland, W. Robert, (LANL)
  29745. C***ROUTINES CALLED  ICAMIN
  29746. C***REVISION HISTORY  (YYMMDD)
  29747. C   910408  DATE WRITTEN
  29748. C   920701  Declarations section restructured and some code cleaned.
  29749. C           (WRB)
  29750. C***END PROLOGUE  ICMMQX
  29751. C     .. Scalar Arguments ..
  29752.       INTEGER IPASS, KPRINT, LUN
  29753. C     .. Local Scalars ..
  29754.       INTEGER I, IANS, INC, IND, N
  29755. C     .. Local Arrays ..
  29756.       COMPLEX X(8)
  29757. C     .. External Functions ..
  29758.       INTEGER ICAMIN
  29759.       EXTERNAL ICAMIN
  29760. C     .. Data statements ..
  29761.       DATA X / (0.E0, -1.E0), (1.E0, -2.E0), (2.E0, -3.E0),
  29762.      +         (3.E0, -4.E0), (-5.E0, 5.E0), (-6.E0, 6.E0),
  29763.      +         (-7.E0, 7.E0), (-8.E0, 8.E0) /
  29764. C***FIRST EXECUTABLE STATEMENT  ICMMQX
  29765.       IF (KPRINT .GE. 2) WRITE (UNIT=LUN,FMT=9000)
  29766. C
  29767.       IPASS = 1
  29768.       N = 8
  29769.       INC = 1
  29770.       IF (KPRINT .GE. 3) WRITE (UNIT=LUN,FMT=9010) (X(I),I=1,N)
  29771.       IND = ICAMIN (N,X,INC)
  29772.       IF (KPRINT .GE. 3) WRITE (UNIT=LUN,FMT=9020) IND,IND,X(IND)
  29773.       IANS = 1
  29774.       IF (IND .NE. IANS) THEN
  29775.         IPASS = 0
  29776.         IF (KPRINT .GE. 2) WRITE (UNIT=LUN,FMT=9030) IND,IANS
  29777.       ENDIF
  29778.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 9040)
  29779.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 9050)
  29780.       RETURN
  29781. C
  29782.  9000 FORMAT (/ ' ICAMIN Quick Check' /)
  29783.  9010 FORMAT (' Elements of array X:' /
  29784.      +        4(' (', F5.2, ', ', F5.2, '),  ') /
  29785.      +        3(' (', F5.2, ', ', F5.2, '),  '), ' (', F5.2, ', ', F5.2,
  29786.      +        ')')
  29787.  9020 FORMAT (' IND =', I2, 5X, 'X(', I2, ') = (', F5.2, ', ', F5.2,
  29788.      +        ')')
  29789.  9030 FORMAT (' ICMMQX failed, IND =', I2, 5X, 'IANS =', I2)
  29790.  9040 FORMAT (' ICAMIN is correct.' /)
  29791.  9050 FORMAT (' ICAMIN is incorrect.' /)
  29792.       END
  29793. *DECK IDMMQX
  29794.       SUBROUTINE IDMMQX (LUN, KPRINT, IPASS)
  29795. C***BEGIN PROLOGUE  IDMMQX
  29796. C***PURPOSE  Quick check for IDAMIN, IDMAX and IDMIN.
  29797. C***LIBRARY   CLAMS
  29798. C***AUTHOR  Boland, W. Robert, (LANL)
  29799. C***ROUTINES CALLED  IDAMIN, IDMAX, IDMIN
  29800. C***REVISION HISTORY  (YYMMDD)
  29801. C   910408  DATE WRITTEN
  29802. C   920701  Declarations section restructured.  (WRB)
  29803. C***END PROLOGUE  IDMMQX
  29804. C     .. Scalar Arguments ..
  29805.       INTEGER IPASS, KPRINT, LUN
  29806. C     .. Local Scalars ..
  29807.       INTEGER I, INC, N
  29808. C     .. Local Arrays ..
  29809.       DOUBLE PRECISION X(19)
  29810.       INTEGER IANS(3), IND(3)
  29811. C     .. External Functions ..
  29812.       INTEGER IDAMIN, IDMAX, IDMIN
  29813.       EXTERNAL IDAMIN, IDMAX, IDMIN
  29814. C     .. Data statements ..
  29815.       DATA X / 0.0D0, -1.0D0, 1.0D0, -2.0D0, 2.0D0, -3.0D0, 3.0D0,
  29816.      +        -4.0D0, 4.0D0, -5.0D0, 5.0D0, -6.0D0, 6.0D0, -7.0D0,
  29817.      +         7.0D0, -8.0D0, 8.0D0, -9.0D0, 9.0D0 /
  29818. C***FIRST EXECUTABLE STATEMENT  IDMMQX
  29819.       IF (KPRINT .GE. 2) WRITE (UNIT=LUN,FMT=9000)
  29820. C
  29821.       IPASS = 1
  29822.       N = 19
  29823.       INC = 1
  29824.       IF (KPRINT .GE. 3) WRITE (UNIT=LUN,FMT=9010) (X(I),I=1,N)
  29825.       IND(1) = IDAMIN (N,X,INC)
  29826.       IND(2) = IDMAX (N,X,INC)
  29827.       IND(3) = IDMIN (N,X,INC)
  29828.       IF (KPRINT .GE. 3) THEN
  29829.         DO 10 I = 1,3
  29830.           WRITE (UNIT=LUN,FMT=9020) I,IND(I),IND(I),X(IND(I))
  29831.    10   CONTINUE
  29832.       ENDIF
  29833.       IANS(1) = 1
  29834.       IANS(2) = 19
  29835.       IANS(3) = 18
  29836.       DO 20 I = 1,3
  29837.         IF (IND(I) .NE. IANS(I)) THEN
  29838.           IPASS = 0
  29839.           IF (KPRINT .GE. 2)
  29840.      +      WRITE (UNIT=LUN,FMT=9030) I,IND(I),I,IANS(I)
  29841.         ENDIF
  29842.    20 CONTINUE
  29843.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 9040)
  29844.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 9050)
  29845.       RETURN
  29846. C
  29847.  9000 FORMAT (/ ' IDAMIN, IDMAX, and IDMIN Quick Check' /)
  29848.  9010 FORMAT (' Elements of array X:', 2(/ 10F7.2))
  29849.  9020 FORMAT (' IND(', I2, ') =', I2, 5X, 'X(', I2 ,') =', F7.2)
  29850.  9030 FORMAT (' IDMMQX failed, IND(', I2, ') =', I2, 5X, 'IANS(', I2,
  29851.      +        ') =', I2)
  29852.  9040 FORMAT (' IDAMIN, IDMAX, and IDMIN are correct.' /)
  29853.  9050 FORMAT (' IDAMIN, IDMAX, and IDMIN are incorrect.' /)
  29854.       END
  29855. *DECK JACOBN
  29856.       SUBROUTINE JACOBN (N, T, Y, DFDY, MATDIM, ML, MU)
  29857. C***BEGIN PROLOGUE  JACOBN
  29858. C***SUBSIDIARY
  29859. C***PURPOSE  Dummy Jacobian evaluation routine for SDRIVE quick checks.
  29860. C***LIBRARY   CLAMS
  29861. C***AUTHOR  Kahaner, D. K., (NIST)
  29862. C           Sutherland, C. D., (LANL)
  29863. C***ROUTINES CALLED  (NONE)
  29864. C***REVISION HISTORY  (YYMMDD)
  29865. C   ??????  DATE WRITTEN
  29866. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29867. C           standard.  (WRB)
  29868. C***END PROLOGUE  JACOBN
  29869. C***FIRST EXECUTABLE STATEMENT  JACOBN
  29870.       RETURN
  29871.       END
  29872. *DECK M120QX
  29873.       SUBROUTINE M120QX (LUN, KPRINT, IPASS)
  29874. C***BEGIN PROLOGUE  M120QX
  29875. C***PURPOSE  Quick check for QQSORT.
  29876. C***LIBRARY   CLAMS
  29877. C***AUTHOR  (UNKNOWN)
  29878. C***ROUTINES CALLED  QQSORT
  29879. C***REVISION HISTORY  (YYMMDD)
  29880. C   ??????  DATE WRITTEN
  29881. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29882. C           standard.  (WRB)
  29883. C   920701  Declarations section restructured and some code cleaned.
  29884. C           (WRB)
  29885. C***END PROLOGUE  M120QX
  29886. C     .. Scalar Arguments ..
  29887.       INTEGER IPASS, KPRINT, LUN
  29888. C     .. Local Scalars ..
  29889.       INTEGER I, IM1, N
  29890. C     .. Local Arrays ..
  29891.       REAL X(19)
  29892.       INTEGER J(19), L(19)
  29893. C     .. External Subroutines ..
  29894.       EXTERNAL QQSORT
  29895. C     .. Data statements ..
  29896.       DATA X / 0.0, -1.0, 1.0, -2.0, 2.0, -3.0, 3.0, -4.0, 4.0,
  29897.      +        -5.0, 5.0, -6.0, 6.0, -7.0, 7.0, -8.0, 8.0, -9.0, 9.0 /
  29898. C***FIRST EXECUTABLE STATEMENT  M120QX
  29899.       IF (KPRINT .GE. 2) WRITE (LUN,9000)
  29900. C
  29901.       IPASS = 1
  29902.       N = 19
  29903.       IF (KPRINT .GE. 3) WRITE (UNIT=LUN,FMT=9010) (X(I),I=1,N)
  29904.       CALL QQSORT (N,X,J,L,L)
  29905.       IF (KPRINT .GE. 3) WRITE (UNIT=LUN,FMT=9020) (X(I),I=1,N)
  29906.       DO 10 I = 2,N
  29907.         IM1 = I - 1
  29908.         IF (X(IM1) .GE. X(I)) THEN
  29909.           IPASS = 0
  29910.           IF (KPRINT .GE. 2)
  29911.      +      WRITE (UNIT=LUN,FMT=9030) IM1,X(IM1),I,X(I)
  29912.         ENDIF
  29913.    10 CONTINUE
  29914.       IF (IPASS.EQ.1 .AND. KPRINT.GE.2) WRITE (LUN, 9040)
  29915.       IF (IPASS.EQ.0 .AND. KPRINT.GE.1) WRITE (LUN, 9050)
  29916.       RETURN
  29917. C
  29918.  9000 FORMAT (/ ' QQSORT Quick Check' /)
  29919.  9010 FORMAT (' Array elements before sorting', 2(/, 10F7.0))
  29920.  9020 FORMAT (' Array elements after sorting', 2(/, 10F7.0))
  29921.  9030 FORMAT (' M120QX FAILED, X(', I2, ') =', F7.0, 5X, 'X(', I2,
  29922.      +        ') =', F7.0)
  29923.  9040 FORMAT (' QQSORT is correct.' /)
  29924.  9050 FORMAT (' QQSORT is incorrect.' /)
  29925.       END
  29926. *DECK SDB2QX
  29927.       SUBROUTINE SDB2QX (LUN, KPRINT, IPASS)
  29928. C***BEGIN PROLOGUE  SDB2QX
  29929. C***PURPOSE  Quick check for SDRVB2.
  29930. C***LIBRARY   CLAMS
  29931. C***AUTHOR  Kahaner, D. K., (NIST)
  29932. C           Sutherland, C. D., (LANL)
  29933. C***DESCRIPTION
  29934. C
  29935. C   ALL CHECK PROGRAM
  29936. C
  29937. C   PART OF SDRVB1,2,3 PACKAGE, SINGLE PRECISION VERSION
  29938. C
  29939. C***ROUTINES CALLED  R1MACH, SDRVB2, SF2, SG2
  29940. C***COMMON BLOCKS    SCONS2
  29941. C***REVISION HISTORY  (YYMMDD)
  29942. C   ??????  DATE WRITTEN
  29943. C   910815  Prologue filled out and brought up to the SLATEC 1990
  29944. C           standard.  (WRB)
  29945. C***END PROLOGUE  SDB2QX
  29946.       PARAMETER(LENW=263, LENIW=23)
  29947.       EXTERNAL SF2, SG2
  29948.       REAL ALFA, EPS, EWT(1), R1MACH, T, TOUT,
  29949.      1 WORK(LENW), Y(3)
  29950.       INTEGER IWORK(LENIW)
  29951.       COMMON /SCONS2/ ALFA
  29952.       DATA N /3/, EWT(1) /.00001E0/, MITER /0/, IMPL /0/
  29953. C***FIRST EXECUTABLE STATEMENT  SDB2QX
  29954.       EPS = R1MACH(4)**(1.E0/3.E0)
  29955.       ALFA = 1.E0
  29956.       IF (KPRINT .GE. 3) THEN
  29957.       WRITE(LUN, '(// ''     *****'' / '' SDRVB2 TEST'' /
  29958.      8  '' IF THE FOLLOWING TEST IS SUCCESSFUL, THE LAST LINE OF THIS''
  29959.      8  / '' OUTPUT FILE (APPROXIMATELY 45 LINES BEYOND THIS POINT)''
  29960.      8  / '' SHOULD BE -- SDRVB2 TEST PASSED.''
  29961.      8  / '' ANY OTHER FINAL MESSAGE INDICATES SOME TEST FAILURE.''
  29962.      8  / ''     *****'')')
  29963.       WRITE(LUN, '(/ '' EPS ='', 1PE15.5)') EPS
  29964.       WRITE(LUN, '(/ '' A = '',  1PE10.2 // 1X, ''CYCLE'', 3X,
  29965.      8  ''TIME'', 6X, ''Y(1)'', 6X, ''Y(2)'', 6X, ''Y(3)'', 4X,
  29966.      8  ''MINT'', 1X, ''MITER'', 1X, ''IMPL'', 1X, ''NFE'', 1X,
  29967.      8  ''NJE'')') ALFA
  29968.       ENDIF
  29969.       DO 50 MINT = 1,3
  29970.         IF (MINT.EQ.2) THEN
  29971.           NROOT = 1
  29972.         ELSE
  29973.           NROOT = 0
  29974.         ENDIF
  29975.         T = 0.E0
  29976.         Y(1) = 10.E0
  29977.         Y(2) = 0.E0
  29978.         Y(3) = 10.E0
  29979.         NSTATE = 1
  29980.         TOUT = 10.E0
  29981.  10     CALL SDRVB2 (N, T, Y, SF2, TOUT, NSTATE, NROOT, EPS, EWT,
  29982.      8               MINT,WORK,LENW,IWORK,LENIW,SG2)
  29983.         IF (NSTATE.NE.2 .AND. NSTATE.NE.5) GO TO 60
  29984.         NSTEP = IWORK(3)
  29985.         NFE = IWORK(4)
  29986.         NJE = IWORK(5)
  29987.         IF (NSTATE.EQ.5) THEN
  29988.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P4E10.2, I5, I6, I5, 2I4)')
  29989.      8    NSTEP, T, (Y(I), I=1,3), MINT, MITER, IMPL, NFE, NJE
  29990.           IF (ABS(Y(1) - 1.E0).GT.EPS**(2.E0/3.E0)) GO TO 60
  29991.           GO TO 10
  29992.         ELSE
  29993.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P4E10.2, I5, I6, I5, 2I4)')
  29994.      8    NSTEP, TOUT, (Y(I), I=1,3), MINT, MITER, IMPL, NFE, NJE
  29995.           IF (ABS(1.E0 - Y(1)*1.5E0).GT.EPS**(2.E0/3.E0) .OR.
  29996.      8    ABS(1.E0 - Y(2)*3.E0).GT.EPS**(2.E0/3.E0) .OR.
  29997.      8    ABS(1.E0 - Y(3)).GT.EPS**(2.E0/3.E0)) GO TO 60
  29998.         ENDIF
  29999.  50     CONTINUE
  30000.       IPASS = 1
  30001.       IF (KPRINT .GT. 1) THEN
  30002.         WRITE(LUN,
  30003.      8  '(// ''     *****'' /'' SDRVB2 TEST PASSED'' / ''     *****'')')
  30004.       ENDIF
  30005.       RETURN
  30006.  60   IPASS = 0
  30007.       IF (KPRINT .GT. 0) THEN
  30008.         WRITE(LUN, '(// ''     *****'' / '' SDRVB2 TEST FAILED'' /
  30009.      8  ''     *****'' //)')
  30010.       ENDIF
  30011.       RETURN
  30012.       END
  30013. *DECK SDB3QX
  30014.       SUBROUTINE SDB3QX (LUN, KPRINT, IPASS)
  30015. C***BEGIN PROLOGUE  SDB3QX
  30016. C***PURPOSE  Quick check for SDRVB3.
  30017. C***LIBRARY   CLAMS
  30018. C***AUTHOR  Kahaner, D. K., (NIST)
  30019. C           Sutherland, C. D., (LANL)
  30020. C***DESCRIPTION
  30021. C
  30022. C   ALL CHECK PROGRAM
  30023. C
  30024. C   PART OF SDRVB1,2,3 PACKAGE, SINGLE PRECISION VERSION
  30025. C
  30026. C***ROUTINES CALLED  R1MACH, SDRVB3, SF3, SFA3, SG3, SJAC3
  30027. C***COMMON BLOCKS    SCONS3
  30028. C***REVISION HISTORY  (YYMMDD)
  30029. C   ??????  DATE WRITTEN
  30030. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30031. C           standard.  (WRB)
  30032. C***END PROLOGUE  SDB3QX
  30033.       PARAMETER(LENW=294, LENIW=23)
  30034.       EXTERNAL SF3, SJAC3, SFA3, SG3
  30035.       REAL ALFA, EPS, EWT(1), HMAX, R1MACH, T, TOUT,
  30036.      1 WORK(LENW), Y(3)
  30037.       INTEGER IWORK(LENIW)
  30038.       COMMON /SCONS3/ ALFA, IMPL, MITER
  30039.       DATA N /3/, EWT(1) /.00001E0/, IERROR /3/, ML /2/, MU /2/,
  30040.      8     HMAX /15.E0/, NDE /2/, MXSTEP /1000/
  30041. C***FIRST EXECUTABLE STATEMENT  SDB3QX
  30042.       EPS = R1MACH(4)**(1.E0/3.E0)
  30043.       ALFA = 1.E0
  30044.       IF (KPRINT .GE. 3) THEN
  30045.       WRITE(LUN, '(// ''     *****'' / '' SDRVB3 TEST'' /
  30046.      8  '' IF THE FOLLOWING TEST IS SUCCESSFUL, THE LAST LINE OF THIS''
  30047.      8  / '' OUTPUT FILE (APPROXIMATELY 45 LINES BEYOND THIS POINT)''
  30048.      8  / '' SHOULD BE -- SDRVB3 TEST PASSED.''
  30049.      8  / '' ANY OTHER FINAL MESSAGE INDICATES SOME TEST FAILURE.''
  30050.      8  / ''     *****'')')
  30051.       WRITE(LUN, '(/ '' EPS ='', 1PE15.5)') EPS
  30052.       WRITE(LUN, '(/ '' A = '',  1PE10.2 // 1X, ''CYCLE'', 3X,
  30053.      8  ''TIME'', 6X, ''Y(1)'', 6X, ''Y(2)'', 6X, ''Y(3)'', 4X,
  30054.      8  ''MINT'', 1X, ''MITER'', 1X, ''IMPL'', 1X, ''NFE'', 1X,
  30055.      8  ''NJE'')') ALFA
  30056.       ENDIF
  30057.       DO 50 IMPLP1 = 1,3
  30058.       DO 50 MINT = 1,3
  30059.       DO 50 MITERP = 1,6
  30060.         MITER = MITERP - 1
  30061.         IMPL = IMPLP1 - 1
  30062.         IF (MITER .EQ. 3) GO TO 50
  30063.         IF (IMPL.GT.0 .AND. MITER.EQ.0) GO TO 50
  30064.         IF (IMPL.EQ.2 .AND. MINT.EQ.1) GO TO 50
  30065.         IF (MINT.EQ.3 .AND. (IMPL.NE.0 .OR. MITER.EQ.0 .OR.
  30066.      8  MITER.EQ.3)) GO TO 50
  30067.         IF (MINT.EQ.1 .OR. MINT.EQ.3) THEN
  30068.           MXORD = 12
  30069.         ELSE IF (MINT.EQ.2) THEN
  30070.           MXORD = 5
  30071.         ENDIF
  30072.         IF (MINT.EQ.2 .AND. MITER.EQ.2 .AND. IMPL.EQ.0) THEN
  30073.           NROOT = 1
  30074.         ELSE
  30075.           NROOT = 0
  30076.         ENDIF
  30077.         T = 0.E0
  30078.         Y(1) = 10.E0
  30079.         Y(2) = 0.E0
  30080.         Y(3) = 10.E0
  30081.         NSTATE = 1
  30082.         TOUT = 10.E0
  30083.         NTASK = 1
  30084.  10     CALL SDRVB3 (N, T, Y, SF3, NSTATE, TOUT, NTASK, NROOT, EPS, EWT,
  30085.      8               IERROR, MINT, MITER, IMPL, ML, MU, MXORD, HMAX,
  30086.      8               WORK,LENW,IWORK,LENIW,SJAC3,SFA3,NDE,MXSTEP,SG3)
  30087.         IF (NSTATE.NE.2 .AND. NSTATE.NE.5) GO TO 60
  30088.         NSTEP = IWORK(3)
  30089.         NFE = IWORK(4)
  30090.         NJE = IWORK(5)
  30091.         IF (NSTATE.EQ.5) THEN
  30092.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P4E10.2, I5, I6, I5, 2I4)')
  30093.      8    NSTEP, T, (Y(I), I=1,3), MINT, MITER, IMPL, NFE, NJE
  30094.           IF (ABS(Y(1) - 1.E0).GT.EPS**(2.E0/3.E0)) GO TO 60
  30095.           GO TO 10
  30096.         ELSE
  30097.           IF (KPRINT.GE.3) WRITE(LUN, '(I6, 1P4E10.2, I5, I6, I5, 2I4)')
  30098.      8    NSTEP, TOUT, (Y(I), I=1,3), MINT, MITER, IMPL, NFE, NJE
  30099.           IF (ABS(1.E0 - Y(1)*1.5E0).GT.EPS**(2.E0/3.E0) .OR.
  30100.      8    ABS(1.E0 - Y(2)*3.E0).GT.EPS**(2.E0/3.E0) .OR.
  30101.      8    ABS(1.E0 - Y(3)).GT.EPS**(2.E0/3.E0)) GO TO 60
  30102.         ENDIF
  30103.  50     CONTINUE
  30104.       IPASS = 1
  30105.       IF (KPRINT .GT. 1) THEN
  30106.         WRITE(LUN,
  30107.      8  '(// ''     *****'' /'' SDRVB3 TEST PASSED'' / ''     *****'')')
  30108.       ENDIF
  30109.       RETURN
  30110.  60   IPASS = 0
  30111.       IF (KPRINT .GT. 0) THEN
  30112.         WRITE(LUN, '(// ''     *****'' / '' SDRVB3 TEST FAILED'' /
  30113.      8  ''     *****'' //)')
  30114.       ENDIF
  30115.       RETURN
  30116.       END
  30117. *DECK SF2
  30118.       SUBROUTINE SF2 (N, T, Y, YP)
  30119. C***BEGIN PROLOGUE  SF2
  30120. C***PURPOSE  Derivative evaluator for SDB2QX.
  30121. C***LIBRARY   CLAMS
  30122. C***AUTHOR  Kahaner, D. K., (NIST)
  30123. C           Sutherland, C. D., (LANL)
  30124. C***ROUTINES CALLED  (NONE)
  30125. C***COMMON BLOCKS    SCONS2
  30126. C***REVISION HISTORY  (YYMMDD)
  30127. C   ??????  DATE WRITTEN
  30128. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30129. C           standard.  (WRB)
  30130. C***END PROLOGUE  SF2
  30131.       REAL ALFA,T,Y(*),YP(*)
  30132.       COMMON /SCONS2/ ALFA
  30133. C***FIRST EXECUTABLE STATEMENT  SF2
  30134.       YP(1) = 1.E0 + ALFA*(Y(2) - Y(1)) - Y(1)*Y(3)
  30135.       YP(2) = ALFA*(Y(1) - Y(2)) - Y(2)*Y(3)
  30136.       YP(3) = 1.E0 - Y(3)*(Y(1) + Y(2))
  30137.       END
  30138. *DECK SF3
  30139.       SUBROUTINE SF3 (N, T, Y, YP)
  30140. C***BEGIN PROLOGUE  SF3
  30141. C***PURPOSE  Derivative evaluator for SDB3QX.
  30142. C***LIBRARY   CLAMS
  30143. C***AUTHOR  Kahaner, D. K., (NIST)
  30144. C           Sutherland, C. D., (LANL)
  30145. C***ROUTINES CALLED  (NONE)
  30146. C***COMMON BLOCKS    SCONS3
  30147. C***REVISION HISTORY  (YYMMDD)
  30148. C   ??????  DATE WRITTEN
  30149. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30150. C           standard.  (WRB)
  30151. C***END PROLOGUE  SF3
  30152.       REAL ALFA,T,Y(*),YP(*)
  30153.       COMMON /SCONS3/ ALFA, IMPL, MITER
  30154. C***FIRST EXECUTABLE STATEMENT  SF3
  30155.       YP(1) = 1.E0 + ALFA*(Y(2) - Y(1)) - Y(1)*Y(3)
  30156.       YP(2) = ALFA*(Y(1) - Y(2)) - Y(2)*Y(3)
  30157.       IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  30158.         YP(3) = 1.E0 - Y(3)*(Y(1) + Y(2))
  30159.       ELSE IF (IMPL.EQ.2) THEN
  30160.         YP(3) = Y(1) + Y(2) - Y(3)
  30161.       ENDIF
  30162.       END
  30163. *DECK SFA3
  30164.       SUBROUTINE SFA3 (N, T, Y, A, MATDIM, ML, MU, NDE)
  30165. C***BEGIN PROLOGUE  SFA3
  30166. C***PURPOSE  Matrix evaluator for SDB3QX.
  30167. C***LIBRARY   CLAMS
  30168. C***AUTHOR  Kahaner, D. K., (NIST)
  30169. C           Sutherland, C. D., (LANL)
  30170. C***ROUTINES CALLED  (NONE)
  30171. C***COMMON BLOCKS    SCONS3
  30172. C***REVISION HISTORY  (YYMMDD)
  30173. C   ??????  DATE WRITTEN
  30174. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30175. C           standard.  (WRB)
  30176. C***END PROLOGUE  SFA3
  30177.       REAL A(MATDIM,*),ALFA,T,Y(*)
  30178.       COMMON /SCONS3/ ALFA, IMPL, MITER
  30179. C***FIRST EXECUTABLE STATEMENT  SFA3
  30180.       IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  30181.         IF (MITER.EQ.1 .OR. MITER.EQ.2 .OR. MITER.EQ.3) THEN
  30182.           DO 20 J = 1,N
  30183.             DO 10 I = 1,N
  30184.  10           A(I,J) = 0.E0
  30185.  20         A(J,J) = 1.E0
  30186.         ELSE IF (MITER.EQ.4) THEN
  30187.           DO 50 J = 1,N
  30188.             DO 40 I = 1,N
  30189.               I1 = I + MU + 1 - J
  30190.  40           A(I1,J) = 0.E0
  30191.  50         A(MU+1,J) = 1.E0
  30192.         ENDIF
  30193.       ELSE IF (IMPL.EQ.2) THEN
  30194.         A(1,1) = 1.E0
  30195.         A(2,1) = 1.E0
  30196.       ENDIF
  30197.       END
  30198. *DECK SG2
  30199.       REAL FUNCTION SG2 (N, T, Y, IROOT)
  30200. C***BEGIN PROLOGUE  SG2
  30201. C***PURPOSE  Algebric equation evaluator for SDB2QX.
  30202. C***LIBRARY   CLAMS
  30203. C***AUTHOR  Kahaner, D. K., (NIST)
  30204. C           Sutherland, C. D., (LANL)
  30205. C***ROUTINES CALLED  (NONE)
  30206. C***REVISION HISTORY  (YYMMDD)
  30207. C   ??????  DATE WRITTEN
  30208. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30209. C           standard.  (WRB)
  30210. C***END PROLOGUE  SG2
  30211.       REAL T, Y(*)
  30212. C***FIRST EXECUTABLE STATEMENT  SG2
  30213.       SG2 = Y(1) - 1.E0
  30214.       END
  30215. *DECK SG3
  30216.       REAL FUNCTION SG3 (N, T, Y, IROOT)
  30217. C***BEGIN PROLOGUE  SG3
  30218. C***PURPOSE  Algebric equation evaluator for SDB3QX.
  30219. C***LIBRARY   CLAMS
  30220. C***AUTHOR  Kahaner, D. K., (NIST)
  30221. C           Sutherland, C. D., (LANL)
  30222. C***ROUTINES CALLED  (NONE)
  30223. C***REVISION HISTORY  (YYMMDD)
  30224. C   ??????  DATE WRITTEN
  30225. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30226. C           standard.  (WRB)
  30227. C***END PROLOGUE  SG3
  30228.       REAL T, Y(*)
  30229. C***FIRST EXECUTABLE STATEMENT  SG3
  30230.       SG3 = Y(1) - 1.E0
  30231.       END
  30232. *DECK SJAC3
  30233.       SUBROUTINE SJAC3 (N, T, Y, DFDY, MATDIM, ML, MU)
  30234. C***BEGIN PROLOGUE  SJAC3
  30235. C***PURPOSE  Jacobian evaluator for SDB3QX.
  30236. C***LIBRARY   CLAMS
  30237. C***AUTHOR  Kahaner, D. K., (NIST)
  30238. C           Sutherland, C. D., (LANL)
  30239. C***ROUTINES CALLED  (NONE)
  30240. C***COMMON BLOCKS    SCONS3
  30241. C***REVISION HISTORY  (YYMMDD)
  30242. C   ??????  DATE WRITTEN
  30243. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30244. C           standard.  (WRB)
  30245. C***END PROLOGUE  SJAC3
  30246.       REAL ALFA,DFDY(MATDIM,*),T,Y(*)
  30247.       COMMON /SCONS3/ ALFA, IMPL, MITER
  30248. C***FIRST EXECUTABLE STATEMENT  SJAC3
  30249.       IF (MITER.EQ.1 .OR. MITER.EQ.3) THEN
  30250.         DFDY(1,1) = -ALFA - Y(3)
  30251.         DFDY(1,2) = ALFA
  30252.         DFDY(1,3) = -Y(1)
  30253.         DFDY(2,1) = ALFA
  30254.         DFDY(2,2) = -ALFA - Y(3)
  30255.         DFDY(2,3) = -Y(2)
  30256.         IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  30257.           DFDY(3,1) = -Y(3)
  30258.           DFDY(3,2) = -Y(3)
  30259.           DFDY(3,3) = -Y(1) - Y(2)
  30260.         ELSE IF (IMPL.EQ.2) THEN
  30261.           DFDY(3,1) = 1.E0
  30262.           DFDY(3,2) = 1.E0
  30263.           DFDY(3,3) = -1.E0
  30264.         ENDIF
  30265.       ELSE IF (MITER.EQ.4) THEN
  30266.         DFDY(3,1) = -ALFA - Y(3)
  30267.         DFDY(2,2) = ALFA
  30268.         DFDY(1,3) = -Y(1)
  30269.         DFDY(4,1) = ALFA
  30270.         DFDY(3,2) = DFDY(3,1)
  30271.         DFDY(2,3) = -Y(2)
  30272.         IF (IMPL.EQ.0 .OR. IMPL.EQ.1) THEN
  30273.           DFDY(5,1) = -Y(3)
  30274.           DFDY(4,2) = -Y(3)
  30275.           DFDY(3,3) = -Y(1) - Y(2)
  30276.         ELSE IF (IMPL.EQ.2) THEN
  30277.           DFDY(5,1) = 1.E0
  30278.           DFDY(4,2) = 1.E0
  30279.           DFDY(3,3) = -1.E0
  30280.         ENDIF
  30281.       ENDIF
  30282.       END
  30283. *DECK TEST90
  30284.       PROGRAM TEST90
  30285. C***BEGIN PROLOGUE  TEST90
  30286. C***PURPOSE  Driver for testing non-SLATEC subprograms
  30287. C***LIBRARY   CLAMS
  30288. C***CATEGORY  I1A2, I1A1B
  30289. C***TYPE      ALL (TEST90-A)
  30290. C***KEYWORDS  QUICK CHECK DRIVER
  30291. C***AUTHOR  Boland, W. Robert, C-10, Los Alamos National Laboratory
  30292. C***DESCRIPTION
  30293. C
  30294. C *Usage:
  30295. C     One input data record is required
  30296. C         READ (LIN, '(I1)') KPRINT
  30297. C
  30298. C *Arguments:
  30299. C     KPRINT = 0  Quick checks - No printing.
  30300. C                 Driver       - Short pass or fail message printed.
  30301. C              1  Quick checks - No message printed for passed tests,
  30302. C                                short message printed for failed tests.
  30303. C                 Driver       - Short pass or fail message printed.
  30304. C              2  Quick checks - Print short message for passed tests,
  30305. C                                fuller information for failed tests.
  30306. C                 Driver       - Pass or fail message printed.
  30307. C              3  Quick checks - Print complete quick check results.
  30308. C                 Driver       - Pass or fail message printed.
  30309. C
  30310. C *Description:
  30311. C     Driver for testing non-SLATEC subprograms
  30312. C        GAUSS    CBSHV    HRMTE    LAGRE    LGNDR    LGNDRX
  30313. C        GENGSQ   GAUSSQ   PHI      STLTJS
  30314. C        QQSORT
  30315. C        SPLIN2   SPL2D1   SPL1D1   SPL2D2   SPL2D3
  30316. C        SPLINT   SPINTG   SPL1D1   SPL1D2
  30317. C        ISAMIN   ISMAX    ISMIN
  30318. C        ICAMIN
  30319. C        IDAMIN   IDMAX    IDMIN
  30320. C
  30321. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  30322. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  30323. C                 tical Library, April 10, 1990.
  30324. C***ROUTINES CALLED  D114QX, D117QX, D118QX, D123QX, F146QX, I1MACH,
  30325. C                    ICMMQX, IDMMQX, M120QX, XERMAX, XSETF, XSETUN
  30326. C***REVISION HISTORY  (YYMMDD)
  30327. C   ??????  DATE WRITTEN
  30328. C   901205  Cosmetic changes to code.  (WRB)
  30329. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30330. C           standard.  (WRB)
  30331. C   910828  Added calls to ICMMQX and IDMMQX.  (WRB)
  30332. C***END PROLOGUE  TEST90
  30333.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  30334. C***FIRST EXECUTABLE STATEMENT  TEST90
  30335.       LUN = I1MACH(2)
  30336.       LIN = I1MACH(1)
  30337.       NFAIL = 0
  30338. C
  30339. C     Read KPRINT parameter
  30340. C
  30341.       READ (LIN, '(I1)') KPRINT
  30342.       CALL XERMAX(1000)
  30343.       CALL XSETUN(LUN)
  30344.       IF (KPRINT .LE. 1) THEN
  30345.          CALL XSETF(0)
  30346.       ELSE
  30347.          CALL XSETF(1)
  30348.       ENDIF
  30349. C
  30350. C     Test GAUSS, etc.
  30351. C
  30352.       CALL D114QX (LUN, KPRINT, IPASS)
  30353.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30354. C
  30355. C     Test GENGSQ, etc.
  30356. C
  30357.       CALL D123QX (LUN, KPRINT, IPASS)
  30358.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30359. C
  30360. C     Test QQSORT
  30361. C
  30362.       CALL M120QX (LUN, KPRINT, IPASS)
  30363.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30364. C
  30365. C     Test SPLIN2, etc.
  30366. C
  30367.       CALL D118QX (LUN, KPRINT, IPASS)
  30368.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30369. C
  30370. C     Test SPLINT, etc.
  30371. C
  30372.       CALL D117QX (LUN, KPRINT, IPASS)
  30373.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30374. C
  30375. C     Test ISAMIN, ISMAX and ISMIN.
  30376. C
  30377.       CALL F146QX (LUN, KPRINT, IPASS)
  30378.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30379. C
  30380. C     Test ICAMIN.
  30381. C
  30382.       CALL ICMMQX (LUN, KPRINT, IPASS)
  30383.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30384. C
  30385. C     Test IDAMIN, IDMAX and IDMIN.
  30386. C
  30387.       CALL IDMMQX (LUN, KPRINT, IPASS)
  30388.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30389. C
  30390. C     Write PASS or FAIL message
  30391. C
  30392.       IF (NFAIL .EQ. 0) THEN
  30393.          WRITE (LUN, 9000)
  30394.       ELSE
  30395.          WRITE (LUN, 9010) NFAIL
  30396.       ENDIF
  30397.       STOP
  30398.  9000 FORMAT (/' --------------TEST90 PASSED ALL TESTS----------------')
  30399.  9010 FORMAT (/' ************* WARNING -- ', I5,
  30400.      1        ' TEST(S) FAILED IN PROGRAM TEST90 *************')
  30401.       END
  30402. *DECK TEST91
  30403.       PROGRAM TEST91
  30404. C***BEGIN PROLOGUE  TEST91
  30405. C***PURPOSE  Driver for testing non-SLATEC subprograms
  30406. C***LIBRARY   CLAMS
  30407. C***CATEGORY  I1A2, I1A1B
  30408. C***TYPE      ALL (TEST91-A)
  30409. C***KEYWORDS  QUICK CHECK DRIVER
  30410. C***AUTHOR  Boland, W. Robert, C-10, Los Alamos National Laboratory
  30411. C***DESCRIPTION
  30412. C
  30413. C *Usage:
  30414. C     One input data record is required
  30415. C         READ (LIN, '(I1)') KPRINT
  30416. C
  30417. C *Arguments:
  30418. C     KPRINT = 0  Quick checks - No printing.
  30419. C                 Driver       - Short pass or fail message printed.
  30420. C              1  Quick checks - No message printed for passed tests,
  30421. C                                short message printed for failed tests.
  30422. C                 Driver       - Short pass or fail message printed.
  30423. C              2  Quick checks - Print short message for passed tests,
  30424. C                                fuller information for failed tests.
  30425. C                 Driver       - Pass or fail message printed.
  30426. C              3  Quick checks - Print complete quick check results.
  30427. C                 Driver       - Pass or fail message printed.
  30428. C
  30429. C *Description:
  30430. C     Driver for testing non-SLATEC subprograms
  30431. C        SDRVB2   SDRVB3
  30432. C        DDRVB2   DDRVB3
  30433. C        CDRVB2   CDRVB3
  30434. C
  30435. C***REFERENCES  Kirby W. Fong, Thomas H. Jefferson, Tokihiko Suyehiro
  30436. C                 and Lee Walton, Guide to the SLATEC Common Mathema-
  30437. C                 tical Library, April 10, 1990.
  30438. C***ROUTINES CALLED  CDB2QX, CDB3QX, DDB2QX, DDB3QX, I1MACH, SDB2QX,
  30439. C                    SDB3QX, XERMAX, XSETF, XSETUN
  30440. C***REVISION HISTORY  (YYMMDD)
  30441. C   ??????  DATE WRITTEN
  30442. C   901205  Cosmetic changes to code.  (WRB)
  30443. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30444. C           standard.  (WRB)
  30445. C***END PROLOGUE  TEST91
  30446.       INTEGER IPASS, KPRINT, LIN, LUN, NFAIL
  30447. C***FIRST EXECUTABLE STATEMENT  TEST91
  30448.       LUN = I1MACH(2)
  30449.       LIN = I1MACH(1)
  30450.       NFAIL = 0
  30451. C
  30452. C     Read KPRINT parameter
  30453. C
  30454.       READ (LIN, '(I1)') KPRINT
  30455.       CALL XERMAX(1000)
  30456.       CALL XSETUN(LUN)
  30457.       IF (KPRINT .LE. 1) THEN
  30458.          CALL XSETF(0)
  30459.       ELSE
  30460.          CALL XSETF(1)
  30461.       ENDIF
  30462. C
  30463. C     Test SDRVB2
  30464. C
  30465.       CALL SDB2QX (LUN, KPRINT, IPASS)
  30466.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30467. C
  30468. C     Test DDRVB2
  30469. C
  30470.       CALL DDB2QX (LUN, KPRINT, IPASS)
  30471.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30472. C
  30473. C     Test CDRVB2
  30474. C
  30475.       CALL CDB2QX (LUN, KPRINT, IPASS)
  30476.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30477. C
  30478. C     Test SDRVB3
  30479. C
  30480.       CALL SDB3QX (LUN, KPRINT, IPASS)
  30481.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30482. C
  30483. C     Test DDRVB3
  30484. C
  30485.       CALL DDB3QX (LUN, KPRINT, IPASS)
  30486.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30487. C
  30488. C     Test CDRVB3
  30489. C
  30490.       CALL CDB3QX (LUN, KPRINT, IPASS)
  30491.       IF (IPASS .EQ. 0) NFAIL = NFAIL + 1
  30492. C
  30493. C     Write PASS or FAIL message
  30494. C
  30495.       IF (NFAIL .EQ. 0) THEN
  30496.          WRITE (LUN, 9000)
  30497.       ELSE
  30498.          WRITE (LUN, 9010) NFAIL
  30499.       ENDIF
  30500.       STOP
  30501.  9000 FORMAT (/' --------------TEST91 PASSED ALL TESTS----------------')
  30502.  9010 FORMAT (/' ************* WARNING -- ', I5,
  30503.      1        ' TEST(S) FAILED IN PROGRAM TEST91 *************')
  30504.       END
  30505. *DECK USERS
  30506.       SUBROUTINE USERS (Y, YH, YWT, SAVE1, SAVE2, T, H, EL, IMPL, N,
  30507.      +   NDE, IFLAG)
  30508. C***BEGIN PROLOGUE  USERS
  30509. C***SUBSIDIARY
  30510. C***PURPOSE  Dummy matrix solution routine for SDRIVE quick checks.
  30511. C***LIBRARY   CLAMS
  30512. C***AUTHOR  Kahaner, D. K., (NIST)
  30513. C           Sutherland, C. D., (LANL)
  30514. C***ROUTINES CALLED  (NONE)
  30515. C***REVISION HISTORY  (YYMMDD)
  30516. C   ??????  DATE WRITTEN
  30517. C   910815  Prologue filled out and brought up to the SLATEC 1990
  30518. C           standard.  (WRB)
  30519. C***END PROLOGUE  USERS
  30520. C***FIRST EXECUTABLE STATEMENT  USERS
  30521.       RETURN
  30522.       END
  30523.