2D Elastic Isotropic Fréchet Derivative Computation

template<typename PointPropertiesType, typename AdjointPointVelocityType, typename AdjointPointAccelerationType, typename BackwardPointDisplacementType, typename PointFieldDerivativesType>
specfem::point::kernels<PointPropertiesType::dimension_tag, PointPropertiesType::medium_tag, PointPropertiesType::property_tag, PointPropertiesType::simd::using_simd> impl_compute_frechet_derivatives(const std::integral_constant<specfem::dimension::type, specfem::dimension::type::dim2>, const std::integral_constant<specfem::element::medium_tag, specfem::element::medium_tag::elastic_psv>, const std::integral_constant<specfem::element::property_tag, specfem::element::property_tag::isotropic>, const PointPropertiesType &properties, const AdjointPointVelocityType &adjoint_velocity, const AdjointPointAccelerationType &adjoint_acceleration, const BackwardPointDisplacementType &backward_displacement, const PointFieldDerivativesType &adjoint_derivatives, const PointFieldDerivativesType &backward_derivatives, const type_real &dt)

Compute Fréchet derivatives for 2D elastic PSV isotropic media.

Calculates sensitivity kernels for elastic properties in PSV wave propagation. Based on Tromp et al. 2005, computes kernels for density (ρ), shear modulus (μ), bulk modulus (κ), and derived parameters (ρ’, α, β).

The kernels are computed using deviatoric strain tensor formulations:

\[ \Delta K_{kappa} = -\kappa \Delta t \, \text{div}(u^{\dagger}) \cdot \text{div}(u^b) \]
\[ \Delta K_{mu} = -2\mu \Delta t \left[ \varepsilon^{\dagger} : \varepsilon^b - \frac{1}{3} \Delta K_{kappa} \right] \]
\[ \Delta K_{rho} = -\rho \Delta t \, \ddot{u}^{\dagger} \cdot u^b \]

Template Parameters:
  • PointPropertiesType – Elastic material properties

  • AdjointPointVelocityType – Adjoint velocity field

  • AdjointPointAccelerationType – Adjoint acceleration field

  • BackwardPointDisplacementType – Backward displacement field

  • PointFieldDerivativesType – Spatial field derivatives

Parameters:
  • properties – Elastic material properties (ρ, μ, κ)

  • adjoint_velocity – Adjoint velocity field

  • adjoint_acceleration – Adjoint acceleration field

  • backward_displacement – Backward displacement field

  • adjoint_derivatives – Spatial derivatives of adjoint field

  • backward_derivatives – Spatial derivatives of backward field

  • dt – Time step size

Returns:

Point kernels containing all elastic parameter sensitivities

template<typename PointPropertiesType, typename AdjointPointVelocityType, typename AdjointPointAccelerationType, typename BackwardPointDisplacementType, typename PointFieldDerivativesType>
specfem::point::kernels<PointPropertiesType::dimension_tag, PointPropertiesType::medium_tag, PointPropertiesType::property_tag, PointPropertiesType::simd::using_simd> impl_compute_frechet_derivatives(const std::integral_constant<specfem::dimension::type, specfem::dimension::type::dim2>, const std::integral_constant<specfem::element::medium_tag, specfem::element::medium_tag::elastic_sh>, const std::integral_constant<specfem::element::property_tag, specfem::element::property_tag::isotropic>, const PointPropertiesType &properties, const AdjointPointVelocityType &adjoint_velocity, const AdjointPointAccelerationType &adjoint_acceleration, const BackwardPointDisplacementType &backward_displacement, const PointFieldDerivativesType &adjoint_derivatives, const PointFieldDerivativesType &backward_derivatives, const type_real &dt)

Compute Fréchet derivatives for 2D elastic SH isotropic media.

Calculates sensitivity kernels for SH (shear horizontal) wave propagation using membrane wave assumptions (ux=uz=0, ∂/∂y=0). Only shear modulus and density kernels are non-zero for SH waves.

The kernels use deviatoric strain formulation:

\[ \Delta K_{mu} = -\mu \Delta t \left( \frac{\partial u_y^{\dagger}}{\partial x} \frac{\partial u_y^b}{\partial x} + \frac{\partial u_y^{\dagger}}{\partial z} \frac{\partial u_y^b}{\partial z} \right) \]
\[ \Delta K_{rho} = -\rho \Delta t \, \ddot{u}^{\dagger} \cdot u^b \]

Note

For SH waves: K_{kappa} = 0, K_{alpha} = 0, K_{beta} = 2K_{mu}

Template Parameters:
  • PointPropertiesType – Elastic material properties

  • AdjointPointVelocityType – Adjoint velocity field

  • AdjointPointAccelerationType – Adjoint acceleration field

  • BackwardPointDisplacementType – Backward displacement field

  • PointFieldDerivativesType – Spatial field derivatives

Parameters:
  • properties – Elastic material properties

  • adjoint_velocity – Adjoint velocity field

  • adjoint_acceleration – Adjoint acceleration field

  • backward_displacement – Backward displacement field

  • adjoint_derivatives – Spatial derivatives of adjoint field

  • backward_derivatives – Spatial derivatives of backward field

  • dt – Time step size

