Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <cstddef>
7 :
8 : #include "DataStructures/Tensor/Tensor.hpp"
9 : #include "Domain/Tags.hpp"
10 : #include "Elliptic/Systems/Elasticity/Tags.hpp"
11 : #include "Utilities/Gsl.hpp"
12 :
13 : namespace Elasticity {
14 :
15 : /*!
16 : * \brief The symmetric strain \f$S_{ij} = \partial_{(i} \xi_{j)}\f$ on a flat
17 : * background in Cartesian coordinates.
18 : */
19 : template <typename DataType, size_t Dim>
20 1 : void strain(gsl::not_null<tnsr::ii<DataType, Dim>*> strain,
21 : const tnsr::iJ<DataType, Dim>& deriv_displacement);
22 :
23 : /*!
24 : * \brief The symmetric strain \f$S_{ij} = \nabla_{(i} \gamma_{j)k} \xi^k =
25 : * \partial_{(i} \gamma_{j)k} \xi^k - \Gamma_{kij} \xi^k\f$ on a
26 : * background metric \f$\gamma_{ij}\f$.
27 : */
28 : template <typename DataType, size_t Dim>
29 1 : void strain(gsl::not_null<tnsr::ii<DataType, Dim>*> strain,
30 : const tnsr::iJ<DataType, Dim>& deriv_displacement,
31 : const tnsr::ii<DataType, Dim>& metric,
32 : const tnsr::ijj<DataType, Dim>& deriv_metric,
33 : const tnsr::ijj<DataType, Dim>& christoffel_first_kind,
34 : const tnsr::I<DataType, Dim>& displacement);
35 :
36 : /*!
37 : * \brief The symmetric strain \f$S_{ij} = \partial_{(i} \xi_{j)}\f$ on a flat
38 : * background in Cartesian coordinates.
39 : *
40 : * Note that this function involves a numeric differentiation of the
41 : * displacement vector.
42 : */
43 : template <size_t Dim>
44 1 : void strain(gsl::not_null<tnsr::ii<DataVector, Dim>*> strain,
45 : const tnsr::I<DataVector, Dim>& displacement, const Mesh<Dim>& mesh,
46 : const InverseJacobian<DataVector, Dim, Frame::ElementLogical,
47 : Frame::Inertial>& inv_jacobian);
48 :
49 : namespace Tags {
50 :
51 : /*!
52 : * \brief The symmetric strain \f$S_{ij}=\nabla_{(i} \xi_{j)}\f$ in the elastic
53 : * material.
54 : *
55 : * \see `Elasticity::strain`
56 : */
57 : template <size_t Dim>
58 1 : struct StrainCompute : Elasticity::Tags::Strain<Dim>, db::ComputeTag {
59 0 : using base = Elasticity::Tags::Strain<Dim>;
60 0 : using return_type = tnsr::ii<DataVector, Dim>;
61 0 : using argument_tags =
62 : tmpl::list<Elasticity::Tags::Displacement<Dim>, domain::Tags::Mesh<Dim>,
63 : domain::Tags::InverseJacobian<Dim, Frame::ElementLogical,
64 : Frame::Inertial>>;
65 0 : static constexpr auto function = &strain<Dim>;
66 : };
67 :
68 : } // namespace Tags
69 : } // namespace Elasticity
|