# dpchia.f

          DOUBLE PRECISION FUNCTION DPCHIA (N, X, F, D, INCFD, SKIP, A, B,
         +   IERR)
    C***BEGIN PROLOGUE  DPCHIA
    C***PURPOSE  Evaluate the definite integral of a piecewise cubic
    C            Hermite function over an arbitrary interval.
    C***LIBRARY   SLATEC (PCHIP)
    C***CATEGORY  E3, H2A1B2
    C***TYPE      DOUBLE PRECISION (PCHIA-S, DPCHIA-D)
    C***KEYWORDS  CUBIC HERMITE INTERPOLATION, NUMERICAL INTEGRATION, PCHIP,
    C             QUADRATURE
    C***AUTHOR  Fritsch, F. N., (LLNL)
    C             Lawrence Livermore National Laboratory
    C             P.O. Box 808  (L-316)
    C             Livermore, CA  94550
    C             FTS 532-4275, (510) 422-4275
    C***DESCRIPTION
    C
    C          DPCHIA:  Piecewise Cubic Hermite Integrator, Arbitrary limits
    C
    C     Evaluates the definite integral of the cubic Hermite function
    C     defined by  N, X, F, D  over the interval [A, B].
    C
    C     To provide compatibility with DPCHIM and DPCHIC, includes an
    C     increment between successive values of the F- and D-arrays.
    C
    C ----------------------------------------------------------------------
    C
    C  Calling sequence:
    C
    C        PARAMETER  (INCFD = ...)
    C        INTEGER  N, IERR
    C        DOUBLE PRECISION  X(N), F(INCFD,N), D(INCFD,N), A, B
    C        DOUBLE PRECISION  VALUE, DPCHIA
    C        LOGICAL  SKIP
    C
    C        VALUE = DPCHIA (N, X, F, D, INCFD, SKIP, A, B, IERR)
    C
    C   Parameters:
    C
    C     VALUE -- (output) value of the requested integral.
    C
    C     N -- (input) number of data points.  (Error return if N.LT.2 .)
    C
    C     X -- (input) real*8 array of independent variable values.  The
    C           elements of X must be strictly increasing:
    C                X(I-1) .LT. X(I),  I = 2(1)N.
    C           (Error return if not.)
    C
    C     F -- (input) real*8 array of function values.  F(1+(I-1)*INCFD) is
    C           the value corresponding to X(I).
    C
    C     D -- (input) real*8 array of derivative values.  D(1+(I-1)*INCFD)
    C           is the value corresponding to X(I).
    C
    C     INCFD -- (input) increment between successive values in F and D.
    C           (Error return if  INCFD.LT.1 .)
    C
    C     SKIP -- (input/output) logical variable which should be set to
    C           .TRUE. if the user wishes to skip checks for validity of
    C           preceding parameters, or to .FALSE. otherwise.
    C           This will save time in case these checks have already
    C           been performed (say, in DPCHIM or DPCHIC).
    C           SKIP will be set to .TRUE. on return with IERR.GE.0 .
    C
    C     A,B -- (input) the limits of integration.
    C           NOTE:  There is no requirement that [A,B] be contained in
    C                  [X(1),X(N)].  However, the resulting integral value
    C                  will be highly suspect, if not.
    C
    C     IERR -- (output) error flag.
    C           Normal return:
    C              IERR = 0  (no errors).
    C           Warning errors:
    C              IERR = 1  if  A  is outside the interval [X(1),X(N)].
    C              IERR = 2  if  B  is outside the interval [X(1),X(N)].
    C              IERR = 3  if both of the above are true.  (Note that this
    C                        means that either [A,B] contains data interval
    C                        or the intervals do not intersect at all.)
    C           "Recoverable" errors:
    C              IERR = -1  if N.LT.2 .
    C              IERR = -2  if INCFD.LT.1 .
    C              IERR = -3  if the X-array is not strictly increasing.
    C                (VALUE will be zero in any of these cases.)
    C               NOTE:  The above errors are checked in the order listed,
    C                   and following arguments have **NOT** been validated.
    C              IERR = -4  in case of an error return from DPCHID (which
    C                         should never occur).
    C
    C***REFERENCES  (NONE)
    C***ROUTINES CALLED  DCHFIE, DPCHID, XERMSG
    C***REVISION HISTORY  (YYMMDD)
    C   820730  DATE WRITTEN
    C   820804  Converted to SLATEC library version.
    C   870707  Corrected XERROR calls for d.p. name(s).
    C   870707  Corrected conversion to double precision.
    C   870813  Minor cosmetic changes.
    C   890206  Corrected XERROR calls.
    C   890411  Added SAVE statements (Vers. 3.2).
    C   890531  Changed all specific intrinsics to generic.  (WRB)
    C   890703  Corrected category record.  (WRB)
    C   890831  Modified array declarations.  (WRB)
    C   891006  Cosmetic changes to prologue.  (WRB)
    C   891006  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   930503  Corrected to set VALUE=0 when IERR.lt.0.  (FNF)
    C   930504  Changed DCHFIV to DCHFIE.  (FNF)
    C***END PROLOGUE  DPCHIA