IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties > Class Template Reference

#include <ParticleSpatialOverlapLayout.h>

Inheritance diagram for ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >:
Collaboration diagram for ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >:

Classes

class  ParticleNeighborData

Public Types

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 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
using FieldLayout_t = typename ippl::FieldLayout<Dim>
typedef T value_type
typedef std::int64_t index_type
using particle_position_type
using position_memory_space
using position_execution_space
typedef std::array< BC, 2 *Dimbc_container_type

Public Member Functions

 ParticleSpatialOverlapLayout (FieldLayout< Dim > &fl, Mesh &mesh, const T &rcutoff)
 ParticleSpatialOverlapLayout ()
 ~ParticleSpatialOverlapLayout ()=default
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_typelocateParticles (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, Vector< 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 &region, 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)
void update (PBase &)
const RegionLayout_tgetRegionLayout () const
template<typename ParticleContainer>
std::pair< size_type, size_typelocateParticles (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)
void setParticleBC (bc_container_type bcs)
void setParticleBC (BC bc)
const bc_container_typegetParticleBC () const
void applyBC (const particle_position_type &R, const NDRegion< T, Dim > &nr)

Static Public Member Functions

static KOKKOS_FUNCTION particle_neighbor_list_type getParticleNeighbors (index_t particleIndex, const ParticleNeighborData &particleNeighborData)
 Function to get particle neighbors depending on index (possible inside Kokkos parallel region) make sure to call update first.
static KOKKOS_FUNCTION particle_neighbor_list_type getParticleNeighbors (const vector_type &pos, const ParticleNeighborData &particleNeighborData)
 Function to get particle neighbors depending on position (possible inside Kokkos parallel region) make sure to call update first.

Static Public Attributes

static constexpr unsigned dim

Protected Types

using CellIndex_t = Vector<size_type, Dim>
using FlatCellIndex_t = typename CellIndex_t::value_type
using cell_particle_neighbor_list_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.

Protected Member Functions

size_type getNeighborSize (const neighbor_list &neighbors) const

Static Protected Member Functions

template<std::size_t... Idx>
KOKKOS_INLINE_FUNCTION static constexpr bool isCloseToBoundary (const std::index_sequence< Idx... > &, const vector_type &pos, const region_type &region, Vector< 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)
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 &region, 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 &region, 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
template<size_t... Idx>
KOKKOS_INLINE_FUNCTION static constexpr bool positionInRegion (const std::index_sequence< Idx... > &, const vector_type &pos, const region_type &region)

Protected Attributes

const T rcutoff_m
 ! overlap in each dimension
Vector< size_type, DimnumCells_m
 ! number of cells in each dimension
Vector< size_type, DimcellStrides_m
 ! strides to compute cell indices
Vector< T, DimcellWidth_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
RegionLayout_t rlayout_m
 The RegionLayout which determines where our particles go.
FieldLayout_tflayout_m
 The FieldLayout containing information on nearest neighbors.
std::vector< size_typenRecvs_m
mpi::rma::Window< mpi::rma::Activewindow_m

Static Protected Attributes

static constexpr size_type numGhostCellsPerDim_m = 1
 ! number of ghost cells

Private Attributes

bc_container_type bcs_m
 the list of boundary conditions for this set of particles

Detailed Description

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
class ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >

ParticleSpatialOverlapLayout class definition.

Template Parameters
Tvalue type
Dimdimension
Meshtype

Definition at line 39 of file ParticleSpatialOverlapLayout.h.

Member Typedef Documentation

◆ Base

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::Base = ParticleSpatialLayout<T, Dim, Mesh, PositionProperties...>

Definition at line 42 of file ParticleSpatialOverlapLayout.h.

◆ bc_container_type

typedef std::array<BC, 2 * Dim> ippl::detail::ParticleLayout< T, Dim, PositionProperties >::bc_container_type
inherited

Definition at line 54 of file ParticleLayout.h.

◆ bool_type

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::bool_type = typename detail::ViewType<bool, 1, position_memory_space>::view_type
inherited

Definition at line 53 of file ParticleSpatialLayout.h.

