|
|
using | Base = ParticleSpatialLayout< T, Dim, Mesh, PositionProperties... > |
| |
|
using | size_type = detail::size_type |
| |
|
using | index_t = typename hash_type::value_type |
| |
|
using | particle_neighbor_list_type = hash_type |
| |
|
using | neighbor_list = typename FieldLayout_t::neighbor_list |
| | Array of N rank lists, where N = number of hypercubes for the dimension Dim.
|
| |
|
using | locate_type_nd = Kokkos::View< index_t *[1<< Dim], position_memory_space > |
| |
|
using | bool_type = typename detail::ViewType< bool, 1, position_memory_space >::view_type |
| |
|
using | hash_type = detail::hash_type< position_memory_space > |
| |
|
using | locate_type = typename detail::ViewType< int, 1, position_memory_space >::view_type |
| |
|
using | FieldLayout_t = typename ippl::FieldLayout< Dim > |
| |
|
using | RegionLayout_t = typename detail::RegionLayout< T, Dim, Mesh, position_memory_space >::uniform_type |
| |
|
using | vector_type = typename Base::vector_type |
| |
|
using | region_view_type = typename RegionLayout_t::view_type |
| | Type of the Kokkos view containing the local regions.
|
| |
|
using | region_type = typename region_view_type::value_type |
| | Type of a single Region object.
|
| |
Public Types inherited from ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties > |
|
using | Base = detail::ParticleLayout< T, Dim, PositionProperties... > |
| |
|
using | hash_type = detail::hash_type< position_memory_space > |
| |
|
using | locate_type = typename detail::ViewType< int, 1, position_memory_space >::view_type |
| |
|
using | bool_type = typename detail::ViewType< bool, 1, position_memory_space >::view_type |
| |
|
using | vector_type = typename Base::vector_type |
| |
|
using | RegionLayout_t = typename detail::RegionLayout< T, Dim, Mesh, position_memory_space >::uniform_type |
| |
|
using | FieldLayout_t = typename ippl::FieldLayout< Dim > |
| |
|
using | size_type = detail::size_type |
| |
Public Types inherited from ippl::detail::ParticleLayout< T, Dim, PositionProperties... > |
|
typedef T | value_type |
| |
|
typedef std::int64_t | index_type |
| |
|
typedef Vector< T, Dim > | vector_type |
| |
|
using | particle_position_type = ParticleAttrib< vector_type, PositionProperties... > |
| |
|
using | position_memory_space = typename particle_position_type::memory_space |
| |
|
using | position_execution_space = typename particle_position_type::execution_space |
| |
|
typedef std::array< BC, 2 *Dim > | bc_container_type |
| |
|
| | ParticleSpatialOverlapLayout (FieldLayout< Dim > &fl, Mesh &mesh, const T &rcutoff) |
| |
|
void | updateLayout (FieldLayout< Dim > &, Mesh &) |
| |
| template<class ParticleContainer > |
| void | update (ParticleContainer &pc) |
| | updates particles by exchanging them across ranks according to their positions. then constructs the particle neighbor list structure
|
| |
| template<typename ExecutionSpace , typename Functor > |
| void | forEachPair (Functor &&f) const |
| | call functor for each combination i, j. make sure to call update first
|
| |
| ParticleNeighborData | getParticleNeighborData () const |
| |
| size_type | numberOfSends (int rank, const locate_type &ranks) |
| | utility function to compute how many particles to sent to a given rank
|
| |
| void | fillHash (int rank, const locate_type &ranks, const locate_type &offsets, hash_type &hash) |
| | utility function to collect all indices of particles to send to given rank
|
| |
| template<typename ParticleContainer > |
| std::pair< detail::size_type, detail::size_type > | locateParticles (const ParticleContainer &pc, locate_type &ranks, locate_type &rankOffsets, bool_type &invalid, locate_type &nSends_dview, locate_type &sends_dview) const |
| | This function determines to which rank particles need to be sent after the iteration step. It starts by first scanning direct rank neighbors, and only does a global scan if particles are far away from the current rank. It then calculates how many particles need to be sent to each rank and how many ranks are sent to in total.
|
| |
| locate_type | getFlatNeighbors (const neighbor_list &neighbors) const |
| | utility function to get a flat view of all neighbor processes
|
| |
| locate_type | getNonNeighborRanks (const locate_type &neighbors_view) const |
| | utility function to get a view of all non-neighboring ranks
|
| |
|
void | initializeCells () |
| | initializes all data necessary for the cells
|
| |
| template<class ParticleContainer > |
| void | particleExchange (ParticleContainer &pc) |
| | exchange particles by scanning neighbor ranks first, only scan other ranks if needed. assumes overlap is smaller than half the smallest region width.
|
| |
| template<class ParticleContainer > |
| void | buildCells (ParticleContainer &pc) |
| | builds the cell structure, sorts the particles according to the cells and makes sure only local particles are counted towards pc.getLocalNum()
|
| |
| template<class ParticleContainer > |
| void | createPeriodicGhostParticles (ParticleContainer &pc) |
| | copies particles close to the boundary and offsets them to their closest periodic image
|
| |
|
template<std::size_t... Idx> |
| KOKKOS_INLINE_FUNCTION constexpr bool | isCloseToBoundary (const std::index_sequence< Idx... > &, const vector_type &pos, const region_type &globalRegion, Kokkos::Array< bool, Dim > periodic, T overlap) |
| |
|
template<std::size_t... Idx> |
| KOKKOS_INLINE_FUNCTION constexpr bool | positionInRegion (const std::index_sequence< Idx... > &, const vector_type &pos, const region_type ®ion, T overlap) |
| |
|
template<std::size_t... Idx> |
| constexpr bool | isLocalCellIndex (const std::index_sequence< Idx... > &, const CellIndex_t &index, const Vector< size_type, Dim > &numCells) |
| |
Public Member Functions inherited from ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties > |
|
| ParticleSpatialLayout (FieldLayout< Dim > &, Mesh &, bool fem=false) |
| |
|
void | updateLayout (FieldLayout< Dim > &, Mesh &) |
| |
|
template<class ParticleContainer > |
| void | update (ParticleContainer &pc) |
| |
|
const RegionLayout_t & | getRegionLayout () const |
| |
| template<typename ParticleContainer > |
| std::pair< size_type, size_type > | locateParticles (const ParticleContainer &pc, locate_type &ranks, bool_type &invalid, locate_type &nSends_dview, locate_type &sends_dview) const |
| |
| void | fillHash (int rank, const locate_type &ranks, hash_type &hash) |
| |
| size_t | numberOfSends (int rank, const locate_type &ranks) |
| |
|
template<size_t... Idx> |
| KOKKOS_INLINE_FUNCTION constexpr bool | positionInRegion (const std::index_sequence< Idx... > &, const vector_type &pos, const region_type ®ion) |
| |
| template<typename ParticleContainer > |
| std::pair< detail::size_type, detail::size_type > | locateParticles (const ParticleContainer &pc, locate_type &ranks, bool_type &invalid, locate_type &nSends_dview, locate_type &sends_dview) const |
| | This function determines to which rank particles need to be sent after the iteration step. It starts by first scanning direct rank neighbors, and only does a global scan if there are still unfound particles. It then calculates how many particles need to be sent to each rank and how many ranks are sent to in total.
|
| |
Public Member Functions inherited from ippl::detail::ParticleLayout< T, Dim, PositionProperties... > |
|
void | update (PBase &) |
| |
| void | setParticleBC (bc_container_type bcs) |
| |
| void | setParticleBC (BC bc) |
| |
| const bc_container_type & | getParticleBC () const |
| |
| void | applyBC (const particle_position_type &R, const NDRegion< T, Dim > &nr) |
| |
|
| template<std::size_t... Idx> |
| KOKKOS_INLINE_FUNCTION static constexpr bool | isCloseToBoundary (const std::index_sequence< Idx... > &, const vector_type &pos, const region_type ®ion, Kokkos::Array< bool, Dim > periodic, T overlap) |
| | determines whether a position is within overlap to the boundary of a region
|
| |
| KOKKOS_INLINE_FUNCTION static constexpr FlatCellIndex_t | toFlatCellIndex (const CellIndex_t &cellIndex, const Vector< size_type, Dim > &cellStrides, hash_type cellPermutationForward) |
| | convert a nd-cell-index to flat cell index
|
| |
| KOKKOS_INLINE_FUNCTION static constexpr CellIndex_t | toCellIndex (FlatCellIndex_t nonPermutedIndex, const Vector< size_type, Dim > &numCells) |
| | compute the nd-cell-index from a flattened (non-permuted) index
|
| |
| template<std::size_t... Idx> |
| KOKKOS_INLINE_FUNCTION static constexpr bool | isLocalCellIndex (const std::index_sequence< Idx... > &, const CellIndex_t &index, const Vector< size_type, Dim > &numCells) |
| | determines whether cell index is local cell index
|
| |
| template<std::size_t... Idx> |
| KOKKOS_INLINE_FUNCTION static constexpr bool | positionInRegion (const std::index_sequence< Idx... > &, const vector_type &pos, const region_type ®ion, T overlap) |
| | determines whether a position is in a region including its overlap
|
| |
| KOKKOS_INLINE_FUNCTION static constexpr CellIndex_t | getCellIndex (const vector_type &pos, const region_type ®ion, const Vector< T, Dim > &cellWidth) |
| | get the nd-cell-index of a position
|
| |
| KOKKOS_INLINE_FUNCTION static constexpr cell_particle_neighbor_list_type | getCellNeighbors (const CellIndex_t &cellIndex, const Vector< size_type, Dim > &cellStrides, const hash_type &cellPermutationForward) |
| | get all indices of cell neighbors of a given nd-cell-index
|
| |
Static Protected Member Functions inherited from ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties > |
|
template<size_t... Idx> |
| KOKKOS_INLINE_FUNCTION static constexpr bool | positionInRegion (const std::index_sequence< Idx... > &, const vector_type &pos, const region_type ®ion) |
| |
|
|
const T | rcutoff_m |
| | ! overlap in each dimension
|
| |
|
Vector< size_type, Dim > | numCells_m |
| | ! number of cells in each dimension
|
| |
|
Vector< size_type, Dim > | cellStrides_m |
| | ! strides to compute cell indices
|
| |
|
Vector< T, Dim > | cellWidth_m |
| | ! width of cells in each dimension
|
| |
|
size_type | totalCells_m |
| | ! the number of total cells
|
| |
|
size_type | numGhostCells_m |
| | ! the number of interior cells
|
| |
|
size_type | numLocalCells_m |
| | ! the number of ghost cells
|
| |
|
size_type | numLocalParticles_m |
| | ! the number of local particles (particles in local cells)
|
| |
| hash_type | cellPermutationForward_m |
| |
|
hash_type | cellPermutationBackward_m |
| | ! the inverse of cellPermutationForward_m
|
| |
|
hash_type | cellStartingIdx_m |
| | ! cell i contains particles cellStartingIdx_m(i), ..., cellStartingIdx_m(i + 1) - 1
|
| |
| hash_type | cellIndex_m |
| |
|
hash_type | cellParticleCount_m |
| | ! view of number of particles in each cell
|
| |
Protected Attributes inherited from ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties > |
|
RegionLayout_t | rlayout_m |
| | The RegionLayout which determines where our particles go.
|
| |
|
FieldLayout_t & | flayout_m |
| | The FieldLayout containing information on nearest neighbors.
|
| |
|
std::vector< size_type > | nRecvs_m |
| |
|
mpi::rma::Window< mpi::rma::Active > | window_m |
| |
template<typename T, unsigned Dim, class
Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
class ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >
ParticleSpatialOverlapLayout class definition.
- Template Parameters
-
| T | value type |
| Dim | dimension |
| Mesh | type |
template<typename T , unsigned Dim, class
Mesh , typename... Properties>
template<typename ParticleContainer >
| std::pair< detail::size_type, detail::size_type > ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::locateParticles |
( |
const ParticleContainer & |
pc, |
|
|
locate_type & |
ranks, |
|
|
locate_type & |
rankOffsets, |
|
|
bool_type & |
invalid, |
|
|
locate_type & |
nSends_dview, |
|
|
locate_type & |
sends_dview |
|
) |
| const |
This function determines to which rank particles need to be sent after the iteration step. It starts by first scanning direct rank neighbors, and only does a global scan if particles are far away from the current rank. It then calculates how many particles need to be sent to each rank and how many ranks are sent to in total.
- Parameters
-
| pc | Particle Container |
| ranks | A vector where each value refers to the new rank of the particle which rank values correspond to which particles is determined by rankOffsets |
| rankOffsets | A vector of offsets where rankOffset(i) determines where the ranks of particle i in ranks start. |
| invalid | A vector marking the particles that need to be sent away, and thus locally deleted |
| nSends_dview | Device view the length of number of ranks, where each value determines the number of particles sent to that rank from the current rank |
| sends_dview | Device view for the number of ranks that are sent to from current rank |
- Returns
- tuple with the number of particles sent away and the number of ranks sent to
outsideIds: Container of particle IDs that travelled outside of the neighborhood. counts: count assignments per particle
outsideCount: Tracks the number of particles that travelled outside of the neighborhood.
invalidCount: Tracks the number of particles that need to be sent to other ranks.
neighbors_view: Kokkos view with the IDs of the neighboring MPI ranks.
Begin Kokkos loop: Step 1: search in current rank Step 2: search in neighbors Step 3: save information on whether the particle was located Step 4: run additional loop on non-located particles
Step 4
pID: (local) ID of the particle that is currently being searched.
inRegion: Checks whether particle pID is inside region j.
pID: (local) ID of the particle that is currently being searched.