]> git.treefish.org Git - cubaint.git/blob - cubaint.hpp
Adapted to new cuba interface
[cubaint.git] / cubaint.hpp
1 #ifndef CUBAINT_HPP
2 #define CUBAINT_HPP
3
4 #include <vector>
5 #include <array>
6 #include <complex>
7
8 #include "cuba.h"
9
10 namespace cubaint 
11 {
12   enum intmethod {SUAVE, DIVONNE, VEGAS, CUHRE};
13
14   enum limtype {NUM, INF};
15
16   struct limit {
17     limit(const double& _number);
18     limit(const limtype& _LimType);
19     const limtype LimType;
20     const double number;
21   };
22
23   typedef int (*integrand_t)(const int *ndim, const double x[],
24                              const int *ncomp, double f[], void *userdata);
25
26   typedef int (*integrand_tc)(const int *ndim, const double x[],
27                               const int *ncomp, std::complex<double> f[], void *userdata);
28
29   typedef std::vector<std::array<limit,2>> limits;
30
31   struct options {
32     int seed, flags, nvec, mineval, maxeval;
33     double epsrel, epsabs;
34     const char *statefile;
35     int *spin;
36     options() :
37       seed(0), flags(0), nvec(1), mineval(0), maxeval(50000),
38       epsrel(1e-3), epsabs(1e-12), statefile(NULL), spin(NULL)
39     {};
40     
41     struct suave {
42       int nnew;
43       double flatness;
44       int nmin;
45       suave() :
46         nnew(1000), flatness(25.), nmin(2)
47       {};
48     };
49
50     struct divonne {
51       int key1, key2, key3, maxpass, ngiven, ldxgiven, nextra;
52       double border, maxchisq, mindeviation;
53       double *xgiven;
54       peakfinder_t peakfinder;
55       divonne() :
56         key1(47), key2(1), key3(1), maxpass(5), border(0), maxchisq(10),
57         mindeviation(.25), ngiven(0), ldxgiven(0), xgiven(NULL),
58         peakfinder(NULL), nextra(0)
59       {};
60     };
61
62     struct vegas {
63       int nstart, nincrease, nbatch, gridno;
64       vegas() :
65         nstart(1000), nincrease(500), nbatch(1000), gridno(0)
66       {};
67     };
68
69     struct cuhre {
70       int key;
71       cuhre() :
72         key(0)
73       {};
74     };
75     
76     suave Suave;
77     divonne Divonne;
78     vegas Vegas;
79     cuhre Cuhre;
80   };
81
82   extern const options DefaultOptions;
83
84   int integrate (integrand_t integrand, const intmethod& IntMethod, 
85                  const limits& Limits, const int& ncomp,
86                  int& nregions,
87                  int& neval, int& fail, double integral[], 
88                  double error[], double prob[], 
89                  const unsigned int& verbosity=0, 
90                  void *userdata=NULL, const options& Options=DefaultOptions);
91
92   int integrate (integrand_tc integrand, const intmethod& IntMethod, 
93                  const limits& Limits, const int& ncomp,
94                  int& nregions,
95                  int& neval, int& fail, std::complex<double> integral[], 
96                  std::complex<double> error[], std::complex<double> prob[], 
97                  const unsigned int& verbosity=0, 
98                  void *userdata=NULL, const options& Options=DefaultOptions);
99 };
100
101 #endif