1 #ifndef QNANO_NEW_INTEGRATOR_VEGAS_DEFINED_H 2 #define QNANO_NEW_INTEGRATOR_VEGAS_DEFINED_H 4 #include "tools/Integrator.h" 6 #include <gsl/gsl_math.h> 7 #include <gsl/gsl_monte.h> 8 #include <gsl/gsl_monte_vegas.h> 15 if(discr.size()!=ifct.dim){
16 std::cerr<<
"Integrator_VEGAS::integrate: discr.size()!=ifct.dim"<<std::endl;
19 gsl_monte_vegas_state *vst=gsl_monte_vegas_alloc(ifct.dim);
23 const gsl_rng_type *T=gsl_rng_default;
24 gsl_rng *r=gsl_rng_alloc(T);
26 gsl_monte_function G = { ifct.
fct, ifct.dim, (
void *)ifct.params };
28 size_t Ntot=discr[0].N;
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;
35 gsl_monte_vegas_integrate(&G, lmin, lmax, ifct.dim, Ntot, r, vst, &res, &err);
40 gsl_monte_vegas_free(vst);
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