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:
where:\[ \Psi = \Psi_\mu \times \Psi_{\mu_0} \]\( \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