Deterministic Gaussian Sampling
Loading...
Searching...
No Matches
gsl_quadrature_adaptive_gauss_kronrod.h
1#ifndef GSL_QUADRATURE_ADAPTIVE_GAUSS_KRONROD_H
2#define GSL_QUADRATURE_ADAPTIVE_GAUSS_KRONROD_H
3
4#include <gsl/gsl_integration.h>
5#include <omp.h>
6
7#include <cassert>
8
14 public:
15 using fT = double (*)(double x, void* params);
16
23 GslQuadratureAdaptiveGaussKronrod(double epsabs = 0.00, double epsrel = 1e-10)
24 : epsabs(epsabs), epsrel(epsrel) {
25 thread_num = (size_t)omp_get_max_threads();
26 workspace = new gsl_integration_workspace*[thread_num];
27 for (size_t i = 0; i < thread_num; ++i) {
28 workspace[i] = gsl_integration_workspace_alloc(1000);
29 }
30 }
31
37 if (workspace) {
38 for (size_t i = 0; i < thread_num; ++i) {
40 }
41 delete[] workspace;
42 }
43 }
44
57 inline bool integrate(fT f, void* params, double lowerLimit,
58 double upperLimit, double* result,
59 double* abserr) const {
61 F.function = f;
62 F.params = params;
63 int tid = omp_get_thread_num();
64 int status =
65 gsl_integration_qag(&F, lowerLimit, upperLimit, epsabs, epsrel, 1000,
66 GSL_INTEG_GAUSS31, workspace[tid], result, abserr);
67 return status == GSL_SUCCESS;
68 }
69
70 private:
71 gsl_integration_workspace** workspace;
72 size_t thread_num;
73 double epsabs;
74 double epsrel;
75};
76
77#endif // GSL_QUADRATURE_ADAPTIVE_GAUSS_KRONROD_H
helper class to use GSL adaptive Gauss-Kronrod quadrature
Definition gsl_quadrature_adaptive_gauss_kronrod.h:13
~GslQuadratureAdaptiveGaussKronrod()
Destroy the Gsl Quadrature Adaptive Gauss Kronrod object.
Definition gsl_quadrature_adaptive_gauss_kronrod.h:36
bool integrate(fT f, void *params, double lowerLimit, double upperLimit, double *result, double *abserr) const
perform the integration using GSL adaptive Gauss-Kronrod
Definition gsl_quadrature_adaptive_gauss_kronrod.h:57
GslQuadratureAdaptiveGaussKronrod(double epsabs=0.00, double epsrel=1e-10)
Construct a new Gsl Quadrature Adaptive Gauss Kronrod object.
Definition gsl_quadrature_adaptive_gauss_kronrod.h:23
Definition dirac_to_dirac_approx_short.h:9