FirstOrderSystem.hpp
1 // Distributed under the MIT License.
2 // See LICENSE.txt for details.
3 
4 #pragma once
5 
6 #include <cstddef>
7 
8 #include "DataStructures/DataBox/PrefixHelpers.hpp"
9 #include "DataStructures/Tensor/EagerMath/Magnitude.hpp"
10 #include "DataStructures/VariablesTag.hpp"
11 #include "Elliptic/Systems/Elasticity/Equations.hpp"
12 #include "Elliptic/Systems/Elasticity/Tags.hpp"
14 #include "PointwiseFunctions/Elasticity/ConstitutiveRelations/ConstitutiveRelation.hpp"
15 #include "Utilities/TMPL.hpp"
16 
17 namespace Elasticity {
18 
19 /*!
20  * \brief The linear elasticity equation formulated as a set of coupled
21  * first-order PDEs.
22  *
23  * This system formulates the elasticity equation \f$\nabla_i T^{ij} =
24  * f_\mathrm{ext}^j\f$ (see `Elasticity`). It introduces the symmetric strain
25  * tensor \f$S_{kl}\f$ as an auxiliary variable which satisfies the
26  * `Elasticity::ConstitutiveRelations` \f$T^{ij} = -Y^{ijkl} S_{kl}\f$ with the
27  * material-specific elasticity tensor \f$Y^{ijkl}\f$. Written as a set of
28  * coupled first-order PDEs, we get
29  *
30  * \f{align*}
31  * -\nabla_i Y^{ijkl} S_{kl} = f_\mathrm{ext}^j \\
32  * -\nabla_{(k} \xi_{l)} + S_{kl} = 0
33  * \f}
34  *
35  * The fluxes and sources in terms of the system variables
36  * \f$\xi^j\f$ and \f$S_{kl}\f$ are given by
37  *
38  * \f{align*}
39  * F^i_{\xi^j} &= Y^{ijkl}_{(\xi, S)} S_{kl} \\
40  * S_{\xi^j} &= 0 \\
41  * f_{\xi^j} &= f_\mathrm{ext}^j \\
42  * F^i_{S_{kl}} &= \delta^{i}_{(k} \xi_{l)} \\
43  * S_{S_{kl}} &= S_{kl} \\
44  * f_{S_{kl}} &= 0 \text{.}
45  * \f}
46  *
47  * See `Poisson::FirstOrderSystem` for details on the first-order
48  * flux-formulation.
49  */
50 template <size_t Dim>
52  private:
56  using strain = Tags::Strain<Dim>;
57 
58  public:
59  static constexpr size_t volume_dim = Dim;
60 
61  // The physical fields to solve for
62  using primal_fields = tmpl::list<displacement>;
63  using auxiliary_fields = tmpl::list<strain>;
64  using fields_tag =
66 
67  using fluxes = Fluxes<Dim>;
68  using sources = Sources<Dim>;
69 
70  // The tag of the operator to compute magnitudes on the manifold, e.g. to
71  // normalize vectors on the faces of an element
72  template <typename Tag>
74 };
75 } // namespace Elasticity
Frame::Inertial
Definition: IndexType.hpp:44
Elasticity::Fluxes
Compute the fluxes for the Elasticity equation on a flat metric in Cartesian coordinates.
Definition: Equations.hpp:61
Tags::Variables
Definition: VariablesTag.hpp:21
Elasticity::Tags::Displacement
The material displacement field .
Definition: Tags.hpp:47
Elasticity
Items related to solving elasticity problems.
Definition: Equations.cpp:19
Tags::EuclideanMagnitude
Definition: Magnitude.hpp:110
cstddef
Elasticity::Tags::Strain
The symmetric strain , describing the deformation of the elastic material.
Definition: Tags.hpp:56
Elasticity::Sources
Compute the sources for the Elasticity equation.
Definition: Equations.hpp:93
Tags::deriv
Prefix indicating spatial derivatives.
Definition: PartialDerivatives.hpp:54
Elasticity::FirstOrderSystem
The linear elasticity equation formulated as a set of coupled first-order PDEs.
Definition: FirstOrderSystem.hpp:51
PartialDerivatives.hpp
TMPL.hpp