specfem::medium_container::material< dim3, elastic, isotropic >

template<specfem::element::dimension_tag DimensionTag, specfem::element::medium_tag MediumTag, specfem::element::attenuation_tag AttenuationTag>
struct material<DimensionTag, MediumTag, specfem::element::property_tag::isotropic, AttenuationTag, std::enable_if_t<specfem::element::is_elastic<MediumTag>::value>> : public specfem::medium_container::impl::AttenuationValues<DimensionTag, MediumTag, AttenuationTag>
#include <material.hpp>

Material specialization for 2D elastic isotropic media.

This struct holds the properties of an elastic isotropic material in 2D space. It includes the density, shear wave speed, compressional wave speed, attenuation factors, and compaction gradient. The struct also provides

Template Parameters:
  • MediumTag – The medium tag that must satisfy elastic medium properties

  • PropertyTag – The property tag that must be isotropic

  • Enable – The enable_if condition that must be satisfied

Constructors

template<specfem::element::attenuation_tag T = AttenuationTag, std::enable_if_t<T == specfem::element::attenuation_tag::constant_isotropic, int> = 0>
inline material(const type_real &density, const type_real &cs, const type_real &cp, const type_real &Qkappa, const type_real &Qmu, const type_real &compaction_grad)

Construct a new elastic isotropic material.

Parameters:
  • density – Density of the material

  • cs – Shear wave speed

  • cp – Compressional wave speed

  • Qkappa – Attenuation factor for bulk modulus

  • Qmu – Attenuation factor for shear modulus

  • compaction_grad – Compaction gradient

material() = default

Default constructor.

Public Functions

inline bool operator==(const material<dimension_tag, medium_tag, specfem::element::property_tag::isotropic, attenuation_tag> &other) const

Check if 2 materials have the same properties.

Parameters:

other – Material to compare with

Returns:

true If the materials have the same properties

inline bool operator!=(const material<dimension_tag, medium_tag, specfem::element::property_tag::isotropic, attenuation_tag> &other) const

Check if 2 materials have different properties.

Parameters:

other – Material to compare with

Returns:

true If the materials have different properties

template<specfem::element::attenuation_tag T = AttenuationTag, std::enable_if_t<T == specfem::element::attenuation_tag::none, int> = 0>
inline specfem::point::properties<specfem::tags::Tags<dimension_tag, medium_tag, property_tag, false>> get_properties() const

Get the material properties.

Returns:

specfem::point::properties Material properties

template<specfem::element::attenuation_tag T = AttenuationTag, std::enable_if_t<T == specfem::element::attenuation_tag::constant_isotropic, int> = 0>
inline specfem::point::properties<specfem::tags::Tags<dimension_tag, medium_tag, property_tag, false>> get_properties() const

Get the material properties with attenuation scaling.

Returns:

specfem::point::properties Material properties with attenuation scaling

inline std::string print() const

Print the material properties.

Returns:

std::string Formatted material properties

Public Static Attributes

static constexpr auto dimension_tag = DimensionTag

Dimension of the material.

static constexpr auto medium_tag = MediumTag

Medium tag.

static constexpr auto property_tag = specfem::element::property_tag::isotropic

Property tag.

static constexpr auto attenuation_tag = AttenuationTag

Attenuation tag.