CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RK4OneStepTempl.h
Go to the documentation of this file.
1 #ifndef RK4OneStepTempl_H
2 #define RK4OneStepTempl_H
3 
5 #include "RKSmallVector.h"
6 #include "RKDerivative.h"
7 
8 template <typename T, int N>
10 public:
11  typedef T Scalar;
13 
14  Vector operator()(Scalar startPar, const Vector& startState, const RKDerivative<T, N>& deriv, Scalar step) const {
15  // cout << "RK4OneStepTempl: starting from " << startPar << startState << endl;
16 
17  Vector k1 = step * deriv(startPar, startState);
18  Vector k2 = step * deriv(startPar + step / 2, startState + k1 / 2);
19  Vector k3 = step * deriv(startPar + step / 2, startState + k2 / 2);
20  Vector k4 = step * deriv(startPar + step, startState + k3);
21 
22  Vector result = startState + k1 / 6 + k2 / 3 + k3 / 3 + k4 / 6;
23 
24  // cout << "RK4OneStepTempl: result for step " << step << " is " << result << endl;
25 
26  return result;
27  }
28 };
29 
30 #endif
Vector operator()(Scalar startPar, const Vector &startState, const RKDerivative< T, N > &deriv, Scalar step) const
ROOT::Math::SVector< T, N > RKSmallVector
Definition: RKSmallVector.h:13
tuple result
Definition: mps_fire.py:311
#define dso_internal
Definition: Visibility.h:13
Base class for derivative calculation.
Definition: RKDerivative.h:10
RKSmallVector< T, N > Vector
step
Definition: StallMonitor.cc:94
long double T