# avint.f

          SUBROUTINE AVINT (X, Y, N, XLO, XUP, ANS, IERR)
    C***BEGIN PROLOGUE  AVINT
    C***PURPOSE  Integrate a function tabulated at arbitrarily spaced
    C            abscissas using overlapping parabolas.
    C***LIBRARY   SLATEC
    C***CATEGORY  H2A1B2
    C***TYPE      SINGLE PRECISION (AVINT-S, DAVINT-D)
    C***KEYWORDS  INTEGRATION, QUADRATURE, TABULATED DATA
    C***AUTHOR  Jones, R. E., (SNLA)
    C***DESCRIPTION
    C
    C     Abstract
    C         AVINT integrates a function tabulated at arbitrarily spaced
    C         abscissas.  The limits of integration need not coincide
    C         with the tabulated abscissas.
    C
    C         A method of overlapping parabolas fitted to the data is used
    C         provided that there are at least 3 abscissas between the
    C         limits of integration.  AVINT also handles two special cases.
    C         If the limits of integration are equal, AVINT returns a result
    C         of zero regardless of the number of tabulated values.
    C         If there are only two function values, AVINT uses the
    C         trapezoid rule.
    C
    C     Description of Parameters
    C         The user must dimension all arrays appearing in the call list
    C              X(N), Y(N).
    C
    C         Input--
    C         X    - real array of abscissas, which must be in increasing
    C                order.
    C         Y    - real array of functional values. i.e., Y(I)=FUNC(X(I)).
    C         N    - the integer number of function values supplied.
    C                N .GE. 2 unless XLO = XUP.
    C         XLO  - real lower limit of integration.
    C         XUP  - real upper limit of integration.
    C                Must have XLO .LE. XUP.
    C
    C         Output--
    C         ANS  - computed approximate value of integral
    C         IERR - a status code
    C              --normal code
    C                =1 means the requested integration was performed.
    C              --abnormal codes
    C                =2 means XUP was less than XLO.
    C                =3 means the number of X(I) between XLO and XUP
    C                   (inclusive) was less than 3 and neither of the two
    C                   special cases described in the Abstract occurred.
    C                   No integration was performed.
    C                =4 means the restriction X(I+1) .GT. X(I) was violated.
    C                =5 means the number N of function values was .LT. 2.
    C                ANS is set to zero if IERR=2,3,4,or 5.
    C
    C     AVINT is documented completely in SC-M-69-335
    C     Original program from "Numerical Integration" by Davis &
    C     Rabinowitz.
    C     Adaptation and modifications for Sandia Mathematical Program
    C     Library by Rondall E. Jones.
    C
    C***REFERENCES  R. E. Jones, Approximate integrator of functions
    C                 tabulated at arbitrarily spaced abscissas,
    C                 Report SC-M-69-335, Sandia Laboratories, 1969.
    C***ROUTINES CALLED  XERMSG
    C***REVISION HISTORY  (YYMMDD)
    C   690901  DATE WRITTEN
    C   890831  Modified array declarations.  (WRB)
    C   890831  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   920501  Reformatted the REFERENCES section.  (WRB)
    C***END PROLOGUE  AVINT