◆ cell_particle_neighbor_list_type

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::cell_particle_neighbor_list_type
protected
Initial value:

Definition at line 355 of file ParticleSpatialOverlapLayout.h.

◆ CellIndex_t

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::CellIndex_t = Vector<size_type, Dim>
protected

Definition at line 261 of file ParticleSpatialOverlapLayout.h.

◆ FieldLayout_t

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::FieldLayout_t = typename ippl::FieldLayout<Dim>
inherited

Definition at line 58 of file ParticleSpatialLayout.h.

◆ FlatCellIndex_t

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::FlatCellIndex_t = typename CellIndex_t::value_type
protected

Definition at line 262 of file ParticleSpatialOverlapLayout.h.

◆ hash_type

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::hash_type = detail::hash_type<position_memory_space>
inherited

Definition at line 51 of file ParticleSpatialLayout.h.

◆ index_t

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::index_t = typename hash_type::value_type

Definition at line 56 of file ParticleSpatialOverlapLayout.h.

◆ index_type

typedef std::int64_t ippl::detail::ParticleLayout< T, Dim, PositionProperties >::index_type
inherited

Definition at line 47 of file ParticleLayout.h.

◆ locate_type

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::locate_type = typename detail::ViewType<int, 1, position_memory_space>::view_type
inherited

Definition at line 52 of file ParticleSpatialLayout.h.

◆ locate_type_nd

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::locate_type_nd = Kokkos::View<index_t * [1 << Dim], position_memory_space>

Definition at line 69 of file ParticleSpatialOverlapLayout.h.

◆ neighbor_list

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::neighbor_list = typename FieldLayout_t::neighbor_list

Array of N rank lists, where N = number of hypercubes for the dimension Dim.

Definition at line 65 of file ParticleSpatialOverlapLayout.h.

◆ particle_neighbor_list_type

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::particle_neighbor_list_type = hash_type

Definition at line 57 of file ParticleSpatialOverlapLayout.h.

◆ particle_position_type

using ippl::detail::ParticleLayout< T, Dim, PositionProperties >::particle_position_type
inherited

Definition at line 50 of file ParticleLayout.h.

◆ position_execution_space

using ippl::detail::ParticleLayout< T, Dim, PositionProperties >::position_execution_space
inherited

Definition at line 52 of file ParticleLayout.h.

◆ position_memory_space

using ippl::detail::ParticleLayout< T, Dim, PositionProperties >::position_memory_space
inherited

Definition at line 51 of file ParticleLayout.h.

◆ region_type

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::region_type = typename region_view_type::value_type
protectedinherited

Type of a single Region object.

Definition at line 95 of file ParticleSpatialLayout.h.

◆ region_view_type

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::region_view_type = typename RegionLayout_t::view_type
protectedinherited

Type of the Kokkos view containing the local regions.

Definition at line 93 of file ParticleSpatialLayout.h.

◆ RegionLayout_t

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::RegionLayout_t
inherited
Initial value:

Definition at line 56 of file ParticleSpatialLayout.h.

◆ size_type

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::size_type = detail::size_type

Definition at line 54 of file ParticleSpatialOverlapLayout.h.

◆ value_type

typedef T ippl::detail::ParticleLayout< T, Dim, PositionProperties >::value_type
inherited

Definition at line 46 of file ParticleLayout.h.

◆ vector_type

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
using ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::vector_type = typename Base::vector_type
inherited

Definition at line 55 of file ParticleSpatialLayout.h.

Constructor & Destructor Documentation

◆ ParticleSpatialOverlapLayout() [1/2]

template<typename T, unsigned Dim, class Mesh, typename... Properties>
ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::ParticleSpatialOverlapLayout ( FieldLayout< Dim > & fl,
Mesh & mesh,
const T & rcutoff )
Parameters
flField layout
meshMesh
rcutoffOverlap of the regions in each dimension

Definition at line 27 of file ParticleSpatialOverlapLayout.hpp.

References initializeCells(), numLocalParticles_m, and rcutoff_m.

Here is the call graph for this function:

