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 "Elliptic/BoundaryConditions/AnalyticSolution.hpp"
11 #include "Elliptic/BoundaryConditions/BoundaryCondition.hpp"
12 #include "Elliptic/BoundaryConditions/BoundaryConditionType.hpp"
13 #include "Elliptic/Systems/Elasticity/BoundaryConditions/LaserBeam.hpp"
14 #include "Elliptic/Systems/Elasticity/BoundaryConditions/Zero.hpp"
15 #include "Elliptic/Systems/Elasticity/Equations.hpp"
16 #include "Elliptic/Systems/Elasticity/Tags.hpp"
18 #include "PointwiseFunctions/Elasticity/ConstitutiveRelations/ConstitutiveRelation.hpp"
19 #include "Utilities/TMPL.hpp"
20 
21 namespace Elasticity {
22 
23 /*!
24  * \brief The linear elasticity equation formulated as a set of coupled
25  * first-order PDEs.
26  *
27  * This system formulates the elasticity equation \f$\nabla_i T^{ij} =
28  * f_\mathrm{ext}^j\f$ (see `Elasticity`). It introduces the symmetric strain
29  * tensor \f$S_{kl}\f$ as an auxiliary variable which satisfies the
30  * `Elasticity::ConstitutiveRelations` \f$T^{ij} = -Y^{ijkl} S_{kl}\f$ with the
31  * material-specific elasticity tensor \f$Y^{ijkl}\f$. Written as a set of
32  * coupled first-order PDEs, we get
33  *
34  * \f{align*}
35  * -\nabla_i Y^{ijkl} S_{kl} = f_\mathrm{ext}^j \\
36  * -\nabla_{(k} \xi_{l)} + S_{kl} = 0
37  * \f}
38  *
39  * The fluxes and sources in terms of the system variables
40  * \f$\xi^j\f$ and \f$S_{kl}\f$ are given by
41  *
42  * \f{align*}
43  * F^i_{\xi^j} &= Y^{ijkl}_{(\xi, S)} S_{kl} \\
44  * S_{\xi^j} &= 0 \\
45  * f_{\xi^j} &= f_\mathrm{ext}^j \\
46  * F^i_{S_{kl}} &= \delta^{i}_{(k} \xi_{l)} \\
47  * S_{S_{kl}} &= S_{kl} \\
48  * f_{S_{kl}} &= 0 \text{.}
49  * \f}
50  *
51  * See `Poisson::FirstOrderSystem` for details on the first-order
52  * flux-formulation.
53  */
54 template <size_t Dim>
56  private:
58  using strain = Tags::Strain<Dim>;
60 
61  public:
62  static constexpr size_t volume_dim = Dim;
63 
64  // The physical fields to solve for
65  using primal_fields = tmpl::list<displacement>;
66  using auxiliary_fields = tmpl::list<strain>;
67 
68  // Tags for the first-order fluxes
69  using primal_fluxes = tmpl::list<minus_stress>;
70  using auxiliary_fluxes =
71  tmpl::list<::Tags::Flux<strain, tmpl::size_t<Dim>, Frame::Inertial>>;
72 
73  // The variable-independent background fields in the equations
74  using background_fields = tmpl::list<>;
75  using inv_metric_tag = void;
76 
77  // The system equations formulated as fluxes and sources
80 
81  // The supported boundary conditions. Boundary conditions can be
82  // factory-created from this base class.
85  Dim,
86  tmpl::append<
87  tmpl::list<elliptic::BoundaryConditions::Registrars::
88  AnalyticSolution<FirstOrderSystem>,
89  BoundaryConditions::Registrars::Zero<
91  BoundaryConditions::Registrars::Zero<
93  tmpl::conditional_t<
94  Dim == 3,
95  tmpl::list<BoundaryConditions::Registrars::LaserBeam>,
96  tmpl::list<>>>>;
97 };
98 } // namespace Elasticity
Elasticity::Tags::MinusStress
Minus the symmetric stress, i.e. , describing pressure within the elastic material....
Definition: Tags.hpp:66
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
elliptic::BoundaryConditionType::Dirichlet
@ Dirichlet
Dirichlet boundary conditions like .
elliptic::BoundaryConditionType::Neumann
@ Neumann
Neumann boundary conditions like , where is the normal to the domain boundary.
Elasticity::Tags::Displacement
The material displacement field .
Definition: Tags.hpp:47
Elasticity
Items related to solving elasticity problems.
Definition: LaserBeam.hpp:25
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:55
PartialDerivatives.hpp
Prefixes.hpp
TMPL.hpp