CLASS MANUAL
dei_rkck.h
1 #ifndef __DEI__
2 #define __DEI__
3 
4 #include "common.h"
5 
6 struct generic_integrator_workspace
7 {
8 
9  int n;
10 
11  double * yscal;
12  double * y;
13  double * dydx;
14 
15  double * yerr;
16  double * ytempo;
17 
18  double * ak2;
19  double * ak3;
20  double * ak4;
21  double * ak5;
22  double * ak6;
23  double * ytemp;
24 
25  double stepmin;
26 
30  ErrorMsg error_message;
31 
32 };
33 
34 /**************************************************************/
35 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43  int initialize_generic_integrator(
44  int n_dim,
45  struct generic_integrator_workspace * pgi
46  );
47 
48  int cleanup_generic_integrator(struct generic_integrator_workspace * pgi);
49 
50  int generic_integrator(int (*derivs)(double x,
51  double y[],
52  double yprime[],
53  void * parameters_and_workspace,
54  ErrorMsg error_message),
55  double x1,
56  double x2,
57  double ystart[],
58  void * parameters_and_workspace_for_derivs,
59  double eps,
60  double hmin,
61  struct generic_integrator_workspace * pgi);
62 
63  int rkqs(double *x,
64  double htry,
65  double eps,
66  double *hdid,
67  double *hnext,
68  int (*derivs)(double, double [], double [], void *, ErrorMsg),
69  void * parameters_and_workspace_for_derivs,
70  struct generic_integrator_workspace * pgi);
71 
72  int rkck(double x,
73  double h,
74  int (*derivs)(double, double [], double [], void *, ErrorMsg),
75  void * parameters_and_workspace_for_derivs,
76  struct generic_integrator_workspace * pgi);
77 
78 #ifdef __cplusplus
79 }
80 #endif
81 
82 /**************************************************************/
83 
84 #define dsign(a,b) ( (b) > 0. ? (a) : (-(a)) )
85 
86 #define _MAXSTP_ 100000
87 #define _TINY_ 1.0e-30
88 #define _SAFETY_ 0.9
89 #define _PGROW_ -0.2
90 #define _PSHRNK_ -0.25
91 #define _ERRCON_ 1.89e-4
92 
93 #define _RKCK_a2_ 0.2
94 #define _RKCK_a3_ 0.3
95 #define _RKCK_a4_ 0.6
96 #define _RKCK_a5_ 1.0
97 #define _RKCK_a6_ 0.875
98 #define _RKCK_b21_ 0.2
99 #define _RKCK_b31_ 3.0/40.0
100 #define _RKCK_b32_ 9.0/40.0
101 #define _RKCK_b41_ 0.3
102 #define _RKCK_b42_ -0.9
103 #define _RKCK_b43_ 1.2
104 #define _RKCK_b51_ -11.0/54.0
105 #define _RKCK_b52_ 2.5
106 #define _RKCK_b53_ -70.0/27.0
107 #define _RKCK_b54_ 35.0/27.0
108 #define _RKCK_b61_ 1631.0/55296.0
109 #define _RKCK_b62_ 175.0/512.0
110 #define _RKCK_b63_ 575.0/13824.0
111 #define _RKCK_b64_ 44275.0/110592.0
112 #define _RKCK_b65_ 253.0/4096.0
113 #define _RKCK_c1_ 37.0/378.0
114 #define _RKCK_c3_ 250.0/621.0
115 #define _RKCK_c4_ 125.0/594.0
116 #define _RKCK_c6_ 512.0/1771.0
117 #define _RKCK_dc5_ -277.00/14336.0
118 #define _RKCK_dc1_ (37.0/378.0-2825.0/27648.)
119 #define _RKCK_dc3_ (250.0/621.0-18575.0/48384.0)
120 #define _RKCK_dc4_ (125.0/594.0-13525.0/55296.0)
121 #define _RKCK_dc6_ (512.0/1771.0-0.25)
122 
123 #endif