diff --git a/amrex/docs_html/_downloads/008eb6dbfab802633dff40122ece848c/amrex.pdf b/amrex/docs_html/_downloads/008eb6dbfab802633dff40122ece848c/amrex.pdf index 1eca599d2d..442f3a284c 100644 Binary files a/amrex/docs_html/_downloads/008eb6dbfab802633dff40122ece848c/amrex.pdf and b/amrex/docs_html/_downloads/008eb6dbfab802633dff40122ece848c/amrex.pdf differ diff --git a/amrex/docs_html/doxygen/AMReX__NeighborParticles_8H_source.html b/amrex/docs_html/doxygen/AMReX__NeighborParticles_8H_source.html index 80a405c9a5..e5c8016846 100644 --- a/amrex/docs_html/doxygen/AMReX__NeighborParticles_8H_source.html +++ b/amrex/docs_html/doxygen/AMReX__NeighborParticles_8H_source.html @@ -658,7 +658,7 @@
amrex::ParticleContainer_impl::SuperParticleType
Particle< NStructReal+NArrayReal, NStructInt+NArrayInt > SuperParticleType
The type of the "SuperParticle" which stored all components in AoS form.
Definition: AMReX_ParticleContainer.H:169
amrex::ParticleContainer_impl::AoS
typename ParticleTileType::AoS AoS
Definition: AMReX_ParticleContainer.H:186
amrex::ParticleContainer_impl::ParticleVector
typename AoS::ParticleVector ParticleVector
Definition: AMReX_ParticleContainer.H:191
-
amrex::ParticleContainer_impl::AddIntComp
void AddIntComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1251
+
amrex::ParticleContainer_impl::AddIntComp
void AddIntComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1263
amrex::ParticleContainer_impl::AddRealComp
void AddRealComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1241
amrex::ParticleContainer_impl::IntVector
typename SoA::IntVector IntVector
Definition: AMReX_ParticleContainer.H:190
amrex::ParticleContainer_impl::Redistribute
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:1066
diff --git a/amrex/docs_html/doxygen/AMReX__ParticleContainerI_8H_source.html b/amrex/docs_html/doxygen/AMReX__ParticleContainerI_8H_source.html index 6a6037eb0d..99f6cc6409 100644 --- a/amrex/docs_html/doxygen/AMReX__ParticleContainerI_8H_source.html +++ b/amrex/docs_html/doxygen/AMReX__ParticleContainerI_8H_source.html @@ -1353,8 +1353,8 @@
1262 
1263  int finest_lev_particles;
1264  if (lev_max == -1) {
-
1265  lev_max = theEffectiveFinestLevel;
-
1266  finest_lev_particles = m_particles.size() - 1;
+
1265  lev_max = theEffectiveFinestLevel;
+
1266  finest_lev_particles = m_particles.size() - 1;
1267  } else {
1268  finest_lev_particles = lev_max;
1269  }
@@ -1367,10 +1367,10 @@
1276  auto assign_grid = m_particle_locator.getGridAssignor();
1277 
1278  BL_PROFILE_VAR_START(blp_partition);
-
1279  ParticleCopyOp op;
+
1279  ParticleCopyOp op;
1280  int num_levels = finest_lev_particles + 1;
-
1281  op.setNumLevels(num_levels);
-
1282  Vector<std::map<int, int> > new_sizes(num_levels);
+
1281  op.setNumLevels(num_levels);
+
1282  Vector<std::map<int, int> > new_sizes(num_levels);
1283  const auto plo = Geom(0).ProbLoArray();
1284  const auto phi = Geom(0).ProbHiArray();
1285  const auto rlo = Geom(0).ProbLoArrayInParticleReal();
@@ -1382,26 +1382,26 @@
1291  for (auto& kv : plev)
1292  {
1293  int gid = kv.first.first;
-
1294  int tid = kv.first.second;
+
1294  int tid = kv.first.second;
1295  auto index = std::make_pair(gid, tid);
1296 
1297  auto& src_tile = plev[index];
1298  const size_t np = src_tile.numParticles();
1299 
1300  int num_stay = partitionParticlesByDest(src_tile, assign_grid,
-
1301  std::forward<CellAssignor>(CellAssignor{}),
+
1301  std::forward<CellAssignor>(CellAssignor{}),
1302  BufferMap(),
1303  plo, phi, rlo, rhi, is_per, lev, gid, tid,
1304  lev_min, lev_max, nGrow, remove_negative);
1305 
1306  int num_move = np - num_stay;
1307  new_sizes[lev][gid] = num_stay;
-
1308  op.resize(gid, lev, num_move);
+
1308  op.resize(gid, lev, num_move);
1309 
-
1310  auto p_boxes = op.m_boxes[lev][gid].dataPtr();
-
1311  auto p_levs = op.m_levels[lev][gid].dataPtr();
-
1312  auto p_src_indices = op.m_src_indices[lev][gid].dataPtr();
-
1313  auto p_periodic_shift = op.m_periodic_shift[lev][gid].dataPtr();
+
1310  auto p_boxes = op.m_boxes[lev][gid].dataPtr();
+
1311  auto p_levs = op.m_levels[lev][gid].dataPtr();
+
1312  auto p_src_indices = op.m_src_indices[lev][gid].dataPtr();
+
1313  auto p_periodic_shift = op.m_periodic_shift[lev][gid].dataPtr();
1314  auto ptd = src_tile.getParticleTileData();
1315 
1316  AMREX_FOR_1D ( num_move, i,
@@ -1451,7 +1451,7 @@
1360  }
1361  }
1362 
-
1363  for (int lev = lev_min; lev <= lev_max; lev++)
+
1363  for (int lev = lev_min; lev <= lev_max; lev++)
1364  {
1365  particle_detail::clearEmptyEntries(m_particles[lev]);
1366  }
@@ -1462,49 +1462,49 @@
1371  << m_particles.size() << " to " << theEffectiveFinestLevel+1 << '\n';
1372  }
1373  AMREX_ASSERT(int(m_particles.size()) >= 2);
-
1374 
+
1374 
1375  m_particles.resize(theEffectiveFinestLevel + 1);
1376  m_dummy_mf.resize(theEffectiveFinestLevel + 1);
1377  }
1378 
1379  if (ParallelDescriptor::UseGpuAwareMpi())
1380  {
-
1381  plan.buildMPIFinish(BufferMap());
+
1381  plan.buildMPIFinish(BufferMap());
1382  communicateParticlesStart(*this, plan, snd_buffer, rcv_buffer);
-
1383  unpackBuffer(*this, plan, snd_buffer, RedistributeUnpackPolicy());
+
1383  unpackBuffer(*this, plan, snd_buffer, RedistributeUnpackPolicy());
1384  communicateParticlesFinish(plan);
-
1385  unpackRemotes(*this, plan, rcv_buffer, RedistributeUnpackPolicy());
+
1385  unpackRemotes(*this, plan, rcv_buffer, RedistributeUnpackPolicy());
1386  }
1387  else
1388  {
1389  Gpu::Device::streamSynchronize();
-
1390  Gpu::PinnedVector<char> pinned_snd_buffer;
-
1391  Gpu::PinnedVector<char> pinned_rcv_buffer;
+
1390  Gpu::PinnedVector<char> pinned_snd_buffer;
+
1391  Gpu::PinnedVector<char> pinned_rcv_buffer;
1392 
1393  if (snd_buffer.arena()->isPinned()) {
1394  plan.buildMPIFinish(BufferMap());
1395  Gpu::Device::streamSynchronize();
1396  communicateParticlesStart(*this, plan, snd_buffer, pinned_rcv_buffer);
1397  } else {
-
1398  pinned_snd_buffer.resize(snd_buffer.size());
-
1399  Gpu::dtoh_memcpy_async(pinned_snd_buffer.dataPtr(), snd_buffer.dataPtr(), snd_buffer.size());
+
1398  pinned_snd_buffer.resize(snd_buffer.size());
+
1399  Gpu::dtoh_memcpy_async(pinned_snd_buffer.dataPtr(), snd_buffer.dataPtr(), snd_buffer.size());
1400  plan.buildMPIFinish(BufferMap());
1401  Gpu::Device::streamSynchronize();
1402  communicateParticlesStart(*this, plan, pinned_snd_buffer, pinned_rcv_buffer);
1403  }
1404 
-
1405  rcv_buffer.resize(pinned_rcv_buffer.size());
-
1406  unpackBuffer(*this, plan, snd_buffer, RedistributeUnpackPolicy());
+
1405  rcv_buffer.resize(pinned_rcv_buffer.size());
+
1406  unpackBuffer(*this, plan, snd_buffer, RedistributeUnpackPolicy());
1407  communicateParticlesFinish(plan);
-
1408  Gpu::htod_memcpy_async(rcv_buffer.dataPtr(), pinned_rcv_buffer.dataPtr(), pinned_rcv_buffer.size());
-
1409  unpackRemotes(*this, plan, rcv_buffer, RedistributeUnpackPolicy());
+
1408  Gpu::htod_memcpy_async(rcv_buffer.dataPtr(), pinned_rcv_buffer.dataPtr(), pinned_rcv_buffer.size());
+
1409  unpackRemotes(*this, plan, rcv_buffer, RedistributeUnpackPolicy());
1410  }
1411 
1412  Gpu::Device::streamSynchronize();
1413  AMREX_ASSERT(numParticlesOutOfRange(*this, lev_min, lev_max, nGrow) == 0);
1414 #else
1415  amrex::ignore_unused(lev_min,lev_max,nGrow,local,remove_negative);
-
1416 #endif
+
1416 #endif
1417 }
1418 
1419 //
@@ -1513,8 +1513,8 @@
1422 template <typename ParticleType, int NArrayReal, int NArrayInt,
1423  template<class> class Allocator, class CellAssignor>
1424 void
-
1425 ParticleContainer_impl<ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor>
-
1426 ::RedistributeCPU (int lev_min, int lev_max, int nGrow, int local, bool remove_negative)
+
1425 ParticleContainer_impl<ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor>
+
1426 ::RedistributeCPU (int lev_min, int lev_max, int nGrow, int local, bool remove_negative)
1427 {
1428  BL_PROFILE("ParticleContainer::RedistributeCPU()");
1429 
@@ -2676,7 +2676,6 @@
amrex::PODVector
Definition: AMReX_PODVector.H:217
amrex::PODVector::size
size_type size() const noexcept
Definition: AMReX_PODVector.H:536
amrex::PODVector::data
T * data() noexcept
Definition: AMReX_PODVector.H:554
-
amrex::PODVector::resize
void resize(size_type a_new_size)
Definition: AMReX_PODVector.H:586
amrex::PODVector::dataPtr
T * dataPtr() noexcept
Definition: AMReX_PODVector.H:558
amrex::ParConstIter_impl
Definition: AMReX_ParIter.H:147
amrex::ParIter_impl
Definition: AMReX_ParIter.H:118
@@ -2802,6 +2801,13 @@
amrex::GetParticleBin
Definition: AMReX_ParticleUtil.H:341
amrex::GpuArray< Real, AMREX_SPACEDIM >
amrex::ParticleBase::m_idcpu
uint64_t m_idcpu
Definition: AMReX_Particle.H:255
+
amrex::ParticleCopyOp
Definition: AMReX_ParticleCommunication.H:58
+
amrex::ParticleCopyOp::setNumLevels
void setNumLevels(int num_levels)
Definition: AMReX_ParticleCommunication.cpp:14
+
amrex::ParticleCopyOp::m_periodic_shift
Vector< std::map< int, Gpu::DeviceVector< IntVect > > > m_periodic_shift
Definition: AMReX_ParticleCommunication.H:62
+
amrex::ParticleCopyOp::m_boxes
Vector< std::map< int, Gpu::DeviceVector< int > > > m_boxes
Definition: AMReX_ParticleCommunication.H:59
+
amrex::ParticleCopyOp::m_levels
Vector< std::map< int, Gpu::DeviceVector< int > > > m_levels
Definition: AMReX_ParticleCommunication.H:60
+
amrex::ParticleCopyOp::resize
void resize(int gid, int lev, int size)
Definition: AMReX_ParticleCommunication.cpp:22
+
amrex::ParticleCopyOp::m_src_indices
Vector< std::map< int, Gpu::DeviceVector< int > > > m_src_indices
Definition: AMReX_ParticleCommunication.H:61
amrex::ParticleLocData
A struct used for storing a particle's position in the AMR hierarchy.
Definition: AMReX_ParticleContainer.H:90
amrex::ParticleLocData::m_grown_gridbox
Box m_grown_gridbox
Definition: AMReX_ParticleContainer.H:97
amrex::ParticleLocData::m_cell
IntVect m_cell
Definition: AMReX_ParticleContainer.H:94
diff --git a/amrex/docs_html/doxygen/AMReX__ParticleContainer_8H_source.html b/amrex/docs_html/doxygen/AMReX__ParticleContainer_8H_source.html index 9f7ba12514..0459ddb043 100644 --- a/amrex/docs_html/doxygen/AMReX__ParticleContainer_8H_source.html +++ b/amrex/docs_html/doxygen/AMReX__ParticleContainer_8H_source.html @@ -631,134 +631,159 @@
1244  m_num_runtime_real++;
1245  h_redistribute_real_comp.push_back(communicate);
1246  SetParticleSize();
-
1247  }
-
1248 
-
1249  template <typename T,
-
1250  std::enable_if_t<std::is_same_v<T,bool>,int> = 0>
-
1251  void AddIntComp (T communicate=true)
-
1252  {
-
1253  m_runtime_comps_defined = true;
-
1254  m_num_runtime_int++;
-
1255  h_redistribute_int_comp.push_back(communicate);
-
1256  SetParticleSize();
-
1257  }
-
1258 
-
1259  int NumRuntimeRealComps () const { return m_num_runtime_real; }
-
1260  int NumRuntimeIntComps () const { return m_num_runtime_int; }
-
1261 
-
1262  int NumRealComps () const { return NArrayReal + NumRuntimeRealComps(); }
-
1263  int NumIntComps () const { return NArrayInt + NumRuntimeIntComps() ; }
-
1264 
-
1265  void ResizeRuntimeRealComp (int new_size, bool communicate);
-
1266  void ResizeRuntimeIntComp (int new_size, bool communicate);
-
1267 
-
1269  template <template<class> class NewAllocator=amrex::DefaultAllocator>
-
1270  using ContainerLike = amrex::ParticleContainer_impl<ParticleType, NArrayReal, NArrayInt, NewAllocator>;
-
1271 
-
1282  template <template<class> class NewAllocator=amrex::DefaultAllocator>
-
1283  ContainerLike<NewAllocator>
-
1284  make_alike () const
-
1285  {
-
1286  ContainerLike<NewAllocator> tmp(m_gdb);
-
1287 
-
1288  // add runtime real comps to tmp
-
1289  for (int ic = 0; ic < this->NumRuntimeRealComps(); ++ic) { tmp.AddRealComp(false); }
-
1290 
-
1291  // add runtime int comps to tmp
-
1292  for (int ic = 0; ic < this->NumRuntimeIntComps(); ++ic) { tmp.AddIntComp(false); }
-
1293 
-
1294  return tmp;
-
1295  }
-
1296 
-
1297  Vector<int> h_redistribute_real_comp;
-
1298  Vector<int> h_redistribute_int_comp;
-
1299 
-
1301  mutable bool levelDirectoriesCreated;
-
1302  mutable bool usePrePost;
-
1303  mutable bool doUnlink;
-
1304  int maxnextidPrePost;
-
1305  mutable int nOutFilesPrePost;
-
1306  Long nparticlesPrePost;
-
1307  Vector<Long> nParticlesAtLevelPrePost;
-
1308  mutable Vector<Vector<int>> whichPrePost;
-
1309  mutable Vector<Vector<int>> countPrePost;
-
1310  mutable Vector<Vector<Long>> wherePrePost;
-
1311  mutable std::string HdrFileNamePrePost;
-
1312  mutable Vector<std::string> filePrefixPrePost;
-
1313 
-
1314 protected:
-
1315 
-
1329  template <typename P>
-
1330  bool Where (const P& prt, ParticleLocData& pld,
-
1331  int lev_min = 0, int lev_max = -1, int nGrow=0, int local_grid=-1) const;
-
1332 
-
1333 
-
1344  template <typename P>
-
1345  bool EnforcePeriodicWhere (P& prt, ParticleLocData& pld,
-
1346  int lev_min = 0, int lev_max = -1, int local_grid=-1) const;
-
1347 
-
1348 public:
-
1349  void
-
1350  WriteParticles (int level, std::ofstream& ofs, int fnum,
-
1351  Vector<int>& which, Vector<int>& count, Vector<Long>& where,
-
1352  const Vector<int>& write_real_comp, const Vector<int>& write_int_comp,
-
1353  const Vector<std::map<std::pair<int, int>,IntVector>>& particle_io_flags, bool is_checkpoint) const;
-
1354 #ifdef AMREX_USE_HDF5
-
1355 #include "AMReX_ParticlesHDF5.H"
-
1356 #endif
-
1357 
-
1358 protected:
-
1359 
-
1360  template <class RTYPE>
-
1361  void ReadParticles (int cnt, int grd, int lev, std::ifstream& ifs, int finest_level_in_file, bool convert_ids);
-
1362 
-
1363  void SetParticleSize ();
-
1364 
-
1365  DenseBins<typename ParticleTileType::ParticleTileDataType> m_bins;
-
1366 
-
1367 private:
-
1368  virtual void particlePostLocate (ParticleType& /*p*/, const ParticleLocData& /*pld*/,
-
1369  const int /*lev*/) {}
-
1370 
-
1371  virtual void correctCellVectors (int /*old_index*/, int /*new_index*/,
-
1372  int /*grid*/, const ParticleType& /*p*/) {}
-
1373 
-
1374  void RedistributeMPI (std::map<int, Vector<char> >& not_ours,
-
1375  int lev_min = 0, int lev_max = 0, int nGrow = 0, int local=0);
-
1376 
-
1377  template <typename P>
-
1378  void locateParticle (P& p, ParticleLocData& pld,
-
1379  int lev_min, int lev_max, int nGrow, int local_grid=-1) const;
-
1380 
-
1381  void Initialize ();
+
1247 
+
1248  // resize runtime SoA
+
1249  for (int lev = 0; lev < numLevels(); ++lev) {
+
1250  for (ParIterType pti(*this,lev); pti.isValid(); ++pti) {
+
1251  auto& tile = DefineAndReturnParticleTile(lev, pti);
+
1252  auto np = tile.numParticles();
+
1253  if (np > 0) {
+
1254  auto& soa = tile.GetStructOfArrays();
+
1255  soa.resize(np);
+
1256  }
+
1257  }
+
1258  }
+
1259  }
+
1260 
+
1261  template <typename T,
+
1262  std::enable_if_t<std::is_same_v<T,bool>,int> = 0>
+
1263  void AddIntComp (T communicate=true)
+
1264  {
+
1265  m_runtime_comps_defined = true;
+
1266  m_num_runtime_int++;
+
1267  h_redistribute_int_comp.push_back(communicate);
+
1268  SetParticleSize();
+
1269 
+
1270  // resize runtime SoA
+
1271  for (int lev = 0; lev < numLevels(); ++lev) {
+
1272  for (ParIterType pti(*this,lev); pti.isValid(); ++pti) {
+
1273  auto& tile = DefineAndReturnParticleTile(lev, pti);
+
1274  auto np = tile.numParticles();
+
1275  if (np > 0) {
+
1276  auto& soa = tile.GetStructOfArrays();
+
1277  soa.resize(np);
+
1278  }
+
1279  }
+
1280  }
+
1281  }
+
1282 
+
1283  int NumRuntimeRealComps () const { return m_num_runtime_real; }
+
1284  int NumRuntimeIntComps () const { return m_num_runtime_int; }
+
1285 
+
1286  int NumRealComps () const { return NArrayReal + NumRuntimeRealComps(); }
+
1287  int NumIntComps () const { return NArrayInt + NumRuntimeIntComps() ; }
+
1288 
+
1294  void ResizeRuntimeRealComp (int new_size, bool communicate);
+
1295 
+
1301  void ResizeRuntimeIntComp (int new_size, bool communicate);
+
1302 
+
1304  template <template<class> class NewAllocator=amrex::DefaultAllocator>
+
1305  using ContainerLike = amrex::ParticleContainer_impl<ParticleType, NArrayReal, NArrayInt, NewAllocator>;
+
1306 
+
1317  template <template<class> class NewAllocator=amrex::DefaultAllocator>
+
1318  ContainerLike<NewAllocator>
+
1319  make_alike () const
+
1320  {
+
1321  ContainerLike<NewAllocator> tmp(m_gdb);
+
1322 
+
1323  // add runtime real comps to tmp
+
1324  for (int ic = 0; ic < this->NumRuntimeRealComps(); ++ic) { tmp.AddRealComp(false); }
+
1325 
+
1326  // add runtime int comps to tmp
+
1327  for (int ic = 0; ic < this->NumRuntimeIntComps(); ++ic) { tmp.AddIntComp(false); }
+
1328 
+
1329  return tmp;
+
1330  }
+
1331 
+
1332  Vector<int> h_redistribute_real_comp;
+
1333  Vector<int> h_redistribute_int_comp;
+
1334 
+
1336  mutable bool levelDirectoriesCreated;
+
1337  mutable bool usePrePost;
+
1338  mutable bool doUnlink;
+
1339  int maxnextidPrePost;
+
1340  mutable int nOutFilesPrePost;
+
1341  Long nparticlesPrePost;
+
1342  Vector<Long> nParticlesAtLevelPrePost;
+
1343  mutable Vector<Vector<int>> whichPrePost;
+
1344  mutable Vector<Vector<int>> countPrePost;
+
1345  mutable Vector<Vector<Long>> wherePrePost;
+
1346  mutable std::string HdrFileNamePrePost;
+
1347  mutable Vector<std::string> filePrefixPrePost;
+
1348 
+
1349 protected:
+
1350 
+
1364  template <typename P>
+
1365  bool Where (const P& prt, ParticleLocData& pld,
+
1366  int lev_min = 0, int lev_max = -1, int nGrow=0, int local_grid=-1) const;
+
1367 
+
1368 
+
1379  template <typename P>
+
1380  bool EnforcePeriodicWhere (P& prt, ParticleLocData& pld,
+
1381  int lev_min = 0, int lev_max = -1, int local_grid=-1) const;
1382 
-
1383  bool m_runtime_comps_defined{false};
-
1384  int m_num_runtime_real{0};
-
1385  int m_num_runtime_int{0};
-
1386 
-
1387  size_t particle_size, superparticle_size;
-
1388  int num_real_comm_comps, num_int_comm_comps;
-
1389  Vector<ParticleLevel> m_particles;
-
1390 };
-
1391 
-
1392 template <int T_NStructReal, int T_NStructInt, int T_NArrayReal, int T_NArrayInt, template<class> class Allocator, class CellAssignor>
-
1393 using ParticleContainer = ParticleContainer_impl<Particle<T_NStructReal, T_NStructInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
+
1383 public:
+
1384  void
+
1385  WriteParticles (int level, std::ofstream& ofs, int fnum,
+
1386  Vector<int>& which, Vector<int>& count, Vector<Long>& where,
+
1387  const Vector<int>& write_real_comp, const Vector<int>& write_int_comp,
+
1388  const Vector<std::map<std::pair<int, int>,IntVector>>& particle_io_flags, bool is_checkpoint) const;
+
1389 #ifdef AMREX_USE_HDF5
+
1390 #include "AMReX_ParticlesHDF5.H"
+
1391 #endif
+
1392 
+
1393 protected:
1394 
-
1395 template <int T_NArrayReal, int T_NArrayInt, template<class> class Allocator=DefaultAllocator, class CellAssignor=DefaultAssignor>
-
1396 using ParticleContainerPureSoA = ParticleContainer_impl<SoAParticle<T_NArrayReal, T_NArrayInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
+
1395  template <class RTYPE>
+
1396  void ReadParticles (int cnt, int grd, int lev, std::ifstream& ifs, int finest_level_in_file, bool convert_ids);
1397 
-
1398 
-
1399 #include "AMReX_ParticleInit.H"
-
1400 #include "AMReX_ParticleContainerI.H"
-
1401 #include "AMReX_ParticleIO.H"
-
1402 
-
1403 #ifdef AMREX_USE_HDF5
-
1404 #include "AMReX_ParticleHDF5.H"
-
1405 #endif
-
1406 
-
1407 }
+
1398  void SetParticleSize ();
+
1399 
+
1400  DenseBins<typename ParticleTileType::ParticleTileDataType> m_bins;
+
1401 
+
1402 private:
+
1403  virtual void particlePostLocate (ParticleType& /*p*/, const ParticleLocData& /*pld*/,
+
1404  const int /*lev*/) {}
+
1405 
+
1406  virtual void correctCellVectors (int /*old_index*/, int /*new_index*/,
+
1407  int /*grid*/, const ParticleType& /*p*/) {}
1408 
-
1409 #endif /*_PARTICLES_H_*/
+
1409  void RedistributeMPI (std::map<int, Vector<char> >& not_ours,
+
1410  int lev_min = 0, int lev_max = 0, int nGrow = 0, int local=0);
+
1411 
+
1412  template <typename P>
+
1413  void locateParticle (P& p, ParticleLocData& pld,
+
1414  int lev_min, int lev_max, int nGrow, int local_grid=-1) const;
+
1415 
+
1416  void Initialize ();
+
1417 
+
1418  bool m_runtime_comps_defined{false};
+
1419  int m_num_runtime_real{0};
+
1420  int m_num_runtime_int{0};
+
1421 
+
1422  size_t particle_size, superparticle_size;
+
1423  int num_real_comm_comps, num_int_comm_comps;
+
1424  Vector<ParticleLevel> m_particles;
+
1425 };
+
1426 
+
1427 template <int T_NStructReal, int T_NStructInt, int T_NArrayReal, int T_NArrayInt, template<class> class Allocator, class CellAssignor>
+
1428 using ParticleContainer = ParticleContainer_impl<Particle<T_NStructReal, T_NStructInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
+
1429 
+
1430 template <int T_NArrayReal, int T_NArrayInt, template<class> class Allocator=DefaultAllocator, class CellAssignor=DefaultAssignor>
+
1431 using ParticleContainerPureSoA = ParticleContainer_impl<SoAParticle<T_NArrayReal, T_NArrayInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
+
1432 
+
1433 
+
1434 #include "AMReX_ParticleInit.H"
+
1435 #include "AMReX_ParticleContainerI.H"
+
1436 #include "AMReX_ParticleIO.H"
+
1437 
+
1438 #ifdef AMREX_USE_HDF5
+
1439 #include "AMReX_ParticleHDF5.H"
+
1440 #endif
+
1441 
+
1442 }
+
1443 
+
1444 #endif /*_PARTICLES_H_*/
AMReX_ArrayOfStructs.H
AMReX_Array.H
AMReX_DenseBins.H
@@ -811,6 +836,7 @@
amrex::Geometry
Rectangular problem domain geometry.
Definition: AMReX_Geometry.H:73
amrex::IntVect
Definition: AMReX_IntVect.H:46
amrex::MFIter
Definition: AMReX_MFIter.H:57
+
amrex::MFIter::isValid
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition: AMReX_MFIter.H:141
amrex::MultiFab
A collection (stored as an array) of FArrayBox objects.
Definition: AMReX_MultiFab.H:38
amrex::PODVector
Definition: AMReX_PODVector.H:217
amrex::ParConstIter_impl
Definition: AMReX_ParIter.H:147
@@ -820,37 +846,38 @@
amrex::ParticleContainerBase
Definition: AMReX_ParticleContainerBase.H:23
amrex::ParticleContainerBase::m_gdb
ParGDBBase * m_gdb
Definition: AMReX_ParticleContainerBase.H:264
amrex::ParticleContainerBase::Define
void Define(ParGDBBase *gdb)
Definition: AMReX_ParticleContainerBase.H:83
+
amrex::ParticleContainerBase::numLevels
int numLevels() const
the number of defined levels in the ParticleContainer
Definition: AMReX_ParticleContainerBase.H:222
amrex::ParticleContainer_impl
A distributed container for Particles sorted onto the levels, grids, and tiles of a block-structured ...
Definition: AMReX_ParticleContainer.H:144
amrex::ParticleContainer_impl::AssignDensity
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
amrex::ParticleContainer_impl::SetUseUnlink
void SetUseUnlink(bool tf) const
Definition: AMReX_ParticleContainer.H:1223
-
amrex::ParticleContainer_impl::m_particles
Vector< ParticleLevel > m_particles
Definition: AMReX_ParticleContainer.H:1389
-
amrex::ParticleContainer_impl::nParticlesAtLevelPrePost
Vector< Long > nParticlesAtLevelPrePost
Definition: AMReX_ParticleContainer.H:1307
+
amrex::ParticleContainer_impl::m_particles
Vector< ParticleLevel > m_particles
Definition: AMReX_ParticleContainer.H:1424
+
amrex::ParticleContainer_impl::nParticlesAtLevelPrePost
Vector< Long > nParticlesAtLevelPrePost
Definition: AMReX_ParticleContainer.H:1342
amrex::ParticleContainer_impl::WriteBinaryParticleData
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.
amrex::ParticleContainer_impl::InitFromBinaryFile
void InitFromBinaryFile(const std::string &file, int extradata)
Definition: AMReX_ParticleInit.H:483
amrex::ParticleContainer_impl::GetLevelDirectoriesCreated
bool GetLevelDirectoriesCreated() const
Definition: AMReX_ParticleContainer.H:1211
-
amrex::ParticleContainer_impl::superparticle_size
size_t superparticle_size
Definition: AMReX_ParticleContainer.H:1387
+
amrex::ParticleContainer_impl::superparticle_size
size_t superparticle_size
Definition: AMReX_ParticleContainer.H:1422
amrex::ParticleContainer_impl::ByteSpread
std::array< Long, 3 > ByteSpread() const
Definition: AMReX_ParticleContainerI.H:467
amrex::ParticleContainer_impl::clearParticles
void clearParticles()
Clear all the particles in this container. This does not free memory.
Definition: AMReX_ParticleContainerI.H:976
amrex::ParticleContainer_impl::copyParticles
void copyParticles(const PCType &other, bool local=false)
Copy particles from other to this ParticleContainer. Will clear all the particles from this container...
-
amrex::ParticleContainer_impl::doUnlink
bool doUnlink
Definition: AMReX_ParticleContainer.H:1303
-
amrex::ParticleContainer_impl::whichPrePost
Vector< Vector< int > > whichPrePost
Definition: AMReX_ParticleContainer.H:1308
+
amrex::ParticleContainer_impl::doUnlink
bool doUnlink
Definition: AMReX_ParticleContainer.H:1338
+
amrex::ParticleContainer_impl::whichPrePost
Vector< Vector< int > > whichPrePost
Definition: AMReX_ParticleContainer.H:1343
amrex::ParticleContainer_impl::WriteParticleRealData
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:11
amrex::ParticleContainer_impl::ParticlesAt
const ParticleTileType & ParticlesAt(int lev, const Iterator &iter) const
Return the ParticleTile for level "lev" and Iterator "iter". Const version.
Definition: AMReX_ParticleContainer.H:1084
amrex::ParticleContainer_impl::ParticleContainer_impl
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:276
-
amrex::ParticleContainer_impl::HdrFileNamePrePost
std::string HdrFileNamePrePost
Definition: AMReX_ParticleContainer.H:1311
-
amrex::ParticleContainer_impl::wherePrePost
Vector< Vector< Long > > wherePrePost
Definition: AMReX_ParticleContainer.H:1310
+
amrex::ParticleContainer_impl::HdrFileNamePrePost
std::string HdrFileNamePrePost
Definition: AMReX_ParticleContainer.H:1346
+
amrex::ParticleContainer_impl::wherePrePost
Vector< Vector< Long > > wherePrePost
Definition: AMReX_ParticleContainer.H:1345
amrex::ParticleContainer_impl::WritePlotFile
void WritePlotFile(const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, F &&f) const
This version of WritePlotFile writes all components and allows the user to specify the names of the c...
amrex::ParticleContainer_impl::ParticleRealDescriptor
RealDescriptor ParticleRealDescriptor
Definition: AMReX_ParticleContainer.H:176
amrex::ParticleContainer_impl::DefineAndReturnParticleTile
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:1134
-
amrex::ParticleContainer_impl::nOutFilesPrePost
int nOutFilesPrePost
Definition: AMReX_ParticleContainer.H:1305
-
amrex::ParticleContainer_impl::maxnextidPrePost
int maxnextidPrePost
Definition: AMReX_ParticleContainer.H:1304
+
amrex::ParticleContainer_impl::nOutFilesPrePost
int nOutFilesPrePost
Definition: AMReX_ParticleContainer.H:1340
+
amrex::ParticleContainer_impl::maxnextidPrePost
int maxnextidPrePost
Definition: AMReX_ParticleContainer.H:1339
amrex::ParticleContainer_impl::WritePlotFile
void WritePlotFile(const std::string &dir, const std::string &name, F &&f) const
This version of WritePlotFile writes all components and assigns component names.
amrex::ParticleContainer_impl::ParticleContainer_impl
ParticleContainer_impl(ParticleContainer_impl &&) noexcept=default
amrex::ParticleContainer_impl::Checkpoint
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:743
amrex::ParticleContainer_impl::addParticles
void addParticles(const PCType &other, bool local=false)
Add particles from other to this ParticleContainer. local controls whether or not to call Redistribut...
amrex::ParticleContainer_impl::ParticleLevel
std::map< std::pair< int, int >, ParticleTileType > ParticleLevel
Definition: AMReX_ParticleContainer.H:185
-
amrex::ParticleContainer_impl::levelDirectoriesCreated
bool levelDirectoriesCreated
Variables for i/o optimization saved for pre and post checkpoint.
Definition: AMReX_ParticleContainer.H:1301
-
amrex::ParticleContainer_impl::make_alike
ContainerLike< NewAllocator > make_alike() const
Definition: AMReX_ParticleContainer.H:1284
+
amrex::ParticleContainer_impl::levelDirectoriesCreated
bool levelDirectoriesCreated
Variables for i/o optimization saved for pre and post checkpoint.
Definition: AMReX_ParticleContainer.H:1336
+
amrex::ParticleContainer_impl::make_alike
ContainerLike< NewAllocator > make_alike() const
Definition: AMReX_ParticleContainer.H:1319
amrex::ParticleContainer_impl::WriteAsciiFile
void WriteAsciiFile(const std::string &file)
Definition: AMReX_ParticleIO.H:1134
amrex::ParticleContainer_impl::NArrayInt
static constexpr int NArrayInt
Number of extra integer components stored in struct-of-array form.
Definition: AMReX_ParticleContainer.H:157
amrex::ParticleContainer_impl::Initialize
void Initialize()
Definition: AMReX_ParticleContainerI.H:33
@@ -878,59 +905,59 @@
amrex::ParticleContainer_impl::NStructInt
static constexpr int NStructInt
Number of extra integer components in the particle struct.
Definition: AMReX_ParticleContainer.H:153
amrex::ParticleContainer_impl::ParticleContainer_impl
ParticleContainer_impl()
Default constructor - construct an empty particle container that has no concept of a level hierarchy....
Definition: AMReX_ParticleContainer.H:198
amrex::ParticleContainer_impl::SetUsePrePost
void SetUsePrePost(bool tf) const
Definition: AMReX_ParticleContainer.H:1213
-
amrex::ParticleContainer_impl::NumRealComps
int NumRealComps() const
Definition: AMReX_ParticleContainer.H:1262
+
amrex::ParticleContainer_impl::NumRealComps
int NumRealComps() const
Definition: AMReX_ParticleContainer.H:1286
amrex::ParticleContainer_impl::WritePlotFilePre
void WritePlotFilePre()
Definition: AMReX_ParticleIO.H:560
amrex::ParticleContainer_impl::EnforcePeriodicWhere
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...
amrex::ParticleContainer_impl::RemoveParticlesAtLevel
void RemoveParticlesAtLevel(int level)
The Following methods are for managing Virtual and Ghost Particles.
Definition: AMReX_ParticleContainerI.H:608
amrex::ParticleContainer_impl::InitFromAsciiFile
void InitFromAsciiFile(const std::string &file, int extradata, const IntVect *Nrep=nullptr)
Definition: AMReX_ParticleInit.H:37
amrex::ParticleContainer_impl::DefineAndReturnParticleTile
ParticleTileType & DefineAndReturnParticleTile(int lev, const Iterator &iter)
Define and return the ParticleTile for level "lev", and Iterator "iter".
Definition: AMReX_ParticleContainer.H:1162
amrex::ParticleContainer_impl::TotalNumberOfParticles
Long TotalNumberOfParticles(bool only_valid=true, bool only_local=false) const
Returns # of particles at all levels.
Definition: AMReX_ParticleContainerI.H:351
-
amrex::ParticleContainer_impl::h_redistribute_int_comp
Vector< int > h_redistribute_int_comp
Definition: AMReX_ParticleContainer.H:1298
+
amrex::ParticleContainer_impl::h_redistribute_int_comp
Vector< int > h_redistribute_int_comp
Definition: AMReX_ParticleContainer.H:1333
amrex::ParticleContainer_impl::SoA
typename ParticleTileType::SoA SoA
Definition: AMReX_ParticleContainer.H:187
-
amrex::ParticleContainer_impl::correctCellVectors
virtual void correctCellVectors(int, int, int, const ParticleType &)
Definition: AMReX_ParticleContainer.H:1371
+
amrex::ParticleContainer_impl::correctCellVectors
virtual void correctCellVectors(int, int, int, const ParticleType &)
Definition: AMReX_ParticleContainer.H:1406
amrex::ParticleContainer_impl::WritePlotFile
void WritePlotFile(const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f) const
This version of WritePlotFile writes all components and allows the user to specify the names of the c...
amrex::ParticleContainer_impl::OK
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:2287
amrex::ParticleContainer_impl::locateParticle
void locateParticle(P &p, ParticleLocData &pld, int lev_min, int lev_max, int nGrow, int local_grid=-1) const
-
amrex::ParticleContainer_impl::NumRuntimeIntComps
int NumRuntimeIntComps() const
Definition: AMReX_ParticleContainer.H:1260
+
amrex::ParticleContainer_impl::NumRuntimeIntComps
int NumRuntimeIntComps() const
Definition: AMReX_ParticleContainer.H:1284
amrex::ParticleContainer_impl::GetNParticlesPrePost
Long GetNParticlesPrePost() const
Definition: AMReX_ParticleContainer.H:1221
amrex::ParticleContainer_impl::InitRandom
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:968
amrex::ParticleContainer_impl::ResizeRuntimeRealComp
void ResizeRuntimeRealComp(int new_size, bool communicate)
Definition: AMReX_ParticleContainerI.H:2488
amrex::ParticleContainer_impl::CellAssignor
T_CellAssignor CellAssignor
Definition: AMReX_ParticleContainer.H:148
amrex::ParticleContainer_impl::RemoveParticlesNotAtFinestLevel
void RemoveParticlesNotAtFinestLevel()
Definition: AMReX_ParticleContainerI.H:622
-
amrex::ParticleContainer_impl::m_bins
DenseBins< typename ParticleTileType::ParticleTileDataType > m_bins
Definition: AMReX_ParticleContainer.H:1365
+
amrex::ParticleContainer_impl::m_bins
DenseBins< typename ParticleTileType::ParticleTileDataType > m_bins
Definition: AMReX_ParticleContainer.H:1400
amrex::ParticleContainer_impl::ReadParticleRealData
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:25
amrex::ParticleContainer_impl::RedistributeCPU
void RedistributeCPU(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Definition: AMReX_ParticleContainerI.H:1426
-
amrex::ParticleContainer_impl::m_num_runtime_int
int m_num_runtime_int
Definition: AMReX_ParticleContainer.H:1385
+
amrex::ParticleContainer_impl::m_num_runtime_int
int m_num_runtime_int
Definition: AMReX_ParticleContainer.H:1420
amrex::ParticleContainer_impl::ParticleContainer_impl
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:214
amrex::ParticleContainer_impl::Restart
void Restart(const std::string &dir, const std::string &file)
Restart from checkpoint.
Definition: AMReX_ParticleIO.H:644
amrex::ParticleContainer_impl::WritePlotFilePost
void WritePlotFilePost()
Definition: AMReX_ParticleIO.H:570
amrex::ParticleContainer_impl::Define
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:357
amrex::ParticleContainer_impl::ReadParticles
void ReadParticles(int cnt, int grd, int lev, std::ifstream &ifs, int finest_level_in_file, bool convert_ids)
amrex::ParticleContainer_impl::CreateVirtualParticles
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:689
-
amrex::ParticleContainer_impl::NumRuntimeRealComps
int NumRuntimeRealComps() const
Definition: AMReX_ParticleContainer.H:1259
+
amrex::ParticleContainer_impl::NumRuntimeRealComps
int NumRuntimeRealComps() const
Definition: AMReX_ParticleContainer.H:1283
amrex::ParticleContainer_impl::Checkpoint
void Checkpoint(const std::string &dir, const std::string &name, bool is_checkpoint, 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. This version allows the particle compo...
-
amrex::ParticleContainer_impl::nparticlesPrePost
Long nparticlesPrePost
Definition: AMReX_ParticleContainer.H:1306
+
amrex::ParticleContainer_impl::nparticlesPrePost
Long nparticlesPrePost
Definition: AMReX_ParticleContainer.H:1341
amrex::ParticleContainer_impl::InitNRandomPerCell
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:1547
amrex::ParticleContainer_impl::WritePlotFile
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:97
amrex::ParticleContainer_impl::WritePlotFile
void WritePlotFile(const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, F &&f) const
This version of WritePlotFile assigns component names, but allows the user to pass in a vector of int...
-
amrex::ParticleContainer_impl::m_num_runtime_real
int m_num_runtime_real
Definition: AMReX_ParticleContainer.H:1384
+
amrex::ParticleContainer_impl::m_num_runtime_real
int m_num_runtime_real
Definition: AMReX_ParticleContainer.H:1419
amrex::ParticleContainer_impl::copyParticles
void copyParticles(const PCType &other, F &&f, bool local=false)
Copy particles from other to this ParticleContainer. Will clear all the particles from this container...
amrex::ParticleContainer_impl::CheckpointPre
void CheckpointPre()
Definition: AMReX_ParticleIO.H:447
amrex::ParticleContainer_impl::Reset
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:262
-
amrex::ParticleContainer_impl::filePrefixPrePost
Vector< std::string > filePrefixPrePost
Definition: AMReX_ParticleContainer.H:1312
+
amrex::ParticleContainer_impl::filePrefixPrePost
Vector< std::string > filePrefixPrePost
Definition: AMReX_ParticleContainer.H:1347
amrex::ParticleContainer_impl::RedistributeGPU
void RedistributeGPU(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Definition: AMReX_ParticleContainerI.H:1236
amrex::ParticleContainer_impl::numLocalTilesAtLevel
int numLocalTilesAtLevel(int lev) const
The total number of tiles on this rank on this level.
Definition: AMReX_ParticleContainer.H:368
amrex::ParticleContainer_impl::reserveData
void reserveData() override
Definition: AMReX_ParticleContainerI.H:296
amrex::ParticleContainer_impl::WritePlotFile
void WritePlotFile(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) const
This is the most general version of WritePlotFile, which takes component names and flags for whether ...
amrex::ParticleContainer_impl::NStructReal
static constexpr int NStructReal
Number of extra Real components in the particle struct.
Definition: AMReX_ParticleContainer.H:151
-
amrex::ParticleContainer_impl::h_redistribute_real_comp
Vector< int > h_redistribute_real_comp
Definition: AMReX_ParticleContainer.H:1297
+
amrex::ParticleContainer_impl::h_redistribute_real_comp
Vector< int > h_redistribute_real_comp
Definition: AMReX_ParticleContainer.H:1332
amrex::ParticleContainer_impl::RealType
typename Particle< NStructReal, NStructInt >::RealType RealType
The type of the Real data.
Definition: AMReX_ParticleContainer.H:171
amrex::ParticleContainer_impl::GetUseUnlink
bool GetUseUnlink() const
Definition: AMReX_ParticleContainer.H:1227
amrex::ParticleContainer_impl::NumberOfParticlesInGrid
Vector< Long > NumberOfParticlesInGrid(int level, bool only_valid=true, bool only_local=false) const
Definition: AMReX_ParticleContainerI.H:366
-
amrex::ParticleContainer_impl::NumIntComps
int NumIntComps() const
Definition: AMReX_ParticleContainer.H:1263
+
amrex::ParticleContainer_impl::NumIntComps
int NumIntComps() const
Definition: AMReX_ParticleContainer.H:1287
amrex::ParticleContainer_impl::AllocatorType
Allocator< T > AllocatorType
The memory allocator in use.
Definition: AMReX_ParticleContainer.H:167
amrex::ParticleContainer_impl::RedistributeMPI
void RedistributeMPI(std::map< int, Vector< char > > &not_ours, int lev_min=0, int lev_max=0, int nGrow=0, int local=0)
Definition: AMReX_ParticleContainerI.H:1940
-
amrex::ParticleContainer_impl::AddIntComp
void AddIntComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1251
+
amrex::ParticleContainer_impl::AddIntComp
void AddIntComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1263
amrex::ParticleContainer_impl::GetParticles
ParticleLevel & GetParticles(int lev)
Return the ParticleLevel for level "lev". Non-const version.
Definition: AMReX_ParticleContainer.H:1010
amrex::ParticleContainer_impl::CreateGhostParticles
void CreateGhostParticles(int level, int ngrow, ParticleTileType &ghosts) const
Create ghost particles for a given level that are copies of particles near coarse->fine boundaries in...
amrex::ParticleContainer_impl::AddParticlesAtLevel
void AddParticlesAtLevel(ParticleTileType &particles, int level, int nGrow=0)
Add particles from a pbox to the grid at this level.
@@ -944,10 +971,10 @@
amrex::ParticleContainer_impl::ParticleContainer_impl
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:254
amrex::ParticleContainer_impl::superParticleSize
Long superParticleSize() const
Definition: AMReX_ParticleContainer.H:1237
amrex::ParticleContainer_impl::IntVector
typename SoA::IntVector IntVector
Definition: AMReX_ParticleContainer.H:190
-
amrex::ParticleContainer_impl::num_int_comm_comps
int num_int_comm_comps
Definition: AMReX_ParticleContainer.H:1388
-
amrex::ParticleContainer_impl::particle_size
size_t particle_size
Definition: AMReX_ParticleContainer.H:1387
+
amrex::ParticleContainer_impl::num_int_comm_comps
int num_int_comm_comps
Definition: AMReX_ParticleContainer.H:1423
+
amrex::ParticleContainer_impl::particle_size
size_t particle_size
Definition: AMReX_ParticleContainer.H:1422
amrex::ParticleContainer_impl::SortParticlesByBin
void SortParticlesByBin(IntVect bin_size)
Sort the particles on each tile by groups of cells, given an IntVect bin_size.
Definition: AMReX_ParticleContainerI.H:1173
-
amrex::ParticleContainer_impl::particlePostLocate
virtual void particlePostLocate(ParticleType &, const ParticleLocData &, const int)
Definition: AMReX_ParticleContainer.H:1368
+
amrex::ParticleContainer_impl::particlePostLocate
virtual void particlePostLocate(ParticleType &, const ParticleLocData &, const int)
Definition: AMReX_ParticleContainer.H:1403
amrex::ParticleContainer_impl::CreateGhostParticles
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...
amrex::ParticleContainer_impl::Define
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:338
amrex::ParticleContainer_impl::AddParticlesAtLevel
void AddParticlesAtLevel(AoS &particles, int level, int nGrow=0)
Add particles from a pbox to the grid at this level.
@@ -956,7 +983,7 @@
amrex::ParticleContainer_impl::ResizeRuntimeIntComp
void ResizeRuntimeIntComp(int new_size, bool communicate)
Definition: AMReX_ParticleContainerI.H:2514
amrex::ParticleContainer_impl::InitFromBinaryMetaFile
void InitFromBinaryMetaFile(const std::string &file, int extradata)
Definition: AMReX_ParticleInit.H:929
amrex::ParticleContainer_impl::resizeData
void resizeData() override
Definition: AMReX_ParticleContainerI.H:305
-
amrex::ParticleContainer_impl::num_real_comm_comps
int num_real_comm_comps
Definition: AMReX_ParticleContainer.H:1388
+
amrex::ParticleContainer_impl::num_real_comm_comps
int num_real_comm_comps
Definition: AMReX_ParticleContainer.H:1423
amrex::ParticleContainer_impl::ParticlesAt
ParticleTileType & ParticlesAt(int lev, const Iterator &iter)
Return the ParticleTile for level "lev" and Iterator "iter". Non-const version.
Definition: AMReX_ParticleContainer.H:1109
amrex::ParticleContainer_impl::Index
IntVect Index(const P &p, int lev) const
amrex::ParticleContainer_impl::Redistribute
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:1066
@@ -968,10 +995,10 @@
amrex::ParticleContainer_impl::~ParticleContainer_impl
~ParticleContainer_impl() override=default
amrex::ParticleContainer_impl::CheckpointPost
void CheckpointPost()
Definition: AMReX_ParticleIO.H:504
amrex::ParticleContainer_impl::ParticleType
T_ParticleType ParticleType
Definition: AMReX_ParticleContainer.H:146
-
amrex::ParticleContainer_impl::m_runtime_comps_defined
bool m_runtime_comps_defined
Definition: AMReX_ParticleContainer.H:1383
-
amrex::ParticleContainer_impl::countPrePost
Vector< Vector< int > > countPrePost
Definition: AMReX_ParticleContainer.H:1309
+
amrex::ParticleContainer_impl::m_runtime_comps_defined
bool m_runtime_comps_defined
Definition: AMReX_ParticleContainer.H:1418
+
amrex::ParticleContainer_impl::countPrePost
Vector< Vector< int > > countPrePost
Definition: AMReX_ParticleContainer.H:1344
amrex::ParticleContainer_impl::InitRandomPerBox
void InitRandomPerBox(Long icount, ULong iseed, const ParticleInitData &pdata)
This initializes the container with icount randomly distributed particles per box,...
Definition: AMReX_ParticleInit.H:1362
-
amrex::ParticleContainer_impl::usePrePost
bool usePrePost
Definition: AMReX_ParticleContainer.H:1302
+
amrex::ParticleContainer_impl::usePrePost
bool usePrePost
Definition: AMReX_ParticleContainer.H:1337
amrex::ParticleContainer_impl::SetParticleSize
void SetParticleSize()
Definition: AMReX_ParticleContainerI.H:7
amrex::RealBox
A Box with real dimensions. A RealBox is OK iff volume >= 0.
Definition: AMReX_RealBox.H:21
amrex::RealDescriptor
A Descriptor of the Real Type.
Definition: AMReX_FabConv.H:105
diff --git a/amrex/docs_html/doxygen/classamrex_1_1ParticleContainer__impl.html b/amrex/docs_html/doxygen/classamrex_1_1ParticleContainer__impl.html index 1e8ace36bc..a630c339a7 100644 --- a/amrex/docs_html/doxygen/classamrex_1_1ParticleContainer__impl.html +++ b/amrex/docs_html/doxygen/classamrex_1_1ParticleContainer__impl.html @@ -5104,6 +5104,14 @@

+

Resize the Int runtime components (SoA)

+
Parameters
+ + + +
new_sizenew number of integer runtime components
communicateparticipate this component in redistribute
+
+
@@ -5134,6 +5142,14 @@

+

Resize the Real runtime components (SoA)

+
Parameters
+ + + +
new_sizenew number of Real runtime components
communicateparticipate this component in redistribute
+
+
diff --git a/amrex/docs_xml/doxygen/AMReX__ParticleContainerI_8H.xml b/amrex/docs_xml/doxygen/AMReX__ParticleContainerI_8H.xml index 99cacbbd9d..43bff164f2 100644 --- a/amrex/docs_xml/doxygen/AMReX__ParticleContainerI_8H.xml +++ b/amrex/docs_xml/doxygen/AMReX__ParticleContainerI_8H.xml @@ -1347,8 +1347,8 @@ intfinest_lev_particles; if(lev_max==-1){ -lev_max=theEffectiveFinestLevel; -finest_lev_particles=m_particles.size()-1; +lev_max=theEffectiveFinestLevel; +finest_lev_particles=m_particles.size()-1; }else{ finest_lev_particles=lev_max; } @@ -1361,10 +1361,10 @@ autoassign_grid=m_particle_locator.getGridAssignor(); BL_PROFILE_VAR_START(blp_partition); -ParticleCopyOpop; +ParticleCopyOpop; intnum_levels=finest_lev_particles+1; -op.setNumLevels(num_levels); -Vector<std::map<int,int>>new_sizes(num_levels); +op.setNumLevels(num_levels); +Vector<std::map<int, int>>new_sizes(num_levels); constautoplo=Geom(0).ProbLoArray(); constautophi=Geom(0).ProbHiArray(); constautorlo=Geom(0).ProbLoArrayInParticleReal(); @@ -1376,26 +1376,26 @@ for(auto&kv:plev) { intgid=kv.first.first; -inttid=kv.first.second; +inttid=kv.first.second; autoindex=std::make_pair(gid,tid); auto&src_tile=plev[index]; constsize_tnp=src_tile.numParticles(); intnum_stay=partitionParticlesByDest(src_tile,assign_grid, -std::forward<CellAssignor>(CellAssignor{}), +std::forward<CellAssignor>(CellAssignor{}), BufferMap(), plo,phi,rlo,rhi,is_per,lev,gid,tid, lev_min,lev_max,nGrow,remove_negative); intnum_move=np-num_stay; new_sizes[lev][gid]=num_stay; -op.resize(gid,lev,num_move); +op.resize(gid,lev,num_move); -autop_boxes=op.m_boxes[lev][gid].dataPtr(); -autop_levs=op.m_levels[lev][gid].dataPtr(); -autop_src_indices=op.m_src_indices[lev][gid].dataPtr(); -autop_periodic_shift=op.m_periodic_shift[lev][gid].dataPtr(); +autop_boxes=op.m_boxes[lev][gid].dataPtr(); +autop_levs=op.m_levels[lev][gid].dataPtr(); +autop_src_indices=op.m_src_indices[lev][gid].dataPtr(); +autop_periodic_shift=op.m_periodic_shift[lev][gid].dataPtr(); autoptd=src_tile.getParticleTileData(); AMREX_FOR_1D(num_move,i, @@ -1445,7 +1445,7 @@ } } -for(intlev=lev_min;lev<=lev_max;lev++) +for(intlev=lev_min;lev<=lev_max;lev++) { particle_detail::clearEmptyEntries(m_particles[lev]); } @@ -1456,49 +1456,49 @@ <<m_particles.size()<<"to"<<theEffectiveFinestLevel+1<<'\n'; } AMREX_ASSERT(int(m_particles.size())>=2); - + m_particles.resize(theEffectiveFinestLevel+1); m_dummy_mf.resize(theEffectiveFinestLevel+1); } if(ParallelDescriptor::UseGpuAwareMpi()) { -plan.buildMPIFinish(BufferMap()); +plan.buildMPIFinish(BufferMap()); communicateParticlesStart(*this,plan,snd_buffer,rcv_buffer); -unpackBuffer(*this,plan,snd_buffer,RedistributeUnpackPolicy()); +unpackBuffer(*this,plan,snd_buffer,RedistributeUnpackPolicy()); communicateParticlesFinish(plan); -unpackRemotes(*this,plan,rcv_buffer,RedistributeUnpackPolicy()); +unpackRemotes(*this,plan,rcv_buffer,RedistributeUnpackPolicy()); } else { Gpu::Device::streamSynchronize(); -Gpu::PinnedVector<char>pinned_snd_buffer; -Gpu::PinnedVector<char>pinned_rcv_buffer; +Gpu::PinnedVector<char>pinned_snd_buffer; +Gpu::PinnedVector<char>pinned_rcv_buffer; if(snd_buffer.arena()->isPinned()){ plan.buildMPIFinish(BufferMap()); Gpu::Device::streamSynchronize(); communicateParticlesStart(*this,plan,snd_buffer,pinned_rcv_buffer); }else{ -pinned_snd_buffer.resize(snd_buffer.size()); -Gpu::dtoh_memcpy_async(pinned_snd_buffer.dataPtr(),snd_buffer.dataPtr(),snd_buffer.size()); +pinned_snd_buffer.resize(snd_buffer.size()); +Gpu::dtoh_memcpy_async(pinned_snd_buffer.dataPtr(),snd_buffer.dataPtr(),snd_buffer.size()); plan.buildMPIFinish(BufferMap()); Gpu::Device::streamSynchronize(); communicateParticlesStart(*this,plan,pinned_snd_buffer,pinned_rcv_buffer); } -rcv_buffer.resize(pinned_rcv_buffer.size()); -unpackBuffer(*this,plan,snd_buffer,RedistributeUnpackPolicy()); +rcv_buffer.resize(pinned_rcv_buffer.size()); +unpackBuffer(*this,plan,snd_buffer,RedistributeUnpackPolicy()); communicateParticlesFinish(plan); -Gpu::htod_memcpy_async(rcv_buffer.dataPtr(),pinned_rcv_buffer.dataPtr(),pinned_rcv_buffer.size()); -unpackRemotes(*this,plan,rcv_buffer,RedistributeUnpackPolicy()); +Gpu::htod_memcpy_async(rcv_buffer.dataPtr(),pinned_rcv_buffer.dataPtr(),pinned_rcv_buffer.size()); +unpackRemotes(*this,plan,rcv_buffer,RedistributeUnpackPolicy()); } Gpu::Device::streamSynchronize(); AMREX_ASSERT(numParticlesOutOfRange(*this,lev_min,lev_max,nGrow)==0); #else amrex::ignore_unused(lev_min,lev_max,nGrow,local,remove_negative); -#endif +#endif } // @@ -1507,8 +1507,8 @@ template<typenameParticleType,intNArrayReal,intNArrayInt, template<class>classAllocator,classCellAssignor> void -ParticleContainer_impl<ParticleType,NArrayReal,NArrayInt,Allocator,CellAssignor> -::RedistributeCPU(intlev_min,intlev_max,intnGrow,intlocal,boolremove_negative) +ParticleContainer_impl<ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor> +::RedistributeCPU(intlev_min,intlev_max,intnGrow,intlocal,boolremove_negative) { BL_PROFILE("ParticleContainer::RedistributeCPU()"); diff --git a/amrex/docs_xml/doxygen/AMReX__ParticleContainer_8H.xml b/amrex/docs_xml/doxygen/AMReX__ParticleContainer_8H.xml index f7b203ea5d..2424b3f18c 100644 --- a/amrex/docs_xml/doxygen/AMReX__ParticleContainer_8H.xml +++ b/amrex/docs_xml/doxygen/AMReX__ParticleContainer_8H.xml @@ -3342,134 +3342,159 @@ m_num_runtime_real++; h_redistribute_real_comp.push_back(communicate); SetParticleSize(); -} - -template<typenameT, -std::enable_if_t<std::is_same_v<T,bool>,int>=0> -voidAddIntComp(Tcommunicate=true) -{ -m_runtime_comps_defined=true; -m_num_runtime_int++; -h_redistribute_int_comp.push_back(communicate); -SetParticleSize(); -} - -intNumRuntimeRealComps()const{returnm_num_runtime_real;} -intNumRuntimeIntComps()const{returnm_num_runtime_int;} - -intNumRealComps()const{returnNArrayReal+NumRuntimeRealComps();} -intNumIntComps()const{returnNArrayInt+NumRuntimeIntComps();} - -voidResizeRuntimeRealComp(intnew_size,boolcommunicate); -voidResizeRuntimeIntComp(intnew_size,boolcommunicate); - -template<template<class>classNewAllocator=amrex::DefaultAllocator> -usingContainerLike=amrex::ParticleContainer_impl<ParticleType, NArrayReal, NArrayInt, NewAllocator>; - -template<template<class>classNewAllocator=amrex::DefaultAllocator> -ContainerLike<NewAllocator> -make_alike()const -{ -ContainerLike<NewAllocator>tmp(m_gdb); - -//addruntimerealcompstotmp -for(intic=0;ic<this->NumRuntimeRealComps();++ic){tmp.AddRealComp(false);} - -//addruntimeintcompstotmp -for(intic=0;ic<this->NumRuntimeIntComps();++ic){tmp.AddIntComp(false);} - -returntmp; -} - -Vector<int>h_redistribute_real_comp; -Vector<int>h_redistribute_int_comp; - -mutableboollevelDirectoriesCreated; -mutableboolusePrePost; -mutablebooldoUnlink; -intmaxnextidPrePost; -mutableintnOutFilesPrePost; -LongnparticlesPrePost; -Vector<Long>nParticlesAtLevelPrePost; -mutableVector<Vector<int>>whichPrePost; -mutableVector<Vector<int>>countPrePost; -mutableVector<Vector<Long>>wherePrePost; -mutablestd::stringHdrFileNamePrePost; -mutableVector<std::string>filePrefixPrePost; - -protected: - -template<typenameP> -boolWhere(constP&prt,ParticleLocData&pld, -intlev_min=0,intlev_max=-1,intnGrow=0,intlocal_grid=-1)const; - - -template<typenameP> -boolEnforcePeriodicWhere(P&prt,ParticleLocData&pld, -intlev_min=0,intlev_max=-1,intlocal_grid=-1)const; - -public: -void -WriteParticles(intlevel,std::ofstream&ofs,intfnum, -Vector<int>&which,Vector<int>&count,Vector<Long>&where, -constVector<int>&write_real_comp,constVector<int>&write_int_comp, -constVector<std::map<std::pair<int,int>,IntVector>>&particle_io_flags,boolis_checkpoint)const; -#ifdefAMREX_USE_HDF5 -#include"AMReX_ParticlesHDF5.H" -#endif - -protected: - -template<classRTYPE> -voidReadParticles(intcnt,intgrd,intlev,std::ifstream&ifs,intfinest_level_in_file,boolconvert_ids); - -voidSetParticleSize(); - -DenseBins<typename ParticleTileType::ParticleTileDataType>m_bins; - -private: -virtualvoidparticlePostLocate(ParticleType&/*p*/,constParticleLocData&/*pld*/, -constint/*lev*/){} - -virtualvoidcorrectCellVectors(int/*old_index*/,int/*new_index*/, -int/*grid*/,constParticleType&/*p*/){} - -voidRedistributeMPI(std::map<int,Vector<char>>&not_ours, -intlev_min=0,intlev_max=0,intnGrow=0,intlocal=0); - -template<typenameP> -voidlocateParticle(P&p,ParticleLocData&pld, -intlev_min,intlev_max,intnGrow,intlocal_grid=-1)const; - -voidInitialize(); + +//resizeruntimeSoA +for(intlev=0;lev<numLevels();++lev){ +for(ParIterTypepti(*this,lev);pti.isValid();++pti){ +auto&tile=DefineAndReturnParticleTile(lev,pti); +autonp=tile.numParticles(); +if(np>0){ +auto&soa=tile.GetStructOfArrays(); +soa.resize(np); +} +} +} +} + +template<typenameT, +std::enable_if_t<std::is_same_v<T,bool>,int>=0> +voidAddIntComp(Tcommunicate=true) +{ +m_runtime_comps_defined=true; +m_num_runtime_int++; +h_redistribute_int_comp.push_back(communicate); +SetParticleSize(); + +//resizeruntimeSoA +for(intlev=0;lev<numLevels();++lev){ +for(ParIterTypepti(*this,lev);pti.isValid();++pti){ +auto&tile=DefineAndReturnParticleTile(lev,pti); +autonp=tile.numParticles(); +if(np>0){ +auto&soa=tile.GetStructOfArrays(); +soa.resize(np); +} +} +} +} + +intNumRuntimeRealComps()const{returnm_num_runtime_real;} +intNumRuntimeIntComps()const{returnm_num_runtime_int;} + +intNumRealComps()const{returnNArrayReal+NumRuntimeRealComps();} +intNumIntComps()const{returnNArrayInt+NumRuntimeIntComps();} + +voidResizeRuntimeRealComp(intnew_size,boolcommunicate); + +voidResizeRuntimeIntComp(intnew_size,boolcommunicate); + +template<template<class>classNewAllocator=amrex::DefaultAllocator> +usingContainerLike=amrex::ParticleContainer_impl<ParticleType, NArrayReal, NArrayInt, NewAllocator>; + +template<template<class>classNewAllocator=amrex::DefaultAllocator> +ContainerLike<NewAllocator> +make_alike()const +{ +ContainerLike<NewAllocator>tmp(m_gdb); + +//addruntimerealcompstotmp +for(intic=0;ic<this->NumRuntimeRealComps();++ic){tmp.AddRealComp(false);} + +//addruntimeintcompstotmp +for(intic=0;ic<this->NumRuntimeIntComps();++ic){tmp.AddIntComp(false);} + +returntmp; +} + +Vector<int>h_redistribute_real_comp; +Vector<int>h_redistribute_int_comp; + +mutableboollevelDirectoriesCreated; +mutableboolusePrePost; +mutablebooldoUnlink; +intmaxnextidPrePost; +mutableintnOutFilesPrePost; +LongnparticlesPrePost; +Vector<Long>nParticlesAtLevelPrePost; +mutableVector<Vector<int>>whichPrePost; +mutableVector<Vector<int>>countPrePost; +mutableVector<Vector<Long>>wherePrePost; +mutablestd::stringHdrFileNamePrePost; +mutableVector<std::string>filePrefixPrePost; + +protected: + +template<typenameP> +boolWhere(constP&prt,ParticleLocData&pld, +intlev_min=0,intlev_max=-1,intnGrow=0,intlocal_grid=-1)const; + + +template<typenameP> +boolEnforcePeriodicWhere(P&prt,ParticleLocData&pld, +intlev_min=0,intlev_max=-1,intlocal_grid=-1)const; -boolm_runtime_comps_defined{false}; -intm_num_runtime_real{0}; -intm_num_runtime_int{0}; - -size_tparticle_size,superparticle_size; -intnum_real_comm_comps,num_int_comm_comps; -Vector<ParticleLevel>m_particles; -}; - -template<intT_NStructReal,intT_NStructInt,intT_NArrayReal,intT_NArrayInt,template<class>classAllocator,classCellAssignor> -usingParticleContainer=ParticleContainer_impl<Particle<T_NStructReal, T_NStructInt>,T_NArrayReal,T_NArrayInt,Allocator,CellAssignor>; +public: +void +WriteParticles(intlevel,std::ofstream&ofs,intfnum, +Vector<int>&which,Vector<int>&count,Vector<Long>&where, +constVector<int>&write_real_comp,constVector<int>&write_int_comp, +constVector<std::map<std::pair<int,int>,IntVector>>&particle_io_flags,boolis_checkpoint)const; +#ifdefAMREX_USE_HDF5 +#include"AMReX_ParticlesHDF5.H" +#endif + +protected: -template<intT_NArrayReal,intT_NArrayInt,template<class>classAllocator=DefaultAllocator,classCellAssignor=DefaultAssignor> -usingParticleContainerPureSoA=ParticleContainer_impl<SoAParticle<T_NArrayReal, T_NArrayInt>,T_NArrayReal,T_NArrayInt,Allocator,CellAssignor>; +template<classRTYPE> +voidReadParticles(intcnt,intgrd,intlev,std::ifstream&ifs,intfinest_level_in_file,boolconvert_ids); - -#include"AMReX_ParticleInit.H" -#include"AMReX_ParticleContainerI.H" -#include"AMReX_ParticleIO.H" - -#ifdefAMREX_USE_HDF5 -#include"AMReX_ParticleHDF5.H" -#endif - -} +voidSetParticleSize(); + +DenseBins<typename ParticleTileType::ParticleTileDataType>m_bins; + +private: +virtualvoidparticlePostLocate(ParticleType&/*p*/,constParticleLocData&/*pld*/, +constint/*lev*/){} + +virtualvoidcorrectCellVectors(int/*old_index*/,int/*new_index*/, +int/*grid*/,constParticleType&/*p*/){} -#endif/*_PARTICLES_H_*/ +voidRedistributeMPI(std::map<int,Vector<char>>&not_ours, +intlev_min=0,intlev_max=0,intnGrow=0,intlocal=0); + +template<typenameP> +voidlocateParticle(P&p,ParticleLocData&pld, +intlev_min,intlev_max,intnGrow,intlocal_grid=-1)const; + +voidInitialize(); + +boolm_runtime_comps_defined{false}; +intm_num_runtime_real{0}; +intm_num_runtime_int{0}; + +size_tparticle_size,superparticle_size; +intnum_real_comm_comps,num_int_comm_comps; +Vector<ParticleLevel>m_particles; +}; + +template<intT_NStructReal,intT_NStructInt,intT_NArrayReal,intT_NArrayInt,template<class>classAllocator,classCellAssignor> +usingParticleContainer=ParticleContainer_impl<Particle<T_NStructReal, T_NStructInt>,T_NArrayReal,T_NArrayInt,Allocator,CellAssignor>; + +template<intT_NArrayReal,intT_NArrayInt,template<class>classAllocator=DefaultAllocator,classCellAssignor=DefaultAssignor> +usingParticleContainerPureSoA=ParticleContainer_impl<SoAParticle<T_NArrayReal, T_NArrayInt>,T_NArrayReal,T_NArrayInt,Allocator,CellAssignor>; + + +#include"AMReX_ParticleInit.H" +#include"AMReX_ParticleContainerI.H" +#include"AMReX_ParticleIO.H" + +#ifdefAMREX_USE_HDF5 +#include"AMReX_ParticleHDF5.H" +#endif + +} + +#endif/*_PARTICLES_H_*/ diff --git a/amrex/docs_xml/doxygen/classamrex_1_1ParticleContainer__impl.xml b/amrex/docs_xml/doxygen/classamrex_1_1ParticleContainer__impl.xml index 655ffea516..6f19c3ed53 100644 --- a/amrex/docs_xml/doxygen/classamrex_1_1ParticleContainer__impl.xml +++ b/amrex/docs_xml/doxygen/classamrex_1_1ParticleContainer__impl.xml @@ -295,7 +295,7 @@ - + @@ -421,7 +421,7 @@ - + Vector< int > @@ -434,7 +434,7 @@ - + bool @@ -448,7 +448,7 @@ - + bool @@ -461,7 +461,7 @@ - + bool @@ -474,7 +474,7 @@ - + int @@ -487,7 +487,7 @@ - + int @@ -500,7 +500,7 @@ - + Long @@ -513,7 +513,7 @@ - + Vector< Long > @@ -526,7 +526,7 @@ - + Vector< Vector< int > > @@ -539,7 +539,7 @@ - + Vector< Vector< int > > @@ -552,7 +552,7 @@ - + Vector< Vector< Long > > @@ -565,7 +565,7 @@ - + std::string @@ -578,7 +578,7 @@ - + Vector< std::string > @@ -591,7 +591,7 @@ - + @@ -606,7 +606,7 @@ - + @@ -622,7 +622,7 @@ - + int @@ -636,7 +636,7 @@ - + int @@ -650,7 +650,7 @@ - + size_t @@ -663,7 +663,7 @@ - + size_t @@ -676,7 +676,7 @@ - + int @@ -689,7 +689,7 @@ - + int @@ -702,7 +702,7 @@ - + Vector< ParticleLevel > @@ -715,7 +715,7 @@ - + @@ -4785,7 +4785,7 @@ - + @@ -4812,7 +4812,7 @@ - + int @@ -4825,7 +4825,7 @@ - + int @@ -4838,7 +4838,7 @@ - + int @@ -4851,7 +4851,7 @@ - + int @@ -4864,7 +4864,7 @@ - + void @@ -4882,10 +4882,29 @@ +Resize the Real runtime components (SoA) + + +new_size + + +new number of Real runtime components + + + + +communicate + + +participate this component in redistribute + + + + - + void @@ -4903,10 +4922,29 @@ +Resize the Int runtime components (SoA) + + +new_size + + +new number of integer runtime components + + + + +communicate + + +participate this component in redistribute + + + + - + @@ -4941,7 +4979,7 @@ - + void @@ -4994,7 +5032,7 @@ - + @@ -5728,7 +5766,7 @@ - + @@ -5812,7 +5850,7 @@ - + @@ -5854,7 +5892,7 @@ - + void @@ -5867,7 +5905,7 @@ - + @@ -5891,7 +5929,7 @@ - + void @@ -5916,7 +5954,7 @@ - + void @@ -5953,7 +5991,7 @@ - + @@ -5996,7 +6034,7 @@ - + void @@ -6009,7 +6047,7 @@ - + @@ -6290,7 +6328,7 @@ - + amrex::ParticleContainer_implAddIntComp amrex::ParticleContainer_impladdParticles diff --git a/amrex/docs_xml/doxygen/namespaceamrex.xml b/amrex/docs_xml/doxygen/namespaceamrex.xml index bb7f5467d9..0d823da4e4 100644 --- a/amrex/docs_xml/doxygen/namespaceamrex.xml +++ b/amrex/docs_xml/doxygen/namespaceamrex.xml @@ -4028,7 +4028,7 @@ - + ParIter< AMREX_SPACEDIM >