ode-toolbox

ODE integration tools
git clone https://git.0xfab.ch/ode-toolbox.git
Log | Files | Refs | README | LICENSE

Euler.h (1164B)


      1 /* File:   Euler.h */
      2 /* Date:   Fri Feb  5 18:57:57 2016 */
      3 /* Author: Fabian Wermelinger */
      4 /* Tag:    1st order Euler */
      5 /* Copyright 2016 ETH Zurich. All Rights Reserved. */
      6 #ifndef EULER_H_8R2CXYR0
      7 #define EULER_H_8R2CXYR0
      8 
      9 #include <ODETB/TimeStepper/StepperBase.h>
     10 
     11 #include <cstdio>
     12 
     13 template <typename Tinput, typename Trhs>
     14 class Euler : public StepperBase<Tinput,Trhs>
     15 {
     16 protected:
     17     using StepperBase<Tinput,Trhs>::m_settings;
     18     using StepperBase<Tinput,Trhs>::m_U;
     19     using StepperBase<Tinput,Trhs>::m_kernel;
     20     Trhs m_rhs;
     21 
     22 public:
     23     Euler(Tinput& U, StepperSettings& S, KernelBase<Tinput,Trhs> * const kern) : StepperBase<Tinput,Trhs>(U,S,kern), m_rhs(U.size()) { }
     24     virtual ~Euler() {}
     25 
     26     virtual void step(void const* const data=nullptr)
     27     {
     28         m_kernel->compute(m_U, m_rhs, m_settings.t, data);
     29         m_U += static_cast<Real>(m_settings.dt)*m_rhs;
     30         m_settings.t += m_settings.dt;
     31         ++(m_settings.step);
     32 
     33         if (m_settings.step % m_settings.reportGranularity == 0)
     34             std::printf(
     35                 "Time = %e;\tStep = %zu\n", m_settings.t, m_settings.step);
     36     }
     37 };
     38 
     39 #endif /* EULER_H_8R2CXYR0 */