QNANO
Integrator_VEGAS.h
1 #ifndef QNANO_NEW_INTEGRATOR_VEGAS_DEFINED_H
2 #define QNANO_NEW_INTEGRATOR_VEGAS_DEFINED_H
3 
4 #include "tools/Integrator.h"
5 
6 #include <gsl/gsl_math.h>
7 #include <gsl/gsl_monte.h>
8 #include <gsl/gsl_monte_vegas.h>
9 
10 
12 public:
13 
14  virtual double integrate(const Integrable_Function& ifct, const Integrator_Discretization& discr) const{
15  if(discr.size()!=ifct.dim){
16  std::cerr<<"Integrator_VEGAS::integrate: discr.size()!=ifct.dim"<<std::endl;
17  exit(1);
18  }
19  gsl_monte_vegas_state *vst=gsl_monte_vegas_alloc(ifct.dim);
20  double res,err;
21 
22  gsl_rng_env_setup();
23  const gsl_rng_type *T=gsl_rng_default;
24  gsl_rng *r=gsl_rng_alloc(T);
25 
26  gsl_monte_function G = { ifct.fct, ifct.dim, (void *)ifct.params };
27 
28  size_t Ntot=discr[0].N;
29 
30  double *lmin=new double[discr.size()];
31  for(size_t i=0; i<discr.size(); i++)lmin[i]=discr[i].lim_a;
32  double *lmax=new double[discr.size()];
33  for(size_t i=0; i<discr.size(); i++)lmax[i]=discr[i].lim_b;
34 
35  gsl_monte_vegas_integrate(&G, lmin, lmax, ifct.dim, Ntot, r, vst, &res, &err);
36 
37  delete [] lmax;
38  delete [] lmin;
39 
40  gsl_monte_vegas_free(vst);
41  return res;
42  }
43 
44 };
45 
46 #endif
double(* fct)(double *d, size_t dim, void *params)
Integrable Function compatible with GSL Vegas algorithm.
Definition: Integrable_Function.h:13
Definition: Integrator_VEGAS.h:11
Definition: Integrator.h:26
Definition: Integrator.h:13
Interface for integrable functions.
Definition: Integrable_Function.h:10