1 /** D bindings for GSL. 2 Authors: Chibisi Chima-Okereke 3 Copyright: Copyright (c) 2016, Chibisi Chima-Okereke. All rights reserved. 4 License: Boost License 1.0 5 */ 6 7 module gsl.integration; 8 import gsl.math; 9 10 extern (C): 11 12 alias void function(const(gsl_function)* f, double a, double b, double* result, double* abserr, double* defabs, double* resabs) gsl_integration_rule; 13 14 enum gsl_integration_qawo_enum 15 { 16 GSL_INTEG_COSINE = 0, 17 GSL_INTEG_SINE = 1 18 } 19 20 21 enum GSL_INTEG_GAUSS15 = 1; 22 enum GSL_INTEG_GAUSS21 = 2; 23 enum GSL_INTEG_GAUSS31 = 3; 24 enum GSL_INTEG_GAUSS41 = 4; 25 enum GSL_INTEG_GAUSS51 = 5; 26 enum GSL_INTEG_GAUSS61 = 6; 27 28 29 struct gsl_integration_workspace 30 { 31 size_t limit; 32 size_t size; 33 size_t nrmax; 34 size_t i; 35 size_t maximum_level; 36 double* alist; 37 double* blist; 38 double* rlist; 39 double* elist; 40 size_t* order; 41 size_t* level; 42 } 43 44 struct gsl_integration_qaws_table 45 { 46 double alpha; 47 double beta; 48 int mu; 49 int nu; 50 double[25] ri; 51 double[25] rj; 52 double[25] rg; 53 double[25] rh; 54 } 55 56 struct gsl_integration_qawo_table 57 { 58 size_t n; 59 double omega; 60 double L; 61 double par; 62 enum gsl_integration_qawo_enum 63 { 64 GSL_INTEG_COSINE = 0, 65 GSL_INTEG_SINE = 1 66 } 67 gsl_integration_qawo_enum sine; 68 double* chebmo; 69 } 70 71 struct gsl_integration_glfixed_table 72 { 73 size_t n; 74 double* x; 75 double* w; 76 int precomputed; 77 } 78 79 struct gsl_integration_cquad_ival 80 { 81 double a; 82 double b; 83 double[64] c; 84 double[33] fx; 85 double igral; 86 double err; 87 int depth; 88 int rdepth; 89 int ndiv; 90 } 91 92 struct gsl_integration_cquad_workspace 93 { 94 size_t size; 95 gsl_integration_cquad_ival* ivals; 96 size_t* heap; 97 } 98 99 gsl_integration_workspace* gsl_integration_workspace_alloc (const size_t n); 100 void gsl_integration_workspace_free (gsl_integration_workspace* w); 101 gsl_integration_qaws_table* gsl_integration_qaws_table_alloc (double alpha, double beta, int mu, int nu); 102 int gsl_integration_qaws_table_set (gsl_integration_qaws_table* t, double alpha, double beta, int mu, int nu); 103 void gsl_integration_qaws_table_free (gsl_integration_qaws_table* t); 104 gsl_integration_qawo_table* gsl_integration_qawo_table_alloc (double omega, double L, gsl_integration_qawo_enum sine, size_t n); 105 int gsl_integration_qawo_table_set (gsl_integration_qawo_table* t, double omega, double L, gsl_integration_qawo_enum sine); 106 int gsl_integration_qawo_table_set_length (gsl_integration_qawo_table* t, double L); 107 void gsl_integration_qawo_table_free (gsl_integration_qawo_table* t); 108 void gsl_integration_qk15 (const(gsl_function)* f, double a, double b, double* result, double* abserr, double* resabs, double* resasc); 109 void gsl_integration_qk21 (const(gsl_function)* f, double a, double b, double* result, double* abserr, double* resabs, double* resasc); 110 void gsl_integration_qk31 (const(gsl_function)* f, double a, double b, double* result, double* abserr, double* resabs, double* resasc); 111 void gsl_integration_qk41 (const(gsl_function)* f, double a, double b, double* result, double* abserr, double* resabs, double* resasc); 112 void gsl_integration_qk51 (const(gsl_function)* f, double a, double b, double* result, double* abserr, double* resabs, double* resasc); 113 void gsl_integration_qk61 (const(gsl_function)* f, double a, double b, double* result, double* abserr, double* resabs, double* resasc); 114 void gsl_integration_qcheb (gsl_function* f, double a, double b, double* cheb12, double* cheb24); 115 void gsl_integration_qk (const int n, const(double)* xgk, const(double)* wg, const(double)* wgk, double* fv1, double* fv2, const(gsl_function)* f, double a, double b, double* result, double* abserr, double* resabs, double* resasc); 116 int gsl_integration_qng (const(gsl_function)* f, double a, double b, double epsabs, double epsrel, double* result, double* abserr, size_t* neval); 117 int gsl_integration_qag (const(gsl_function)* f, double a, double b, double epsabs, double epsrel, size_t limit, int key, gsl_integration_workspace* workspace, double* result, double* abserr); 118 int gsl_integration_qagi (gsl_function* f, double epsabs, double epsrel, size_t limit, gsl_integration_workspace* workspace, double* result, double* abserr); 119 int gsl_integration_qagiu (gsl_function* f, double a, double epsabs, double epsrel, size_t limit, gsl_integration_workspace* workspace, double* result, double* abserr); 120 int gsl_integration_qagil (gsl_function* f, double b, double epsabs, double epsrel, size_t limit, gsl_integration_workspace* workspace, double* result, double* abserr); 121 int gsl_integration_qags (const(gsl_function)* f, double a, double b, double epsabs, double epsrel, size_t limit, gsl_integration_workspace* workspace, double* result, double* abserr); 122 int gsl_integration_qagp (const(gsl_function)* f, double* pts, size_t npts, double epsabs, double epsrel, size_t limit, gsl_integration_workspace* workspace, double* result, double* abserr); 123 int gsl_integration_qawc (gsl_function* f, const double a, const double b, const double c, const double epsabs, const double epsrel, const size_t limit, gsl_integration_workspace* workspace, double* result, double* abserr); 124 int gsl_integration_qaws (gsl_function* f, const double a, const double b, gsl_integration_qaws_table* t, const double epsabs, const double epsrel, const size_t limit, gsl_integration_workspace* workspace, double* result, double* abserr); 125 int gsl_integration_qawo (gsl_function* f, const double a, const double epsabs, const double epsrel, const size_t limit, gsl_integration_workspace* workspace, gsl_integration_qawo_table* wf, double* result, double* abserr); 126 int gsl_integration_qawf (gsl_function* f, const double a, const double epsabs, const size_t limit, gsl_integration_workspace* workspace, gsl_integration_workspace* cycle_workspace, gsl_integration_qawo_table* wf, double* result, double* abserr); 127 gsl_integration_glfixed_table* gsl_integration_glfixed_table_alloc (size_t n); 128 void gsl_integration_glfixed_table_free (gsl_integration_glfixed_table* t); 129 double gsl_integration_glfixed (const(gsl_function)* f, double a, double b, const(gsl_integration_glfixed_table)* t); 130 int gsl_integration_glfixed_point (double a, double b, size_t i, double* xi, double* wi, const(gsl_integration_glfixed_table)* t); 131 gsl_integration_cquad_workspace* gsl_integration_cquad_workspace_alloc (const size_t n); 132 void gsl_integration_cquad_workspace_free (gsl_integration_cquad_workspace* w); 133 int gsl_integration_cquad (const(gsl_function)* f, double a, double b, double epsabs, double epsrel, gsl_integration_cquad_workspace* ws, double* result, double* abserr, size_t* nevals);