Geomi
Abstract_Integrator.hpp
1 #ifndef DEF_RKMK_ABSTRACT_INTEGRATOR
2 #define DEF_RKMK_ABSTRACT_INTEGRATOR
3 
4 namespace RKMK {
5 namespace Abstract {
6 
12 {
13 public:
14  virtual void
15  setCoeffs (std::vector<double> va, std::vector<double> vb) = 0;
16 
17  virtual bool
18  integrate () = 0;
19 };
20 } // namespace Abstract
21 } // namespace RKMK
22 
23 namespace RKMK {
24 
48 template <typename T_LIE_ALGEBRA,
49  int T_N_INTERNAL_STAGES,
50  typename T_M = double>
52 {
53 private:
56 
57 public:
60  : m_problem(problem), m_step(step)
61  { }
62 
64  { }
65 
66  void
67  setCoeffs (std::vector<double> va, std::vector<double> vb)
68  { m_step.setCoeffs(va,vb); }
69 
70  bool
71  integrate (void)
72  {
73  int i;
74  bool success = false;
75  T_M h;
76  int n_steps = m_problem.size();
78 
79  for (i=0; i<n_steps-1; i++) {
80  Y0 = m_problem.pos(i);
81  h = m_problem.base(i+1)-m_problem.base(i);
82  m_step.setData(h,Y0);
83 
84  Y1 = m_step.makeStep();
85  m_problem.pos(i+1,Y1);
86  }
87 
88  return success;
89  }
90 };
91 } // namespace RKMK
92 
93 #endif
Definition: Abstract_Problem.hpp:10
Definition: Abstract_Integrator.hpp:51
Definition: Abstract_Integrator.hpp:4
Definition: Abstract_Integrator.hpp:11
Definition: Abstract_Step.hpp:18
Definition: Abstract_NOXStep.hpp:9