OGS
NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard > Class Referencefinal

Detailed Description

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 169 of file TimeDiscretizedODESystem.h.

#include <TimeDiscretizedODESystem.h>

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

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 (std::vector< GlobalVector * > const &x_new_timestep, std::vector< GlobalVector * > const &x_prev, int const process_id) override
 
std::vector< GlobalIndexTypegetIndicesOfResiduumWithoutInitialCompensation () const override
 
void getA (GlobalMatrix &A) const override
 
void getRhs (GlobalVector const &x_prev, GlobalVector &rhs) const override
 
void computeKnownSolutions (GlobalVector const &x, int const process_id) 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
 
TimeDiscgetTimeDiscretization () override
 Exposes the used time discretization scheme. More...
 
MathLib::MatrixSpecifications getMatrixSpecifications (const int process_id) const override
 
virtual TimeDiscretizationgetTimeDiscretization ()=0
 Exposes the used time discretization scheme. More...
 

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...
 
std::vector< std::size_t > _xdot_ids
 

Member Typedef Documentation

◆ Index

◆ MatTrans

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

Definition at line 182 of file TimeDiscretizedODESystem.h.

◆ ODE

◆ TimeDisc

A shortcut for a general time discretization scheme.

Definition at line 184 of file TimeDiscretizedODESystem.h.

Constructor & Destructor Documentation

◆ TimeDiscretizedODESystem()

NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >::TimeDiscretizedODESystem ( const int  process_id,
ODE ode,
TimeDisc time_discretization 
)
explicit

Constructs a new instance.

Definition at line 188 of file TimeDiscretizedODESystem.cpp.

191 : _ode(ode),
192 _time_disc(time_discretization),
193 _mat_trans(createMatrixTranslator<ODETag>(time_discretization))
194{
196 ode.getMatrixSpecifications(process_id), _M_id);
198 ode.getMatrixSpecifications(process_id), _K_id);
200 ode.getMatrixSpecifications(process_id), _b_id);
201}
virtual GlobalMatrix & getMatrix(std::size_t &id)=0
Get an uninitialized matrix with the given id.
std::unique_ptr< MatTrans > _mat_trans
the object used to compute the matrix/vector for the nonlinear solver
virtual GlobalVector & getVector(std::size_t &id)=0
Get an uninitialized vector with the given id.
static NUMLIB_EXPORT MatrixProvider & provider
static NUMLIB_EXPORT VectorProvider & provider

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

◆ ~TimeDiscretizedODESystem()

Member Function Documentation

◆ applyKnownSolutions()

Definition at line 261 of file TimeDiscretizedODESystem.cpp.

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

References detail::applyKnownSolutions().

◆ applyKnownSolutionsPicard()

Definition at line 267 of file TimeDiscretizedODESystem.cpp.

271{
272 if (!_known_solutions)
273 {
274 return;
275 }
276
278 std::vector<IndexType> ids;
279 std::vector<double> values;
280 for (auto const& bc : *_known_solutions)
281 {
282 ids.insert(end(ids), begin(bc.ids), end(bc.ids));
283 values.insert(end(values), begin(bc.values), end(bc.values));
284 }
285 MathLib::applyKnownSolution(A, rhs, x, ids, values);
286}
void applyKnownSolution(EigenMatrix &A, EigenVector &b, EigenVector &, const std::vector< EigenMatrix::IndexType > &vec_knownX_id, const std::vector< double > &vec_knownX_x)
Definition: EigenTools.cpp:17
constexpr ranges::views::view_closure ids
For an element of a range view return its id.
Definition: Mesh.h:313

References MathLib::applyKnownSolution(), and MeshLib::views::ids.

◆ assemble()

void NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >::assemble ( std::vector< GlobalVector * > const &  x_new_timestep,
std::vector< GlobalVector * > const &  x_prev,
int const  process_id 
)
override

Definition at line 213 of file TimeDiscretizedODESystem.cpp.