◆ ParticleSpatialOverlapLayout() [2/2]

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::ParticleSpatialOverlapLayout ( )
inline

Definition at line 115 of file ParticleSpatialOverlapLayout.h.

References Dim, and ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::ParticleSpatialLayout().

Here is the call graph for this function:

◆ ~ParticleSpatialOverlapLayout()

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::~ParticleSpatialOverlapLayout ( )
default

Member Function Documentation

◆ applyBC()

void ippl::detail::ParticleLayout< T, Dim, PositionProperties >::applyBC ( const particle_position_type & R,
const NDRegion< T, Dim > & nr )
inherited

Apply the given boundary conditions to the current particle positions.

Template Parameters
Ris the particle position attribute
nris the NDRegion
Parameters

Referenced by ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::particleExchange(), and ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::update().

Here is the caller graph for this function:

◆ buildCells()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
template<class ParticleContainer>
void ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::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()

Parameters
pcparticle container of which to sort the particles

Definition at line 826 of file ParticleSpatialOverlapLayout.hpp.

References cellIndex_m, cellParticleCount_m, cellPermutationForward_m, cellStartingIdx_m, cellStrides_m, cellWidth_m, ippl::Comm, getCellIndex(), ippl::ParticleBase< PLayout, IDProperties >::getLocalNum(), IpplTimings::getTimer(), numLocalCells_m, numLocalParticles_m, ippl::ParticleBase< PLayout, IDProperties >::R, ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::rlayout_m, ippl::ParticleBase< PLayout, IDProperties >::setLocalNum(), ippl::detail::sortParticles(), IpplTimings::startTimer(), IpplTimings::stopTimer(), toFlatCellIndex(), and totalCells_m.

Referenced by update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ createPeriodicGhostParticles()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
template<class ParticleContainer>
void ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::createPeriodicGhostParticles ( ParticleContainer & pc)

copies particles close to the boundary and offsets them to their closest periodic image

Parameters
pcparticle container of which to construct periodic ghost particles

Definition at line 174 of file ParticleSpatialOverlapLayout.hpp.

References ippl::detail::copyAttributes(), Dim, ippl::ParticleBase< PLayout, IDProperties >::getLocalNum(), ippl::detail::ParticleLayout< T, Dim, PositionProperties... >::getParticleBC(), IpplTimings::getTimer(), isCloseToBoundary(), ippl::min(), ippl::periodic, ippl::ParticleBase< PLayout, IDProperties >::R, rcutoff_m, ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::rlayout_m, IpplTimings::startTimer(), and IpplTimings::stopTimer().

Referenced by particleExchange().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fillHash() [1/2]

template<typename T, unsigned Dim, class Mesh, typename... Properties>
void ippl::ParticleSpatialLayout< T, Dim, Mesh, Properties >::fillHash ( int rank,
const locate_type & ranks,
hash_type & hash )
inherited
Parameters
rankwe sent to
ranksa container specifying where a particle at the i-th index should go.
hasha mapping to fill the send buffer contiguously

Definition at line 437 of file ParticleSpatialLayout.hpp.

◆ fillHash() [2/2]

template<typename T, unsigned Dim, class Mesh, typename... Properties>
void ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::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

Parameters
rankrank to send to
ranksThe view containing which rank each particle belongs to
offsetsThe offsets to determine where the ranks of a particle start in ranks
hashthe view containing all particle indices to send

Definition at line 435 of file ParticleSpatialOverlapLayout.hpp.

Referenced by particleExchange().

Here is the caller graph for this function:

◆ forEachPair()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
template<typename ExecutionSpace, typename Functor>
void ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::forEachPair ( Functor && f) const

call functor for each combination i, j. make sure to call update first

Template Parameters
ExecutionSpaceSpace in which to generate all indices
Functortype of loop body
Parameters
floop body functor to call for all pair of indices i, j where i are all internal particle indices and j include ghost particles

Definition at line 1061 of file ParticleSpatialOverlapLayout.hpp.

