31 template <ODESystemTag ODETag>
44 virtual void computeA(GlobalMatrix
const& M, GlobalMatrix
const& K,
45 GlobalMatrix& A)
const = 0;
48 virtual void computeRhs(
const GlobalMatrix& M,
const GlobalMatrix& K,
49 const GlobalVector& b, GlobalVector& rhs)
const = 0;
55 virtual void computeResidual(GlobalMatrix
const& M, GlobalMatrix
const& K,
56 GlobalVector
const& b,
57 GlobalVector
const& x_new_timestep,
58 GlobalVector
const& xdot,
59 GlobalVector& res)
const = 0;
62 virtual void computeJacobian(GlobalMatrix
const& Jac_in,
63 GlobalMatrix& Jac_out)
const = 0;
86 template <ODESystemTag ODETag>
107 : _time_disc(timeDisc)
112 void computeA(GlobalMatrix
const& M, GlobalMatrix
const& K,
113 GlobalMatrix& A)
const override;
116 void computeRhs(
const GlobalMatrix& M,
const GlobalMatrix& ,
117 const GlobalVector& b, GlobalVector& rhs)
const override;
120 void computeResidual(GlobalMatrix
const& M, GlobalMatrix
const& K,
121 GlobalVector
const& b,
122 GlobalVector
const& x_new_timestep,
123 GlobalVector
const& xdot,
124 GlobalVector& res)
const override;
128 void computeJacobian(GlobalMatrix
const& Jac_in,
129 GlobalMatrix& Jac_out)
const override;
136 mutable std::size_t _tmp_id = 0u;
143 template <ODESystemTag ODETag>
164 : _fwd_euler(timeDisc)
169 void computeA(GlobalMatrix
const& M, GlobalMatrix
const& ,
170 GlobalMatrix& A)
const override;
173 void computeRhs(
const GlobalMatrix& M,
const GlobalMatrix& K,
174 const GlobalVector& b, GlobalVector& rhs)
const override;
177 void computeResidual(GlobalMatrix
const& M, GlobalMatrix
const& K,
178 GlobalVector
const& b,
179 GlobalVector
const& x_new_timestep,
180 GlobalVector
const& xdot,
181 GlobalVector& res)
const override;
185 void computeJacobian(GlobalMatrix
const& Jac_in,
186 GlobalMatrix& Jac_out)
const override;
192 mutable std::size_t _tmp_id = 0u;
199 template <ODESystemTag ODETag>
220 : _crank_nicolson(timeDisc),
236 void computeA(GlobalMatrix
const& M, GlobalMatrix
const& K,
237 GlobalMatrix& A)
const override;
241 void computeRhs(
const GlobalMatrix& M,
const GlobalMatrix& ,
242 const GlobalVector& b, GlobalVector& rhs)
const override;
246 void computeResidual(GlobalMatrix
const& M, GlobalMatrix
const& K,
247 GlobalVector
const& b,
248 GlobalVector
const& x_new_timestep,
249 GlobalVector
const& xdot,
250 GlobalVector& res)
const override;
258 void computeJacobian(GlobalMatrix
const& Jac_in,
259 GlobalMatrix& Jac_out)
const override;
272 void pushMatrices(GlobalMatrix
const& M, GlobalMatrix
const& K,
273 GlobalVector
const& b)
override;
280 GlobalVector& _b_bar;
285 mutable std::size_t _tmp_id = 0u;
290 template <ODESystemTag ODETag>
294 if (
auto* fwd_euler = dynamic_cast<ForwardEuler const*>(&timeDisc))
296 return std::unique_ptr<MatrixTranslator<ODETag>>(
299 if (
auto* crank = dynamic_cast<CrankNicolson const*>(&timeDisc))
301 return std::unique_ptr<MatrixTranslator<ODETag>>(
305 return std::unique_ptr<MatrixTranslator<ODETag>>(
Generalized Crank-Nicolson scheme.
MatrixTranslatorGeneral(TimeDiscretization const &timeDisc)
TimeDiscretization const & _time_disc
the time discretization used.
virtual void releaseMatrix(GlobalMatrix const &A)=0
std::unique_ptr< MatrixTranslator< ODETag > > createMatrixTranslator(TimeDiscretization const &timeDisc)
virtual void pushMatrices(GlobalMatrix const &, GlobalMatrix const &, GlobalVector const &)
static NUMLIB_EXPORT MatrixProvider & provider
static NUMLIB_EXPORT VectorProvider & provider
ODESystemTag
Tag used to specify the type of ODE.
CrankNicolson const & _crank_nicolson
ForwardEuler const & _fwd_euler
the time discretization used.
~MatrixTranslatorCrankNicolson() override
MatrixTranslatorCrankNicolson(CrankNicolson const &timeDisc)
MatrixTranslatorForwardEuler(ForwardEuler const &timeDisc)
virtual void releaseVector(GlobalVector const &x)=0