217{
218 namespace LinAlg = MathLib::LinAlg;
219
220 auto const t = _time_disc.getCurrentTime();
221 auto const dt = _time_disc.getCurrentTimeIncrement();
222 auto const& x_curr = *x_new_timestep[process_id];
223 std::vector<GlobalVector*> xdot(x_new_timestep.size());
224 _xdot_ids.resize(x_new_timestep.size());
225
226 for (std::size_t i = 0; i < xdot.size(); i++)
227 {
228 xdot[i] =
230 _time_disc.getXdot(*x_new_timestep[i], *x_prev[i], *xdot[i]);
231 }
232
233 _M->setZero();
234 _K->setZero();
235 _b->setZero();
236
237 _ode.preAssemble(t, dt, x_curr);
238 _ode.assemble(t, dt, x_new_timestep, xdot, process_id, *_M, *_K, *_b);
239
243
244 for (auto& v : xdot)
245 {
247 }
248}
void setZero()
reset data entries to zero.
Definition: EigenMatrix.h:65
void getXdot(GlobalVector const &x_at_new_timestep, GlobalVector const &x_old, GlobalVector &xdot) const
virtual double getCurrentTimeIncrement() const =0
virtual double getCurrentTime() const =0
void finalizeAssembly(PETScMatrix &A)
Definition: LinAlg.cpp:163
static const double v
static const double t

References MathLib::LinAlg::finalizeAssembly(), NumLib::VectorProvider::getVector(), NumLib::GlobalVectorProvider::provider, NumLib::VectorProvider::releaseVector(), MathLib::EigenVector::setZero(), MathLib::t, and MathLib::v.

◆ computeKnownSolutions()

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

Definition at line 252 of file TimeDiscretizedODESystem.cpp.

254{
256 _ode.getKnownSolutions(_time_disc.getCurrentTime(), x, process_id);
257}

◆ getA()

Definition at line 204 of file TimeDiscretizedODESystem.h.

205 {
206 _mat_trans->computeA(*_M, *_K, A);
207 }

◆ getIndicesOfResiduumWithoutInitialCompensation()

std::vector< GlobalIndexType > NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >::getIndicesOfResiduumWithoutInitialCompensation ( ) const
inlineoverride
Returns
The global indices for the entries of the global residuum vector that do not need initial non-equilibrium compensation.

Definition at line 199 of file TimeDiscretizedODESystem.h.

200 {
201 return _ode.getIndicesOfResiduumWithoutInitialCompensation();
202 }

◆ getMatrixSpecifications()

Definition at line 235 of file TimeDiscretizedODESystem.h.

237 {
238 return _ode.getMatrixSpecifications(process_id);
239 }

◆ getRhs()

Definition at line 209 of file TimeDiscretizedODESystem.h.

210 {
211 _mat_trans->computeRhs(*_M, *_K, *_b, x_prev, rhs);
212 }

◆ getTimeDiscretization()

Exposes the used time discretization scheme.

Implements NumLib::TimeDiscretizedODESystemBase< NonlinearSolverTag::Picard >.

Definition at line 234 of file TimeDiscretizedODESystem.h.

234{ return _time_disc; }

◆ isLinear()

Definition at line 222 of file TimeDiscretizedODESystem.h.

222{ return _ode.isLinear(); }

◆ postIteration()

Definition at line 229 of file TimeDiscretizedODESystem.h.

230 {
231 return _ode.postIteration(x);
232 }

◆ preIteration()

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

Definition at line 224 of file TimeDiscretizedODESystem.h.

225 {
226 _ode.preIteration(iter, x);
227 }

Member Data Documentation

◆ _b

◆ _b_id

ID of the _b vector.

Definition at line 258 of file TimeDiscretizedODESystem.h.

◆ _K

◆ _K_id

ID of the _K matrix.

Definition at line 257 of file TimeDiscretizedODESystem.h.

◆ _known_solutions

Initial value:
=
nullptr

stores precomputed values for known solutions

Definition at line 249 of file TimeDiscretizedODESystem.h.

◆ _M

◆ _M_id

ID of the _M matrix.

Definition at line 256 of file TimeDiscretizedODESystem.h.

◆ _mat_trans

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

Definition at line 246 of file TimeDiscretizedODESystem.h.

◆ _ode

◆ _time_disc

the time discretization to being used

Definition at line 243 of file TimeDiscretizedODESystem.h.

◆ _xdot_ids

Definition at line 259 of file TimeDiscretizedODESystem.h.

◆ ODETag


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