OGS
ODESystem.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include "EquationSystem.h"
9#include "Types.h"
10
11namespace NumLib
12{
15
24template <ODESystemTag ODETag, NonlinearSolverTag NLTag>
26
31template <>
34{
35public:
37 static const ODESystemTag ODETag =
39
41 virtual void preAssemble(const double t, double const dt,
42 GlobalVector const& x) = 0;
43
46 virtual std::vector<GlobalIndexType>
48 {
49 return {};
50 }
51
52 virtual void setReleaseNodalForces(GlobalVector const* /*r_neq*/,
53 int const /*process_id*/)
54 {
55 }
56
58 virtual void assemble(const double t, double const dt,
59 std::vector<GlobalVector*> const& x,
60 std::vector<GlobalVector*> const& x_prev,
61 int const process_id, GlobalMatrix& M,
62 GlobalMatrix& K, GlobalVector& b) = 0;
63
65
68 virtual std::vector<NumLib::IndexValueVector<Index>> const*
69 getKnownSolutions(double const /*t*/, GlobalVector const& /*x*/,
70 int const /*process_id*/) const
71 {
72 return nullptr; // by default there are no known solutions
73 }
74
75 virtual void updateConstraints(GlobalVector& /*lower*/,
76 GlobalVector& /*upper*/,
77 int const /*process_id*/){};
78
83 {
84 return false;
85 }
86};
87
93template <>
96 : public ODESystem<ODESystemTag::FirstOrderImplicitQuasilinear,
97 NonlinearSolverTag::Picard>
98{
99public:
101 void preAssemble(const double t, double const dt,
102 GlobalVector const& x) override = 0;
103
112 virtual void assembleWithJacobian(const double t, double const dt,
113 std::vector<GlobalVector*> const& x,
114 std::vector<GlobalVector*> const& x_prev,
115 int const process_id, GlobalVector& b,
116 GlobalMatrix& Jac) = 0;
117};
118
120} // namespace NumLib
MathLib::EigenMatrix GlobalMatrix
MathLib::EigenVector GlobalVector
void preAssemble(const double t, double const dt, GlobalVector const &x) override=0
Calls process' pre-assembly with the provided state (t, dt, x).
virtual void assembleWithJacobian(const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalVector &b, GlobalMatrix &Jac)=0
virtual std::vector< NumLib::IndexValueVector< Index > > const * getKnownSolutions(double const, GlobalVector const &, int const) const
Definition ODESystem.h:69
virtual void updateConstraints(GlobalVector &, GlobalVector &, int const)
Definition ODESystem.h:75
virtual void assemble(const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalMatrix &M, GlobalMatrix &K, GlobalVector &b)=0
Assemble M, K and b at the provided state (t, x).
virtual std::vector< GlobalIndexType > getIndicesOfResiduumWithoutInitialCompensation() const
Definition ODESystem.h:47
virtual void preAssemble(const double t, double const dt, GlobalVector const &x)=0
Calls process' pre-assembly with the provided state (t, dt, x).
static const ODESystemTag ODETag
A tag indicating the type of ODE.
Definition ODESystem.h:37
ODESystemTag
Tag used to specify the type of ODE.
Definition Types.h:20
@ FirstOrderImplicitQuasilinear
Definition Types.h:27