1#ifndef AMREX_PARITER_H_
2#define AMREX_PARITER_H_
3#include <AMReX_Config.H>
11template <
typename ParticleType,
int NArrayReal,
int NArrayInt,
12 template<
class>
class Allocator,
class CellAssignor>
13class ParticleContainer_impl;
15template <
int T_NReal,
int T_NInt>
18template <
int NArrayReal,
int NArrayInt>
21template <
class RType,
class IType>
24struct DefaultAssignor;
27template <
int T_NStructReal,
int T_NStructInt=0,
int T_NArrayReal=0,
int T_NArrayInt=0,
28 template<
class>
class Allocator=
DefaultAllocator,
class CellAssignor=DefaultAssignor>
31template <
bool is_const,
typename T_ParticleType,
int NArrayReal=0,
int NArrayInt=0,
40 using ContainerRef = std::conditional_t<is_const, PCType const&, PCType&>;
41 using ContainerPtr = std::conditional_t<is_const, PCType const*, PCType*>;
42 using ParticleTileRef = std::conditional_t
44 using ParticleTilePtr = std::conditional_t
46 using AoSRef = std::conditional_t
48 using SoARef = std::conditional_t
76 auto f = particles.find(key);
77 if (f != particles.end() && f->second.numParticles() > 0) {
114template <
typename T_ParticleType,
int NArrayReal=0,
int NArrayInt=0,
117 :
public ParIterBase_impl<false, T_ParticleType, NArrayReal, NArrayInt, Allocator, T_CellAssignor>
143template <
typename T_ParticleType,
int NArrayReal=0,
int NArrayInt=0,
144 template<
class>
class Allocator=
DefaultAllocator,
class T_CellAssignor=DefaultAssignor>
146 :
public ParIterBase_impl<true,T_ParticleType, NArrayReal, NArrayInt, Allocator, T_CellAssignor>
168template <
bool is_const,
typename ParticleType,
int NArrayReal,
int NArrayInt,
169 template<
class>
class Allocator,
class CellAssignor>
171 (ContainerRef pc,
int level,
MFItInfo& info)
173 MFIter(*pc.m_dummy_mf[level], pc.do_tiling ? info.EnableTiling(pc.tile_size) : info),
181 auto f = particles.find(key);
182 if (f != particles.end() && f->second.numParticles() > 0) {
192template <
bool is_const,
typename T_ParticleType,
int NArrayReal,
int NArrayInt,
193 template<
class>
class Allocator,
class CellAssignor>
195 (ContainerRef pc,
int level)
197 MFIter(*pc.m_dummy_mf[level],
198 pc.do_tiling ? pc.tile_size :
IntVect::TheZeroVector()),
206 auto f = particles.find(key);
207 if (f != particles.end() && f->second.numParticles() > 0) {
217template <
bool is_const,
int T_NStructReal,
int T_NStructInt,
int T_NArrayReal=0,
int T_NArrayInt=0,
221template <
bool is_const,
int T_NArrayReal=0,
int T_NArrayInt=0,
225template <
int T_NStructReal,
int T_NStructInt=0,
int T_NArrayReal=0,
int T_NArrayInt=0,
233template <
class RType=ParticleReal,
class IType=
int,
class CellAssignor=DefaultAssignor>
236template <
int T_NStructReal,
int T_NStructInt=0,
int T_NArrayReal=0,
int T_NArrayInt=0,
243template <
class RType=ParticleReal,
class IType=
int,
class CellAssignor=DefaultAssignor>
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:74
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:85
int LocalTileIndex() const noexcept
The current local tile index in the current grid;.
Definition AMReX_MFIter.H:178
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition AMReX_MFIter.H:169
int index() const noexcept
The index into the underlying BoxArray of the current FAB.
Definition AMReX_MFIter.H:172
void operator++() noexcept
Increment iterator to the next tile we own.
Definition AMReX_MFIter.cpp:526
Definition AMReX_ParIter.H:147
typename ContainerType::ParticleTileType ParticleTileType
Definition AMReX_ParIter.H:153
typename ContainerType::AoS AoS
Definition AMReX_ParIter.H:154
typename SoA::RealVector RealVector
Definition AMReX_ParIter.H:156
T_ParticleType ParticleType
Definition AMReX_ParIter.H:150
typename ContainerType::SoA SoA
Definition AMReX_ParIter.H:155
ParConstIter_impl(ContainerType const &pc, int level, MFItInfo &info)
Definition AMReX_ParIter.H:163
ParConstIter_impl(ContainerType const &pc, int level)
Definition AMReX_ParIter.H:159
T_CellAssignor CellAssignor
Definition AMReX_ParIter.H:151
typename SoA::IntVector IntVector
Definition AMReX_ParIter.H:157
Definition AMReX_ParIter.H:35
std::pair< int, int > GetPairIndex() const
Definition AMReX_ParIter.H:103
ContainerPtr m_pc
Definition AMReX_ParIter.H:111
const Geometry & Geom(int lev) const
Definition AMReX_ParIter.H:105
void operator++()
Definition AMReX_ParIter.H:68
T_ParticleType ParticleType
Definition AMReX_ParIter.H:57
static constexpr int NStructReal
Definition AMReX_ParIter.H:61
static constexpr int NStructInt
Definition AMReX_ParIter.H:62
auto numNeighborParticles() const
Definition AMReX_ParIter.H:97
AoSRef GetArrayOfStructs() const
Definition AMReX_ParIter.H:89
typename SoA::RealVector RealVector
Definition AMReX_ParIter.H:58
auto numParticles() const
Definition AMReX_ParIter.H:93
typename ContainerType::SoA SoA
Definition AMReX_ParIter.H:56
typename ContainerType::ParticleVector ParticleVector
Definition AMReX_ParIter.H:60
int m_level
Definition AMReX_ParIter.H:109
typename ContainerType::AoS AoS
Definition AMReX_ParIter.H:55
ParticleTilePtr m_particle_current_tile
Definition AMReX_ParIter.H:110
ParIterBase_impl(ContainerRef pc, int level, MFItInfo &info)
Definition AMReX_ParIter.H:171
typename ContainerType::ParticleTileType ParticleTileType
Definition AMReX_ParIter.H:54
ParticleTileRef GetParticleTile() const
Definition AMReX_ParIter.H:87
Long capacity() const
Definition AMReX_ParIter.H:99
typename SoA::IntVector IntVector
Definition AMReX_ParIter.H:59
SoARef GetStructOfArrays() const
Definition AMReX_ParIter.H:91
int GetLevel() const
Definition AMReX_ParIter.H:101
ParIterBase_impl(ContainerRef pc, int level)
Definition AMReX_ParIter.H:195
auto numRealParticles() const
Definition AMReX_ParIter.H:95
Definition AMReX_ParIter.H:118
typename ContainerType::SoA SoA
Definition AMReX_ParIter.H:130
typename ContainerType::AoS AoS
Definition AMReX_ParIter.H:129
ParIter_impl(ContainerType &pc, int level)
Definition AMReX_ParIter.H:134
typename SoA::RealVector RealVector
Definition AMReX_ParIter.H:131
T_CellAssignor CellAssignor
Definition AMReX_ParIter.H:122
T_ParticleType ParticleType
Definition AMReX_ParIter.H:121
typename ContainerType::ConstParticleType ConstParticleType
Definition AMReX_ParIter.H:127
ParIter_impl(ContainerType &pc, int level, MFItInfo &info)
Definition AMReX_ParIter.H:138
typename ContainerType::ParticleTileType ParticleTileType
Definition AMReX_ParIter.H:128
static constexpr int NStructInt
Definition AMReX_ParIter.H:124
typename SoA::IntVector IntVector
Definition AMReX_ParIter.H:132
static constexpr int NStructReal
Definition AMReX_ParIter.H:123
A distributed container for Particles sorted onto the levels, grids, and tiles of a block-structured ...
Definition AMReX_ParticleContainer.H:149
typename ParticleTileType::AoS AoS
Definition AMReX_ParticleContainer.H:199
typename ParticleType::ConstType ConstParticleType
Definition AMReX_ParticleContainer.H:152
typename AoS::ParticleVector ParticleVector
Definition AMReX_ParticleContainer.H:204
typename ParticleTileType::SoA SoA
Definition AMReX_ParticleContainer.H:200
std::conditional_t< is_rtsoa_pc, ParticleTileRT< typename ParticleType::RealType, typename ParticleType::IntType >, ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > > ParticleTileType
Definition AMReX_ParticleContainer.H:191
Definition AMReX_GpuAllocators.H:156
amrex_long Long
Definition AMReX_INT.H:30
Definition AMReX_Amr.cpp:49
amrex::ArenaAllocator< T > DefaultAllocator
Definition AMReX_GpuAllocators.H:205
Definition AMReX_ParticleUtil.H:390
Definition AMReX_MFIter.H:20