specfem::data_access::Accessor

template<specfem::datatype::AccessorType AccessorType, specfem::data_access::DataClassType DataClass, specfem::element::dimension_tag DimensionTag, bool UseSIMD>
struct Accessor

Type-safe data accessor for simulation components.

Provides specialized access patterns for different data types and computational contexts. Enables efficient data loading/storing with proper indexing and vectorization support.

Template Parameters:
  • AccessorType – Access pattern (point/element/chunk)

  • DataClass – Type of data (properties/fields/indices)

  • DimensionTag – Spatial dimension (2D/3D)

  • UseSIMD – Enable SIMD vectorization

Specializations

template<specfem::data_access::DataClassType DataClass, specfem::element::dimension_tag DimensionTag, bool UseSIMD>
struct Accessor<specfem::datatype::AccessorType::point, DataClass, DimensionTag, UseSIMD>

Point-wise accessor for single quadrature point operations.

Provides SIMD-optimized data access for individual quadrature point computations. Uses specialized view types for efficient point-wise data operations with configurable vectorization.

Template Parameters:
  • DataClass – Type of point data (properties, fields, etc.)

  • DimensionTag – Spatial dimension (2D/3D)

  • UseSIMD – Enable SIMD vectorization

Subclassed by specfem::point::impl::field< DimensionTag, MediumTag, specfem::data_access::DataClassType::velocity, UseSIMD >, specfem::point::impl::field< DimensionTag, MediumTag, specfem::data_access::DataClassType::mass_matrix, UseSIMD >, specfem::point::impl::field< DimensionTag, MediumTag, specfem::data_access::DataClassType::displacement, UseSIMD >, specfem::point::impl::field< DimensionTag, MediumTag, specfem::data_access::DataClassType::acceleration, UseSIMD >, specfem::point::impl::field< DimensionTag, MediumTag, DataClass, UseSIMD >

Public Types

template<typename T>
using simd = specfem::datatype::simd<T, UseSIMD>

Datatype used to store data with optional SIMD vectorization.

Template Parameters:

T – Base data type

template<typename T, int N = -1>
using scalar_type = typename impl::scalar_type_helper<T, N, UseSIMD>::type

Scalar field storage for single point.

With the default N=-1 returns a single SIMD scalar (simd<T>::datatype). With an explicit N returns a fixed-size array of N SIMD scalars (VectorPointViewType<T, N, UseSIMD>), useful for per-SLS-mechanism arrays.

Template Parameters:
  • T – Base data type

  • N – Array size; -1 (default) means a single scalar

template<typename T, int dimension>
using vector_type = typename specfem::datatype::VectorPointViewType<T, dimension, UseSIMD>

Vector field storage for single point.

Template Parameters:
  • T – Base data type

  • dimension – Vector dimension (2D/3D)

template<typename T, int components, int dimension>
using tensor_type = typename specfem::datatype::TensorPointViewType<T, components, dimension, UseSIMD>

Tensor field storage for single point.

Template Parameters:
  • T – Base data type

  • components – Number of tensor components

  • dimension – Spatial dimension

Public Static Attributes

static constexpr auto accessor_type = specfem::datatype::AccessorType::point

Accessor pattern identifier.

static constexpr auto data_class = DataClass

Data classification type.

static constexpr auto dimension_tag = DimensionTag

Spatial dimension.

static constexpr bool using_simd = UseSIMD

SIMD vectorization flag.

template<specfem::data_access::DataClassType DataClass, specfem::element::dimension_tag DimensionTag, bool UseSIMD>
struct Accessor<specfem::datatype::AccessorType::chunk_edge, DataClass, DimensionTag, UseSIMD>

Chunk-based edge accessor for vectorized interface operations.

Provides SIMD-optimized data access for edge/interface computations. Uses scratch memory for efficient chunked processing of edge data with configurable vectorization.

Template Parameters:
  • DataClass – Type of edge data (intersection factors, normals, etc.)

  • DimensionTag – Spatial dimension (2D/3D)

  • UseSIMD – Enable SIMD vectorization

Subclassed by specfem::chunk_edge::impl::field< ChunkSize, NGLL, DimensionTag, MediumTag, specfem::data_access::DataClassType::acceleration, UseSIMD >, specfem::chunk_edge::impl::field< ChunkSize, NGLL, DimensionTag, MediumTag, specfem::data_access::DataClassType::displacement, UseSIMD >, specfem::chunk_edge::impl::field< ChunkSize, NGLL, DimensionTag, MediumTag, specfem::data_access::DataClassType::velocity, UseSIMD >, specfem::chunk_edge::impl::field< ChunkSize, NGLL, DimensionTag, MediumTag, DataClass, UseSIMD >