References cellParticleCount_m, cellPermutationBackward_m, cellPermutationForward_m, cellStartingIdx_m, cellStrides_m, ippl::detail::countHypercubes(), Dim, getCellNeighbors(), IpplTimings::getTimer(), numCells_m, numLocalCells_m, IpplTimings::startTimer(), IpplTimings::stopTimer(), and toCellIndex().

Here is the call graph for this function:

◆ getCellIndex()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
KOKKOS_INLINE_FUNCTION constexpr ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties... >::CellIndex_t ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::getCellIndex ( const vector_type & pos,
const region_type & region,
const Vector< T, Dim > & cellWidth )
staticconstexprprotected

get the nd-cell-index of a position

Parameters
posposition to get the cell index for
regionregion of the cells
cellWidthin each dimension

Definition at line 784 of file ParticleSpatialOverlapLayout.hpp.

References Dim, ippl::min(), and numGhostCellsPerDim_m.

Referenced by buildCells(), and getParticleNeighbors().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getCellNeighbors()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
KOKKOS_INLINE_FUNCTION constexpr ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties... >::cell_particle_neighbor_list_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::getCellNeighbors ( const CellIndex_t & cellIndex,
const Vector< size_type, Dim > & cellStrides,
const hash_type & cellPermutationForward )
staticconstexprprotected

get all indices of cell neighbors of a given nd-cell-index

Parameters
cellIndexto get the neighbors from
cellStridesin each dimension
cellPermutationForwardthe permutation to apply to all neighbors

Definition at line 924 of file ParticleSpatialOverlapLayout.hpp.

References ippl::detail::countHypercubes(), Dim, and toFlatCellIndex().

Referenced by forEachPair(), getParticleNeighbors(), and getParticleNeighbors().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getFlatNeighbors()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties... >::locate_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::getFlatNeighbors ( const neighbor_list & neighbors) const

utility function to get a flat view of all neighbor processes

Parameters
neighborsFieldLayouts neighbor_list
Returns
view of neighbor ranks

Definition at line 472 of file ParticleSpatialOverlapLayout.hpp.

Referenced by locateParticles().

Here is the caller graph for this function:

◆ getNeighborSize()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
detail::size_type ippl::ParticleSpatialLayout< T, Dim, Mesh, Properties >::getNeighborSize ( const neighbor_list & neighbors) const
protectedinherited

Evaluates the total number of MPI ranks sharing the spatial nearest neighbors.

Parameters
neighborsstructure containing, for every spatial direction, a list of MPI ranks IDs corresponding to the nearest neighbors of the current local domain section.
Returns
The total number of the ranks.

Definition at line 245 of file ParticleSpatialLayout.hpp.

◆ getNonNeighborRanks()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties... >::locate_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::getNonNeighborRanks ( const locate_type & neighbors_view) const

utility function to get a view of all non-neighboring ranks

Parameters
neighbors_viewview of all neighboring ranks
Returns
view of all non-neighboring ranks

Definition at line 503 of file ParticleSpatialOverlapLayout.hpp.

References ippl::Comm.

Referenced by locateParticles().

Here is the caller graph for this function:

◆ getParticleBC()

const bc_container_type & ippl::detail::ParticleLayout< T, Dim, PositionProperties >::getParticleBC ( ) const
inlineinherited

Copy over the given boundary conditions.

Parameters
bcsare the boundary conditions

Definition at line 79 of file ParticleLayout.h.

References bcs_m.

Referenced by ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::createPeriodicGhostParticles().

Here is the caller graph for this function:

◆ getParticleNeighborData()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties... >::ParticleNeighborData ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::getParticleNeighborData ( ) const

◆ getParticleNeighbors() [1/2]

template<typename T, unsigned Dim, class Mesh, typename... Properties>
KOKKOS_FUNCTION ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties... >::particle_neighbor_list_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::getParticleNeighbors ( const vector_type & pos,
const ParticleNeighborData & particleNeighborData )
static

Function to get particle neighbors depending on position (possible inside Kokkos parallel region) make sure to call update first.

Parameters
posposition of particle to get neighbors for
particleNeighborDataproxy of (own) data required for the calculation
Returns
view of all indices of neighbor particles of particle with given particleIndex

