From 645c5de457680c3beec6f6eaa28fa32a43762df4 Mon Sep 17 00:00:00 2001 From: atmyers Date: Fri, 29 Mar 2024 18:18:18 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20main=20from=20@=20AMReX-Codes/?= =?UTF-8?q?amrex@f264290e4d6ec13a2697d7c1112f3b3fd98505ea=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../amrex.pdf | Bin 8635637 -> 8635637 bytes .../AMReX__NeighborParticles_8H_source.html | 2 +- .../AMReX__ParticleContainerI_8H_source.html | 64 ++-- .../AMReX__ParticleContainer_8H_source.html | 337 ++++++++++-------- ...classamrex_1_1ParticleContainer__impl.html | 16 + .../doxygen/AMReX__ParticleContainerI_8H.xml | 56 +-- .../doxygen/AMReX__ParticleContainer_8H.xml | 273 +++++++------- .../classamrex_1_1ParticleContainer__impl.xml | 126 ++++--- amrex/docs_xml/doxygen/namespaceamrex.xml | 2 +- 9 files changed, 494 insertions(+), 382 deletions(-) diff --git a/amrex/docs_html/_downloads/008eb6dbfab802633dff40122ece848c/amrex.pdf b/amrex/docs_html/_downloads/008eb6dbfab802633dff40122ece848c/amrex.pdf index 1eca599d2d66045201085cbba30a68aab615ce1a..442f3a284c59d5324fdf9fbd27ff3d6ad17333f2 100644 GIT binary patch delta 386 zcmajV$5sVngh`VX%TNnSUk@K}3?t#EQM5qA1t}3-*TQZd|eE1$+X};SGEv z_UaS3_*VCu{V~-t`?pDR%r#Go`4(7ck;Pgq(PpV-mRn(^RaRSLt##JhV53bo+hVJB z+Z1%zZik(A*=>(bUG~~%zXJ{`Dv1QKMA;#!ZWTQa>vcq*qxx0VWa@Ga#~gRUNvE7P z;Ec1*Iq!mtF1hTAtFF0j&9hTV0~h*9@F@X#ZVJ@M2tW5zxA!b`7AcgKW-5hGG ol^czuk|k-Jhd9kb9`b6)vsyW1Sz3;wYG0xEKg&$%#3BaYCT~tEadWG68yu3x%v8V rQzfjGiq#~E)3_Xz<4PJ-eEp+<+? 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 @@
Particle< NStructReal+NArrayReal, NStructInt+NArrayInt > SuperParticleType
The type of the "SuperParticle" which stored all components in AoS form.
Definition: AMReX_ParticleContainer.H:169
typename ParticleTileType::AoS AoS
Definition: AMReX_ParticleContainer.H:186
typename AoS::ParticleVector ParticleVector
Definition: AMReX_ParticleContainer.H:191
-
void AddIntComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1251
+
void AddIntComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1263
void AddRealComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1241
typename SoA::IntVector IntVector
Definition: AMReX_ParticleContainer.H:190
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 
1375  m_particles.resize(theEffectiveFinestLevel + 1);
1376  m_dummy_mf.resize(theEffectiveFinestLevel + 1);
1377  }
1378 
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());
-
1385  unpackRemotes(*this, plan, rcv_buffer, RedistributeUnpackPolicy());
+
1385  unpackRemotes(*this, plan, rcv_buffer, RedistributeUnpackPolicy());
1386  }
1387  else
1388  {
-
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());
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());
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());
-
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 
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)
+ +
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 @@
Definition: AMReX_PODVector.H:217
size_type size() const noexcept
Definition: AMReX_PODVector.H:536
T * data() noexcept
Definition: AMReX_PODVector.H:554
-
void resize(size_type a_new_size)
Definition: AMReX_PODVector.H:586
T * dataPtr() noexcept
Definition: AMReX_PODVector.H:558
Definition: AMReX_ParIter.H:147
Definition: AMReX_ParIter.H:118
@@ -2802,6 +2801,13 @@
Definition: AMReX_ParticleUtil.H:341
uint64_t m_idcpu
Definition: AMReX_Particle.H:255
+
Definition: AMReX_ParticleCommunication.H:58
+
void setNumLevels(int num_levels)
Definition: AMReX_ParticleCommunication.cpp:14
+
Vector< std::map< int, Gpu::DeviceVector< IntVect > > > m_periodic_shift
Definition: AMReX_ParticleCommunication.H:62
+
Vector< std::map< int, Gpu::DeviceVector< int > > > m_boxes
Definition: AMReX_ParticleCommunication.H:59
+
Vector< std::map< int, Gpu::DeviceVector< int > > > m_levels
Definition: AMReX_ParticleCommunication.H:60
+
void resize(int gid, int lev, int size)
Definition: AMReX_ParticleCommunication.cpp:22
+
Vector< std::map< int, Gpu::DeviceVector< int > > > m_src_indices
Definition: AMReX_ParticleCommunication.H:61
A struct used for storing a particle's position in the AMR hierarchy.
Definition: AMReX_ParticleContainer.H:90
Box m_grown_gridbox
Definition: AMReX_ParticleContainer.H:97
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 @@
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;
- -
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>
- -
1271 
-
1282  template <template<class> class NewAllocator=amrex::DefaultAllocator>
- -
1284  make_alike () const
-
1285  {
- -
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 
- - -
1299 
- -
1302  mutable bool usePrePost;
-
1303  mutable bool doUnlink;
- -
1305  mutable int nOutFilesPrePost;
- - - - - -
1311  mutable std::string HdrFileNamePrePost;
- -
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>
- -
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 
- -
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>
- -
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;
+ +
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>
+ +
1306 
+
1317  template <template<class> class NewAllocator=amrex::DefaultAllocator>
+ +
1319  make_alike () const
+
1320  {
+ +
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 
+ + +
1334 
+ +
1337  mutable bool usePrePost;
+
1338  mutable bool doUnlink;
+ +
1340  mutable int nOutFilesPrePost;
+ + + + + +
1346  mutable std::string HdrFileNamePrePost;
+ +
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>
+ +
1381  int lev_min = 0, int lev_max = -1, int local_grid=-1) const;
1382 
- - - -
1386 
- - - -
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 
+ +
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>
+ +
1414  int lev_min, int lev_max, int nGrow, int local_grid=-1) const;
+
1415 
+
1416  void Initialize ();
+
1417 
+ + + +
1421 
+ + + +
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_*/
@@ -811,6 +836,7 @@
Rectangular problem domain geometry.
Definition: AMReX_Geometry.H:73
Definition: AMReX_IntVect.H:46
Definition: AMReX_MFIter.H:57
+
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition: AMReX_MFIter.H:141
A collection (stored as an array) of FArrayBox objects.
Definition: AMReX_MultiFab.H:38
Definition: AMReX_PODVector.H:217
Definition: AMReX_ParIter.H:147
@@ -820,37 +846,38 @@
Definition: AMReX_ParticleContainerBase.H:23
ParGDBBase * m_gdb
Definition: AMReX_ParticleContainerBase.H:264
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
A distributed container for Particles sorted onto the levels, grids, and tiles of a block-structured ...
Definition: AMReX_ParticleContainer.H:144
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
void SetUseUnlink(bool tf) const
Definition: AMReX_ParticleContainer.H:1223
-
Vector< ParticleLevel > m_particles
Definition: AMReX_ParticleContainer.H:1389
-
Vector< Long > nParticlesAtLevelPrePost
Definition: AMReX_ParticleContainer.H:1307
+
Vector< ParticleLevel > m_particles
Definition: AMReX_ParticleContainer.H:1424
+
Vector< Long > nParticlesAtLevelPrePost
Definition: AMReX_ParticleContainer.H:1342
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.
void InitFromBinaryFile(const std::string &file, int extradata)
Definition: AMReX_ParticleInit.H:483
bool GetLevelDirectoriesCreated() const
Definition: AMReX_ParticleContainer.H:1211
-
size_t superparticle_size
Definition: AMReX_ParticleContainer.H:1387
+
size_t superparticle_size
Definition: AMReX_ParticleContainer.H:1422
std::array< Long, 3 > ByteSpread() const
Definition: AMReX_ParticleContainerI.H:467
void clearParticles()
Clear all the particles in this container. This does not free memory.
Definition: AMReX_ParticleContainerI.H:976
void copyParticles(const PCType &other, bool local=false)
Copy particles from other to this ParticleContainer. Will clear all the particles from this container...
-
bool doUnlink
Definition: AMReX_ParticleContainer.H:1303
-
Vector< Vector< int > > whichPrePost
Definition: AMReX_ParticleContainer.H:1308
+
bool doUnlink
Definition: AMReX_ParticleContainer.H:1338
+
Vector< Vector< int > > whichPrePost
Definition: AMReX_ParticleContainer.H:1343
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
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
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
-
std::string HdrFileNamePrePost
Definition: AMReX_ParticleContainer.H:1311
-
Vector< Vector< Long > > wherePrePost
Definition: AMReX_ParticleContainer.H:1310
+
std::string HdrFileNamePrePost
Definition: AMReX_ParticleContainer.H:1346
+
Vector< Vector< Long > > wherePrePost
Definition: AMReX_ParticleContainer.H:1345
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...
RealDescriptor ParticleRealDescriptor
Definition: AMReX_ParticleContainer.H:176
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
-
int nOutFilesPrePost
Definition: AMReX_ParticleContainer.H:1305
-
int maxnextidPrePost
Definition: AMReX_ParticleContainer.H:1304
+
int nOutFilesPrePost
Definition: AMReX_ParticleContainer.H:1340
+
int maxnextidPrePost
Definition: AMReX_ParticleContainer.H:1339
void WritePlotFile(const std::string &dir, const std::string &name, F &&f) const
This version of WritePlotFile writes all components and assigns component names.
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:743
void addParticles(const PCType &other, bool local=false)
Add particles from other to this ParticleContainer. local controls whether or not to call Redistribut...
std::map< std::pair< int, int >, ParticleTileType > ParticleLevel
Definition: AMReX_ParticleContainer.H:185
-
bool levelDirectoriesCreated
Variables for i/o optimization saved for pre and post checkpoint.
Definition: AMReX_ParticleContainer.H:1301
-
ContainerLike< NewAllocator > make_alike() const
Definition: AMReX_ParticleContainer.H:1284
+
bool levelDirectoriesCreated
Variables for i/o optimization saved for pre and post checkpoint.
Definition: AMReX_ParticleContainer.H:1336
+
ContainerLike< NewAllocator > make_alike() const
Definition: AMReX_ParticleContainer.H:1319
void WriteAsciiFile(const std::string &file)
Definition: AMReX_ParticleIO.H:1134
static constexpr int NArrayInt
Number of extra integer components stored in struct-of-array form.
Definition: AMReX_ParticleContainer.H:157
void Initialize()
Definition: AMReX_ParticleContainerI.H:33
@@ -878,59 +905,59 @@
static constexpr int NStructInt
Number of extra integer components in the particle struct.
Definition: AMReX_ParticleContainer.H:153
ParticleContainer_impl()
Default constructor - construct an empty particle container that has no concept of a level hierarchy....
Definition: AMReX_ParticleContainer.H:198
void SetUsePrePost(bool tf) const
Definition: AMReX_ParticleContainer.H:1213
-
int NumRealComps() const
Definition: AMReX_ParticleContainer.H:1262
+
int NumRealComps() const
Definition: AMReX_ParticleContainer.H:1286
void WritePlotFilePre()
Definition: AMReX_ParticleIO.H:560
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...
void RemoveParticlesAtLevel(int level)
The Following methods are for managing Virtual and Ghost Particles.
Definition: AMReX_ParticleContainerI.H:608
void InitFromAsciiFile(const std::string &file, int extradata, const IntVect *Nrep=nullptr)
Definition: AMReX_ParticleInit.H:37
ParticleTileType & DefineAndReturnParticleTile(int lev, const Iterator &iter)
Define and return the ParticleTile for level "lev", and Iterator "iter".
Definition: AMReX_ParticleContainer.H:1162
Long TotalNumberOfParticles(bool only_valid=true, bool only_local=false) const
Returns # of particles at all levels.
Definition: AMReX_ParticleContainerI.H:351
-
Vector< int > h_redistribute_int_comp
Definition: AMReX_ParticleContainer.H:1298
+
Vector< int > h_redistribute_int_comp
Definition: AMReX_ParticleContainer.H:1333
typename ParticleTileType::SoA SoA
Definition: AMReX_ParticleContainer.H:187
-
virtual void correctCellVectors(int, int, int, const ParticleType &)
Definition: AMReX_ParticleContainer.H:1371
+
virtual void correctCellVectors(int, int, int, const ParticleType &)
Definition: AMReX_ParticleContainer.H:1406
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...
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
void locateParticle(P &p, ParticleLocData &pld, int lev_min, int lev_max, int nGrow, int local_grid=-1) const
-
int NumRuntimeIntComps() const
Definition: AMReX_ParticleContainer.H:1260
+
int NumRuntimeIntComps() const
Definition: AMReX_ParticleContainer.H:1284
Long GetNParticlesPrePost() const
Definition: AMReX_ParticleContainer.H:1221
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
void ResizeRuntimeRealComp(int new_size, bool communicate)
Definition: AMReX_ParticleContainerI.H:2488
T_CellAssignor CellAssignor
Definition: AMReX_ParticleContainer.H:148
void RemoveParticlesNotAtFinestLevel()
Definition: AMReX_ParticleContainerI.H:622
-
DenseBins< typename ParticleTileType::ParticleTileDataType > m_bins
Definition: AMReX_ParticleContainer.H:1365
+
DenseBins< typename ParticleTileType::ParticleTileDataType > m_bins
Definition: AMReX_ParticleContainer.H:1400
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
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
-
int m_num_runtime_int
Definition: AMReX_ParticleContainer.H:1385
+
int m_num_runtime_int
Definition: AMReX_ParticleContainer.H:1420
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
void Restart(const std::string &dir, const std::string &file)
Restart from checkpoint.
Definition: AMReX_ParticleIO.H:644
void WritePlotFilePost()
Definition: AMReX_ParticleIO.H:570
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
void ReadParticles(int cnt, int grd, int lev, std::ifstream &ifs, int finest_level_in_file, bool convert_ids)
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
-
int NumRuntimeRealComps() const
Definition: AMReX_ParticleContainer.H:1259
+
int NumRuntimeRealComps() const
Definition: AMReX_ParticleContainer.H:1283
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...
-
Long nparticlesPrePost
Definition: AMReX_ParticleContainer.H:1306
+
Long nparticlesPrePost
Definition: AMReX_ParticleContainer.H:1341
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
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
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...
-
int m_num_runtime_real
Definition: AMReX_ParticleContainer.H:1384
+
int m_num_runtime_real
Definition: AMReX_ParticleContainer.H:1419
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...
void CheckpointPre()
Definition: AMReX_ParticleIO.H:447
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
-
Vector< std::string > filePrefixPrePost
Definition: AMReX_ParticleContainer.H:1312
+
Vector< std::string > filePrefixPrePost
Definition: AMReX_ParticleContainer.H:1347
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
int numLocalTilesAtLevel(int lev) const
The total number of tiles on this rank on this level.
Definition: AMReX_ParticleContainer.H:368
void reserveData() override
Definition: AMReX_ParticleContainerI.H:296
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 ...
static constexpr int NStructReal
Number of extra Real components in the particle struct.
Definition: AMReX_ParticleContainer.H:151
-
Vector< int > h_redistribute_real_comp
Definition: AMReX_ParticleContainer.H:1297
+
Vector< int > h_redistribute_real_comp
Definition: AMReX_ParticleContainer.H:1332
typename Particle< NStructReal, NStructInt >::RealType RealType
The type of the Real data.
Definition: AMReX_ParticleContainer.H:171
bool GetUseUnlink() const
Definition: AMReX_ParticleContainer.H:1227
Vector< Long > NumberOfParticlesInGrid(int level, bool only_valid=true, bool only_local=false) const
Definition: AMReX_ParticleContainerI.H:366
-
int NumIntComps() const
Definition: AMReX_ParticleContainer.H:1263
+
int NumIntComps() const
Definition: AMReX_ParticleContainer.H:1287
Allocator< T > AllocatorType
The memory allocator in use.
Definition: AMReX_ParticleContainer.H:167
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
-
void AddIntComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1251
+
void AddIntComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1263
ParticleLevel & GetParticles(int lev)
Return the ParticleLevel for level "lev". Non-const version.
Definition: AMReX_ParticleContainer.H:1010
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...
void AddParticlesAtLevel(ParticleTileType &particles, int level, int nGrow=0)
Add particles from a pbox to the grid at this level.
@@ -944,10 +971,10 @@
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
Long superParticleSize() const
Definition: AMReX_ParticleContainer.H:1237
typename SoA::IntVector IntVector
Definition: AMReX_ParticleContainer.H:190
-
int num_int_comm_comps
Definition: AMReX_ParticleContainer.H:1388
-
size_t particle_size
Definition: AMReX_ParticleContainer.H:1387
+
int num_int_comm_comps
Definition: AMReX_ParticleContainer.H:1423
+
size_t particle_size
Definition: AMReX_ParticleContainer.H:1422
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
-
virtual void particlePostLocate(ParticleType &, const ParticleLocData &, const int)
Definition: AMReX_ParticleContainer.H:1368
+
virtual void particlePostLocate(ParticleType &, const ParticleLocData &, const int)
Definition: AMReX_ParticleContainer.H:1403
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...
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
void AddParticlesAtLevel(AoS &particles, int level, int nGrow=0)
Add particles from a pbox to the grid at this level.
@@ -956,7 +983,7 @@
void ResizeRuntimeIntComp(int new_size, bool communicate)
Definition: AMReX_ParticleContainerI.H:2514
void InitFromBinaryMetaFile(const std::string &file, int extradata)
Definition: AMReX_ParticleInit.H:929
void resizeData() override
Definition: AMReX_ParticleContainerI.H:305
-
int num_real_comm_comps
Definition: AMReX_ParticleContainer.H:1388
+
int num_real_comm_comps
Definition: AMReX_ParticleContainer.H:1423
ParticleTileType & ParticlesAt(int lev, const Iterator &iter)
Return the ParticleTile for level "lev" and Iterator "iter". Non-const version.
Definition: AMReX_ParticleContainer.H:1109
IntVect Index(const P &p, int lev) const
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 @@
~ParticleContainer_impl() override=default
void CheckpointPost()
Definition: AMReX_ParticleIO.H:504
T_ParticleType ParticleType
Definition: AMReX_ParticleContainer.H:146
-
bool m_runtime_comps_defined
Definition: AMReX_ParticleContainer.H:1383
-
Vector< Vector< int > > countPrePost
Definition: AMReX_ParticleContainer.H:1309
+
bool m_runtime_comps_defined
Definition: AMReX_ParticleContainer.H:1418
+
Vector< Vector< int > > countPrePost
Definition: AMReX_ParticleContainer.H:1344
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
-
bool usePrePost
Definition: AMReX_ParticleContainer.H:1302
+
bool usePrePost
Definition: AMReX_ParticleContainer.H:1337
void SetParticleSize()
Definition: AMReX_ParticleContainerI.H:7
A Box with real dimensions. A RealBox is OK iff volume >= 0.
Definition: AMReX_RealBox.H:21
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 >