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 */