Definition at line 962 of file ParticleSpatialOverlapLayout.hpp.

References ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::ParticleNeighborData::cellParticleCount, ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::ParticleNeighborData::cellPermutationForward, ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::ParticleNeighborData::cellStartingIdx, ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::ParticleNeighborData::cellStrides, ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::ParticleNeighborData::cellWidth, ippl::detail::countHypercubes(), Dim, getCellIndex(), getCellNeighbors(), and ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::ParticleNeighborData::region.

Here is the call graph for this function:

◆ getParticleNeighbors() [2/2]

template<typename T, unsigned Dim, class Mesh, typename... Properties>
KOKKOS_FUNCTION ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties... >::particle_neighbor_list_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::getParticleNeighbors ( index_t particleIndex,
const ParticleNeighborData & particleNeighborData )
static

◆ getRegionLayout()

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
const RegionLayout_t & ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::getRegionLayout ( ) const
inlineinherited

Definition at line 76 of file ParticleSpatialLayout.h.

◆ initializeCells()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
void ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::initializeCells ( )

initializes all data necessary for the cells

Definition at line 43 of file ParticleSpatialOverlapLayout.hpp.

References cellParticleCount_m, cellPermutationBackward_m, cellPermutationForward_m, cellStartingIdx_m, cellStrides_m, cellWidth_m, ippl::Comm, Dim, isLocalCellIndex(), numCells_m, numGhostCells_m, numGhostCellsPerDim_m, numLocalCells_m, PAssert, rcutoff_m, ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::rlayout_m, toCellIndex(), totalCells_m, and update().

Referenced by ParticleSpatialOverlapLayout(), and updateLayout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isCloseToBoundary() [1/2]

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
template<std::size_t... Idx>
KOKKOS_INLINE_FUNCTION constexpr bool ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::isCloseToBoundary ( const std::index_sequence< Idx... > & ,
const vector_type & pos,
const region_type & globalRegion,
Vector< bool, Dim > periodic,
T overlap )
constexpr

Definition at line 132 of file ParticleSpatialOverlapLayout.hpp.

References ippl::max, ippl::min(), and ippl::periodic.

Here is the call graph for this function:

◆ isCloseToBoundary() [2/2]

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
template<std::size_t... Idx>
KOKKOS_INLINE_FUNCTION static constexpr bool ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::isCloseToBoundary ( const std::index_sequence< Idx... > & ,
const vector_type & pos,
const region_type & region,
Vector< bool, Dim > periodic,
T overlap )
staticconstexprprotected

determines whether a position is within overlap to the boundary of a region

Parameters
posposition to query
regionregion of the position
periodicvector determining which dimensions to consider (as they are periodic)
overlapdistance to consider as close

References ippl::periodic.

Referenced by createPeriodicGhostParticles().

Here is the caller graph for this function:

◆ isLocalCellIndex() [1/2]

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
template<std::size_t... Idx>
KOKKOS_INLINE_FUNCTION static constexpr bool ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::isLocalCellIndex ( const std::index_sequence< Idx... > & ,
const CellIndex_t & index,
const Vector< size_type, Dim > & numCells )
staticconstexprprotected

determines whether cell index is local cell index

Parameters
indexto test
numCellsin each dimension

Referenced by initializeCells().

Here is the caller graph for this function:

◆ isLocalCellIndex() [2/2]

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
template<std::size_t... Idx>
bool ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::isLocalCellIndex ( const std::index_sequence< Idx... > & ,
const CellIndex_t & index,
const Vector< size_type, Dim > & numCells )
constexpr

Definition at line 796 of file ParticleSpatialOverlapLayout.hpp.

◆ locateParticles() [1/2]

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
template<typename ParticleContainer>
std::pair< size_type, size_type > ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::locateParticles ( const ParticleContainer & pc,
locate_type & ranks,
bool_type & invalid,
locate_type & nSends_dview,
locate_type & sends_dview ) const
inherited

For each particle in the bunch, determine the rank on which it should be stored based on its location

