*     D01GBF Example Program Text
*     Mark 14 Revised. NAG Copyright 1989.
*     .. Parameters ..
      INTEGER          NDIM, MAXCLS, LENWRK
      PARAMETER        (NDIM=4,MAXCLS=20000,LENWRK=500)
      INTEGER          NOUT
      PARAMETER        (NOUT=6)
*     .. Local Scalars ..
      DOUBLE PRECISION ACC, EPS, FINEST
      INTEGER          IFAIL, K, MINCLS
*     .. Local Arrays ..
      DOUBLE PRECISION A(NDIM), B(NDIM), WRKSTR(LENWRK)
*     .. External Functions ..
      DOUBLE PRECISION FUNCTN
      EXTERNAL         FUNCTN
*     .. External Subroutines ..
      EXTERNAL         D01GBF
*     .. Executable Statements ..
      WRITE (NOUT,*) 'D01GBF Example Program Results'
      DO 20 K = 1, NDIM
         A(K) = 0.0D0
         B(K) = 1.0D0
   20 CONTINUE
      EPS = 0.01D0
      MINCLS = 1000
      IFAIL = 1
*
      CALL D01GBF(NDIM,A,B,MINCLS,MAXCLS,FUNCTN,EPS,ACC,LENWRK,WRKSTR,
     +            FINEST,IFAIL)
*
      WRITE (NOUT,*)
      IF (IFAIL.GT.0) THEN
         WRITE (NOUT,99999) 'D01GBF fails. IFAIL =', IFAIL
         WRITE (NOUT,*)
      END IF
      IF (IFAIL.EQ.0 .OR. IFAIL.EQ.2) THEN
         WRITE (NOUT,99998) 'Requested accuracy    = ', EPS
         WRITE (NOUT,99997) 'Estimated value       = ', FINEST
         WRITE (NOUT,99998) 'Estimated accuracy    = ', ACC
         WRITE (NOUT,99999) 'Number of evaluations = ', MINCLS
      ELSE IF (IFAIL.LT.0) THEN
         WRITE (NOUT,99999) ' ** D01GBF returned with IFAIL = ', IFAIL
      END IF
*
99999 FORMAT (1X,A,I5)
99998 FORMAT (1X,A,E13.2)
99997 FORMAT (1X,A,F13.5)
      END
*
      DOUBLE PRECISION FUNCTION FUNCTN(NDIM,X)
*     .. Scalar Arguments ..
      INTEGER          NDIM
*     .. Array Arguments ..
      DOUBLE PRECISION X(NDIM)
*     .. Intrinsic Functions ..
      INTRINSIC        EXP
*     .. Executable Statements ..
      FUNCTN = 4.0D0*X(1)*X(3)**2*EXP(2.0D0*X(1)*X(3))/(1.0D0+X(2)+X(4))
     +         **2
      RETURN
      END
