specfem::point::attenuation¶
-
template<specfem::element::dimension_tag DimensionTag, specfem::element::medium_tag MediumTag, specfem::element::attenuation_tag AttenuationTag, bool UseSIMD>
struct attenuation¶ Combined attenuation struct for viscoelastic simulations.
Merges
attenuation_factorsandmemory_variableinto a single type that carries both the constant-Q relaxation coefficients and the per-SLS memory variable arrays. Using one struct eliminates the need to pass the two separate objects everywhere they are consumed together.- Template Parameters:
DimensionTag – Spatial dimension (dim2 or dim3)
MediumTag – Medium type (elastic)
AttenuationTag – Attenuation model (constant_isotropic)
UseSIMD – Enable SIMD vectorization
Dimension-specific Specializations¶
2D PSV Elastic Medium with Constant Isotropic Attenuation¶
-
template<bool UseSIMD>
struct attenuation<specfem::element::dimension_tag::dim2, specfem::element::medium_tag::elastic_psv, specfem::element::attenuation_tag::constant_isotropic, UseSIMD> : public specfem::data_access::Accessor<specfem::datatype::AccessorType::point, specfem::data_access::DataClassType::attenuation, specfem::element::dimension_tag::dim2, UseSIMD>¶ Attenuation state for 2D elastic medium with constant isotropic Q.
Stores the Runge-Kutta integration factors together with the three independent 2D memory variable components (Rxx, Rxz, Rkappa).
- Template Parameters:
UseSIMD – Enable SIMD vectorization
Public Functions
-
inline attenuation()¶
Default constructor — zeroes all R fields; factor fields default.
-
inline attenuation(const value_type &kappa_relaxation_rate, const value_type &mu_relaxation_rate, const value_type &alpha_rk, const value_type &beta_rk, const value_type &gamma_rk, const value_type &Rxx, const value_type &Rxz, const value_type &Rkappa, const datatype &epsilon_xx, const datatype &epsilon_zz, const datatype &epsilon_xz)¶
Full value constructor.
- Parameters:
kappa_relaxation_rate – Scaling factor for kappa attenuation
mu_relaxation_rate – Scaling factor for mu attenuation
alpha_rk – Runge-Kutta alpha factors (per SLS)
beta_rk – Runge-Kutta beta factors (per SLS)
gamma_rk – Runge-Kutta gamma factors (per SLS)
Rxx – Memory variable R_xx
Rxz – Memory variable R_xz
Rkappa – Memory variable R_kappa
epsilon_xx – Stored symmetrised strain ε_xx
epsilon_zz – Stored symmetrised strain ε_zz
epsilon_xz – Stored symmetrised strain ε_xz
-
inline void init()¶
Zero all memory variable (R) fields and symmetrised strain.
-
inline attenuation operator+(const attenuation &rhs) const¶
Component-wise addition on R fields and epsilon; RK/common factors copied.
-
inline attenuation &operator+=(const attenuation &rhs)¶
In-place addition on R fields and epsilon.
-
inline attenuation operator*(const type_real &rhs) const¶
Scalar multiplication on R fields and epsilon; RK/common factors copied.
-
inline bool operator==(const attenuation &other) const¶
Equality — compares all fields (factors, R, and epsilon).
-
inline std::string print() const¶
String representation (non-SIMD only).
Public Members
-
value_type alpha_rk¶
Runge-Kutta coefficients; one entry per SLS mechanism (computed from tau_sigma and deltat; constant throughout a run).
3D Elastic Medium with Constant Isotropic Attenuation¶
-
template<bool UseSIMD>
struct attenuation<specfem::element::dimension_tag::dim3, specfem::element::medium_tag::elastic, specfem::element::attenuation_tag::constant_isotropic, UseSIMD> : public specfem::data_access::Accessor<specfem::datatype::AccessorType::point, specfem::data_access::DataClassType::attenuation, specfem::element::dimension_tag::dim3, UseSIMD>¶ Attenuation state for 3D elastic medium with constant isotropic Q.
Stores the Runge-Kutta integration factors together with the six independent 3D memory variable components (Rxx, Ryy, Rxy, Rxz, Ryz, Rkappa).
- Template Parameters:
UseSIMD – Enable SIMD vectorization
Public Functions
-
inline attenuation()¶
Default constructor — zeroes all R fields; factor fields default.
-
inline attenuation(const value_type &kappa_relaxation_rate, const value_type &mu_relaxation_rate, const value_type &alpha_rk, const value_type &beta_rk, const value_type &gamma_rk, const value_type &Rxx, const value_type &Ryy, const value_type &Rxy, const value_type &Rxz, const value_type &Ryz, const value_type &Rkappa, const datatype &epsilon_xx, const datatype &epsilon_yy, const datatype &epsilon_zz, const datatype &epsilon_xy, const datatype &epsilon_xz, const datatype &epsilon_yz)¶
Full value constructor.
- Parameters:
kappa_relaxation_rate – Scaling factor for kappa attenuation
mu_relaxation_rate – Scaling factor for mu attenuation
alpha_rk – Runge-Kutta alpha factors (per SLS)
beta_rk – Runge-Kutta beta factors (per SLS)
gamma_rk – Runge-Kutta gamma factors (per SLS)
Rxx – Memory variable R_xx
Ryy – Memory variable R_yy
Rxy – Memory variable R_xy
Rxz – Memory variable R_xz
Ryz – Memory variable R_yz
Rkappa – Memory variable R_kappa
epsilon_xx – Stored symmetrised strain ε_xx
epsilon_yy – Stored symmetrised strain ε_yy
epsilon_zz – Stored symmetrised strain ε_zz
epsilon_xy – Stored symmetrised strain ε_xy
epsilon_xz – Stored symmetrised strain ε_xz
epsilon_yz – Stored symmetrised strain ε_yz
-
inline void init()¶
Zero all memory variable (R) fields and symmetrised strain.
-
inline attenuation operator+(const attenuation &rhs) const¶
Component-wise addition on R fields and epsilon; RK/common factors copied.
-
inline attenuation &operator+=(const attenuation &rhs)¶
In-place addition on R fields and epsilon.
-
inline attenuation operator*(const type_real &rhs) const¶
Scalar multiplication on R fields and epsilon; RK/common factors copied.
-
inline bool operator==(const attenuation &other) const¶
Equality — compares all fields (factors, R, and epsilon).
-
inline std::string print() const¶
String representation (non-SIMD only).
Public Members
-
value_type alpha_rk¶
Runge-Kutta coefficients; one entry per SLS mechanism (computed from tau_sigma and deltat; constant throughout a run).