AcouSTO  version 2.0

◆ integrate()

static int integrate ( unsigned  fdim,
integrand_v  f,
void *  fdata,
unsigned  dim,
const double *  xmin,
const double *  xmax,
unsigned  maxEval,
double  reqAbsError,
double  reqRelError,
double *  val,
double *  err,
int  parallel 
)
static
1004 {
1005  rule *r;
1006  hypercube h;
1007  int status;
1008  unsigned i;
1009 
1010  if (fdim == 0) /* nothing to do */ return SUCCESS;
1011  if (dim == 0) { /* trivial integration */
1012  f(0, 1, xmin, fdata, fdim, val);
1013  for (i = 0; i < fdim; ++i) err[i] = 0;
1014  return SUCCESS;
1015  }
1016  r = dim == 1 ? make_rule15gauss(dim, fdim)
1017  : make_rule75genzmalik(dim, fdim);
1018  if (!r) {
1019  for (i = 0; i < fdim; ++i) {
1020  val[i] = 0;
1021  err[i] = HUGE_VAL;
1022  }
1023  return FAILURE;
1024  }
1025  h = make_hypercube_range(dim, xmin, xmax);
1026  status = !h.data ? FAILURE
1027  : ruleadapt_integrate(r, fdim, f, fdata, &h,
1028  maxEval, reqAbsError, reqRelError,
1029  val, err, parallel);
1030  destroy_hypercube(&h);
1031  destroy_rule(r);
1032  return status;
1033 }
static rule * make_rule75genzmalik(unsigned dim, unsigned fdim)
Definition: cubature.c:578
#define SUCCESS
Definition: cubature.c:109
static void destroy_hypercube(hypercube *h)
Definition: cubature.c:179
static hypercube make_hypercube_range(unsigned dim, const double *xmin, const double *xmax)
Definition: cubature.c:165
static void destroy_rule(rule *r)
Definition: cubature.c:242
Definition: cubature.c:133
static rule * make_rule15gauss(unsigned dim, unsigned fdim)
Definition: cubature.c:754
Definition: cubature.c:232
static int ruleadapt_integrate(rule *r, unsigned fdim, integrand_v f, void *fdata, const hypercube *h, unsigned maxEval, double reqAbsError, double reqRelError, double *val, double *err, int parallel)
Definition: cubature.c:885
#define FAILURE
Definition: cubature.c:110
double * data
Definition: cubature.c:135