Template Parameters
ParticleContainerthe particle container type
Parameters
pcthe particle container
ranksthe integer view in which to store the destination ranks
invalidthe boolean view in which to store whether each particle is invalidated, i.e. needs to be sent to another rank
Returns
The total number of invalidated particles

◆ locateParticles() [2/2]

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
pcParticle Container
ranksA vector where each value refers to the new rank of the particle which rank values correspond to which particles is determined by rankOffsets
rankOffsetsA vector of offsets where rankOffset(i) determines where the ranks of particle i in ranks start.
invalidA vector marking the particles that need to be sent away, and thus locally deleted
nSends_dviewDevice view the length of number of ranks, where each value determines the number of particles sent to that rank from the current rank
sends_dviewDevice 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.

Definition at line 542 of file ParticleSpatialOverlapLayout.hpp.

References ippl::Comm, ippl::increment_type::count, ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::flayout_m, getFlatNeighbors(), ippl::ParticleBase< PLayout, IDProperties >::getLocalNum(), getNonNeighborRanks(), IpplTimings::getTimer(), ippl::increment_type::init(), positionInRegion(), ippl::ParticleBase< PLayout, IDProperties >::R, rcutoff_m, ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::rlayout_m, IpplTimings::startTimer(), and IpplTimings::stopTimer().

Referenced by particleExchange().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ numberOfSends()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
detail::size_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::numberOfSends ( int rank,
const locate_type & ranks )

utility function to compute how many particles to sent to a given rank

Parameters
rankrank to send to
ranksThe view containing which rank each particle belongs to
Returns
number of particles sent to rank

Definition at line 417 of file ParticleSpatialOverlapLayout.hpp.

◆ particleExchange()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
template<class ParticleContainer>
void ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::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.

Parameters
pcparticle container of which to exchange particles

Definition at line 254 of file ParticleSpatialOverlapLayout.hpp.

References ippl::detail::ParticleLayout< T, Dim, PositionProperties... >::applyBC(), ippl::Comm, createPeriodicGhostParticles(), fillHash(), ippl::ParticleBase< PLayout, IDProperties >::getLocalNum(), IpplTimings::getTimer(), ippl::ParticleBase< PLayout, IDProperties >::internalDestroy(), locateParticles(), ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::nRecvs_m, ippl::mpi::tag::P_LAYOUT_CYCLE, ippl::mpi::tag::P_SPATIAL_LAYOUT, ippl::ParticleBase< PLayout, IDProperties >::R, ippl::ParticleBase< PLayout, IDProperties >::recvFromRank(), ippl::ParticleBase< PLayout, IDProperties >::sendToRank(), IpplTimings::startTimer(), IpplTimings::stopTimer(), and ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::window_m.

Referenced by update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ positionInRegion() [1/3]

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
template<size_t... Idx>
KOKKOS_INLINE_FUNCTION static constexpr bool ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::positionInRegion ( const std::index_sequence< Idx... > & ,
const vector_type & pos,
const region_type & region )
staticconstexprprotectedinherited

◆ positionInRegion() [2/3]

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
template<std::size_t... Idx>
KOKKOS_INLINE_FUNCTION static constexpr bool ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::positionInRegion ( const std::index_sequence< Idx... > & ,
const vector_type & pos,
const region_type & region,
T overlap )
staticconstexprprotected

determines whether a position is in a region including its overlap

Parameters
posposition to query
regionregion to test
overlapoverlap of the region in every dimension

Referenced by locateParticles().

Here is the caller graph for this function:

◆ positionInRegion() [3/3]

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
template<std::size_t... Idx>
KOKKOS_INLINE_FUNCTION constexpr bool ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::positionInRegion ( const std::index_sequence< Idx... > & ,
const vector_type & pos,
const region_type & region,
T overlap )
constexpr

Definition at line 751 of file ParticleSpatialOverlapLayout.hpp.

References ippl::min().

Here is the call graph for this function:

◆ setParticleBC() [1/2]

void ippl::detail::ParticleLayout< T, Dim, PositionProperties >::setParticleBC ( BC bc)
inlineinherited

