# dgaus8.f

          SUBROUTINE DGAUS8 (FUN, A, B, ERR, ANS, IERR)
    C***BEGIN PROLOGUE  DGAUS8
    C***PURPOSE  Integrate a real function of one variable over a finite
    C            interval using an adaptive 8-point Legendre-Gauss
    C            algorithm.  Intended primarily for high accuracy
    C            integration or integration of smooth functions.
    C***LIBRARY   SLATEC
    C***CATEGORY  H2A1A1
    C***TYPE      DOUBLE PRECISION (GAUS8-S, DGAUS8-D)
    C***KEYWORDS  ADAPTIVE QUADRATURE, AUTOMATIC INTEGRATOR,
    C             GAUSS QUADRATURE, NUMERICAL INTEGRATION
    C***AUTHOR  Jones, R. E., (SNLA)
    C***DESCRIPTION
    C
    C     Abstract  *** a DOUBLE PRECISION routine ***
    C        DGAUS8 integrates real functions of one variable over finite
    C        intervals using an adaptive 8-point Legendre-Gauss algorithm.
    C        DGAUS8 is intended primarily for high accuracy integration
    C        or integration of smooth functions.
    C
    C        The maximum number of significant digits obtainable in ANS
    C        is the smaller of 18 and the number of digits carried in
    C        double precision arithmetic.
    C
    C     Description of Arguments
    C
    C        Input--* FUN, A, B, ERR are DOUBLE PRECISION *
    C        FUN - name of external function to be integrated.  This name
    C              must be in an EXTERNAL statement in the calling program.
    C              FUN must be a DOUBLE PRECISION function of one DOUBLE
    C              PRECISION argument.  The value of the argument to FUN
    C              is the variable of integration which ranges from A to B.
    C        A   - lower limit of integration
    C        B   - upper limit of integration (may be less than A)
    C        ERR - is a requested pseudorelative error tolerance.  Normally
    C              pick a value of ABS(ERR) so that DTOL .LT. ABS(ERR) .LE.
    C              1.0D-3 where DTOL is the larger of 1.0D-18 and the
    C              double precision unit roundoff D1MACH(4).  ANS will
    C              normally have no more error than ABS(ERR) times the
    C              integral of the absolute value of FUN(X).  Usually,
    C              smaller values of ERR yield more accuracy and require
    C              more function evaluations.
    C
    C              A negative value for ERR causes an estimate of the
    C              absolute error in ANS to be returned in ERR.  Note that
    C              ERR must be a variable (not a constant) in this case.
    C              Note also that the user must reset the value of ERR
    C              before making any more calls that use the variable ERR.
    C
    C        Output--* ERR,ANS are double precision *
    C        ERR - will be an estimate of the absolute error in ANS if the
    C              input value of ERR was negative.  (ERR is unchanged if
    C              the input value of ERR was non-negative.)  The estimated
    C              error is solely for information to the user and should
    C              not be used as a correction to the computed integral.
    C        ANS - computed value of integral
    C        IERR- a status code
    C            --Normal codes
    C               1 ANS most likely meets requested error tolerance,
    C                 or A=B.
    C              -1 A and B are too nearly equal to allow normal
    C                 integration.  ANS is set to zero.
    C            --Abnormal code
    C               2 ANS probably does not meet requested error tolerance.
    C
    C***REFERENCES  (NONE)
    C***ROUTINES CALLED  D1MACH, I1MACH, XERMSG
    C***REVISION HISTORY  (YYMMDD)
    C   810223  DATE WRITTEN
    C   890531  Changed all specific intrinsics to generic.  (WRB)
    C   890911  Removed unnecessary intrinsics.  (WRB)
    C   890911  REVISION DATE from Version 3.2
    C   891214  Prologue converted to Version 4.0 format.  (BAB)
    C   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
    C   900326  Removed duplicate information from DESCRIPTION section.
    C           (WRB)
    C***END PROLOGUE  DGAUS8