Returns:

Point kernels with SH-specific parameter sensitivities

2D Elastic Anisotropic Fréchet Derivative Computation

template<typename PointPropertiesType, typename AdjointPointVelocityType, typename AdjointPointAccelerationType, typename BackwardPointDisplacementType, typename PointFieldDerivativesType>
specfem::point::kernels<PointPropertiesType::dimension_tag, PointPropertiesType::medium_tag, PointPropertiesType::property_tag, PointPropertiesType::simd::using_simd> impl_compute_frechet_derivatives(const std::integral_constant<specfem::dimension::type, specfem::dimension::type::dim2>, const std::integral_constant<specfem::element::medium_tag, specfem::element::medium_tag::elastic_psv>, const std::integral_constant<specfem::element::property_tag, specfem::element::property_tag::anisotropic>, const PointPropertiesType &properties, const AdjointPointVelocityType &adjoint_velocity, const AdjointPointAccelerationType &adjoint_acceleration, const BackwardPointDisplacementType &backward_displacement, const PointFieldDerivativesType &adjoint_derivatives, const PointFieldDerivativesType &backward_derivatives, const type_real &dt)

Compute Fréchet derivatives for 2D elastic PSV anisotropic media.

Calculates sensitivity kernels for anisotropic elastic stiffness parameters in PSV wave propagation. Computes kernels for density and six independent stiffness coefficients (c11, c13, c15, c33, c35, c55) using strain tensor formulation.

Based on Tromp et al. 2005, Equation 15 for anisotropic kernels:

\[ \Delta K_{c_{ijkl}} = -\varepsilon_{ij}^{\dagger} \varepsilon_{kl}^b \, c_{ijkl} \, \Delta t \]
\[ \Delta K_{rho} = -\rho \Delta t \, \ddot{u}^{\dagger} \cdot u^b \]

Template Parameters:
  • PointPropertiesType – Anisotropic material properties

  • AdjointPointVelocityType – Adjoint velocity field

  • AdjointPointAccelerationType – Adjoint acceleration field

  • BackwardPointDisplacementType – Backward displacement field

  • PointFieldDerivativesType – Spatial field derivatives

Parameters:
  • properties – Anisotropic elastic properties (ρ, c11, c13, c15, c33, c35, c55)

  • adjoint_velocity – Adjoint velocity field

  • adjoint_acceleration – Adjoint acceleration field

  • backward_displacement – Backward displacement field

  • adjoint_derivatives – Spatial derivatives of adjoint field

  • backward_derivatives – Spatial derivatives of backward field

  • dt – Time step size

Returns:

Point kernels containing density and stiffness parameter sensitivities

template<typename PointPropertiesType, typename AdjointPointVelocityType, typename AdjointPointAccelerationType, typename BackwardPointDisplacementType, typename PointFieldDerivativesType>
specfem::point::kernels<PointPropertiesType::dimension_tag, PointPropertiesType::medium_tag, PointPropertiesType::property_tag, PointPropertiesType::simd::using_simd> impl_compute_frechet_derivatives(const std::integral_constant<specfem::dimension::type, specfem::dimension::type::dim2>, const std::integral_constant<specfem::element::medium_tag, specfem::element::medium_tag::elastic_sh>, const std::integral_constant<specfem::element::property_tag, specfem::element::property_tag::anisotropic>, const PointPropertiesType &properties, const AdjointPointVelocityType &adjoint_velocity, const AdjointPointAccelerationType &adjoint_acceleration, const BackwardPointDisplacementType &backward_displacement, const PointFieldDerivativesType &adjoint_derivatives, const PointFieldDerivativesType &backward_derivatives, const type_real &dt)

Compute Fréchet derivatives for 2D elastic SH anisotropic media.

Placeholder implementation for SH anisotropic kernels. Currently not implemented due to missing stiffness matrix components (c44, c45/c54) in the anisotropic properties structure.

Note

Requires additional stiffness coefficients (c44, c45) for full implementation

Warning

This function currently calls Kokkos::abort() - not implemented

Template Parameters:
  • PointPropertiesType – Anisotropic material properties

  • AdjointPointVelocityType – Adjoint velocity field

  • AdjointPointAccelerationType – Adjoint acceleration field

  • BackwardPointDisplacementType – Backward displacement field

  • PointFieldDerivativesType – Spatial field derivatives

Parameters:
  • properties – Anisotropic elastic properties

  • adjoint_velocity – Adjoint velocity field

  • adjoint_acceleration – Adjoint acceleration field

  • backward_displacement – Backward displacement field

  • adjoint_derivatives – Spatial derivatives of adjoint field

  • backward_derivatives – Spatial derivatives of backward field

  • dt – Time step size

Returns:

Zero kernels (not implemented)

2D Acoustic Isotropic Fréchet Derivative Computation

