1#ifndef AMREX_PARTICLE_CONTAINER_H_
2#define AMREX_PARTICLE_CONTAINER_H_
3#include <AMReX_Config.H>
72#ifdef AMREX_USE_HDF5_ASYNC
73 extern hid_t es_par_g;
116template<
int NStructReal,
int NStructInt,
int NArrayReal,
int NArrayInt>
125template <
bool is_const,
typename T_ParticleType,
int NArrayReal,
int NArrayInt,
126 template<
class>
class Allocator,
class CellAssignor>
143template <
typename T_ParticleType,
int T_NArrayReal,
int T_NArrayInt,
170 template <
typename T>
177#ifdef AMREX_SINGLE_PRECISION_PARTICLES
386 const IntVect* Nrep =
nullptr);
503 void Redistribute (
int lev_min = 0,
int lev_max = -1,
int nGrow = 0,
int local=0,
504 bool remove_negative=
true);
518 template <
class index_type>
560 bool OK (
int lev_min = 0,
int lev_max = -1,
int nGrow = 0)
const;
585 template <
typename I, std::enable_if_t<std::is_
integral_v<I> && (sizeof(I) >= sizeof(Long)),
int> = 0>
681 template <
class PCType,
682 std::enable_if_t<IsParticleContainer<PCType>::value,
int> foo = 0>
692 template <
class PCType,
693 std::enable_if_t<IsParticleContainer<PCType>::value,
int> foo = 0>
694 void addParticles (
const PCType& other,
bool local=
false);
710 template <
class F,
class PCType,
711 std::enable_if_t<IsParticleContainer<PCType>::value,
int> foo = 0,
712 std::enable_if_t<! std::is_integral_v<F>,
int> bar = 0>
728 template <
class F,
class PCType,
729 std::enable_if_t<IsParticleContainer<PCType>::value,
int> foo = 0,
730 std::enable_if_t<! std::is_integral_v<F>,
int> bar = 0>
731 void addParticles (
const PCType& other,
F const& f,
bool local=
false);
759 void Checkpoint (
const std::string& dir,
const std::string& name,
763 Checkpoint(dir, name,
true, real_comp_names, int_comp_names);
771 void Checkpoint (
const std::string& dir,
const std::string& name,
bool is_checkpoint,
787 void Checkpoint (
const std::string& dir,
const std::string& name,
809 const std::string& name,
814 F&& f,
bool is_checkpoint=
false)
const;
826 void Restart (
const std::string& dir,
const std::string& file);
835 void Restart (
const std::string& dir,
const std::string& file,
bool is_checkpoint);
843 void WritePlotFile (
const std::string& dir,
const std::string& name)
const;
856 template <
class F, std::enable_if_t<!std::is_same_v<std::decay_t<F>, Vector<std::
string>>>* =
nullptr>
857 void WritePlotFile (
const std::string& dir,
const std::string& name,
F&& f)
const;
867 void WritePlotFile (
const std::string& dir,
const std::string& name,
885 void WritePlotFile (
const std::string& dir,
const std::string& name,
897 void WritePlotFile (
const std::string& dir,
const std::string& name,
913 template <
class F, std::enable_if_t<!std::is_same_v<std::decay_t<F>, Vector<std::
string>>>* =
nullptr>
914 void WritePlotFile (
const std::string& dir,
const std::string& name,
927 const std::string& name,
947 const std::string& name,
965 const std::string& name,
991 const std::string& name,
1069 {
return m_particles[lev].at(std::make_pair(grid, tile)); }
1094 {
return m_particles[lev].at(std::make_pair(grid, tile)); }
1117 template <
class Iterator>
1119 {
return ParticlesAt(lev, iter.index(), iter.LocalTileIndex()); }
1142 template <
class Iterator>
1144 {
return ParticlesAt(lev, iter.index(), iter.LocalTileIndex()); }
1170 m_particles[lev][std::make_pair(grid, tile)].define(
1199 template <
class Iterator>
1202 auto index = std::make_pair(iter.index(), iter.LocalTileIndex());
1222 Vector<std::unique_ptr<MultiFab> >& mf_to_be_filled,
1223 int lev_min,
int ncomp,
int finest_level,
int ngrow=2)
const;
1226 int ncomp=1,
int particle_lvl_offset = 0)
const;
1228 template <
typename P,
typename Assignor=CellAssignor>
1248 template <
typename P>
1273 void RedistributeCPU (
int lev_min = 0,
int lev_max = -1,
int nGrow = 0,
int local=0,
1274 bool remove_negative=
true);
1276 void RedistributeGPU (
int lev_min = 0,
int lev_max = -1,
int nGrow = 0,
int local=0,
1277 bool remove_negative=
true);
1286 throw std::runtime_error(
"AddRealComp: name '" + name +
"' is already present in the SoA.");
1297 for (
int lev = 0; lev <
numLevels(); ++lev) {
1300 auto np = tile.numParticles();
1302 auto& soa = tile.GetStructOfArrays();
1319 throw std::runtime_error(
"AddIntComp: name '" + name +
"' is already present in the SoA.");
1330 for (
int lev = 0; lev <
numLevels(); ++lev) {
1333 auto np = tile.numParticles();
1335 auto& soa = tile.GetStructOfArrays();
1381 template <
template<
class>
class NewAllocator=Allocator>
1388 std::vector<std::string> real_ct_names(
NArrayReal);
1389 for (
int ic = 0; ic <
NArrayReal; ++ic) { real_ct_names.at(ic) = real_names[ic]; }
1391 std::vector<std::string>
const int_names = this->
GetIntSoANames();
1392 std::vector<std::string> int_ct_names(
NArrayInt);
1393 for (
int ic = 0; ic <
NArrayInt; ++ic) { int_ct_names.at(ic) = int_names[ic]; }
1445 template <
typename P>
1447 int lev_min = 0,
int lev_max = -1,
int nGrow=0,
int local_grid=-1)
const;
1460 template <
typename P>
1462 int lev_min = 0,
int lev_max = -1,
int local_grid=-1)
const;
1469 const Vector<std::map<std::pair<int, int>,
IntVector>>& particle_io_flags,
bool is_checkpoint)
const;
1470#ifdef AMREX_USE_HDF5
1475 void SetSoACompileTimeNames (std::vector<std::string>
const & rdata_name, std::vector<std::string>
const & idata_name);
1517 template <
class RTYPE>
1518 void ReadParticles (
int cnt,
int grd,
int lev, std::ifstream& ifs,
int finest_level_in_file,
bool convert_ids);
1532 int lev_min = 0,
int lev_max = 0,
int nGrow = 0,
int local=0);
1534 template <
typename P>
1536 int lev_min,
int lev_max,
int nGrow,
int local_grid=-1)
const;
1554template <
int T_NStructReal,
int T_NStructInt,
int T_NArrayReal,
int T_NArrayInt,
template<
class>
class Allocator,
class CellAssignor>
1566#ifdef AMREX_USE_HDF5
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
Definition AMReX_GpuAllocators.H:114
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:567
A container for storing items in a set of bins.
Definition AMReX_DenseBins.H:77
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:43
static const RealDescriptor & Native64RealDescriptor()
Definition AMReX_FPC.cpp:137
static const RealDescriptor & Native32RealDescriptor()
NativeRealDescriptor is equivalent to Native32RealDescriptor if BL_FLOAT is used. Otherwise,...
Definition AMReX_FPC.cpp:124
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:74
a one-thingy-per-box distributed object
Definition AMReX_LayoutData.H:13
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:63
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition AMReX_MFIter.H:147
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:40
Dynamically allocated vector for trivially copyable data.
Definition AMReX_PODVector.H:308
Definition AMReX_ParIter.H:144
Definition AMReX_ParGDB.H:13
Definition AMReX_ParIter.H:32
Definition AMReX_ParIter.H:115
Definition AMReX_ParticleContainerBase.H:23
ParGDBBase * m_gdb
Definition AMReX_ParticleContainerBase.H:278
void Define(ParGDBBase *gdb)
Definition AMReX_ParticleContainerBase.H:83
int numLevels() const
the number of defined levels in the ParticleContainer
Definition AMReX_ParticleContainerBase.H:222
Arena * arena() const
Definition AMReX_ParticleContainerBase.H:248
A distributed container for Particles sorted onto the levels, grids, and tiles of a block-structured ...
Definition AMReX_ParticleContainer.H:148
ParticleTileType & DefineAndReturnParticleTile(int lev, const Iterator &iter)
Define and return the ParticleTile for level "lev", and Iterator "iter".
Definition AMReX_ParticleContainer.H:1200
void WritePlotFilePre()
Definition AMReX_ParticleIO.H:565
void AssignDensity(int rho_index, Vector< std::unique_ptr< MultiFab > > &mf_to_be_filled, int lev_min, int ncomp, int finest_level, int ngrow=2) const
Functions depending the layout of the data. Use with caution.
Definition AMReX_AmrParticles.H:17
typename ParticleTileType::ConstParticleTileDataType ConstPTDType
Definition AMReX_ParticleContainer.H:191
void addParticles(const PCType &other, bool local=false)
Add particles from other to this ParticleContainer. local controls whether or not to call Redistribut...
Definition AMReX_ParticleContainerI.H:1157
void SetUseUnlink(bool tf) const
Definition AMReX_ParticleContainer.H:1265
Vector< ParticleLevel > m_particles
Definition AMReX_ParticleContainer.H:1546
Vector< Long > nParticlesAtLevelPrePost
Definition AMReX_ParticleContainer.H:1423
bool GetLevelDirectoriesCreated() const
Definition AMReX_ParticleContainer.H:1253
IntVect Index(const P &p, int lev) const
Definition AMReX_ParticleContainerI.H:201
void Redistribute(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Redistribute puts all the particles back in the right places (for some value of right)
Definition AMReX_ParticleContainerI.H:1238
size_t superparticle_size
Definition AMReX_ParticleContainer.H:1544
void AddIntComp(std::string const &name, int communicate=1)
Definition AMReX_ParticleContainer.H:1314
void ReorderParticles(int lev, const MFIter &mfi, const index_type *permutations)
Reorder particles on the tile given by lev and mfi using a the permutations array.
Definition AMReX_ParticleContainerI.H:1263
bool EnforcePeriodicWhere(P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, int local_grid=-1) const
Checks whether the particle has crossed a periodic boundary in such a way that it is on levels lev_mi...
Definition AMReX_ParticleContainerI.H:297
void ResizeRuntimeIntComp(int new_size, bool communicate)
Definition AMReX_ParticleContainerI.H:2747
bool doUnlink
Definition AMReX_ParticleContainer.H:1419
Vector< Vector< int > > whichPrePost
Definition AMReX_ParticleContainer.H:1424
ParticleContainer_impl(const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
Same as the above, but accepts different refinement ratios in each direction.
Definition AMReX_ParticleContainer.H:277
std::string HdrFileNamePrePost
Definition AMReX_ParticleContainer.H:1427
Vector< Vector< Long > > wherePrePost
Definition AMReX_ParticleContainer.H:1426
RealDescriptor ParticleRealDescriptor
Definition AMReX_ParticleContainer.H:180
bool OK(int lev_min=0, int lev_max=-1, int nGrow=0) const
OK checks that all particles are in the right places (for some value of right)
Definition AMReX_ParticleContainerI.H:2520
ParticleTileType & ParticlesAt(int lev, const Iterator &iter)
Return the ParticleTile for level "lev" and Iterator "iter". Non-const version.
Definition AMReX_ParticleContainer.H:1143
int nOutFilesPrePost
Definition AMReX_ParticleContainer.H:1421
int maxnextidPrePost
Definition AMReX_ParticleContainer.H:1420
void ReadParticleRealData(void *data, size_t size, std::istream &is)
Read a contiguous chunk of real particle data from an istream.
Definition AMReX_ParticleIO.H:28
void InitRandomPerBox(Long icount, ULong iseed, const ParticleInitData &pdata)
This initializes the container with icount randomly distributed particles per box,...
Definition AMReX_ParticleInit.H:1364
ParticleContainer_impl(ParticleContainer_impl &&) noexcept=default
void Checkpoint(const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names=Vector< std::string >(), const Vector< std::string > &int_comp_names=Vector< std::string >()) const
Writes a particle checkpoint to file, suitable for restarting.
Definition AMReX_ParticleContainer.H:759
bool PeriodicShift(P &p) const
Returns true if the particle was shifted.
Definition AMReX_ParticleContainerI.H:376
std::map< std::pair< int, int >, ParticleTileType > ParticleLevel
Definition AMReX_ParticleContainer.H:189
bool levelDirectoriesCreated
Variables for i/o optimization saved for pre and post checkpoint.
Definition AMReX_ParticleContainer.H:1417
bool Where(const P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, int nGrow=0, int local_grid=-1) const
Checks a particle's location on levels lev_min and higher. Returns false if the particle does not exi...
Definition AMReX_ParticleContainerI.H:216
void RedistributeCPU(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Definition AMReX_ParticleContainerI.H:1633
std::vector< std::string > m_soa_idata_names
Definition AMReX_ParticleContainer.H:1550
static constexpr int NArrayInt
Number of extra integer components stored in struct-of-array form.
Definition AMReX_ParticleContainer.H:161
void InitFromAsciiFile(const std::string &file, int extradata, const IntVect *Nrep=nullptr)
Definition AMReX_ParticleInit.H:39
static constexpr int NArrayReal
Number of extra Real components stored in struct-of-array form.
Definition AMReX_ParticleContainer.H:159
int GetMaxNextIDPrePost() const
Definition AMReX_ParticleContainer.H:1262
const ParticleTileType & ParticlesAt(int lev, const Iterator &iter) const
Return the ParticleTile for level "lev" and Iterator "iter". Const version.
Definition AMReX_ParticleContainer.H:1118
void WritePlotFilePost()
Definition AMReX_ParticleIO.H:575
bool GetUsePrePost() const
Definition AMReX_ParticleContainer.H:1258
void SetSoACompileTimeNames(std::vector< std::string > const &rdata_name, std::vector< std::string > const &idata_name)
Definition AMReX_ParticleContainerI.H:109
typename ParticleTileType::AoS AoS
Definition AMReX_ParticleContainer.H:192
ParticleInitType< NStructReal, NStructInt, NArrayReal, NArrayInt > ParticleInitData
Definition AMReX_ParticleContainer.H:185
typename SoA::RealVector RealVector
Definition AMReX_ParticleContainer.H:195
typename ParticleType::ConstType ConstParticleType
Definition AMReX_ParticleContainer.H:151
ParticleContainer_impl(const ParticleContainer_impl &)=delete
void WriteAsciiFile(const std::string &file)
Definition AMReX_ParticleIO.H:1137
ParticleContainer_impl(const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
Construct a particle container using a given Geometry, DistributionMapping, and BoxArray....
Definition AMReX_ParticleContainer.H:237
void locateParticle(P &p, ParticleLocData &pld, int lev_min, int lev_max, int nGrow, int local_grid=-1) const
Definition AMReX_ParticleContainerI.H:446
void SetParticleSize()
Definition AMReX_ParticleContainerI.H:16
void CheckpointPost()
Definition AMReX_ParticleIO.H:509
void InitNRandomPerCell(int n_per_cell, const ParticleInitData &pdata)
This initializes the particle container with n_per_cell randomly distributed particles per cell,...
Definition AMReX_ParticleInit.H:1549
void SetLevelDirectoriesCreated(bool tf)
Definition AMReX_ParticleContainer.H:1251
void RemoveParticlesAtLevel(int level)
The Following methods are for managing Virtual and Ghost Particles.
Definition AMReX_ParticleContainerI.H:757
const ParticleTileType & ParticlesAt(int lev, int grid, int tile) const
Return the ParticleTile for level "lev", grid "grid" and tile "tile." Const version.
Definition AMReX_ParticleContainer.H:1068
typename AoS::ParticleVector ParticleVector
Definition AMReX_ParticleContainer.H:197
void Define(const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
Define a default-constructed ParticleContainer using a ParGDB object. Single-level version.
Definition AMReX_ParticleContainer.H:319
static constexpr int NStructInt
Number of extra integer components in the particle struct.
Definition AMReX_ParticleContainer.H:157
void SortParticlesForDeposition(IntVect idx_type)
Sort particles on each tile such that particles adjacent in memory are likely to map to adjacent cell...
Definition AMReX_ParticleContainerI.H:1407
ParticleContainer_impl()
Default constructor - construct an empty particle container that has no concept of a level hierarchy....
Definition AMReX_ParticleContainer.H:207
void SetUsePrePost(bool tf) const
Definition AMReX_ParticleContainer.H:1255
int NumRealComps() const
Definition AMReX_ParticleContainer.H:1350
void clearParticles()
Clear all the particles in this container. This does not free memory.
Definition AMReX_ParticleContainerI.H:1130
void ReadParticles(int cnt, int grd, int lev, std::ifstream &ifs, int finest_level_in_file, bool convert_ids)
Definition AMReX_ParticleIO.H:956
void Increment(MultiFab &mf, int level)
Definition AMReX_ParticleContainerI.H:720
Vector< int > h_redistribute_int_comp
Definition AMReX_ParticleContainer.H:1414
std::vector< std::string > m_soa_rdata_names
Definition AMReX_ParticleContainer.H:1549
typename ParticleTileType::SoA SoA
Definition AMReX_ParticleContainer.H:193
virtual void correctCellVectors(int, int, int, const ParticleType &)
Definition AMReX_ParticleContainer.H:1528
void AssignCellDensitySingleLevel(int rho_index, MultiFab &mf, int level, int ncomp=1, int particle_lvl_offset=0) const
Definition AMReX_ParticleContainerI.H:2581
int NumRuntimeIntComps() const
Definition AMReX_ParticleContainer.H:1348
void CreateGhostParticles(int level, int ngrow, AoS &ghosts) const
Create ghost particles for a given level that are copies of particles near coarse->fine boundaries in...
Definition AMReX_ParticleContainerI.H:1085
Long GetNParticlesPrePost() const
Definition AMReX_ParticleContainer.H:1263
void SortParticlesByBin(IntVect bin_size)
Sort the particles on each tile by groups of cells, given an IntVect bin_size.
Definition AMReX_ParticleContainerI.H:1374
void InitOnePerCell(Real x_off, Real y_off, Real z_off, const ParticleInitData &pdata)
This initializes the particle container with one particle per cell, where the other particle data and...
Definition AMReX_ParticleInit.H:1465
bool HasIntComp(std::string const &name)
Definition AMReX_ParticleContainerI.H:148
T_CellAssignor CellAssignor
Definition AMReX_ParticleContainer.H:152
const Vector< ParticleLevel > & GetParticles() const
Return the underlying Vector (over AMR levels) of ParticleLevels. Const version.
Definition AMReX_ParticleContainer.H:1008
const ParticleLevel & GetParticles(int lev) const
Return the ParticleLevel for level "lev". Const version.
Definition AMReX_ParticleContainer.H:1029
std::vector< std::string > GetRealSoANames() const
Definition AMReX_ParticleContainer.H:1478
DenseBins< typename ParticleTileType::ParticleTileDataType > m_bins
Definition AMReX_ParticleContainer.H:1522
void CheckpointPre()
Definition AMReX_ParticleIO.H:452
void ShrinkToFit()
Definition AMReX_ParticleContainerI.H:700
int m_num_runtime_int
Definition AMReX_ParticleContainer.H:1542
ParticleContainer_impl(ParGDBBase *gdb)
Construct a particle container using a ParGDB object. The container will track changes in the grid st...
Definition AMReX_ParticleContainer.H:221
bool HasRealComp(std::string const &name)
Definition AMReX_ParticleContainerI.H:140
void InitRandom(Long icount, ULong iseed, const ParticleInitData &pdata, bool serialize=false, RealBox bx=RealBox())
This initializes the particle container with icount randomly distributed particles....
Definition AMReX_ParticleInit.H:970
void Define(const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
Define a default-constructed ParticleContainer using a ParGDB object. Multi-level version.
Definition AMReX_ParticleContainer.H:356
void resizeData() override
This resizes the vector of dummy MultiFabs used by the ParticleContainer for the current number of le...
Definition AMReX_ParticleContainerI.H:435
int NumRuntimeRealComps() const
Definition AMReX_ParticleContainer.H:1347
void ResizeRuntimeRealComp(int new_size, bool communicate)
Definition AMReX_ParticleContainerI.H:2721
void AddIntComp(int communicate=1)
Definition AMReX_ParticleContainer.H:1342
Long nparticlesPrePost
Definition AMReX_ParticleContainer.H:1422
int m_num_runtime_real
Definition AMReX_ParticleContainer.H:1541
Vector< std::string > filePrefixPrePost
Definition AMReX_ParticleContainer.H:1428
int numLocalTilesAtLevel(int lev) const
The total number of tiles on this rank on this level.
Definition AMReX_ParticleContainer.H:367
Long IncrementWithTotal(MultiFab &mf, int level, bool local=false)
Definition AMReX_ParticleContainerI.H:747
static constexpr int NStructReal
Number of extra Real components in the particle struct.
Definition AMReX_ParticleContainer.H:155
Long NumberOfParticlesAtLevel(int level, bool only_valid=true, bool only_local=false) const
Returns # of particles at specified the level.
Definition AMReX_ParticleContainerI.H:551
void SortParticlesByCell()
Sort the particles on each tile by cell, using Fortran ordering.
Definition AMReX_ParticleContainerI.H:1365
Vector< int > h_redistribute_real_comp
Definition AMReX_ParticleContainer.H:1413
typename Particle< NStructReal, NStructInt >::RealType RealType
The type of the Real data.
Definition AMReX_ParticleContainer.H:175
ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > ParticleTileType
Definition AMReX_ParticleContainer.H:184
bool GetUseUnlink() const
Definition AMReX_ParticleContainer.H:1269
int GetRealCompIndex(std::string const &name)
Definition AMReX_ParticleContainerI.H:161
void InitFromBinaryMetaFile(const std::string &file, int extradata)
Definition AMReX_ParticleInit.H:931
void Initialize()
Definition AMReX_ParticleContainerI.H:45
void RedistributeMPI(std::map< int, Vector< char > > ¬_ours, int lev_min=0, int lev_max=0, int nGrow=0, int local=0)
Definition AMReX_ParticleContainerI.H:2167
int NumIntComps() const
Definition AMReX_ParticleContainer.H:1351
typename ParticleTileType::ParticleTileDataType PTDType
Definition AMReX_ParticleContainer.H:190
void RedistributeGPU(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Definition AMReX_ParticleContainerI.H:1437
ParticleContainer_impl & operator=(const ParticleContainer_impl &)=delete
Allocator< T > AllocatorType
The memory allocator in use.
Definition AMReX_ParticleContainer.H:171
ParticleLevel & GetParticles(int lev)
Return the ParticleLevel for level "lev". Non-const version.
Definition AMReX_ParticleContainer.H:1044
int GetIntCompIndex(std::string const &name)
Definition AMReX_ParticleContainerI.H:183
ParticleTileType & DefineAndReturnParticleTile(int lev, int grid, int tile)
Define and return the ParticleTile for level "lev", grid "grid" and tile "tile.".
Definition AMReX_ParticleContainer.H:1168
std::vector< std::string > GetIntSoANames() const
Definition AMReX_ParticleContainer.H:1481
void RemoveParticlesNotAtFinestLevel()
Definition AMReX_ParticleContainerI.H:771
Vector< Long > NumberOfParticlesInGrid(int level, bool only_valid=true, bool only_local=false) const
Definition AMReX_ParticleContainerI.H:496
void Define(ParGDBBase *gdb)
Define a default-constructed ParticleContainer using a ParGDB object. The container will track change...
Definition AMReX_ParticleContainer.H:305
ParticleContainer_impl(const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
Construct a particle container using a given Geometry, DistributionMapping, BoxArray and Vector of re...
Definition AMReX_ParticleContainer.H:257
void Restart(const std::string &dir, const std::string &file)
Restart from checkpoint.
Definition AMReX_ParticleIO.H:653
Long superParticleSize() const
Definition AMReX_ParticleContainer.H:1279
typename SoA::IntVector IntVector
Definition AMReX_ParticleContainer.H:196
void copyParticles(const PCType &other, bool local=false)
Copy particles from other to this ParticleContainer. Will clear all the particles from this container...
Definition AMReX_ParticleContainerI.H:1146
void WriteParticles(int level, std::ofstream &ofs, int fnum, Vector< int > &which, Vector< int > &count, Vector< Long > &where, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::map< std::pair< int, int >, IntVector > > &particle_io_flags, bool is_checkpoint) const
Definition AMReX_ParticleIO.H:585
ParticleLocData Reset(ParticleType &prt, bool update, bool verbose=true, ParticleLocData pld=ParticleLocData()) const
Updates a particle's location (Where), tries to periodic shift any particles that have left the domai...
Definition AMReX_ParticleContainerI.H:392
int num_int_comm_comps
Definition AMReX_ParticleContainer.H:1545
size_t particle_size
Definition AMReX_ParticleContainer.H:1544
virtual void particlePostLocate(ParticleType &, const ParticleLocData &, const int)
Definition AMReX_ParticleContainer.H:1525
void Define(const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
Define a default-constructed ParticleContainer using a ParGDB object. Multi-level version.
Definition AMReX_ParticleContainer.H:337
void CapacityOfParticlesInGrid(LayoutData< I > &mem, int lev) const
Return capacity of memory for particles at specific grid.
Definition AMReX_ParticleContainerI.H:593
std::array< Long, 3 > PrintCapacity() const
Definition AMReX_ParticleContainerI.H:660
void CreateVirtualParticles(int level, AoS &virts) const
Creates virtual particles for a given level that represent in some capacity all particles at finer le...
Definition AMReX_ParticleContainerI.H:838
static constexpr bool has_polymorphic_allocator
Definition AMReX_ParticleContainer.H:202
ParticleTileType & ParticlesAt(int lev, int grid, int tile)
Return the ParticleTile for level "lev", grid "grid" and tile "tile." Non-const version.
Definition AMReX_ParticleContainer.H:1093
void InitFromBinaryFile(const std::string &file, int extradata)
Definition AMReX_ParticleInit.H:485
void AddRealComp(std::string const &name, int communicate=1)
Definition AMReX_ParticleContainer.H:1281
int num_real_comm_comps
Definition AMReX_ParticleContainer.H:1545
std::array< Long, 3 > ByteSpread() const
Definition AMReX_ParticleContainerI.H:616
void WriteParticleRealData(void *data, size_t size, std::ostream &os) const
Write a contiguous chunk of real particle data to an ostream.
Definition AMReX_ParticleIO.H:14
ContainerLike< NewAllocator > make_alike() const
Definition AMReX_ParticleContainer.H:1383
void AddRealComp(int communicate=1)
Definition AMReX_ParticleContainer.H:1309
void AddParticlesAtLevel(AoS &particles, int level, int nGrow=0)
Add particles from a pbox to the grid at this level.
Definition AMReX_ParticleContainerI.H:2535
~ParticleContainer_impl() override=default
Long TotalNumberOfParticles(bool only_valid=true, bool only_local=false) const
Returns # of particles at all levels.
Definition AMReX_ParticleContainerI.H:481
void reserveData() override
This reserves data in the vector of dummy MultiFabs used by the ParticleContainer for the maximum num...
Definition AMReX_ParticleContainerI.H:426
Vector< ParticleLevel > & GetParticles()
Return the underlying Vector (over AMR levels) of ParticleLevels. Non-const version.
Definition AMReX_ParticleContainer.H:1014
void WriteBinaryParticleData(const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f, bool is_checkpoint=false) const
Writes particle data to disk in the AMReX native format.
Definition AMReX_ParticleIO.H:428
T_ParticleType ParticleType
Definition AMReX_ParticleContainer.H:150
bool m_runtime_comps_defined
Definition AMReX_ParticleContainer.H:1540
Vector< Vector< int > > countPrePost
Definition AMReX_ParticleContainer.H:1425
bool usePrePost
Definition AMReX_ParticleContainer.H:1418
A Box with real dimensions.
Definition AMReX_RealBox.H:26
A Descriptor of the Real Type.
Definition AMReX_FabConv.H:105
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:28
Long size() const noexcept
Definition AMReX_Vector.H:53
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
amrex_ulong ULong
Unsigned integer type guaranteed to be wider than unsigned int.
Definition AMReX_INT.H:32
amrex_particle_real ParticleReal
Floating Point Type for Particles.
Definition AMReX_REAL.H:90
amrex_long Long
Definition AMReX_INT.H:30
void WritePlotFile(const std::string &dir, const std::string &name) const
This version of WritePlotFile writes all components and assigns component names.
Definition AMReX_ParticleIO.H:113
Definition AMReX_Amr.cpp:49
amrex::ArenaAllocator< T > DefaultAllocator
Definition AMReX_GpuAllocators.H:193
int verbose
Definition AMReX_DistributionMapping.cpp:36
Definition AMReX_ParticleUtil.H:394
Definition AMReX_GpuAllocators.H:172
A struct used for communicating particle data across processes during multi-level operations.
Definition AMReX_ParticleContainer.H:80
RealType m_data[1+3]
Definition AMReX_ParticleContainer.H:85
ParticleReal RealType
Definition AMReX_ParticleContainer.H:81
int m_grid
Definition AMReX_ParticleContainer.H:83
IntVect m_cell
Definition AMReX_ParticleContainer.H:84
int m_lev
Definition AMReX_ParticleContainer.H:82
A struct used to pass initial data into the various Init methods. This struct is used to pass initial...
Definition AMReX_ParticleContainer.H:118
std::array< int, NStructInt > int_struct_data
Definition AMReX_ParticleContainer.H:120
std::array< int, NArrayInt > int_array_data
Definition AMReX_ParticleContainer.H:122
std::array< double, NArrayReal > real_array_data
Definition AMReX_ParticleContainer.H:121
std::array< double, NStructReal > real_struct_data
Definition AMReX_ParticleContainer.H:119
A struct used for storing a particle's position in the AMR hierarchy.
Definition AMReX_ParticleContainer.H:92
Box m_grown_gridbox
Definition AMReX_ParticleContainer.H:99
IntVect m_cell
Definition AMReX_ParticleContainer.H:96
int m_grid
Definition AMReX_ParticleContainer.H:94
int m_tile
Definition AMReX_ParticleContainer.H:95
int m_lev
Definition AMReX_ParticleContainer.H:93
Box m_tilebox
Definition AMReX_ParticleContainer.H:98
Box m_gridbox
Definition AMReX_ParticleContainer.H:97
Definition AMReX_ParticleTile.H:721
ParticleTileData< StorageParticleType, NArrayReal, NArrayInt > ParticleTileDataType
Definition AMReX_ParticleTile.H:749
std::conditional_t< ParticleType::is_soa_particle, StructOfArrays< NArrayReal, NArrayInt, Allocator, true >, StructOfArrays< NArrayReal, NArrayInt, Allocator, false > > SoA
Definition AMReX_ParticleTile.H:744
ConstParticleTileData< StorageParticleType, NArrayReal, NArrayInt > ConstParticleTileDataType
Definition AMReX_ParticleTile.H:750
std::conditional_t< ParticleType::is_soa_particle, ThisParticleTileHasNoAoS, ArrayOfStructs< ParticleType, Allocator > > AoS
Definition AMReX_ParticleTile.H:738
The struct used to store particles.
Definition AMReX_Particle.H:404
ParticleReal RealType
The floating point type used for the particles.
Definition AMReX_Particle.H:416