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);