 
      SUBROUTINE ADAPT(NDIM,A,B,MINPTS,MAXPTS,FUNCTN,EPS,RELERR,LENWRK,
     * WRKSTR,FINEST,IFAIL)
C***BEGIN PROLOGUE ADAPT
C  ADAPTIVE MULTIDIMENSIONAL INTEGRATION SUBROUTINE
C           AUTHOR: A. C. GENZ, Washington State University
C                    19 March 1984
C**************  PARAMETERS FOR ADAPT  ********************************
C***** INPUT PARAMETERS
C  NDIM    NUMBER OF VARIABLES, MUST EXCEED 1, BUT NOT EXCEED 20
C  A       REAL ARRAY OF LOWER LIMITS, WITH DIMENSION NDIM
C  B       REAL ARRAY OF UPPER LIMITS, WITH DIMENSION NDIM
C  MINPTS  MINIMUM NUMBER OF FUNCTION EVALUATIONS TO BE ALLOWED.
C          ON THE FIRST CALL TO ADAPT MINPTS SHOULD BE SET TO A
C          NON NEGATIVE VALUE. (CAUTION... MINPTS IS ALTERED BY ADAPT)
C          IT IS POSSIBLE TO CONTINUE A CALCULATION TO GREATER ACCURACY
C          BY CALLING ADAPT AGAIN BY DECREASING EPS (DESCRIBED BELOW)
C          AND RESETTING MINPTS TO ANY NEGATIVE VALUE.
C          MINPTS MUST NOT EXCEED MAXPTS.
C  MAXPTS  MAXIMUM NUMBER OF FUNCTION EVALUATIONS TO BE ALLOWED,
C          WHICH MUST BE AT LEAST RULCLS, WHERE
C          RULCLS =  2**NDIM+2*NDIM**2+6*NDIM+1
C
C            FOR NDIM =  2   3   4   5   6   7   8   9   10
C            MAXPTS >=  25  45  73 113 173 269 433 729 1285
C         A suggested value for MAXPTS is 100 times the above values.
C
C  FUNCTN  EXTERNALLY DECLARED USER DEFINED FUNCTION TO BE INTEGRATED.
C          IT MUST HAVE PARAMETERS (NDIM,Z), WHERE Z IS A REAL ARRAY
C          OF DIMENSION NDIM.
C  EPS     REQUIRED RELATIVE ACCURACY
C  LENWRK  LENGTH OF ARRAY WRKSTR OF WORKING STORAGE, THE ROUTINE
C          NEEDS (2*NDIM+3)*(1+MAXPTS/RULCLS)/2 FOR LENWRK IF
C          MAXPTS FUNCTION CALLS ARE USED.
C          FOR GUIDANCE, IF YOU SET MAXPTS TO 100*RULCLS (SEE TABLE
C          ABOVE) THEN ACCEPTABLE VALUES FOR LENWRK ARE
C
C            FOR NDIM = 2    3    4    5    6    7    8     9
C            LENWRK =  357  561  1785 3417 6681 13209 26265 52377
C
C***** OUTPUT PARAMETERS
C  MINPTS  ACTUAL NUMBER OF FUNCTION EVALUATIONS USED BY ADAPT
C  WRKSTR  REAL ARRAY OF WORKING STORAGE OF DIMENSION (LENWRK).
C  RELERR  ESTIMATED RELATIVE ACCURACY OF FINEST
C  FINEST  ESTIMATED VALUE OF INTEGRAL
C  IFAIL   IFAIL=0 FOR NORMAL EXIT, WHEN ESTIMATED RELATIVE ACCURACY
C                  RELERR IS LESS THAN EPS WITH MAXPTS OR LESS FUNCTION
C                  CALLS MADE.
C          IFAIL=1 IF MAXPTS WAS TOO SMALL FOR ADAPT TO OBTAIN THE
C                  REQUIRED RELATIVE ACCURACY EPS.  IN THIS CASE ADAPT
C                  RETURNS A VALUE OF FINEST WITH ESTIMATED RELATIVE
C                  ACCURACY RELERR.
C          IFAIL=2 IF LENWRK TOO SMALL FOR MAXPTS FUNCTION CALLS.  IN
C                  THIS CASE ADAPT RETURNS A VALUE OF FINEST WITH
C                  ESTIMATED ACCURACY RELERR USING THE WORKING STORAGE
C                  AVAILABLE, BUT RELERR WILL BE GREATER THAN EPS.
C          IFAIL=3 IF NDIM ) 2, NDIM \ 20, MINPTS \ MAXPTS,
C                  OR MAXPTS ) RULCLS.
C***********************************************************************
C***END PROLOGUE ADAPT
