]> git.treefish.org Git - cubaint.git/blob - cubaint.hpp
Do not use list append in cmake file.
[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       suave() :
45         nnew(1000), flatness(25.)
46       {};
47     };
48
49     struct divonne {
50       int key1, key2, key3, maxpass, ngiven, ldxgiven, nextra;
51       double border, maxchisq, mindeviation;
52       double *xgiven;
53       peakfinder_t peakfinder;
54       divonne() :
55         key1(47), key2(1), key3(1), maxpass(5), border(0), maxchisq(10),
56         mindeviation(.25), ngiven(0), ldxgiven(0), xgiven(NULL),
57         peakfinder(NULL), nextra(0)
58       {};
59     };
60
61     struct vegas {
62       int nstart, nincrease, nbatch, gridno;
63       vegas() :
64         nstart(1000), nincrease(500), nbatch(1000), gridno(0)
65       {};
66     };
67
68     struct cuhre {
69       int key;
70       cuhre() :
71         key(0)
72       {};
73     };
74     
75     suave Suave;
76     divonne Divonne;
77     vegas Vegas;
78     cuhre Cuhre;
79   };
80
81   extern const options DefaultOptions;
82
83   int integrate (integrand_t integrand, const intmethod& IntMethod, 
84                  const limits& Limits, const int& ncomp,
85                  int& nregions,
86                  int& neval, int& fail, double integral[], 
87                  double error[], double prob[], 
88                  const unsigned int& verbosity=0, 
89                  void *userdata=NULL, const options& Options=DefaultOptions);
90
91   int integrate (integrand_tc integrand, const intmethod& IntMethod, 
92                  const limits& Limits, const int& ncomp,
93                  int& nregions,
94                  int& neval, int& fail, std::complex<double> integral[], 
95                  std::complex<double> error[], std::complex<double> prob[], 
96                  const unsigned int& verbosity=0, 
97                  void *userdata=NULL, const options& Options=DefaultOptions);
98 };
99
100 #endif