OGS 6.1.0-1721-g6382411ad
NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard > Class Template Referencefinal

Detailed Description

template<>
class NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >

Time discretized first order implicit quasi-linear ODE; to be solved using the Picard fixpoint iteration method for resolving nonlinearities.

See also
ODESystemTag::FirstOrderImplicitQuasilinear

Definition at line 158 of file TimeDiscretizedODESystem.h.

#include <TimeDiscretizedODESystem.h>

Inheritance diagram for NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >:
Collaboration diagram for NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >:

Public Types

using ODE = ODESystem< ODETag, NonlinearSolverTag::Picard >
 The type of ODE. More...
 
using MatTrans = MatrixTranslator< ODETag >
 
using TimeDisc = TimeDiscretization
 A shortcut for a general time discretization scheme. More...
 

Public Member Functions

 TimeDiscretizedODESystem (const int process_id, ODE &ode, TimeDisc &time_discretization)
 Constructs a new instance. More...
 
 ~TimeDiscretizedODESystem () override
 
void assemble (const GlobalVector &x_new_timestep) override
 
void getA (GlobalMatrix &A) const override
 
void getRhs (GlobalVector &rhs) const override
 
void computeKnownSolutions (GlobalVector const &x) override
 
void applyKnownSolutions (GlobalVector &x) const override
 
void applyKnownSolutionsPicard (GlobalMatrix &A, GlobalVector &rhs, GlobalVector &x) const override
 
bool isLinear () const override
 
void preIteration (const unsigned iter, GlobalVector const &x) override
 
IterationResult postIteration (GlobalVector const &x) override
 
void pushMatrices () const override
 
TimeDiscgetTimeDiscretization () override
 Exposes the used time discretization scheme. More...
 
MathLib::MatrixSpecifications getMatrixSpecifications (const int process_id) const override
 
- Public Member Functions inherited from NumLib::InternalMatrixStorage
virtual ~InternalMatrixStorage ()=default
 

Static Public Attributes

static const ODESystemTag ODETag
 A tag indicating the type of ODE. More...
 

Private Types

using Index = MathLib::MatrixVectorTraits< GlobalMatrix >::Index
 

Private Attributes

ODE_ode
 ode the ODE being wrapped More...
 
TimeDisc_time_disc
 the time discretization to being used More...
 
std::unique_ptr< MatTrans_mat_trans
 the object used to compute the matrix/vector for the nonlinear solver More...
 
std::vector< NumLib::IndexValueVector< Index > > const * _known_solutions
 stores precomputed values for known solutions More...
 
GlobalMatrix * _M
 Matrix $ M $. More...
 
GlobalMatrix * _K
 Matrix $ K $. More...
 
GlobalVector * _b
 Matrix $ b $. More...
 
std::size_t _M_id = 0u
 ID of the _M matrix. More...
 
std::size_t _K_id = 0u
 ID of the _K matrix. More...
 
std::size_t _b_id = 0u
 ID of the _b vector. More...
 

Member Typedef Documentation

◆ Index

◆ MatTrans

The auxiliary class that computes the matrix/vector used by the nonlinear solver.

Definition at line 171 of file TimeDiscretizedODESystem.h.

◆ ODE

◆ TimeDisc

Constructor & Destructor Documentation

◆ TimeDiscretizedODESystem()

Constructs a new instance.

Definition at line 159 of file TimeDiscretizedODESystem.cpp.

References NumLib::FirstOrderImplicitQuasilinear, NumLib::MatrixProvider::getMatrix(), NumLib::VectorProvider::getVector(), NumLib::GlobalVectorProvider::provider, and NumLib::GlobalMatrixProvider::provider.

161  : _ode(ode),
162  _time_disc(time_discretization),
163  _mat_trans(createMatrixTranslator<ODETag>(time_discretization))
164 {
166  ode.getMatrixSpecifications(process_id), _M_id);
168  ode.getMatrixSpecifications(process_id), _K_id);
170  ode.getMatrixSpecifications(process_id), _b_id);
171 }
virtual GlobalVector & getVector()=0
Get an uninitialized vector.
static NUMLIB_EXPORT MatrixProvider & provider
static NUMLIB_EXPORT VectorProvider & provider
virtual GlobalMatrix & getMatrix()=0
Get an uninitialized matrix.
std::unique_ptr< MatTrans > _mat_trans
the object used to compute the matrix/vector for the nonlinear solver

◆ ~TimeDiscretizedODESystem()

Member Function Documentation

◆ applyKnownSolutions()

void NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >::applyKnownSolutions ( GlobalVector &  x) const
override

Definition at line 212 of file TimeDiscretizedODESystem.cpp.

