specfem::attenuation::compute_factors

template<int N_SLS>
AttenuationPropertyValues<N_SLS> specfem::attenuation::get_attenuation_property_values(Kokkos::View<type_real[N_SLS], Kokkos::LayoutRight, Kokkos::HostSpace> tau_s, Kokkos::View<type_real[N_SLS], Kokkos::LayoutRight, Kokkos::HostSpace> tau_eps)

Compute attenuation property values from relaxation times.

Computes \( \beta^{\text{defect}}_i = \tau_{\epsilon_i}/\tau_{\sigma_i} - 1 \) and \( \text{OneMinusSumBeta} = 1 - \sum_i \beta_i = \sum_{i=1}^{N\_SLS} \tau_{\epsilon_i}/\tau_{\sigma_i} \) for each standard linear solid.

Template Parameters:

N_SLS – Number of standard linear solids

Parameters:
  • tau_s – Stress relaxation times \( \tau_\sigma \)

  • tau_eps – Strain relaxation times \( \tau_\epsilon \)

Returns:

AttenuationPropertyValues containing \( \beta \) and \( \text{one\_minus\_sum\_beta} \)

template<int N_SLS>
type_real specfem::attenuation::get_attenuation_scale_factor(type_real f_c_source, Kokkos::View<type_real[N_SLS], Kokkos::LayoutRight, Kokkos::HostSpace> tau_eps, Kokkos::View<type_real[N_SLS], Kokkos::LayoutRight, Kokkos::HostSpace> tau_sigma, type_real Q_val, type_real attenuation_f0_reference)

Compute physical dispersion scaling factor for attenuation.

Computes \( \Psi \) to scale \( \mu_0 \) to the unrelaxed modulus:

\[ \Psi = \Psi_\mu \times \Psi_{\mu_0} \]
where:
  • \( \Psi_{\mu_0} = 1 + \frac{2}{\pi Q} \ln(f_c / f_0) \) corrects for logarithmic frequency dependence (Aki & Richards 1980, eq. 5.81)

  • \( \Psi_\mu = \frac{\sum(1 + \beta_i/N_{\text{SLS}})}{\sum[1 + \beta_i/(1 + 1/(\omega\tau_{\sigma_i})^2)/N_{\text{SLS}}]} \) accounts for SLS frequency dispersion

Template Parameters:

N_SLS – Number of standard linear solids

Parameters:
  • f_c_source – Central frequency of the source \( f_c \) (Hz)

  • tau_eps – Strain relaxation times \( \tau_\epsilon \)

  • tau_sigma – Stress relaxation times \( \tau_\sigma \)

  • Q_val – Target quality factor \( Q \)

  • attenuation_f0_reference – Reference frequency \( f_0 \) (Hz)

Throws:

std::runtime_error – if \( \Psi \) is outside [0.5, 1.5]

Returns:

Scale factor \( \Psi \) (expected range [0.5, 1.5])

template<int N_SLS>
struct AttenuationPropertyValues

Attenuation property values for modulus calculations.

Stores coefficients for computing relaxed and unrelaxed moduli:

  • \( \beta^{\text{defect}}_i = \tau_{\epsilon_i}/\tau_{\sigma_i} - 1 \) (modulus defect per mechanism)

  • \( \text{OneMinusSumBeta} = \sum_i \tau_{\epsilon_i}/\tau_{\sigma_i} \)

Template Parameters:

N_SLS – Number of standard linear solids