Public Types

template<typename T>
using simd = specfem::datatype::simd<T, UseSIMD>

Datatype used to store data with optional SIMD vectorization.

Template Parameters:

T – Base data type

template<typename T, int nelements, int ngll>
using scalar_type = Kokkos::View<typename simd<T>::datatype[nelements][ngll], Kokkos::DefaultExecutionSpace::scratch_memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged>>

Scalar field storage for chunked edge elements.

Template Parameters:
  • T – Base data type

  • nelements – Number of elements in the chunk

  • ngll – Number of GLL points per element

template<typename T, int nelements, int ngll, int components>
using vector_type = Kokkos::View<typename simd<T>::datatype[nelements][ngll][components], Kokkos::DefaultExecutionSpace::scratch_memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged>>

Vector field storage for chunked edge elements.

Template Parameters:
  • T – Base data type

  • nelements – Number of elements in the chunk

  • ngll – Number of GLL points per element

  • components – Number of vector components

template<typename T, int nelements, int ngll, int components, int dimension>
using tensor_type = Kokkos::View<typename simd<T>::datatype[nelements][ngll][components][dimension], Kokkos::DefaultExecutionSpace::scratch_memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged>>

Tensor field storage for chunked edge elements.

Template Parameters:
  • T – Base data type

  • nelements – Number of elements in the chunk

  • ngll – Number of GLL points per element

  • components – Number of tensor components

  • dimension – Spatial dimension

Public Static Attributes

static constexpr auto accessor_type = specfem::datatype::AccessorType::chunk_edge

Accessor pattern identifier.

static constexpr auto data_class = DataClass

Data classification type.

static constexpr auto dimension_tag = DimensionTag

Spatial dimension.

static constexpr bool using_simd = UseSIMD

SIMD vectorization flag.

template<specfem::data_access::DataClassType DataClass, specfem::element::dimension_tag DimensionTag, bool UseSIMD>
struct Accessor<specfem::datatype::AccessorType::chunk_element, DataClass, DimensionTag, UseSIMD>

Chunk-based element accessor for vectorized domain operations.

Provides SIMD-optimized data access for element-wise computations. Uses specialized view types for efficient chunked processing of element data with configurable vectorization.

Template Parameters:
  • DataClass – Type of element data (properties, fields, etc.)

  • DimensionTag – Spatial dimension (2D/3D)

  • UseSIMD – Enable SIMD vectorization

Subclassed by specfem::chunk_element::impl::field< ChunkSize, NGLL, DimensionTag, MediumTag, DataClass, UseSIMD >

Public Types

template<typename T>
using simd = specfem::datatype::simd<T, UseSIMD>

Datatype used to store data with optional SIMD vectorization.

Template Parameters:

T – Base data type

template<typename T, int nelements, int ngll>
using scalar_type = specfem::datatype::ScalarChunkElementViewType<T, DimensionTag, nelements, ngll, UseSIMD>

Scalar field storage for chunked elements.

Template Parameters:
  • T – Base data type

  • nelements – Number of elements in the chunk

  • ngll – Number of GLL points per element dimension

template<typename T, int nelements, int ngll, int components>
using vector_type = specfem::datatype::VectorChunkElementViewType<T, DimensionTag, nelements, ngll, components, UseSIMD>

Vector field storage for chunked elements.

Template Parameters:
  • T – Base data type

  • nelements – Number of elements in the chunk

  • ngll – Number of GLL points per element dimension

  • components – Number of vector components

template<typename T, int nelements, int ngll, int components, int dimension>
using tensor_type = specfem::datatype::TensorChunkElementViewType<T, DimensionTag, nelements, ngll, components, dimension, UseSIMD>

Tensor field storage for chunked elements.

Template Parameters:
  • T – Base data type

  • nelements – Number of elements in the chunk

  • ngll – Number of GLL points per element dimension

  • components – Number of tensor components

  • dimension – Spatial dimension

Public Static Attributes

static constexpr auto accessor_type = specfem::datatype::AccessorType::chunk_element

Accessor pattern identifier.

static constexpr auto data_class = DataClass

Data classification type.

static constexpr auto dimension_tag = DimensionTag

Spatial dimension.

static constexpr bool using_simd = UseSIMD

SIMD vectorization flag.