References detail::applyKnownSolutions(), NumLib::FirstOrderImplicitQuasilinear, and NumLib::Picard.

213 {
215 }
void applyKnownSolutions(std::vector< Solutions > const *const known_solutions, Vector &x)
Applies known solutions to the solution vector x.
std::vector< NumLib::IndexValueVector< Index > > const * _known_solutions
stores precomputed values for known solutions

◆ applyKnownSolutionsPicard()

void NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >::applyKnownSolutionsPicard ( GlobalMatrix &  A,
GlobalVector &  rhs,
GlobalVector &  x 
) const
override

Definition at line 219 of file TimeDiscretizedODESystem.cpp.

References MathLib::applyKnownSolution(), and MathLib::LinAlg::copy().

222 {
223  if (!_known_solutions)
224  return;
225 
227  std::vector<IndexType> ids;
228  std::vector<double> values;
229  for (auto const& bc : *_known_solutions)
230  {
231  std::copy(bc.ids.cbegin(), bc.ids.cend(), std::back_inserter(ids));
232  std::copy(bc.values.cbegin(), bc.values.cend(),
233  std::back_inserter(values));
234  }
235  MathLib::applyKnownSolution(A, rhs, x, ids, values);
236 }
void applyKnownSolution(EigenMatrix &A_, EigenVector &b_, EigenVector &, const std::vector< EigenMatrix::IndexType > &vec_knownX_id, const std::vector< double > &vec_knownX_x, double)
Definition: EigenTools.cpp:19
std::vector< NumLib::IndexValueVector< Index > > const * _known_solutions
stores precomputed values for known solutions
void copy(MatrixOrVector const &x, MatrixOrVector &y)
Copies x to y.
Definition: LinAlg.h:36

◆ assemble()

void NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >::assemble ( const GlobalVector &  x_new_timestep)
override

Definition at line 184 of file TimeDiscretizedODESystem.cpp.

References MathLib::LinAlg::finalizeAssembly(), and NumLib::FirstOrderImplicitQuasilinear.

185 {
186  namespace LinAlg = MathLib::LinAlg;
187 
188  auto const t = _time_disc.getCurrentTime();
189  auto const& x_curr = _time_disc.getCurrentX(x_new_timestep);
190 
191  _M->setZero();
192  _K->setZero();
193  _b->setZero();
194 
195  _ode.preAssemble(t, x_curr);
196  _ode.assemble(t, x_curr, *_M, *_K, *_b);
197 
201 }
virtual double getCurrentTime() const =0
void finalizeAssembly(Matrix &)
virtual GlobalVector const & getCurrentX(GlobalVector const &x_at_new_timestep) const

◆ computeKnownSolutions()

◆ getA()

◆ getMatrixSpecifications()

Definition at line 221 of file TimeDiscretizedODESystem.h.

223  {
224  return _ode.getMatrixSpecifications(process_id);
225  }

◆ getRhs()

◆ getTimeDiscretization()

◆ isLinear()

◆ postIteration()

◆ preIteration()

void NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >::preIteration ( const unsigned  iter,
GlobalVector const &  x 
)
inlineoverride

Definition at line 205 of file TimeDiscretizedODESystem.h.

◆ pushMatrices()

Triggers a refresh of the internal matrix/vector storage.

Remarks
This method is needed in particular to fully implement the interaction of the CrankNicolson scheme with other classes.
Attention
This method must be called (if it is called) from within TimeDiscretization::pushState() after the internal state of the TimeDiscretization has been set to the new solution. Otherwise the pushMatrices() method of MatrixTranslator's will break!

Implements NumLib::InternalMatrixStorage.

Definition at line 215 of file TimeDiscretizedODESystem.h.

Member Data Documentation

◆ _b

◆ _b_id

ID of the _b vector.

Definition at line 244 of file TimeDiscretizedODESystem.h.

◆ _K

◆ _K_id

ID of the _K matrix.

Definition at line 243 of file TimeDiscretizedODESystem.h.

◆ _known_solutions

Initial value:
=
nullptr

stores precomputed values for known solutions

Definition at line 235 of file TimeDiscretizedODESystem.h.

◆ _M

◆ _M_id

ID of the _M matrix.

Definition at line 242 of file TimeDiscretizedODESystem.h.

◆ _mat_trans

the object used to compute the matrix/vector for the nonlinear solver

Definition at line 232 of file TimeDiscretizedODESystem.h.

◆ _ode

◆ _time_disc

the time discretization to being used

Definition at line 229 of file TimeDiscretizedODESystem.h.

◆ ODETag


The documentation for this class was generated from the following files: