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_factors and memory_variable into 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).

datatype epsilon_xx

ε_xx = ∂u_x/∂x (previous Taylor-step)

datatype epsilon_zz

ε_zz = ∂u_z/∂z (previous Taylor-step)

datatype epsilon_xz

ε_xz = ½(∂u_x/∂z + ∂u_z/∂x) (previous Taylor-step)

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).

datatype epsilon_xx

ε_xx = ∂u_x/∂x.

datatype epsilon_yy

ε_yy = ∂u_y/∂y.

datatype epsilon_zz

ε_zz = ∂u_z/∂z.

datatype epsilon_xy

ε_xy = ½(∂u_x/∂y + ∂u_y/∂x)

datatype epsilon_xz

ε_xz = ½(∂u_x/∂z + ∂u_z/∂x)

datatype epsilon_yz

ε_yz = ½(∂u_y/∂z + ∂u_z/∂y)