51 for (
int i=0; i<*ndim; i++) {
56 ff[*ncomp-1] = pp->
func(var)*fact;
67 set_integrand(func, function_parameters, parameters, ndim);
76 set_integrand(func, ndim);
85 m_integrand = std::bind(func, std::placeholders::_1, function_parameters, parameters);
105 int comp, neval, fail;
106 vector<double> integral(m_inputs.NCOMP, 0), error(m_inputs.NCOMP, 0), prob(m_inputs.NCOMP, 0);
109 userdata->
func = m_integrand;
117 m_inputs.EPSREL, m_inputs.EPSABS, m_inputs.VERBOSE, m_inputs.SEED,
118 m_inputs.MINEVAL, m_inputs.MAXEVAL, m_inputs.NSTART, m_inputs.NINCREASE, m_inputs.NBATCH,
119 m_inputs.GRIDNO, m_inputs.STATEFILE, m_inputs.SPIN.get(),
120 &neval, &fail, integral.data(), error.data(), prob.data());
122 if(m_inputs.VERBOSE>0){
123 printf(
"VEGAS RESULT:\tneval %d\tfail %d\n", neval, fail);
124 for( comp = 0; comp < m_inputs.NCOMP; ++comp )
125 printf(
"VEGAS RESULT:\t%.8f +- %.8f\tp = %.3f\n", (
double)integral[comp], (
double)error[comp], (
double)prob[comp]);
137 int comp, neval, fail, nregions;
138 vector<double> integral(m_inputs.NCOMP, 0), error(m_inputs.NCOMP, 0), prob(m_inputs.NCOMP, 0);
141 userdata->
func = m_integrand;
149 m_inputs.EPSREL, m_inputs.EPSABS, m_inputs.VERBOSE | m_inputs.LAST, m_inputs.SEED,
150 m_inputs.MINEVAL, m_inputs.MAXEVAL, m_inputs.NNEW, m_inputs.NMIN, m_inputs.FLATNESS,
151 m_inputs.STATEFILE, m_inputs.SPIN.get(),
152 &nregions, &neval, &fail, integral.data(), error.data(), prob.data());
154 if(m_inputs.VERBOSE>0){
155 printf(
"SUAVE RESULT:\tnregions %d\tneval %d\tfail %d\n", nregions, neval, fail);
156 for( comp = 0; comp < m_inputs.NCOMP; ++comp )
157 printf(
"SUAVE RESULT:\t%.8f +- %.8f\tp = %.3f\n", (
double)integral[comp], (
double)error[comp], (
double)prob[comp]);
169 int comp, neval, fail, nregions;
170 vector<double> integral(m_inputs.NCOMP, 0), error(m_inputs.NCOMP, 0), prob(m_inputs.NCOMP, 0);
173 userdata->
func = m_integrand;
181 m_inputs.EPSREL, m_inputs.EPSABS, m_inputs.VERBOSE, m_inputs.SEED,
182 m_inputs.MINEVAL, m_inputs.MAXEVAL, m_inputs.KEY1, m_inputs.KEY2, m_inputs.KEY3, m_inputs.MAXPASS,
183 m_inputs.BORDER, m_inputs.MAXCHISQ, m_inputs.MINDEVIATION,
184 m_inputs.NGIVEN, m_inputs.LDXGIVEN, NULL, m_inputs.NEXTRA, NULL,
185 m_inputs.STATEFILE, m_inputs.SPIN.get(),
186 &nregions, &neval, &fail, integral.data(), error.data(), prob.data());
188 if(m_inputs.VERBOSE>0){
189 printf(
"DIVONNE RESULT:\tnregions %d\tneval %d\tfail %d\n", nregions, neval, fail);
190 for( comp = 0; comp < m_inputs.NCOMP; ++comp )
191 printf(
"DIVONNE RESULT:\t%.8f +- %.8f\tp = %.3f\n", (
double)integral[comp], (
double)error[comp], (
double)prob[comp]);
203 int comp, neval, fail, nregions;
204 vector<double> integral(m_inputs.NCOMP, 0), error(m_inputs.NCOMP, 0), prob(m_inputs.NCOMP, 0);
207 userdata->
func = m_integrand;
215 m_inputs.EPSREL, m_inputs.EPSABS, m_inputs.VERBOSE | m_inputs.LAST,
216 m_inputs.MINEVAL, m_inputs.MAXEVAL, m_inputs.KEY,
217 m_inputs.STATEFILE, m_inputs.SPIN.get(),
218 &nregions, &neval, &fail, integral.data(), error.data(), prob.data());
220 if(m_inputs.VERBOSE>0){
221 printf(
"CUHRE RESULT:\tnregions %d\tneval %d\tfail %d\n", nregions, neval, fail);
222 for( comp = 0; comp < m_inputs.NCOMP; ++comp )
223 printf(
"CUHRE RESULT:\t%.8f +- %.8f\tp = %.3f\n", (
double)integral[comp], (
double)error[comp], (
double)prob[comp]);
class CUBAwrapper that wrap CUBA routines for multidimensional integration
double IntegrateSuave(std::vector< std::vector< double >> integration_limits, const bool parallelize=true)
integrate using the Suave routine
CUBAwrapper()=default
default constructor
double IntegrateDivonne(std::vector< std::vector< double >> integration_limits, const bool parallelize=true)
integrate using the Divonne routine
double IntegrateCuhre(std::vector< std::vector< double >> integration_limits, const bool parallelize=true)
integrate using the Cuhre routine
void set_integrand(FunctionDoubleVectorPtrVectorRef func, const std::shared_ptr< void > function_parameters, std::vector< double > ¶meters, const int ndim)
set the integrand
double IntegrateVegas(std::vector< std::vector< double >> integration_limits, const bool parallelize=true)
integrate using the Vegas routine
int CUBAIntegrand(const int *ndim, const cubareal xx[], const int *ncomp, cubareal ff[], void *userdata)
generic CUBA integrand
std::function< double(std::vector< double >)> FunctionDoubleVector
typedef of a function returning a double with a vector in input
std::function< double(std::vector< double >, std::shared_ptr< void >, std::vector< double > &)> FunctionDoubleVectorPtrVectorRef
typedef of a function returning a double with a vector, a pointer and a vector reference in input
support object for cuba integrand
FunctionDoubleVector func
function to be integrated
std::vector< std::vector< double > > integration_limits
limits of the integration