* * $Id$ * * $Log$ * Revision 1.1.1.2 1996/10/30 08:27:52 cernlib * Version 7.04 * * Revision 1.1.1.1 1996/04/12 15:29:15 plothow * Version 7.01 * * #include "pdf/pilot.h" #if defined(CERNLIB_SINGLE) FUNCTION DBFINT(NARG,ARG,NA,ENT,TABLE) #endif #if defined(CERNLIB_DOUBLE) DOUBLE PRECISION FUNCTION DBFINT(NARG,ARG,NA,ENT,TABLE) #endif #include "pdf/impdp.inc" INTEGER NA(NARG), INDEX(32) #include "pdf/expdp.inc" + ARG(NARG),ENT(10),TABLE(10),WEIGHT(32) DATA ZEROD/0.D0/ONED/1.D0/ C DBFINT = ZEROD IF(NARG .LT. 1 .OR. NARG .GT. 5) RETURN C LMAX = 0 ISTEP = 1 KNOTS = 1 INDEX(1) = 1 WEIGHT(1) = ONED DO 100 N = 1, NARG X = ARG(N) NDIM = NA(N) LOCA = LMAX LMIN = LMAX + 1 LMAX = LMAX + NDIM IF(NDIM .GT. 2) GOTO 10 IF(NDIM .EQ. 1) GOTO 100 H = X - ENT(LMIN) IF(H .EQ. ZEROD) GOTO 90 ISHIFT = ISTEP IF(X-ENT(LMIN+1) .EQ. ZEROD) GOTO 21 ISHIFT = 0 ETA = H / (ENT(LMIN+1) - ENT(LMIN)) GOTO 30 10 LOCB = LMAX + 1 11 LOCC = (LOCA+LOCB) / 2 IF(X-ENT(LOCC)) 12, 20, 13 12 LOCB = LOCC GOTO 14 13 LOCA = LOCC 14 IF(LOCB-LOCA .GT. 1) GOTO 11 LOCA = MIN ( MAX (LOCA,LMIN), LMAX-1 ) ISHIFT = (LOCA - LMIN) * ISTEP ETA = (X - ENT(LOCA)) / (ENT(LOCA+1) - ENT(LOCA)) GOTO 30 20 ISHIFT = (LOCC - LMIN) * ISTEP 21 DO 22 K = 1, KNOTS INDEX(K) = INDEX(K) + ISHIFT 22 CONTINUE GOTO 90 30 DO 31 K = 1, KNOTS INDEX(K) = INDEX(K) + ISHIFT INDEX(K+KNOTS) = INDEX(K) + ISTEP WEIGHT(K+KNOTS) = WEIGHT(K) * ETA WEIGHT(K) = WEIGHT(K) - WEIGHT(K+KNOTS) 31 CONTINUE KNOTS = 2*KNOTS 90 ISTEP = ISTEP * NDIM 100 CONTINUE DO 200 K = 1, KNOTS I = INDEX(K) DBFINT = DBFINT + WEIGHT(K) * TABLE(I) 200 CONTINUE RETURN END