CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
dei_rkck.h
1#ifndef __DEI__
2#define __DEI__
3
4#include <vector>
5
6#include "common.h"
7
8struct generic_integrator_workspace {
9 int n;
10
11 std::vector<double> yscal;
12 std::vector<double> y;
13 std::vector<double> dydx;
14
15 std::vector<double> yerr;
16 std::vector<double> ytempo;
17
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;
24
25 double stepmin;
26};
27
28/**************************************************************/
29
30void initialize_generic_integrator(int n_dim, struct generic_integrator_workspace* pgi);
31
32void cleanup_generic_integrator(struct generic_integrator_workspace* pgi);
33
34void generic_integrator(
35 void (*derivs)(double x, double y[], double yprime[], void* parameters_and_workspace),
36 double x1,
37 double x2,
38 double ystart[],
39 void* parameters_and_workspace_for_derivs,
40 double eps,
41 double hmin,
42 struct generic_integrator_workspace* pgi);
43
44void rkqs(double* x,
45 double htry,
46 double eps,
47 double* hdid,
48 double* hnext,
49 void (*derivs)(double, double[], double[], void*),
50 void* parameters_and_workspace_for_derivs,
51 struct generic_integrator_workspace* pgi);
52
53void rkck(double x,
54 double h,
55 void (*derivs)(double, double[], double[], void*),
56 void* parameters_and_workspace_for_derivs,
57 struct generic_integrator_workspace* pgi);
58
59/**************************************************************/
60
61#define dsign(a, b) ((b) > 0. ? (a) : (-(a)))
62
63#define _MAXSTP_ 100000
64#define _TINY_ 1.0e-30
65#define _SAFETY_ 0.9
66#define _PGROW_ -0.2
67#define _PSHRNK_ -0.25
68#define _ERRCON_ 1.89e-4
69
70#define _RKCK_a2_ 0.2
71#define _RKCK_a3_ 0.3
72#define _RKCK_a4_ 0.6
73#define _RKCK_a5_ 1.0
74#define _RKCK_a6_ 0.875
75#define _RKCK_b21_ 0.2
76#define _RKCK_b31_ 3.0 / 40.0
77#define _RKCK_b32_ 9.0 / 40.0
78#define _RKCK_b41_ 0.3
79#define _RKCK_b42_ -0.9
80#define _RKCK_b43_ 1.2
81#define _RKCK_b51_ -11.0 / 54.0
82#define _RKCK_b52_ 2.5
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)
99
100#endif