template<typename PointPropertiesType, typename AdjointPointVelocityType, typename AdjointPointAccelerationType, typename BackwardPointDisplacementType, typename PointFieldDerivativesType>
specfem::point::kernels<PointPropertiesType::dimension_tag, PointPropertiesType::medium_tag, PointPropertiesType::property_tag, PointPropertiesType::simd::using_simd> impl_compute_frechet_derivatives(const std::integral_constant<specfem::dimension::type, specfem::dimension::type::dim2>, 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 PointPropertiesType &properties, const AdjointPointVelocityType &adjoint_velocity, const AdjointPointAccelerationType &adjoint_acceleration, const BackwardPointDisplacementType &backward_displacement, const PointFieldDerivativesType &adjoint_derivatives, const PointFieldDerivativesType &backward_derivatives, const type_real &dt)

Compute Fréchet derivatives for 2D acoustic isotropic media.

Calculates sensitivity kernels for density and bulk modulus in 2D acoustic wave propagation. Returns kernels \( K_{rho}\) and \( K_{kappa}\) used in seismic inversion.

The kernels are computed using the following equations:

Density kernel:

\[ \Delta K_{rho} = \left( \frac{\partial u^{\dagger}}{\partial x} \frac{\partial u^{b}}{\partial x} + \frac{\partial u^{\dagger}}{\partial z} \frac{\partial u^{b}}{\partial z} \right) \frac{1}{\rho} \Delta t \]

Bulk modulus kernel:

\[ \Delta K_{kappa} = \ddot{u}^{\dagger} \cdot u^{b} \frac{1}{\kappa} \Delta t \]

where \(u^{\dagger}\) is the adjoint field, \(u^{b}\) is the backward field, \(\ddot{u}^{\dagger}\) is the adjoint acceleration, and \(\Delta t\) is the time step.

Note

This is the specialized implementation for 2D acoustic isotropic media

Template Parameters:
  • PointPropertiesType – Acoustic material properties

  • AdjointPointVelocityType – Adjoint velocity field

  • AdjointPointAccelerationType – Adjoint acceleration field

  • BackwardPointDisplacementType – Backward displacement field

  • PointFieldDerivativesType – Spatial field derivatives

Parameters:
  • properties – Acoustic material properties (density, bulk modulus)

  • adjoint_velocity – Adjoint velocity field

  • adjoint_acceleration – Adjoint acceleration field

  • backward_displacement – Backward displacement field

  • adjoint_derivatives – Spatial derivatives of adjoint field

  • backward_derivatives – Spatial derivatives of backward field

  • dt – Time step size

Returns:

Point kernels containing density and bulk modulus sensitivities

2D Poroelastic Isotropic Fréchet Derivative Computation

template<typename PointPropertiesType, typename AdjointPointVelocityType, typename AdjointPointAccelerationType, typename BackwardPointDisplacementType, typename PointFieldDerivativesType>
specfem::point::kernels<PointPropertiesType::dimension_tag, PointPropertiesType::medium_tag, PointPropertiesType::property_tag, PointPropertiesType::simd::using_simd> impl_compute_frechet_derivatives(const std::integral_constant<specfem::dimension::type, specfem::dimension::type::dim2>, const std::integral_constant<specfem::element::medium_tag, specfem::element::medium_tag::poroelastic>, const std::integral_constant<specfem::element::property_tag, specfem::element::property_tag::isotropic>, const PointPropertiesType &properties, const AdjointPointVelocityType &adjoint_velocity, const AdjointPointAccelerationType &adjoint_acceleration, const BackwardPointDisplacementType &backward_displacement, const PointFieldDerivativesType &adjoint_derivatives, const PointFieldDerivativesType &backward_derivatives, const type_real &dt)

Compute Fréchet derivatives for 2D poroelastic isotropic media.

Calculates sensitivity kernels for poroelastic properties based on Biot’s theory. Computes kernels for both solid and fluid phases, including density, elastic moduli, Biot parameters, and wave speed kernels.

Based on Morency et al. 2009 formulation, computes 15 different kernels:

  • Primary kernels: ρₜ, ρf, η, s/m, μfr, B, C, M

  • Wave speed kernels: cpI, cpII, cs, ratio

  • Density normalized kernels: ρb, ρfb, φ

Note

For complete technical details and theoretical derivations, please refer to: Morency, C., Luo, Y., & Tromp, J. (2009).

Warning

This implementation has NOT been tested. Please create a GitHub issue if you encounter bugs or unexpected behavior in the kernel computations.

Template Parameters:
  • PointPropertiesType – Poroelastic material properties

  • AdjointPointVelocityType – Adjoint velocity field (solid+fluid)

  • AdjointPointAccelerationType – Adjoint acceleration field (solid+fluid)

  • BackwardPointDisplacementType – Backward displacement field (solid+fluid)

  • PointFieldDerivativesType – Spatial field derivatives

Parameters:
  • properties – Poroelastic properties (ρ, μ, φ, η, permeability, Biot coefficients)

  • adjoint_velocity – Adjoint velocity field for solid and fluid phases

  • adjoint_acceleration – Adjoint acceleration field for solid and fluid phases

  • backward_displacement – Backward displacement field for solid and fluid phases

  • adjoint_derivatives – Spatial derivatives of adjoint field

  • backward_derivatives – Spatial derivatives of backward field

  • dt – Time step size

Returns:

Point kernels containing all 15 poroelastic parameter sensitivities