AcouSTO  version 2.0

◆ make_rule75genzmalik()

static rule* make_rule75genzmalik ( unsigned  dim,
unsigned  fdim 
)
static
579 {
580  rule75genzmalik *r;
581 
582  if (dim < 2) return NULL; /* this rule does not support 1d integrals */
583 
584  /* Because of the use of a bit-field in evalR_Rfs, we are limited
585  to be < 32 dimensions (or however many bits are in unsigned).
586  This is not a practical limitation...long before you reach
587  32 dimensions, the Genz-Malik cubature becomes excruciatingly
588  slow and is superseded by other methods (e.g. Monte-Carlo). */
589  if (dim >= sizeof(unsigned) * 8) return NULL;
590 
591  r = (rule75genzmalik *) make_rule(sizeof(rule75genzmalik),
592  dim, fdim,
593  num0_0(dim) + 2 * numR0_0fs(dim)
594  + numRR0_0fs(dim) + numR_Rfs(dim),
597  if (!r) return NULL;
598 
599  r->weight1 = (real(12824 - 9120 * to_int(dim) + 400 * isqr(to_int(dim)))
600  / real(19683));
601  r->weight3 = real(1820 - 400 * to_int(dim)) / real(19683);
602  r->weight5 = real(6859) / real(19683) / real(1U << dim);
603  r->weightE1 = (real(729 - 950 * to_int(dim) + 50 * isqr(to_int(dim)))
604  / real(729));
605  r->weightE3 = real(265 - 100 * to_int(dim)) / real(1458);
606 
607  r->p = (double *) malloc(sizeof(double) * dim * 3);
608  if (!r->p) { destroy_rule((rule *) r); return NULL; }
609  r->widthLambda = r->p + dim;
610  r->widthLambda2 = r->p + 2 * dim;
611 
612  return (rule *) r;
613 }
double weightE1
Definition: cubature.c:443
double * widthLambda2
Definition: cubature.c:439
static int isqr(int x)
Definition: cubature.c:449
double weight1
Definition: cubature.c:442
double weight3
Definition: cubature.c:442
static void destroy_rule75genzmalik(rule *r_)
Definition: cubature.c:454
static rule * make_rule(size_t sz, unsigned dim, unsigned fdim, unsigned num_points, evalError_func evalError, destroy_func destroy)
Definition: cubature.c:271
#define num0_0(dim)
Definition: cubature.c:420
#define to_int(n)
Definition: cubature.c:447
double * widthLambda
Definition: cubature.c:439
double * p
Definition: cubature.c:439
static int rule75genzmalik_evalError(rule *r_, unsigned fdim, integrand_v f, void *fdata, unsigned nR, region *R)
Definition: cubature.c:460
Definition: cubature.c:435
static void destroy_rule(rule *r)
Definition: cubature.c:242
#define numR0_0fs(dim)
Definition: cubature.c:421
double weightE3
Definition: cubature.c:443
#define malloc(size)
Definition: allocation.h:38
#define numRR0_0fs(dim)
Definition: cubature.c:422
Definition: cubature.c:232
double weight5
Definition: cubature.c:442
#define real(x)
Definition: cubature.c:446
#define numR_Rfs(dim)
Definition: cubature.c:423