specfem::boundary_conditions::stacey¶
-
template<typename PointBoundaryType, typename PointPropertyType, typename PointFieldType, typename PointAccelerationType>
void specfem::boundary_conditions::impl_apply_boundary_conditions(const stacey_type&, const PointBoundaryType &boundary, const PointPropertyType &property, const PointFieldType &field, PointAccelerationType &acceleration)¶ Apply Stacey absorbing boundary conditions.
Implements the first-order paraxial absorbing boundary condition (Stacey condition). The traction vector \(\mathbf{t}\) is computed to absorb outgoing waves based on the velocity field \(\mathbf{v}\) and the medium properties.
The boundary condition is defined as:
\[ \mathbf{t} = - \rho V_p (\mathbf{v} \cdot \mathbf{n}) \mathbf{n} - \rho V_s (\mathbf{v} - (\mathbf{v} \cdot \mathbf{n}) \mathbf{n}) \]where:
\(\rho\) is the density,
\(V_p\) is the P-wave velocity,
\(V_s\) is the S-wave velocity,
\(\mathbf{n}\) is the outward unit normal vector to the boundary.
This effectively separates the wavefield into normal (P-wave) and tangential (S-wave) components and applies the corresponding impedance to absorb them.
- Template Parameters:
PointBoundaryType – Point boundary type
PointPropertyType – Point property type
PointFieldType – Point field type
PointAccelerationType – Point acceleration type
- Parameters:
boundary – Boundary object
property – Property object
field – Field object
acceleration – Acceleration object
-
template<typename PointBoundaryType, typename PointPropertyType, typename PointMassMatrixType>
void specfem::boundary_conditions::impl_compute_mass_matrix_terms(const stacey_type&, const type_real dt, const PointBoundaryType &boundary, const PointPropertyType &property, PointMassMatrixType &mass_matrix)¶ Compute mass matrix terms for Stacey absorbing boundary conditions.
- Template Parameters:
PointBoundaryType – Point boundary type
PointPropertyType – Point property type
PointMassMatrixType – Point mass matrix type
- Parameters:
dt – Time step
boundary – Boundary object
property – Property object
mass_matrix – Mass matrix object
Implementation Details¶
-
template<typename PointBoundaryType, typename PointPropertyType, typename PointVelocityType, typename ViewType, typename std::enable_if_t<!PointBoundaryType::simd::using_simd, int> = 0>
void specfem::boundary_conditions::impl::impl_base_elastic_psv_traction(const PointBoundaryType &boundary, const PointPropertyType &property, const PointVelocityType &velocity, ViewType &traction)¶ Apply Stacey absorbing boundary conditions for Elastic P-SV medium.
The traction vector is computed based on P-SV separation:
\[ \mathbf{t} = - \rho V_p (\mathbf{v} \cdot \mathbf{n}) \mathbf{n} - \rho V_s (\mathbf{v} - (\mathbf{v} \cdot \mathbf{n}) \mathbf{n}) \]- Template Parameters:
PointBoundaryType – Point boundary type
PointPropertyType – Point property type
PointVelocityType – Point velocity type
ViewType – View type
- Parameters:
boundary – Boundary object
property – Property object
velocity – Velocity object
traction – Traction object to be updated
-
template<typename PointBoundaryType, typename PointPropertyType, typename PointVelocityType, typename ViewType, typename std::enable_if_t<!PointBoundaryType::simd::using_simd, int> = 0>
void specfem::boundary_conditions::impl::impl_base_elastic_sh_traction(const PointBoundaryType &boundary, const PointPropertyType &property, const PointVelocityType &velocity, ViewType &traction)¶ Apply Stacey absorbing boundary conditions for Elastic SH medium.
For SH waves (scalar anti-plane shear), the traction is:
\[ t = - \rho V_s v \]- Template Parameters:
PointBoundaryType – Point boundary type
PointPropertyType – Point property type
PointVelocityType – Point velocity type
ViewType – View type
- Parameters:
boundary – Boundary object
property – Property object
velocity – Velocity object
traction – Traction object to be updated
-
template<typename PointBoundaryType, typename PointPropertyType, typename PointVelocityType, typename ViewType, typename std::enable_if_t<!PointBoundaryType::simd::using_simd, int> = 0>
void specfem::boundary_conditions::impl::impl_base_elastic_psv_t_traction(const PointBoundaryType &boundary, const PointPropertyType &property, const PointVelocityType &velocity, ViewType &traction)¶ Apply Stacey absorbing boundary conditions for Elastic Cosserat (P-SV-t) medium.
Updates traction for both translational and rotational components.
Translational part (P-SV):
\[ \mathbf{t}_{trans} = - \rho V_p (\mathbf{v}_{trans} \cdot \mathbf{n}) \mathbf{n} - \rho V_s (\mathbf{v}_{trans} - (\mathbf{v}_{trans} \cdot \mathbf{n}) \mathbf{n}) \]Rotational part (Twist):
where \(J\) is the micro-inertia (polar moment of inertia times density) and \(V_t\) is the twisting velocity.\[ t_{rot} = - J V_t \omega \]- Template Parameters:
PointBoundaryType – Point boundary type
PointPropertyType – Point property type
PointVelocityType – Point velocity type
ViewType – View type
- Parameters:
boundary – Boundary object
property – Property object
velocity – Velocity object
traction – Traction object to be updated
-
template<typename PointBoundaryType, typename PointPropertyType, typename PointVelocityType, typename ViewType, typename std::enable_if_t<!PointBoundaryType::simd::using_simd, int> = 0>
void specfem::boundary_conditions::impl::impl_enforce_traction(const std::integral_constant<specfem::element::medium_tag, specfem::element::medium_tag::acoustic>&, const std::integral_constant<specfem::element::property_tag, specfem::element::property_tag::isotropic>&, const PointBoundaryType &boundary, const PointPropertyType &property, const PointVelocityType &velocity, ViewType &traction)¶ Apply Stacey absorbing boundary conditions for Acoustic Isotropic medium.
The boundary condition applied to the potential (or pressure) field is:
\[ t = - \frac{1}{\rho V_p} v \]- Template Parameters:
PointBoundaryType – Point boundary type
PointPropertyType – Point property type
PointVelocityType – Point velocity type
ViewType – View type
- Parameters:
boundary – Boundary object
property – Property object
velocity – Velocity object
traction – Traction object to be updated