OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
RK4.h
Go to the documentation of this file.
1 #ifndef RK4_H
2 #define RK4_H
3 
4 #include "Stepper.h"
5 #include "Physics/Physics.h"
6 
8 template <typename FieldFunction, typename ... Arguments>
9 class RK4 : public Stepper<FieldFunction, Arguments...> {
10 
11 public:
12 
13  RK4(const FieldFunction& fieldfunc) : Stepper<FieldFunction, Arguments ...>(fieldfunc) { }
14 
15 private:
17  const size_t& i,
18  const double& t,
19  const double dt,
20  Arguments& ... args) const;
21 
33  double *y,
34  const double& t,
35  double* yp,
36  const size_t& i,
37  Arguments& ... args) const;
38 
39 
40  void copyTo(const Vector_t& R, const Vector_t& P, double* x) const;
41 
42  void copyFrom(Vector_t& R, Vector_t& P, double* x) const;
43 
44  const double c_mmtns = Physics::c * 1.0e-6; // m/s --> mm/ns
45  const double c_mtns = Physics::c * 1.0e-9; // m/s --> m/ns
46  const double mass_coeff = 1.0e18 * Physics::q_e / Physics::c / Physics::c; // from GeV/c^2 to basic unit: GV*C*s^2/m^2
47 };
48 
49 #include "RK4.hpp"
50 
51 #endif
const double c_mtns
Definition: RK4.h:45
Definition: TSVMeta.h:24
const double mass_coeff
Definition: RK4.h:46
4-th order Runnge-Kutta stepper
Definition: RK4.h:9
const double c_mmtns
Definition: RK4.h:44
bool derivate_m(PartBunchBase< double, 3 > *bunch, double *y, const double &t, double *yp, const size_t &i, Arguments &...args) const
Definition: RK4.hpp:70
RK4(const FieldFunction &fieldfunc)
Definition: RK4.h:13
constexpr double c
The velocity of light in m/s.
Definition: Physics.h:52
void copyTo(const Vector_t &R, const Vector_t &P, double *x) const
Definition: RK4.hpp:115
bool doAdvance_m(PartBunchBase< double, 3 > *bunch, const size_t &i, const double &t, const double dt, Arguments &...args) const
Definition: RK4.hpp:2
void copyFrom(Vector_t &R, Vector_t &P, double *x) const
Definition: RK4.hpp:127
constexpr double q_e
The elementary charge in As.
Definition: Physics.h:76