Use the same boundary condition on each face

Parameters
bcsare the boundary conditions

Definition at line 85 of file ParticleLayout.h.

References bcs_m.

◆ setParticleBC() [2/2]

void ippl::detail::ParticleLayout< T, Dim, PositionProperties >::setParticleBC ( bc_container_type bcs)
inlineinherited

Copy over the given boundary conditions.

Parameters
bcsare the boundary conditions

Definition at line 73 of file ParticleLayout.h.

References bcs_m.

◆ toCellIndex()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
KOKKOS_INLINE_FUNCTION constexpr ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties... >::CellIndex_t ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::toCellIndex ( FlatCellIndex_t nonPermutedIndex,
const Vector< size_type, Dim > & numCells )
staticconstexprprotected

@brieg compute the nd-cell-index from a flattened (non-permuted) index

Parameters
nonPermutedIndexthe flat index to transform
numCellsin each dimension

Definition at line 770 of file ParticleSpatialOverlapLayout.hpp.

References Dim.

Referenced by forEachPair(), getParticleNeighbors(), and initializeCells().

Here is the caller graph for this function:

◆ toFlatCellIndex()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
KOKKOS_INLINE_FUNCTION constexpr ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties... >::FlatCellIndex_t ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::toFlatCellIndex ( const CellIndex_t & cellIndex,
const Vector< size_type, Dim > & cellStrides,
hash_type cellPermutationForward )
staticconstexprprotected

convert a nd-cell-index to flat cell index

Parameters
cellIndexto convert
cellStridescell strides to flatten the cell index with
cellPermutationForwardthe permutation to apply to the flattened index

Definition at line 761 of file ParticleSpatialOverlapLayout.hpp.

References ippl::Vector< T, Dim >::dot().

Referenced by buildCells(), and getCellNeighbors().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ update() [1/2]

void ippl::detail::ParticleLayout< T, Dim, PositionProperties >::update ( PBase & )
inlineinherited

Definition at line 64 of file ParticleLayout.h.

◆ update() [2/2]

template<typename T, unsigned Dim, class Mesh, typename... Properties>
template<class ParticleContainer>
void ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::update ( ParticleContainer & pc)

updates particles by exchanging them across ranks according to their positions. then constructs the particle neighbor list structure

Parameters
pcparticle container to update

Definition at line 411 of file ParticleSpatialOverlapLayout.hpp.

References buildCells(), and particleExchange().

Referenced by initializeCells().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateLayout()

template<typename T, unsigned Dim, class Mesh, typename... Properties>
void ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, Properties >::updateLayout ( FieldLayout< Dim > & fl,
Mesh & mesh )

Definition at line 36 of file ParticleSpatialOverlapLayout.hpp.

References initializeCells(), and ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties... >::updateLayout().

Here is the call graph for this function:

Member Data Documentation

◆ bcs_m

bc_container_type ippl::detail::ParticleLayout< T, Dim, PositionProperties >::bcs_m
privateinherited

the list of boundary conditions for this set of particles

Definition at line 97 of file ParticleLayout.h.

Referenced by getParticleBC(), ParticleLayout(), setParticleBC(), and setParticleBC().

◆ cellIndex_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
hash_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::cellIndex_m
protected

! view storing the cell index of each particle (TODO not needed if getParticleNeighbors depending on index is not required)

Definition at line 257 of file ParticleSpatialOverlapLayout.h.

Referenced by buildCells(), and getParticleNeighborData().

◆ cellParticleCount_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
hash_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::cellParticleCount_m
protected

! view of number of particles in each cell

Definition at line 259 of file ParticleSpatialOverlapLayout.h.

Referenced by buildCells(), forEachPair(), getParticleNeighborData(), and initializeCells().

◆ cellPermutationBackward_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
hash_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::cellPermutationBackward_m
protected

! the inverse of cellPermutationForward_m

Definition at line 252 of file ParticleSpatialOverlapLayout.h.

Referenced by forEachPair(), getParticleNeighborData(), and initializeCells().

◆ cellPermutationForward_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
hash_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::cellPermutationForward_m
protected

