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 : #include <memory> 8 : #include <pup.h> 9 : 10 : #include "DataStructures/Tensor/TypeAliases.hpp" 11 : #include "Utilities/Gsl.hpp" 12 : #include "Utilities/Serialization/CharmPupable.hpp" 13 : #include "Utilities/TMPL.hpp" 14 : 15 : /// \cond 16 : class DataVector; 17 : /// \endcond 18 : 19 : namespace Elasticity { 20 : /*! 21 : * \brief Constitutive (stress-strain) relations that characterize the elastic 22 : * properties of a material 23 : */ 24 1 : namespace ConstitutiveRelations { 25 : 26 : /*! 27 : * \brief Base class for constitutive (stress-strain) relations that 28 : * characterize the elastic properties of a material 29 : * 30 : * \details A constitutive relation, in the context of elasticity, relates the 31 : * Stress \f$T^{ij}\f$ and Strain \f$S_{ij}=\nabla_{(i}u_{j)}\f$ within an 32 : * elastic material (see \ref Elasticity). For small stresses it is approximated 33 : * by the linear relation 34 : * 35 : * \f[ 36 : * T^{ij} = -Y^{ijkl}S_{kl} 37 : * \f] 38 : * 39 : * (Eq. 11.17 in \cite ThorneBlandford2017) that is referred to as _Hooke's 40 : * law_. The constitutive relation in this linear approximation is determined by 41 : * the elasticity (or _Young's_) tensor \f$Y^{ijkl}=Y^{(ij)(kl)}=Y^{klij}\f$ 42 : * that generalizes a simple proportionality to a three-dimensional and 43 : * (possibly) anisotropic material. 44 : * 45 : * \note We assume a Euclidean metric in Cartesian coordinates here (for now). 46 : */ 47 : template <size_t Dim> 48 1 : class ConstitutiveRelation : public PUP::able { 49 : public: 50 0 : static constexpr size_t volume_dim = Dim; 51 : 52 0 : ConstitutiveRelation() = default; 53 0 : ConstitutiveRelation(const ConstitutiveRelation&) = default; 54 0 : ConstitutiveRelation& operator=(const ConstitutiveRelation&) = default; 55 0 : ConstitutiveRelation(ConstitutiveRelation&&) = default; 56 0 : ConstitutiveRelation& operator=(ConstitutiveRelation&&) = default; 57 0 : ~ConstitutiveRelation() override = default; 58 : 59 0 : WRAPPED_PUPable_abstract(ConstitutiveRelation); // NOLINT 60 : 61 : /// Returns a `std::unique_ptr` pointing to a copy of the 62 : /// `ConstitutiveRelation`. 63 1 : virtual std::unique_ptr<ConstitutiveRelation<Dim>> get_clone() const = 0; 64 : 65 : /// The constitutive relation that characterizes the elastic properties of a 66 : /// material 67 1 : virtual void stress(gsl::not_null<tnsr::II<DataVector, Dim>*> stress, 68 : const tnsr::ii<DataVector, Dim>& strain, 69 : const tnsr::I<DataVector, Dim>& x) const = 0; 70 : }; 71 : 72 : } // namespace ConstitutiveRelations 73 : } // namespace Elasticity