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