To ensure the interior particles are at indices 0, ..., numLocalParticles_m - 1 the cells need to be permuted such that local cells are at the beginning and ghost cells at the end cellPermutationForward_m at cell index computed from actual position and cellStrides gives permuted index

Definition at line 250 of file ParticleSpatialOverlapLayout.h.

Referenced by buildCells(), forEachPair(), getParticleNeighborData(), and initializeCells().

◆ cellStartingIdx_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
hash_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::cellStartingIdx_m
protected

! cell i contains particles cellStartingIdx_m(i), ..., cellStartingIdx_m(i + 1) - 1

Definition at line 254 of file ParticleSpatialOverlapLayout.h.

Referenced by buildCells(), forEachPair(), getParticleNeighborData(), and initializeCells().

◆ cellStrides_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
Vector<size_type, Dim> ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::cellStrides_m
protected

! strides to compute cell indices

Definition at line 231 of file ParticleSpatialOverlapLayout.h.

Referenced by buildCells(), forEachPair(), getParticleNeighborData(), and initializeCells().

◆ cellWidth_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
Vector<T, Dim> ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::cellWidth_m
protected

! width of cells in each dimension

Definition at line 233 of file ParticleSpatialOverlapLayout.h.

Referenced by buildCells(), getParticleNeighborData(), and initializeCells().

◆ dim

unsigned ippl::detail::ParticleLayout< T, Dim, PositionProperties >::dim
staticconstexprinherited

Definition at line 56 of file ParticleLayout.h.

◆ flayout_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
FieldLayout_t& ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::flayout_m
protectedinherited

The FieldLayout containing information on nearest neighbors.

Definition at line 83 of file ParticleSpatialLayout.h.

Referenced by ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::locateParticles().

◆ nRecvs_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
std::vector<size_type> ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::nRecvs_m
protectedinherited

◆ numCells_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
Vector<size_type, Dim> ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::numCells_m
protected

! number of cells in each dimension

Definition at line 229 of file ParticleSpatialOverlapLayout.h.

Referenced by forEachPair(), getParticleNeighborData(), and initializeCells().

◆ numGhostCells_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
size_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::numGhostCells_m
protected

! the number of interior cells

Definition at line 237 of file ParticleSpatialOverlapLayout.h.

Referenced by initializeCells().

◆ numGhostCellsPerDim_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
size_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::numGhostCellsPerDim_m = 1
staticconstexprprotected

! number of ghost cells

Definition at line 243 of file ParticleSpatialOverlapLayout.h.

Referenced by getCellIndex(), and initializeCells().

◆ numLocalCells_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
size_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::numLocalCells_m
protected

! the number of ghost cells

Definition at line 239 of file ParticleSpatialOverlapLayout.h.

Referenced by buildCells(), forEachPair(), and initializeCells().

◆ numLocalParticles_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
size_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::numLocalParticles_m
protected

! the number of local particles (particles in local cells)

Definition at line 241 of file ParticleSpatialOverlapLayout.h.

Referenced by buildCells(), getParticleNeighborData(), and ParticleSpatialOverlapLayout().

◆ rcutoff_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
const T ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::rcutoff_m
protected

! overlap in each dimension

Definition at line 227 of file ParticleSpatialOverlapLayout.h.

Referenced by createPeriodicGhostParticles(), initializeCells(), locateParticles(), and ParticleSpatialOverlapLayout().

◆ rlayout_m

◆ totalCells_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
size_type ippl::ParticleSpatialOverlapLayout< T, Dim, Mesh, PositionProperties >::totalCells_m
protected

! the number of total cells

Definition at line 235 of file ParticleSpatialOverlapLayout.h.

Referenced by buildCells(), and initializeCells().

◆ window_m

template<typename T, unsigned Dim, class Mesh = UniformCartesian<T, Dim>, typename... PositionProperties>
mpi::rma::Window<mpi::rma::Active> ippl::ParticleSpatialLayout< T, Dim, Mesh, PositionProperties >::window_m
protectedinherited

The documentation for this class was generated from the following files: