specfem::assembly::impl::domain_kernels¶
-
template<specfem::element::dimension_tag DimensionTag, specfem::element::medium_tag MediumTag, specfem::element::property_tag PropertyTag>
struct domain_kernels : public specfem::medium_container::kernels::data_container<DimensionTag, MediumTag, PropertyTag>, public specfem::assembly::impl::DomainAccessor<DimensionTag, domain_kernels<DimensionTag, MediumTag, PropertyTag>>¶ Misfit kernel storage container for seismic inversion.
Template container that stores sensitivity kernels (Frechet derivatives) which represent the gradient of the misfit function with respect to material parameters and are computed from the interaction of forward and adjoint wavefields.
Specializes for different dimension/medium/property combinations and provides efficient accumulation operations for kernel computation during adjoint simulations. Inherits from
kernels::data_containerfor storage andspecfem::assembly::impl::DomainAccessorfor device/host data access.- Template Parameters:
DimensionTag – Spatial dimension (dim2/dim3)
MediumTag – Physical medium type
PropertyTag – Material property type
Public Types
-
using base_type = specfem::medium_container::kernels::data_container<DimensionTag, MediumTag, PropertyTag>¶
Base kernels data container type.
Public Functions
-
domain_kernels() = default¶
Default constructor for empty kernels container.
-
inline domain_kernels(const specfem::datatype::ElementIndexRange &elements, const specfem::mesh_entity::element_grid<dimension_tag> &grid)¶
Construct kernels container for specified elements.
Initializes kernels storage for the given spectral elements. All kernel values are initialized to zero for accumulation.
- Parameters:
elements – Contiguous range of global element indices for this type
grid – Element grid configuration
-
inline void load_device_values(const IndexType &index, PointValues &values) const¶
Load data from container to point values on device.
Reads data from the container at the specified index and copies it to the provided point values object. Supports both scalar and SIMD vectorized indices for optimal performance.
- Template Parameters:
PointValues – Point data type (properties, field, etc.)
IndexType – Index type (index or simd_index)
- Parameters:
index – Quadrature point index within element
values – Point values object to fill with data
-
inline void load_host_values(const IndexType &index, PointValues &values) const¶
Load data from container to point values on host.
Host version of load_device_values. Should be called from host code for accessing data in host memory or performing host-side operations.
- Template Parameters:
PointValues – Point data type (properties, field, etc.)
IndexType – Index type (index or simd_index)
- Parameters:
index – Quadrature point index within element
values – Point values object to fill with data
-
inline void store_device_values(const IndexType &index, const PointValues &values) const¶
Store point values to container on device.
Writes data from point values object to the container at the specified index. Overwrites existing data in the container.
- Template Parameters:
PointValues – Point data type (properties, field, etc.)
IndexType – Index type (index or simd_index)
- Parameters:
index – Quadrature point index within element
values – Point values object containing data to store
-
inline void store_host_values(const IndexType &index, const PointValues &values) const¶
Store point values to container on host.
Host version of store_device_values for host-side operations.
- Template Parameters:
PointValues – Point data type (properties, field, etc.)
IndexType – Index type (index or simd_index)
- Parameters:
index – Quadrature point index within element
values – Point values object containing data to store
-
inline void add_device_values(const IndexType &index, const PointValues &values) const¶
Add point values to existing container data on device.
Performs element-wise addition of point values to existing data in the container. Commonly used for accumulating contributions (e.g., sensitivity kernels, forces).
- Template Parameters:
PointValues – Point data type (properties, field, etc.)
IndexType – Index type (index or simd_index)
- Parameters:
index – Quadrature point index within element
values – Point values to add to existing container data
-
inline void add_host_values(const IndexType &index, const PointValues &values) const¶
Add point values to existing container data on host.
Host version of add_device_values for accumulation operations.
- Template Parameters:
PointValues – Point data type (properties, field, etc.)
IndexType – Index type (index or simd_index)
- Parameters:
index – Quadrature point index within element
values – Point values to add to existing container data
Public Members
-
specfem::datatype::ElementIndexRange element_range¶
Global element index range for this type
Dimension-specific Specializations¶
Warning
doxygenstruct: Cannot find class “specfem::assembly::impl::domain_kernels< specfem::element::dimension_tag::dim2, MediumTag, PropertyTag >” in doxygen xml output for project “specfem++” from directory: _build/doxygen/xml
Warning
doxygenstruct: Cannot find class “specfem::assembly::impl::domain_kernels< specfem::element::dimension_tag::dim3, MediumTag, PropertyTag >” in doxygen xml output for project “specfem++” from directory: _build/doxygen/xml