summaryrefslogtreecommitdiff
path: root/src/divonne/decl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/divonne/decl.h')
-rw-r--r--src/divonne/decl.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/src/divonne/decl.h b/src/divonne/decl.h
new file mode 100644
index 0000000..99fac6d
--- /dev/null
+++ b/src/divonne/decl.h
@@ -0,0 +1,127 @@
+/*
+ decl.h
+ Type declarations
+ this file is part of Divonne
+ last modified 14 Nov 11 th
+*/
+
+
+#include "stddecl.h"
+
+#define Tag(x) ((x) | INT_MIN)
+#define Untag(x) ((x) & INT_MAX)
+
+typedef struct {
+ real lower, upper;
+} Bounds;
+
+typedef const Bounds cBounds;
+
+typedef struct {
+ real avg, err;
+} PhaseResult;
+
+typedef struct {
+ real avg, spreadsq;
+ real spread, secondspread;
+ real nneed, maxerrsq, mindevsq;
+ PhaseResult phase[2];
+ int iregion;
+} Totals;
+
+typedef struct {
+ void *first, *last;
+ real errcoeff[3];
+ count n;
+} Rule;
+
+typedef const Rule cRule;
+
+typedef struct samples {
+ real *x, *f;
+ void (*sampler)(struct _this *t, ccount);
+ cRule *rule;
+ number n, neff;
+ count coeff;
+} Samples;
+
+typedef const Samples cSamples;
+
+typedef struct {
+ real diff, err, spread;
+} Errors;
+
+typedef const Errors cErrors;
+
+typedef int (*Integrand)(ccount *, creal *, ccount *, real *, void *, cint *);
+
+typedef void (*PeakFinder)(ccount *, cBounds *, number *, real *);
+
+typedef struct _this {
+ count ndim, ncomp;
+#ifndef MLVERSION
+ Integrand integrand;
+ void *userdata;
+ PeakFinder peakfinder;
+ int ncores, *child;
+ int running, nchildren;
+ fd_set children;
+#endif
+ real epsrel, epsabs;
+ int flags, seed;
+ number mineval, maxeval;
+ int key1, key2, key3;
+ count maxpass;
+ Bounds border;
+ real maxchisq, mindeviation;
+ number ngiven, nextra;
+ real *xgiven, *xextra, *fgiven, *fextra;
+ count ldxgiven;
+ count nregions;
+ number neval, neval_opt, neval_cut;
+ count phase;
+ count selectedcomp, size;
+ Samples samples[3];
+ Totals *totals;
+ Rule rule7, rule9, rule11, rule13;
+ RNGState rng;
+ void *voidregion;
+ jmp_buf abort;
+} This;
+
+typedef const This cThis;
+
+#define TYPEDEFREGION \
+ typedef struct { \
+ real avg, err, spread, chisq; \
+ real fmin, fmax; \
+ real xmin[NDIM], xmax[NDIM]; \
+ } Result; \
+ typedef const Result cResult; \
+ typedef struct region { \
+ int depth, next; \
+ count isamples, cutcomp, xmajor; \
+ real fmajor, fminor, vol; \
+ Bounds bounds[NDIM]; \
+ Result result[NCOMP]; \
+ } Region
+
+#define RegionPtr(n) (&((Region *)t->voidregion)[n])
+
+#define CHUNKSIZE 4096
+
+#define AllocRegions(t) \
+ MemAlloc((t)->voidregion, ((t)->size = CHUNKSIZE)*sizeof(Region))
+
+#define EnlargeRegions(t, n) if( (t)->nregions + n > (t)->size ) \
+ ReAlloc((t)->voidregion, ((t)->size += CHUNKSIZE)*sizeof(Region))
+
+#define SAMPLERDEFS \
+ TYPEDEFREGION; \
+ Region *region = RegionPtr(iregion); \
+ cBounds *b = region->bounds; \
+ Result *r = region->result; \
+ cSamples *samples = &t->samples[region->isamples]; \
+ real *x = samples->x, *f = samples->f; \
+ cnumber n = samples->n
+