OpenPFC  0.1.4
Phase Field Crystal simulation framework
Loading...
Searching...
No Matches
sparse_vector_ops.hpp File Reference

Operations on SparseVector: gather and scatter. More...

#include <initializer_list>
#include <vector>
#include <openpfc/core/backend_tags.hpp>
#include <openpfc/core/sparse_vector.hpp>
Include dependency graph for sparse_vector_ops.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

template<typename BackendTag , typename T >
void pfc::core::gather (SparseVector< BackendTag, T > &sparse_vector, const T *source, size_t source_size)
 Gather: Collect values from dense array into SparseVector.
 
template<typename T >
void pfc::core::gather (core::SparseVector< backend::CpuTag, T > &sparse_vector, const std::vector< T > &source)
 Gather from std::vector (convenience overload for CPU)
 
template<typename T >
void pfc::core::gather (core::SparseVector< backend::CpuTag, T > &sparse_vector, std::initializer_list< T > source)
 Gather from initializer list (convenience overload for CPU)
 
template<typename BackendTag , typename T >
void pfc::core::scatter (const SparseVector< BackendTag, T > &sparse_vector, T *dest, size_t dest_size)
 Scatter: Write values from SparseVector into dense array.
 
template<typename T >
void pfc::core::scatter (const core::SparseVector< backend::CpuTag, T > &sparse_vector, std::vector< T > &dest)
 Scatter to std::vector (convenience overload for CPU)
 

Detailed Description

Operations on SparseVector: gather and scatter.

Provides gather and scatter operations for SparseVector:

  • gather: Collect values from dense array into SparseVector Direction: DenseArray → SparseVector
  • scatter: Write values from SparseVector into dense array Direction: SparseVector → DenseArray
// Gather: Extract values at indices from source
std::vector<double> source = {1.0, 2.0, 3.0, 4.0, 5.0};
auto sparse = sparsevector::create<double>({0, 2, 4});
gather(sparse, source.data(), source.size());
// sparse.data() now contains {1.0, 3.0, 5.0}
// Scatter: Write values to destination at indices
std::vector<double> dest(5, 0.0);
scatter(sparse, dest.data(), dest.size());
// dest now contains {1.0, 0.0, 3.0, 0.0, 5.0}
void gather(SparseVector< BackendTag, T > &sparse_vector, const T *source, size_t source_size)
Gather: Collect values from dense array into SparseVector.
Definition sparse_vector_ops.hpp:64
void scatter(const SparseVector< BackendTag, T > &sparse_vector, T *dest, size_t dest_size)
Scatter: Write values from SparseVector into dense array.
Definition sparse_vector_ops.hpp:123
See also
core/sparse_vector.hpp for SparseVector definition
Author
OpenPFC Development Team
Date
2025

Function Documentation

◆ gather()

template<typename BackendTag , typename T >
void pfc::core::gather ( SparseVector< BackendTag, T > &  sparse_vector,
const T *  source,
size_t  source_size 
)

Gather: Collect values from dense array into SparseVector.

Reads values from dense array at sparse_vector.indices and writes to sparse_vector.data.

Direction: DenseArray → SparseVector

Parameters
sparse_vectorSparseVector to fill
sourcePointer to dense array
source_sizeSize of dense array
Here is the call graph for this function:
Here is the caller graph for this function:

◆ scatter()

template<typename BackendTag , typename T >
void pfc::core::scatter ( const SparseVector< BackendTag, T > &  sparse_vector,
T *  dest,
size_t  dest_size 
)

Scatter: Write values from SparseVector into dense array.

Writes values from sparse_vector.data into dense array at sparse_vector.indices.

Direction: SparseVector → DenseArray

Parameters
sparse_vectorSparseVector to read from
destPointer to dense array
dest_sizeSize of dense array
Here is the call graph for this function:
Here is the caller graph for this function: