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

\[ t_{rot} = - J V_t \omega \]
where \(J\) is the micro-inertia (polar moment of inertia times density) and \(V_t\) is the twisting velocity.

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