8struct generic_integrator_workspace {
11 std::vector<double> yscal;
12 std::vector<double> y;
13 std::vector<double> dydx;
15 std::vector<double> yerr;
16 std::vector<double> ytempo;
18 std::vector<double> ak2;
19 std::vector<double> ak3;
20 std::vector<double> ak4;
21 std::vector<double> ak5;
22 std::vector<double> ak6;
23 std::vector<double> ytemp;
30void initialize_generic_integrator(
int n_dim,
struct generic_integrator_workspace* pgi);
32void cleanup_generic_integrator(
struct generic_integrator_workspace* pgi);
34void generic_integrator(
35 void (*derivs)(
double x,
double y[],
double yprime[],
void* parameters_and_workspace),
39 void* parameters_and_workspace_for_derivs,
42 struct generic_integrator_workspace* pgi);
49 void (*derivs)(
double,
double[],
double[],
void*),
50 void* parameters_and_workspace_for_derivs,
51 struct generic_integrator_workspace* pgi);
55 void (*derivs)(
double,
double[],
double[],
void*),
56 void* parameters_and_workspace_for_derivs,
57 struct generic_integrator_workspace* pgi);
61#define dsign(a, b) ((b) > 0. ? (a) : (-(a)))
63#define _MAXSTP_ 100000
68#define _ERRCON_ 1.89e-4
74#define _RKCK_a6_ 0.875
76#define _RKCK_b31_ 3.0 / 40.0
77#define _RKCK_b32_ 9.0 / 40.0
79#define _RKCK_b42_ -0.9
81#define _RKCK_b51_ -11.0 / 54.0
83#define _RKCK_b53_ -70.0 / 27.0
84#define _RKCK_b54_ 35.0 / 27.0
85#define _RKCK_b61_ 1631.0 / 55296.0
86#define _RKCK_b62_ 175.0 / 512.0
87#define _RKCK_b63_ 575.0 / 13824.0
88#define _RKCK_b64_ 44275.0 / 110592.0
89#define _RKCK_b65_ 253.0 / 4096.0
90#define _RKCK_c1_ 37.0 / 378.0
91#define _RKCK_c3_ 250.0 / 621.0
92#define _RKCK_c4_ 125.0 / 594.0
93#define _RKCK_c6_ 512.0 / 1771.0
94#define _RKCK_dc5_ -277.00 / 14336.0
95#define _RKCK_dc1_ (37.0 / 378.0 - 2825.0 / 27648.)
96#define _RKCK_dc3_ (250.0 / 621.0 - 18575.0 / 48384.0)
97#define _RKCK_dc4_ (125.0 / 594.0 - 13525.0 / 55296.0)
98#define _RKCK_dc6_ (512.0 / 1771.0 - 0.25)