887 unsigned numEval = 0;
891 unsigned nR_alloc = 0;
895 if (!regions.
ee || !regions.
items)
goto bad;
910 while (numEval < maxEval || !maxEval) {
911 for (j = 0; j < fdim && (regions.
ee[j].
err <= reqAbsError
946 for (j = 0; j < fdim; ++j) ee[j] = regions.
ee[j];
948 if (nR + 2 > nR_alloc) {
949 nR_alloc = (nR + 2) * 2;
954 for (j = 0; j < fdim; ++j) ee[j].err -= R[nR].ee[j].err;
959 && (ee[j].
err <= reqAbsError
960 ||
relError(ee[j]) <= reqRelError); ++j) ;
961 if (j == fdim)
break;
962 }
while (regions.
n > 0 && (numEval < maxEval || !maxEval));
978 for (j = 0; j < fdim; ++j) val[j] = err[j] = 0;
979 for (i = 0; i < regions.
n; ++i) {
980 for (j = 0; j < fdim; ++j) {
static void heap_free(heap *h)
Definition: cubature.c:800
static double relError(esterr ee)
Definition: cubature.c:119
#define SUCCESS
Definition: cubature.c:109
Definition: cubature.c:115
unsigned num_points
Definition: cubature.c:234
static heap heap_alloc(unsigned nalloc, unsigned fdim)
Definition: cubature.c:783
static int cut_region(region *R, region *R2)
Definition: cubature.c:210
esterr * ee
Definition: cubature.c:774
static heap_item heap_pop(heap *h)
Definition: cubature.c:842
static int heap_push(heap *h, heap_item hi)
Definition: cubature.c:808
static int heap_push_many(heap *h, unsigned ni, heap_item *hi)
Definition: cubature.c:834
double err
Definition: cubature.c:116
unsigned n
Definition: cubature.c:771
double val
Definition: cubature.c:116
static region make_region(const hypercube *h, unsigned fdim)
Definition: cubature.c:193
#define malloc(size)
Definition: allocation.h:38
static void destroy_region(region *R)
Definition: cubature.c:203
#define FAILURE
Definition: cubature.c:110
Definition: cubature.c:770
heap_item * items
Definition: cubature.c:772
Definition: cubature.c:185
esterr * ee
Definition: cubature.c:189
static int eval_regions(unsigned nR, region *R, integrand_v f, void *fdata, rule *r)
Definition: cubature.c:289