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"
10 #include "DataStructures/Tensor/EagerMath/Magnitude.hpp"
11 #include "DataStructures/VariablesTag.hpp"
12 #include "Elliptic/BoundaryConditions/AnalyticSolution.hpp"
13 #include "Elliptic/BoundaryConditions/BoundaryCondition.hpp"
14 #include "Elliptic/Systems/Elasticity/Equations.hpp"
15 #include "Elliptic/Systems/Elasticity/Tags.hpp"
17 #include "PointwiseFunctions/Elasticity/ConstitutiveRelations/ConstitutiveRelation.hpp"
18 #include "Utilities/TMPL.hpp"
19 
20 namespace Elasticity {
21 
22 /*!
23  * \brief The linear elasticity equation formulated as a set of coupled
24  * first-order PDEs.
25  *
26  * This system formulates the elasticity equation \f$\nabla_i T^{ij} =
27  * f_\mathrm{ext}^j\f$ (see `Elasticity`). It introduces the symmetric strain
28  * tensor \f$S_{kl}\f$ as an auxiliary variable which satisfies the
29  * `Elasticity::ConstitutiveRelations` \f$T^{ij} = -Y^{ijkl} S_{kl}\f$ with the
30  * material-specific elasticity tensor \f$Y^{ijkl}\f$. Written as a set of
31  * coupled first-order PDEs, we get
32  *
33  * \f{align*}
34  * -\nabla_i Y^{ijkl} S_{kl} = f_\mathrm{ext}^j \\
35  * -\nabla_{(k} \xi_{l)} + S_{kl} = 0
36  * \f}
37  *
38  * The fluxes and sources in terms of the system variables
39  * \f$\xi^j\f$ and \f$S_{kl}\f$ are given by
40  *
41  * \f{align*}
42  * F^i_{\xi^j} &= Y^{ijkl}_{(\xi, S)} S_{kl} \\
43  * S_{\xi^j} &= 0 \\
44  * f_{\xi^j} &= f_\mathrm{ext}^j \\
45  * F^i_{S_{kl}} &= \delta^{i}_{(k} \xi_{l)} \\
46  * S_{S_{kl}} &= S_{kl} \\
47  * f_{S_{kl}} &= 0 \text{.}
48  * \f}
49  *
50  * See `Poisson::FirstOrderSystem` for details on the first-order
51  * flux-formulation.
52  */
53 template <size_t Dim>
55  private:
57  using strain = Tags::Strain<Dim>;
58 
59  public:
60  static constexpr size_t volume_dim = Dim;
61 
62  // The physical fields to solve for
63  using primal_fields = tmpl::list<displacement>;
64  using auxiliary_fields = tmpl::list<strain>;
65  using fields_tag =
67 
68  // Tags for the first-order fluxes. We can use the symmetric stress here as an
69  // optimization once the DG operator supports fluxes with symmetries.
70  using primal_fluxes = tmpl::list<
72  using auxiliary_fluxes =
73  tmpl::list<::Tags::Flux<strain, tmpl::size_t<Dim>, Frame::Inertial>>;
74 
75  // The variable-independent background fields in the equations
76  using background_fields = tmpl::list<>;
77  using inv_metric_tag = void;
78 
79  // The system equations formulated as fluxes and sources
82 
83  // The supported boundary conditions. Boundary conditions can be
84  // factory-created from this base class.
87  Dim, tmpl::list<elliptic::BoundaryConditions::Registrars::
88  AnalyticSolution<FirstOrderSystem>>>;
89 
90  // The tag of the operator to compute magnitudes on the manifold, e.g. to
91  // normalize vectors on the faces of an element
92  template <typename Tag>
94 };
95 } // 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:103
Tags::Variables
Definition: VariablesTag.hpp:21
Tags::Flux
Prefix indicating a flux.
Definition: Prefixes.hpp:40
Elasticity::Tags::Displacement
The material displacement field .
Definition: Tags.hpp:47
Elasticity
Items related to solving elasticity problems.
Definition: LaserBeam.cpp:13
Tags::EuclideanMagnitude
Definition: Magnitude.hpp:109
cstddef
Elasticity::Tags::Strain
The symmetric strain , describing the deformation of the elastic material.
Definition: Tags.hpp:56
elliptic::BoundaryConditions::BoundaryCondition
Base class for boundary conditions for elliptic systems.
Definition: BoundaryCondition.hpp:91
Elasticity::Sources
Add the sources for the Elasticity equation.
Definition: Equations.hpp:129
Elasticity::FirstOrderSystem
The linear elasticity equation formulated as a set of coupled first-order PDEs.
Definition: FirstOrderSystem.hpp:54
PartialDerivatives.hpp
Prefixes.hpp
TMPL.hpp