OGS 6.2.0-97-g4a610c866
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 163 of file TimeDiscretizedODESystem.cpp.

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

165  : _ode(ode),
166  _time_disc(time_discretization),
167  _mat_trans(createMatrixTranslator<ODETag>(time_discretization))
168 {
170  ode.getMatrixSpecifications(process_id), _M_id);
172  ode.getMatrixSpecifications(process_id), _K_id);
174  ode.getMatrixSpecifications(process_id), _b_id);
175 }
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 216 of file TimeDiscretizedODESystem.cpp.

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

217 {
219 }
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 223 of file TimeDiscretizedODESystem.cpp.

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

226 {
227  if (!_known_solutions)
228  {
229  return;
230  }
231 
233  std::vector<IndexType> ids;
234  std::vector<double> values;
235  for (auto const& bc : *_known_solutions)
236  {
237  std::copy(bc.ids.cbegin(), bc.ids.cend(), std::back_inserter(ids));
238  std::copy(bc.values.cbegin(), bc.values.cend(),
239  std::back_inserter(values));
240  }
241  MathLib::applyKnownSolution(A, rhs, x, ids, values);
242 }
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 188 of file TimeDiscretizedODESystem.cpp.

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

189 {
190  namespace LinAlg = MathLib::LinAlg;
191 
192  auto const t = _time_disc.getCurrentTime();
193  auto const& x_curr = _time_disc.getCurrentX(x_new_timestep);
194 
195  _M->setZero();
196  _K->setZero();
197  _b->setZero();
198 
199  _ode.preAssemble(t, x_curr);
200  _ode.assemble(t, x_curr, *_M, *_K, *_b);
201 
205 }
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: