OGS
MatrixTranslator.h
Go to the documentation of this file.
1
11#pragma once
12
13#include <memory>
14
16#include "TimeDiscretization.h"
17#include "Types.h"
18
19namespace NumLib
20{
23
30template <ODESystemTag ODETag>
32
39template <>
41{
42public:
44 virtual void computeA(GlobalMatrix const& M, GlobalMatrix const& K,
45 GlobalMatrix& A) const = 0;
46
48 virtual void computeRhs(const GlobalMatrix& M, const GlobalMatrix& K,
49 const GlobalVector& b, const GlobalVector& x_prev,
50 GlobalVector& rhs) const = 0;
51
56 virtual void computeResidual(GlobalMatrix const& M, GlobalMatrix const& K,
57 GlobalVector const& b, double dt,
58 GlobalVector const& x_curr,
59 GlobalVector const& x_prev,
60 GlobalVector& res) const = 0;
61
63 virtual void computeJacobian(GlobalMatrix const& Jac_in,
64 GlobalMatrix& Jac_out) const = 0;
65
66 virtual ~MatrixTranslator() = default;
67};
68
74template <ODESystemTag ODETag>
76
85template <>
87 : public MatrixTranslator<ODESystemTag::FirstOrderImplicitQuasilinear>
88{
89public:
95 : _time_disc(timeDisc)
96 {
97 }
98
100 void computeA(GlobalMatrix const& M, GlobalMatrix const& K,
101 GlobalMatrix& A) const override;
102
104 void computeRhs(const GlobalMatrix& M, const GlobalMatrix& /*K*/,
105 const GlobalVector& b, const GlobalVector& x_prev,
106 GlobalVector& rhs) const override;
107
109 void computeResidual(GlobalMatrix const& M, GlobalMatrix const& K,
110 GlobalVector const& b, double dt,
111 GlobalVector const& x_curr, GlobalVector const& x_prev,
112 GlobalVector& res) const override;
113
116 void computeJacobian(GlobalMatrix const& Jac_in,
117 GlobalMatrix& Jac_out) const override;
118
119private:
121
123 mutable std::size_t _tmp_id = 0u;
124};
125
128template <ODESystemTag ODETag>
129std::unique_ptr<MatrixTranslator<ODETag>> createMatrixTranslator(
130 TimeDiscretization const& timeDisc)
131{
132 return std::unique_ptr<MatrixTranslator<ODETag>>(
133 new MatrixTranslatorGeneral<ODETag>(timeDisc));
134}
135
137} // namespace NumLib
Global vector based on Eigen vector.
Definition EigenVector.h:25
TimeDiscretization const & _time_disc
the time discretization used.
virtual void computeJacobian(GlobalMatrix const &Jac_in, GlobalMatrix &Jac_out) const =0
Computes the Jacobian of the residual and writes it to Jac_out.
virtual void computeA(GlobalMatrix const &M, GlobalMatrix const &K, GlobalMatrix &A) const =0
Computes A from M and K.
virtual void computeRhs(const GlobalMatrix &M, const GlobalMatrix &K, const GlobalVector &b, const GlobalVector &x_prev, GlobalVector &rhs) const =0
Computes rhs from M, K, b and x_prev.
virtual void computeResidual(GlobalMatrix const &M, GlobalMatrix const &K, GlobalVector const &b, double dt, GlobalVector const &x_curr, GlobalVector const &x_prev, GlobalVector &res) const =0
std::unique_ptr< MatrixTranslator< ODETag > > createMatrixTranslator(TimeDiscretization const &timeDisc)
ODESystemTag
Tag used to specify the type of ODE.
Definition Types.h:27