Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_ParticleContainer.H
Go to the documentation of this file.
1#ifndef AMREX_PARTICLE_CONTAINER_H_
2#define AMREX_PARTICLE_CONTAINER_H_
3#include <AMReX_Config.H>
4
6#include <AMReX_ParmParse.H>
7#include <AMReX_ParGDB.H>
8#include <AMReX_REAL.H>
9#include <AMReX_IntVect.H>
10#include <AMReX_Array.H>
11#include <AMReX_Vector.H>
12#include <AMReX_Utility.H>
13#include <AMReX_Geometry.H>
14#include <AMReX_VisMF.H>
15#include <AMReX_RealBox.H>
16#include <AMReX_Print.H>
17#include <AMReX_MultiFabUtil.H>
18#include <AMReX_NFiles.H>
19#include <AMReX_VectorIO.H>
20#include <AMReX_Particle_mod_K.H>
24#include <AMReX_Particle.H>
25#include <AMReX_ParticleTile.H>
27#include <AMReX_TypeTraits.H>
28#include <AMReX_GpuContainers.H>
29#include <AMReX_ParticleUtil.H>
34#include <AMReX_Scan.H>
35#include <AMReX_DenseBins.H>
36#include <AMReX_SparseBins.H>
38#include <AMReX_ParticleMesh.H>
39#include <AMReX_OpenMP.H>
40#include <AMReX_ParIter.H>
41
42#ifdef AMREX_LAZY
43#include <AMReX_Lazy.H>
44#endif
45
46#ifdef AMREX_USE_OMP
47#include <omp.h>
48#endif
49
50#ifdef AMREX_USE_HDF5
51#include <hdf5.h>
52#endif
53
54#include <algorithm>
55#include <array>
56#include <cstring>
57#include <fstream>
58#include <iostream>
59#include <limits>
60#include <map>
61#include <memory>
62#include <numeric>
63#include <random>
64#include <stdexcept>
65#include <string>
66#include <tuple>
67#include <type_traits>
68#include <utility>
69#include <vector>
70
71namespace amrex {
72
73#ifdef AMREX_USE_HDF5_ASYNC
74 extern hid_t es_par_g;
75#endif
81{
83 int m_lev;
84 int m_grid;
86 RealType m_data[1 + AMREX_SPACEDIM];
87};
88
102
117template<int NStructReal, int NStructInt, int NArrayReal, int NArrayInt>
119{
120 std::array<double, NStructReal> real_struct_data;
121 std::array<int, NStructInt > int_struct_data;
122 std::array<double, NArrayReal > real_array_data;
123 std::array<int, NArrayInt > int_array_data;
124};
125
126template <bool is_const, typename T_ParticleType, int NArrayReal, int NArrayInt,
127 template<class> class Allocator, class CellAssignor>
128class ParIterBase_impl;
129
144template <typename T_ParticleType, int T_NArrayReal, int T_NArrayInt,
145 template<class> class Allocator=DefaultAllocator,
146 class T_CellAssignor=DefaultAssignor>
147
149{
150public:
151 using ParticleType = T_ParticleType;
152 using ConstParticleType = typename ParticleType::ConstType;
153 using CellAssignor = T_CellAssignor;
154
156 static constexpr int NStructReal = ParticleType::NReal;
158 static constexpr int NStructInt = ParticleType::NInt;
160 static constexpr int NArrayReal = T_NArrayReal;
162 static constexpr int NArrayInt = T_NArrayInt;
164
165private:
166 friend class ParIterBase_impl<true,ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor>;
167 friend class ParIterBase_impl<false,ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor>;
168
169public:
171 template <typename T>
172 using AllocatorType = Allocator<T>;
177
178#ifdef AMREX_SINGLE_PRECISION_PARTICLES
180#else
182#endif
183
184 static constexpr bool is_rtsoa_pc = ParticleType::is_rtsoa_particle;
185
187 using ParticleTileType = std::conditional_t<
191 >;
193
196 using ParticleLevel = std::map<std::pair<int, int>, ParticleTileType>;
197 using PTDType = typename ParticleTileType::ParticleTileDataType;
198 using ConstPTDType = typename ParticleTileType::ConstParticleTileDataType;
199 using AoS = typename ParticleTileType::AoS;
200 using SoA = typename ParticleTileType::SoA;
201
202 using RealVector = typename SoA::RealVector;
203 using IntVector = typename SoA::IntVector;
204 using ParticleVector = typename AoS::ParticleVector;
208
209 static constexpr bool has_polymorphic_allocator =
211
212 static_assert(!ParticleType::is_soa_particle || T_NArrayReal >= AMREX_SPACEDIM || is_rtsoa_pc,
213 "Pure SoA particle containers require at least AMREX_SPACEDIM real components for positions");
214
218 :
220 {
221 Initialize ();
222 }
223
239
248 const DistributionMapping & dmap,
249 const BoxArray & ba)
250 :
251 ParticleContainerBase(geom, dmap, ba)
252 {
253 Initialize ();
256 }
257
268 const Vector<DistributionMapping> & dmap,
269 const Vector<BoxArray> & ba,
270 const Vector<int> & rr)
271 :
272 ParticleContainerBase(geom, dmap, ba, rr)
273 {
274 Initialize ();
277 }
278
288 const Vector<DistributionMapping> & dmap,
289 const Vector<BoxArray> & ba,
290 const Vector<IntVect> & rr)
291 :
292 ParticleContainerBase(geom, dmap, ba, rr)
293 {
294 Initialize ();
297 }
298
299 ~ParticleContainer_impl () override = default;
300
303
305 ParticleContainer_impl& operator= ( ParticleContainer_impl && ) noexcept = default;
306
307
315 void Define (ParGDBBase* gdb)
316 {
318 reserveData();
319 resizeData();
320 }
321
329 void Define (const Geometry & geom,
330 const DistributionMapping & dmap,
331 const BoxArray & ba)
332 {
333 this->ParticleContainerBase::Define(geom, dmap, ba);
334 reserveData();
335 resizeData();
336 }
337
347 void Define (const Vector<Geometry> & geom,
348 const Vector<DistributionMapping> & dmap,
349 const Vector<BoxArray> & ba,
350 const Vector<int> & rr)
351 {
352 this->ParticleContainerBase::Define(geom, dmap, ba, rr);
353 reserveData();
354 resizeData();
355 }
356
366 void Define (const Vector<Geometry> & geom,
367 const Vector<DistributionMapping> & dmap,
368 const Vector<BoxArray> & ba,
369 const Vector<IntVect> & rr)
370 {
371 this->ParticleContainerBase::Define(geom, dmap, ba, rr);
372 reserveData();
373 resizeData();
374 }
375
377 int numLocalTilesAtLevel (int lev) const {
378 return (lev < m_particles.size()) ? m_particles[lev].size() : 0;
379 }
380
385 void reserveData () override;
386
393 void resizeData () override;
394
395 void InitFromAsciiFile (const std::string& file, int extradata,
396 const IntVect* Nrep = nullptr);
397
398 void InitFromBinaryFile (const std::string& file, int extradata);
399
400 void InitFromBinaryMetaFile (const std::string& file, int extradata);
401
418 void InitRandom (Long icount, ULong iseed,
419 const ParticleInitData& pdata,
420 bool serialize = false, RealBox bx = RealBox());
421
422
438 void InitRandomPerBox (Long icount, ULong iseed, const ParticleInitData& pdata);
439
440
455 void InitOnePerCell (Real x_off, Real y_off, Real z_off,
456 const ParticleInitData& pdata);
457
458
470 void InitNRandomPerCell (int n_per_cell, const ParticleInitData& pdata);
471
472 void Increment (MultiFab& mf, int level);
473
474 Long IncrementWithTotal (MultiFab& mf, int level, bool local = false);
475
514 void Redistribute (int lev_min = 0, int lev_max = -1, int nGrow = 0,
515 int local = 0, bool remove_negative=true)
516 {
517 Redistribute(lev_min, lev_max, IntVect(nGrow),
518 local > 0, IntVect(local), remove_negative);
519 }
520
531 void Redistribute (int lev_min, int lev_max, IntVect nGrow,
532 bool local, IntVect max_cells_moved,
533 bool remove_negative=true);
534
535
547 template <class index_type>
548 void ReorderParticles (int lev, const MFIter& mfi, const index_type* permutations);
549
564 void SortParticlesForDeposition (IntVect idx_type);
565
569 void SortParticlesByCell ();
570
577 void SortParticlesByBin (IntVect bin_size);
578
589 bool OK (int lev_min = 0, int lev_max = -1, int nGrow = 0) const;
590
591 std::array<Long, 3> ByteSpread () const;
592
593 std::array<Long, 3> PrintCapacity () const;
594
595 void ShrinkToFit ();
596
607 Long NumberOfParticlesAtLevel (int level, bool only_valid = true, bool only_local = false) const;
608
609 Vector<Long> NumberOfParticlesInGrid (int level, bool only_valid = true, bool only_local = false) const;
610
614 template <std::integral I>
615 requires (sizeof(I) >= sizeof(Long))
616 void CapacityOfParticlesInGrid (LayoutData<I>& mem, int lev) const;
617
626 Long TotalNumberOfParticles (bool only_valid=true, bool only_local=false) const;
627
628
636 void RemoveParticlesAtLevel (int level);
637
639
647 void CreateVirtualParticles (int level, AoS& virts) const;
648
657 void CreateGhostParticles (int level, int ngrow, AoS& ghosts) const;
658
666 void AddParticlesAtLevel (AoS& particles, int level, int nGrow=0);
667
675 void CreateVirtualParticles (int level, ParticleTileType& virts) const;
676
685 void CreateGhostParticles (int level, int ngrow, ParticleTileType& ghosts) const;
686
694 void AddParticlesAtLevel (ParticleTileType& particles, int level, int nGrow=0);
695
696
700 void clearParticles ();
701
702
711 template <class PCType>
713 void copyParticles (const PCType& other, bool local=false);
714
722 template <class PCType>
724 void addParticles (const PCType& other, bool local=false);
725
740 template <class F, class PCType>
741 requires ((IsParticleContainer<PCType>::value) && (!std::is_integral_v<F>))
742 void copyParticles (const PCType& other, F&&f, bool local=false);
743
757 template <class F, class PCType>
758 requires ((IsParticleContainer<PCType>::value) && (!std::is_integral_v<F>))
759 void addParticles (const PCType& other, F const& f, bool local=false);
760
768 void WriteParticleRealData (void* data, size_t size, std::ostream& os) const;
769
777 void ReadParticleRealData (void* data, size_t size, std::istream& is);
778
787 void Checkpoint (const std::string& dir, const std::string& name,
788 const Vector<std::string>& real_comp_names = Vector<std::string>(),
789 const Vector<std::string>& int_comp_names = Vector<std::string>()) const
790 {
791 Checkpoint(dir, name, true, real_comp_names, int_comp_names);
792 }
793
799 void Checkpoint (const std::string& dir, const std::string& name, bool is_checkpoint,
800 const Vector<std::string>& real_comp_names = Vector<std::string>(),
801 const Vector<std::string>& int_comp_names = Vector<std::string>()) const;
802
815 void Checkpoint (const std::string& dir, const std::string& name,
816 const Vector<int>& write_real_comp,
817 const Vector<int>& write_int_comp,
818 const Vector<std::string>& real_comp_names,
819 const Vector<std::string>& int_comp_names) const;
820
835 template <class F>
836 void WriteBinaryParticleData (const std::string& dir,
837 const std::string& name,
838 const Vector<int>& write_real_comp,
839 const Vector<int>& write_int_comp,
840 const Vector<std::string>& real_comp_names,
841 const Vector<std::string>& int_comp_names,
842 F const& f, bool is_checkpoint=false) const;
843
844 void CheckpointPre ();
845
846 void CheckpointPost ();
847
854 void Restart (const std::string& dir, const std::string& file);
855
863 void Restart (const std::string& dir, const std::string& file, bool is_checkpoint);
864
871 void WritePlotFile (const std::string& dir, const std::string& name) const;
872
884 template <class F>
885 void WritePlotFile (const std::string& dir, const std::string& name, F const& f) const;
886
895 void WritePlotFile (const std::string& dir, const std::string& name,
896 const Vector<std::string>& real_comp_names,
897 const Vector<std::string>& int_comp_names) const;
898
912 template <class F>
913 void WritePlotFile (const std::string& dir, const std::string& name,
914 const Vector<std::string>& real_comp_names,
915 const Vector<std::string>& int_comp_names, F const& f) const;
916
925 void WritePlotFile (const std::string& dir, const std::string& name,
926 const Vector<std::string>& real_comp_names) const;
927
941 template <class F>
942 void WritePlotFile (const std::string& dir, const std::string& name,
943 const Vector<std::string>& real_comp_names, F const& f) const;
944
954 void WritePlotFile (const std::string& dir,
955 const std::string& name,
956 const Vector<int>& write_real_comp,
957 const Vector<int>& write_int_comp) const;
958
973 template <class F>
974 void WritePlotFile (const std::string& dir,
975 const std::string& name,
976 const Vector<int>& write_real_comp,
977 const Vector<int>& write_int_comp, F const& f) const;
978
992 void WritePlotFile (const std::string& dir,
993 const std::string& name,
994 const Vector<int>& write_real_comp,
995 const Vector<int>& write_int_comp,
996 const Vector<std::string>& real_comp_names,
997 const Vector<std::string>& int_comp_names) const;
998
1017 template <class F>
1018 void WritePlotFile (const std::string& dir,
1019 const std::string& name,
1020 const Vector<int>& write_real_comp,
1021 const Vector<int>& write_int_comp,
1022 const Vector<std::string>& real_comp_names,
1023 const Vector<std::string>& int_comp_names,
1024 F const& f) const;
1025
1026 void WritePlotFilePre ();
1027
1028 void WritePlotFilePost ();
1029
1030 void WriteAsciiFile (const std::string& file);
1031
1036 const Vector<ParticleLevel>& GetParticles () const { return m_particles; }
1037
1042 Vector <ParticleLevel>& GetParticles () { return m_particles; }
1043
1057 const ParticleLevel& GetParticles (int lev) const { return m_particles[lev]; }
1058
1072 ParticleLevel & GetParticles (int lev) { return m_particles[lev]; }
1073
1096 const ParticleTileType& ParticlesAt (int lev, int grid, int tile) const
1097 { return m_particles[lev].at(std::make_pair(grid, tile)); }
1098
1121 ParticleTileType& ParticlesAt (int lev, int grid, int tile)
1122 { return m_particles[lev].at(std::make_pair(grid, tile)); }
1123
1145 template <class Iterator>
1146 const ParticleTileType& ParticlesAt (int lev, const Iterator& iter) const
1147 { return ParticlesAt(lev, iter.index(), iter.LocalTileIndex()); }
1148
1170 template <class Iterator>
1171 ParticleTileType& ParticlesAt (int lev, const Iterator& iter)
1172 { return ParticlesAt(lev, iter.index(), iter.LocalTileIndex()); }
1173
1196 ParticleTileType& DefineAndReturnParticleTile (int lev, int grid, int tile)
1197 {
1198 m_particles[lev][std::make_pair(grid, tile)].define(
1200 &m_soa_rdata_names, &m_soa_idata_names,
1201 arena()
1202 );
1203 return ParticlesAt(lev, grid, tile);
1204 }
1205
1227 template <class Iterator>
1228 ParticleTileType& DefineAndReturnParticleTile (int lev, const Iterator& iter)
1229 {
1230 auto index = std::make_pair(iter.index(), iter.LocalTileIndex());
1231 m_particles[lev][index].define(
1233 &m_soa_rdata_names, &m_soa_idata_names,
1234 arena()
1235 );
1236 return ParticlesAt(lev, iter);
1237 }
1238
1249 void AssignDensity (int rho_index,
1250 Vector<std::unique_ptr<MultiFab> >& mf_to_be_filled,
1251 int lev_min, int ncomp, int finest_level, int ngrow=2) const;
1252
1253 void AssignCellDensitySingleLevel (int rho_index, MultiFab& mf, int level,
1254 int ncomp=1, int particle_lvl_offset = 0) const;
1255
1256 template <typename P, typename Assignor=CellAssignor>
1257 IntVect Index (const P& p, int lev) const;
1258
1268 ParticleLocData Reset (ParticleType& prt, bool update, bool verbose=true,
1269 ParticleLocData pld = ParticleLocData()) const;
1270
1276 template <typename P>
1277 bool PeriodicShift (P& p) const;
1278
1280
1282
1283 void SetUsePrePost (bool tf) const {
1284 usePrePost = tf;
1285 }
1286 bool GetUsePrePost () const {
1287 return usePrePost;
1288 }
1289
1292
1293 void SetUseUnlink (bool tf) const {
1294 doUnlink = tf;
1295 }
1296
1297 bool GetUseUnlink () const {
1298 return doUnlink;
1299 }
1300
1301 void Redistribute_impl (int lev_min = 0, int lev_max = -1, int nGrow = 0,
1302 int local = 0, bool remove_negative=true)
1303 {
1304 Redistribute_impl(lev_min, lev_max, IntVect(nGrow),
1305 local > 0, IntVect(local), remove_negative);
1306 }
1307
1308 void Redistribute_impl (int lev_min, int lev_max, IntVect nGrow,
1309 bool local, IntVect max_cells_moved,
1310 bool remove_negative=true);
1311
1312 void ReserveForRedistribute (ParticleCopyPlan const& plan);
1313
1314 Long superParticleSize() const { return superparticle_size; }
1315
1316 void AddRealComp (std::string const & name, int communicate=1)
1317 {
1318 // names must be unique
1319 auto const it = std::ranges::find(m_soa_rdata_names, name);
1320 if (it != m_soa_rdata_names.end()) {
1321 throw std::runtime_error("AddRealComp: name '" + name + "' is already present in the SoA.");
1322 }
1323 m_soa_rdata_names.push_back(name);
1324
1325 m_runtime_comps_defined = true;
1326 m_num_runtime_real++;
1327 h_redistribute_real_comp.push_back(communicate);
1329 this->resizeData();
1330
1331 // resize runtime SoA
1332 for (int lev = 0; lev < numLevels(); ++lev) {
1333 for (ParIterType pti(*this,lev); pti.isValid(); ++pti) {
1334 auto& tile = DefineAndReturnParticleTile(lev, pti);
1335 auto np = tile.numParticles();
1336 if (np > 0) {
1337 auto& soa = tile.GetStructOfArrays();
1338 soa.resize(np);
1339 }
1340 }
1341 }
1342 }
1343
1344 void AddRealComp (int communicate=1)
1345 {
1346 AddRealComp(getDefaultCompNameReal<ParticleType>(NArrayReal+m_num_runtime_real), communicate);
1347 }
1348
1349 void AddIntComp (std::string const & name, int communicate=1)
1350 {
1351 // names must be unique
1352 auto const it = std::ranges::find(m_soa_idata_names, name);
1353 if (it != m_soa_idata_names.end()) {
1354 throw std::runtime_error("AddIntComp: name '" + name + "' is already present in the SoA.");
1355 }
1356 m_soa_idata_names.push_back(name);
1357
1358 m_runtime_comps_defined = true;
1359 m_num_runtime_int++;
1360 h_redistribute_int_comp.push_back(communicate);
1362 this->resizeData();
1363
1364 // resize runtime SoA
1365 for (int lev = 0; lev < numLevels(); ++lev) {
1366 for (ParIterType pti(*this,lev); pti.isValid(); ++pti) {
1367 auto& tile = DefineAndReturnParticleTile(lev, pti);
1368 auto np = tile.numParticles();
1369 if (np > 0) {
1370 auto& soa = tile.GetStructOfArrays();
1371 soa.resize(np);
1372 }
1373 }
1374 }
1375 }
1376
1377 void AddIntComp (int communicate=1)
1378 {
1379 AddIntComp(getDefaultCompNameInt<ParticleType>(NArrayInt+m_num_runtime_int), communicate);
1380 }
1381
1382 int NumRuntimeRealComps () const { return m_num_runtime_real; }
1383 int NumRuntimeIntComps () const { return m_num_runtime_int; }
1384
1385 int NumRealComps () const { return NArrayReal + NumRuntimeRealComps(); }
1386 int NumIntComps () const { return NArrayInt + NumRuntimeIntComps() ; }
1387
1393 void ResizeRuntimeRealComp (int new_size, bool communicate);
1394
1400 void ResizeRuntimeIntComp (int new_size, bool communicate);
1401
1403 template <template<class> class NewAllocator=amrex::DefaultAllocator>
1405
1416 template <template<class> class NewAllocator=Allocator>
1418 make_alike () const
1419 {
1421
1422 std::vector<std::string> const real_names = this->GetRealSoANames();
1423 std::vector<std::string> real_ct_names(NArrayReal);
1424 for (int ic = 0; ic < NArrayReal; ++ic) { real_ct_names.at(ic) = real_names[ic]; }
1425
1426 std::vector<std::string> const int_names = this->GetIntSoANames();
1427 std::vector<std::string> int_ct_names(NArrayInt);
1428 for (int ic = 0; ic < NArrayInt; ++ic) { int_ct_names.at(ic) = int_names[ic]; }
1429
1430 tmp.SetSoACompileTimeNames(real_ct_names, int_ct_names);
1431
1432 // add runtime real comps to tmp
1433 for (int ic = 0; ic < this->NumRuntimeRealComps(); ++ic) {
1434 tmp.AddRealComp(real_names.at(ic + NArrayReal));
1435 }
1436
1437 // add runtime int comps to tmp
1438 for (int ic = 0; ic < this->NumRuntimeIntComps(); ++ic) {
1439 tmp.AddIntComp(int_names.at(ic + NArrayInt));
1440 }
1441
1444
1445 return tmp;
1446 }
1447
1450
1453 mutable bool usePrePost;
1454 mutable bool doUnlink;
1456 mutable int nOutFilesPrePost;
1462 mutable std::string HdrFileNamePrePost;
1464
1465protected:
1466
1480 template <typename P>
1481 bool Where (const P& prt, ParticleLocData& pld,
1482 int lev_min = 0, int lev_max = -1, IntVect nGrow=IntVect(0),
1483 int local_grid=-1) const;
1484
1485
1496 template <typename P>
1497 bool EnforcePeriodicWhere (P& prt, ParticleLocData& pld,
1498 int lev_min = 0, int lev_max = -1, int local_grid=-1) const;
1499
1500public:
1502
1503 void
1504 WriteParticles (int level, std::ofstream& ofs, int fnum,
1505 Vector<int>& which, Vector<int>& count, Vector<Long>& where,
1506 const Vector<int>& write_real_comp, const Vector<int>& write_int_comp,
1507 const Vector<std::map<std::pair<int, int>,FlagsVector>>& particle_io_flags, bool is_checkpoint) const;
1508#ifdef AMREX_USE_HDF5
1509#include "AMReX_ParticlesHDF5.H"
1510#endif
1511
1512public: // NOLINT(readability-redundant-access-specifiers)
1514 void SetSoACompileTimeNames (std::vector<std::string> const & rdata_name, std::vector<std::string> const & idata_name);
1515
1517 std::vector<std::string> GetRealSoANames () const {return m_soa_rdata_names;}
1518
1520 std::vector<std::string> GetIntSoANames () const {return m_soa_idata_names;}
1521
1527 bool HasRealComp (std::string const & name);
1528
1534 bool HasIntComp (std::string const & name);
1535
1543 int GetRealCompIndex (std::string const & name);
1544
1552 int GetIntCompIndex (std::string const & name);
1553
1554protected:
1555
1556 template <class RTYPE>
1557 void ReadParticles (int cnt, int grd, int lev, std::ifstream& ifs, int finest_level_in_file, bool convert_ids);
1558
1559 void SetParticleSize ();
1560
1562
1563private:
1564 virtual void particlePostLocate (ParticleType& /*p*/, const ParticleLocData& /*pld*/,
1565 const int /*lev*/) {}
1566
1567 virtual void correctCellVectors (int /*old_index*/, int /*new_index*/,
1568 int /*grid*/, const ParticleType& /*p*/) {}
1569
1570 void RedistributeMPI (std::map<int, Vector<char> >& not_ours,
1571 int lev_min = 0, int lev_max = 0, int nGrow = 0, int local=0);
1572
1574 int hostPartitionTile (ParticleTileType& src_tile,
1575 int lev, int gid, int tid,
1576 int lev_min, int lev_max, IntVect nGrow, bool local,
1577 bool remove_negative, int myproc,
1578 Gpu::DeviceVector<int>& boxes,
1579 Gpu::DeviceVector<int>& levels,
1580 Gpu::DeviceVector<int>& tiles,
1581 Gpu::DeviceVector<int>& src_indices,
1582 Gpu::DeviceVector<IntVect>& periodic_shift);
1583
1585 int hostPartitionTile (ParticleTileType& src_tile,
1586 int lev, int gid, int tid,
1587 int lev_min, int lev_max, int nGrow, int local,
1588 bool remove_negative, int myproc,
1589 Gpu::DeviceVector<int>& boxes,
1590 Gpu::DeviceVector<int>& levels,
1591 Gpu::DeviceVector<int>& tiles,
1592 Gpu::DeviceVector<int>& src_indices,
1593 Gpu::DeviceVector<IntVect>& periodic_shift)
1594 {
1595 return hostPartitionTile(src_tile, lev, gid, tid,
1596 lev_min, lev_max, IntVect(nGrow), local > 0,
1597 remove_negative, myproc,
1598 boxes, levels, tiles, src_indices, periodic_shift);
1599 }
1600
1601 template <typename P>
1602 void locateParticle (P& p, ParticleLocData& pld,
1603 int lev_min, int lev_max, IntVect nGrow, int local_grid=-1) const;
1604
1605 void Initialize ();
1606
1607 bool m_runtime_comps_defined{false};
1608 int m_num_runtime_real{0};
1609 int m_num_runtime_int{0};
1610
1611 size_t particle_size, superparticle_size;
1612 int num_real_comm_comps, num_int_comm_comps;
1613 Vector<ParticleLevel> m_particles;
1614
1615 // names of both compile-time and runtime Real and Int SoA data
1616 std::vector<std::string> m_soa_rdata_names;
1617 std::vector<std::string> m_soa_idata_names;
1618};
1619
1621template <int T_NStructReal, int T_NStructInt, int T_NArrayReal, int T_NArrayInt, template<class> class Allocator, class CellAssignor>
1622using ParticleContainer = ParticleContainer_impl<Particle<T_NStructReal, T_NStructInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
1623
1624template <int T_NArrayReal, int T_NArrayInt, template<class> class Allocator=DefaultAllocator, class CellAssignor=DefaultAssignor>
1625using ParticleContainerPureSoA = ParticleContainer_impl<SoAParticle<T_NArrayReal, T_NArrayInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
1626
1627template <class RType=ParticleReal, class IType=int, class CellAssignor=DefaultAssignor>
1629
1630}
1631
1632#include "AMReX_ParticleInit.H"
1634#include "AMReX_ParticleIO.H"
1635
1636#ifdef AMREX_USE_HDF5
1637#include "AMReX_ParticleHDF5.H"
1638#endif
1639
1640#endif /*_PARTICLES_H_*/
Fixed-size array types for use on GPU and CPU.
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:124
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
Definition AMReX_GpuAllocators.H:121
Reference-counted collection of Boxes.
Definition AMReX_BoxArray.H:676
A container for storing items in a set of bins.
Definition AMReX_DenseBins.H:77
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:51
static const RealDescriptor & Native64RealDescriptor()
Definition AMReX_FPC.cpp:137
static const RealDescriptor & Native32RealDescriptor()
NativeRealDescriptor is equivalent to Native32RealDescriptor if BL_FLOAT is used. Otherwise,...
Definition AMReX_FPC.cpp:124
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:75
a one-thingy-per-box distributed object
Definition AMReX_LayoutData.H:13
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:88
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition AMReX_MFIter.H:172
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:40
Dynamically allocated vector for trivially copyable data.
Definition AMReX_PODVector.H:308
Definition AMReX_ParIter.H:147
Definition AMReX_ParGDB.H:13
Definition AMReX_ParIter.H:35
Definition AMReX_ParIter.H:118
Definition AMReX_ParticleContainerBase.H:43
ParGDBBase * m_gdb
Definition AMReX_ParticleContainerBase.H:316
void Define(ParGDBBase *gdb)
Definition AMReX_ParticleContainerBase.H:103
int numLevels() const
the number of defined levels in the ParticleContainer
Definition AMReX_ParticleContainerBase.H:242
Arena * arena() const
Definition AMReX_ParticleContainerBase.H:281
A distributed container for Particles sorted onto the levels, grids, and tiles of a block-structured ...
Definition AMReX_ParticleContainer.H:149
ParticleTileType & DefineAndReturnParticleTile(int lev, const Iterator &iter)
Define and return the ParticleTile for level "lev", and Iterator "iter".
Definition AMReX_ParticleContainer.H:1228
void WritePlotFilePre()
Definition AMReX_ParticleIO.H:563
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:36
typename ParticleTileType::ConstParticleTileDataType ConstPTDType
Definition AMReX_ParticleContainer.H:198
void SetUseUnlink(bool tf) const
Definition AMReX_ParticleContainer.H:1293
Vector< Long > nParticlesAtLevelPrePost
Definition AMReX_ParticleContainer.H:1458
bool GetLevelDirectoriesCreated() const
Definition AMReX_ParticleContainer.H:1281
IntVect Index(const P &p, int lev) const
Definition AMReX_ParticleContainerI.H:202
void AddIntComp(std::string const &name, int communicate=1)
Definition AMReX_ParticleContainer.H:1349
void ReorderParticles(int lev, const MFIter &mfi, const index_type *permutations)
Reorder particles on the tile given by lev and mfi using a the permutations array.
Definition AMReX_ParticleContainerI.H:1261
bool EnforcePeriodicWhere(P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, int local_grid=-1) const
Checks whether the particle has crossed a periodic boundary in such a way that it is on levels lev_mi...
Definition AMReX_ParticleContainerI.H:298
void ResizeRuntimeIntComp(int new_size, bool communicate)
Definition AMReX_ParticleContainerI.H:2020
bool doUnlink
Definition AMReX_ParticleContainer.H:1454
Vector< Vector< int > > whichPrePost
Definition AMReX_ParticleContainer.H:1459
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:287
std::string HdrFileNamePrePost
Definition AMReX_ParticleContainer.H:1462
Vector< Vector< Long > > wherePrePost
Definition AMReX_ParticleContainer.H:1461
RealDescriptor ParticleRealDescriptor
Definition AMReX_ParticleContainer.H:181
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:1793
ParticleTileType & ParticlesAt(int lev, const Iterator &iter)
Return the ParticleTile for level "lev" and Iterator "iter". Non-const version.
Definition AMReX_ParticleContainer.H:1171
int nOutFilesPrePost
Definition AMReX_ParticleContainer.H:1456
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:31
void InitRandomPerBox(Long icount, ULong iseed, const ParticleInitData &pdata)
This initializes the container with icount randomly distributed particles per box,...
Definition AMReX_ParticleInit.H:1368
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:787
bool PeriodicShift(P &p) const
Returns true if the particle was shifted.
Definition AMReX_ParticleContainerI.H:377
std::map< std::pair< int, int >, ParticleTileType > ParticleLevel
Definition AMReX_ParticleContainer.H:196
bool levelDirectoriesCreated
Variables for i/o optimization saved for pre and post checkpoint.
Definition AMReX_ParticleContainer.H:1452
static constexpr int NArrayInt
Number of extra integer components stored in struct-of-array form.
Definition AMReX_ParticleContainer.H:162
void InitFromAsciiFile(const std::string &file, int extradata, const IntVect *Nrep=nullptr)
Definition AMReX_ParticleInit.H:42
static constexpr int NArrayReal
Number of extra Real components stored in struct-of-array form.
Definition AMReX_ParticleContainer.H:160
const ParticleTileType & ParticlesAt(int lev, const Iterator &iter) const
Return the ParticleTile for level "lev" and Iterator "iter". Const version.
Definition AMReX_ParticleContainer.H:1146
void WritePlotFilePost()
Definition AMReX_ParticleIO.H:573
bool GetUsePrePost() const
Definition AMReX_ParticleContainer.H:1286
void SetSoACompileTimeNames(std::vector< std::string > const &rdata_name, std::vector< std::string > const &idata_name)
Definition AMReX_ParticleContainerI.H:110
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_ParticleContainer.H:514
typename ParticleTileType::AoS AoS
Definition AMReX_ParticleContainer.H:199
ParticleInitType< NStructReal, NStructInt, NArrayReal, NArrayInt > ParticleInitData
Definition AMReX_ParticleContainer.H:192
typename SoA::RealVector RealVector
Definition AMReX_ParticleContainer.H:202
typename ParticleType::ConstType ConstParticleType
Definition AMReX_ParticleContainer.H:152
ParticleContainer_impl(const ParticleContainer_impl &)=delete
void WriteAsciiFile(const std::string &file)
Definition AMReX_ParticleIO.H:1027
ParticleContainer_impl(const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
Construct a particle container using a given Geometry, DistributionMapping, and BoxArray....
Definition AMReX_ParticleContainer.H:247
void SetParticleSize()
Definition AMReX_ParticleContainerI.H:17
void CheckpointPost()
Definition AMReX_ParticleIO.H:507
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:1553
void SetLevelDirectoriesCreated(bool tf)
Definition AMReX_ParticleContainer.H:1279
void RemoveParticlesAtLevel(int level)
The Following methods are for managing Virtual and Ghost Particles.
Definition AMReX_ParticleContainerI.H:759
const ParticleTileType & ParticlesAt(int lev, int grid, int tile) const
Return the ParticleTile for level "lev", grid "grid" and tile "tile." Const version.
Definition AMReX_ParticleContainer.H:1096
typename AoS::ParticleVector ParticleVector
Definition AMReX_ParticleContainer.H:204
void Define(const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
Define a default-constructed ParticleContainer using a ParGDB object. Single-level version.
Definition AMReX_ParticleContainer.H:329
static constexpr int NStructInt
Number of extra integer components in the particle struct.
Definition AMReX_ParticleContainer.H:158
void SortParticlesForDeposition(IntVect idx_type)
Sort particles on each tile such that particles adjacent in memory are likely to map to adjacent cell...
Definition AMReX_ParticleContainerI.H:1328
ParticleContainer_impl()
Default constructor - construct an empty particle container that has no concept of a level hierarchy....
Definition AMReX_ParticleContainer.H:217
void SetUsePrePost(bool tf) const
Definition AMReX_ParticleContainer.H:1283
int NumRealComps() const
Definition AMReX_ParticleContainer.H:1385
Long GetMaxNextIDPrePost() const
Definition AMReX_ParticleContainer.H:1290
void clearParticles()
Clear all the particles in this container. This does not free memory.
Definition AMReX_ParticleContainerI.H:1130
void ReadParticles(int cnt, int grd, int lev, std::ifstream &ifs, int finest_level_in_file, bool convert_ids)
Definition AMReX_ParticleIO.H:846
void Increment(MultiFab &mf, int level)
Definition AMReX_ParticleContainerI.H:722
Vector< int > h_redistribute_int_comp
Definition AMReX_ParticleContainer.H:1449
typename ParticleTileType::SoA SoA
Definition AMReX_ParticleContainer.H:200
void AssignCellDensitySingleLevel(int rho_index, MultiFab &mf, int level, int ncomp=1, int particle_lvl_offset=0) const
Definition AMReX_ParticleContainerI.H:1854
int NumRuntimeIntComps() const
Definition AMReX_ParticleContainer.H:1383
void CreateGhostParticles(int level, int ngrow, AoS &ghosts) const
Create ghost particles for a given level that are copies of particles near coarse->fine boundaries in...
Definition AMReX_ParticleContainerI.H:1085
Long GetNParticlesPrePost() const
Definition AMReX_ParticleContainer.H:1291
void SortParticlesByBin(IntVect bin_size)
Sort the particles on each tile by groups of cells, given an IntVect bin_size.
Definition AMReX_ParticleContainerI.H:1294
void InitOnePerCell(Real x_off, Real y_off, Real z_off, const ParticleInitData &pdata)
This initializes the particle container with one particle per cell, where the other particle data and...
Definition AMReX_ParticleInit.H:1469
bool HasIntComp(std::string const &name)
Definition AMReX_ParticleContainerI.H:149
T_CellAssignor CellAssignor
Definition AMReX_ParticleContainer.H:153
const Vector< ParticleLevel > & GetParticles() const
Return the underlying Vector (over AMR levels) of ParticleLevels. Const version.
Definition AMReX_ParticleContainer.H:1036
const ParticleLevel & GetParticles(int lev) const
Return the ParticleLevel for level "lev". Const version.
Definition AMReX_ParticleContainer.H:1057
std::vector< std::string > GetRealSoANames() const
Definition AMReX_ParticleContainer.H:1517
DenseBins< typename ParticleTileType::ParticleTileDataType > m_bins
Definition AMReX_ParticleContainer.H:1561
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 const &f, bool is_checkpoint=false) const
Writes particle data to disk in the AMReX native format.
Definition AMReX_ParticleIO.H:426
void CheckpointPre()
Definition AMReX_ParticleIO.H:450
void ShrinkToFit()
Definition AMReX_ParticleContainerI.H:702
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:231
bool HasRealComp(std::string const &name)
Definition AMReX_ParticleContainerI.H:141
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:974
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:366
void resizeData() override
This resizes the vector of dummy MultiFabs used by the ParticleContainer for the current number of le...
Definition AMReX_ParticleContainerI.H:436
int NumRuntimeRealComps() const
Definition AMReX_ParticleContainer.H:1382
void ResizeRuntimeRealComp(int new_size, bool communicate)
Definition AMReX_ParticleContainerI.H:1994
void AddIntComp(int communicate=1)
Definition AMReX_ParticleContainer.H:1377
Long nparticlesPrePost
Definition AMReX_ParticleContainer.H:1457
Vector< std::string > filePrefixPrePost
Definition AMReX_ParticleContainer.H:1463
int numLocalTilesAtLevel(int lev) const
The total number of tiles on this rank on this level.
Definition AMReX_ParticleContainer.H:377
Long IncrementWithTotal(MultiFab &mf, int level, bool local=false)
Definition AMReX_ParticleContainerI.H:749
static constexpr int NStructReal
Number of extra Real components in the particle struct.
Definition AMReX_ParticleContainer.H:156
Long NumberOfParticlesAtLevel(int level, bool only_valid=true, bool only_local=false) const
Returns # of particles at specified the level.
Definition AMReX_ParticleContainerI.H:552
void SortParticlesByCell()
Sort the particles on each tile by cell, using Fortran ordering.
Definition AMReX_ParticleContainerI.H:1285
Vector< int > h_redistribute_real_comp
Definition AMReX_ParticleContainer.H:1448
void addParticles(const PCType &other, bool local=false)
Add particles from other to this ParticleContainer. local controls whether or not to call Redistribut...
Definition AMReX_ParticleContainerI.H:1159
typename Particle< NStructReal, NStructInt >::RealType RealType
The type of the Real data.
Definition AMReX_ParticleContainer.H:176
static constexpr bool is_rtsoa_pc
Definition AMReX_ParticleContainer.H:184
bool GetUseUnlink() const
Definition AMReX_ParticleContainer.H:1297
int GetRealCompIndex(std::string const &name)
Definition AMReX_ParticleContainerI.H:162
Long maxnextidPrePost
Definition AMReX_ParticleContainer.H:1455
void InitFromBinaryMetaFile(const std::string &file, int extradata)
Definition AMReX_ParticleInit.H:935
int NumIntComps() const
Definition AMReX_ParticleContainer.H:1386
void ReserveForRedistribute(ParticleCopyPlan const &plan)
Definition AMReX_ParticleContainerI.H:1758
bool Where(const P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, IntVect nGrow=IntVect(0), int local_grid=-1) const
Checks a particle's location on levels lev_min and higher. Returns false if the particle does not exi...
Definition AMReX_ParticleContainerI.H:217
typename ParticleTileType::ParticleTileDataType PTDType
Definition AMReX_ParticleContainer.H:197
ParticleContainer_impl & operator=(const ParticleContainer_impl &)=delete
Allocator< T > AllocatorType
The memory allocator in use.
Definition AMReX_ParticleContainer.H:172
ParticleLevel & GetParticles(int lev)
Return the ParticleLevel for level "lev". Non-const version.
Definition AMReX_ParticleContainer.H:1072
void Redistribute_impl(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Definition AMReX_ParticleContainer.H:1301
int GetIntCompIndex(std::string const &name)
Definition AMReX_ParticleContainerI.H:184
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:1196
std::vector< std::string > GetIntSoANames() const
Definition AMReX_ParticleContainer.H:1520
void CapacityOfParticlesInGrid(LayoutData< I > &mem, int lev) const
Return capacity of memory for particles at specific grid.
Definition AMReX_ParticleContainerI.H:595
void copyParticles(const PCType &other, bool local=false)
Copy particles from other to this ParticleContainer. Will clear all the particles from this container...
Definition AMReX_ParticleContainerI.H:1147
void RemoveParticlesNotAtFinestLevel()
Definition AMReX_ParticleContainerI.H:773
Vector< Long > NumberOfParticlesInGrid(int level, bool only_valid=true, bool only_local=false) const
Definition AMReX_ParticleContainerI.H:497
void Define(ParGDBBase *gdb)
Define a default-constructed ParticleContainer using a ParGDB object. The container will track change...
Definition AMReX_ParticleContainer.H:315
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:267
void Restart(const std::string &dir, const std::string &file)
Restart from checkpoint.
Definition AMReX_ParticleIO.H:651
Long superParticleSize() const
Definition AMReX_ParticleContainer.H:1314
typename SoA::IntVector IntVector
Definition AMReX_ParticleContainer.H:203
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:393
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:347
std::array< Long, 3 > PrintCapacity() const
Definition AMReX_ParticleContainerI.H:662
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:840
static constexpr bool has_polymorphic_allocator
Definition AMReX_ParticleContainer.H:209
void WriteParticles(int level, std::ofstream &ofs, int fnum, Vector< int > &which, Vector< int > &count, Vector< Long > &where, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::map< std::pair< int, int >, FlagsVector > > &particle_io_flags, bool is_checkpoint) const
Definition AMReX_ParticleIO.H:583
std::conditional_t< is_rtsoa_pc, ParticleTileRT< typename ParticleType::RealType, typename ParticleType::IntType >, ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > > ParticleTileType
Definition AMReX_ParticleContainer.H:191
ParticleTileType & ParticlesAt(int lev, int grid, int tile)
Return the ParticleTile for level "lev", grid "grid" and tile "tile." Non-const version.
Definition AMReX_ParticleContainer.H:1121
void InitFromBinaryFile(const std::string &file, int extradata)
Definition AMReX_ParticleInit.H:489
void AddRealComp(std::string const &name, int communicate=1)
Definition AMReX_ParticleContainer.H:1316
std::array< Long, 3 > ByteSpread() const
Definition AMReX_ParticleContainerI.H:618
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:17
ContainerLike< NewAllocator > make_alike() const
Definition AMReX_ParticleContainer.H:1418
void AddRealComp(int communicate=1)
Definition AMReX_ParticleContainer.H:1344
void AddParticlesAtLevel(AoS &particles, int level, int nGrow=0)
Add particles from a pbox to the grid at this level.
Definition AMReX_ParticleContainerI.H:1808
~ParticleContainer_impl() override=default
Long TotalNumberOfParticles(bool only_valid=true, bool only_local=false) const
Returns # of particles at all levels.
Definition AMReX_ParticleContainerI.H:482
void reserveData() override
This reserves data in the vector of dummy MultiFabs used by the ParticleContainer for the maximum num...
Definition AMReX_ParticleContainerI.H:427
Vector< ParticleLevel > & GetParticles()
Return the underlying Vector (over AMR levels) of ParticleLevels. Non-const version.
Definition AMReX_ParticleContainer.H:1042
T_ParticleType ParticleType
Definition AMReX_ParticleContainer.H:151
Vector< Vector< int > > countPrePost
Definition AMReX_ParticleContainer.H:1460
bool usePrePost
Definition AMReX_ParticleContainer.H:1453
Definition AMReX_GpuAllocators.H:156
A Box with real dimensions.
Definition AMReX_RealBox.H:28
A Descriptor of the Real Type.
Definition AMReX_FabConv.H:105
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:29
Long size() const noexcept
Definition AMReX_Vector.H:54
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
amrex_ulong ULong
Unsigned integer type guaranteed to be wider than unsigned int.
Definition AMReX_INT.H:32
amrex_particle_real ParticleReal
Floating Point Type for Particles.
Definition AMReX_REAL.H:90
amrex_long Long
Definition AMReX_INT.H:30
void WritePlotFile(const std::string &dir, const std::string &name) const
This version of WritePlotFile writes all components and assigns component names.
Definition AMReX_ParticleIO.H:116
ParticleContainer_impl< Particle< T_NStructReal, T_NStructInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > ParticleContainer
Definition AMReX_ParIter.H:29
Definition AMReX_Amr.cpp:50
amrex::ArenaAllocator< T > DefaultAllocator
Definition AMReX_GpuAllocators.H:205
IntVectND< 3 > IntVect
IntVect is an alias for amrex::IntVectND instantiated with AMREX_SPACEDIM.
Definition AMReX_BaseFwd.H:38
Definition AMReX_ParticleUtil.H:396
Definition AMReX_TypeTraits.H:90
Definition AMReX_GpuAllocators.H:184
A struct used for communicating particle data across processes during multi-level operations.
Definition AMReX_ParticleContainer.H:81
RealType m_data[1+3]
Definition AMReX_ParticleContainer.H:86
ParticleReal RealType
Definition AMReX_ParticleContainer.H:82
int m_grid
Definition AMReX_ParticleContainer.H:84
IntVect m_cell
Definition AMReX_ParticleContainer.H:85
int m_lev
Definition AMReX_ParticleContainer.H:83
Definition AMReX_ParticleCommunication.H:92
A struct used to pass initial data into the various Init methods. This struct is used to pass initial...
Definition AMReX_ParticleContainer.H:119
std::array< int, NStructInt > int_struct_data
Definition AMReX_ParticleContainer.H:121
std::array< int, NArrayInt > int_array_data
Definition AMReX_ParticleContainer.H:123
std::array< double, NArrayReal > real_array_data
Definition AMReX_ParticleContainer.H:122
std::array< double, NStructReal > real_struct_data
Definition AMReX_ParticleContainer.H:120
A struct used for storing a particle's position in the AMR hierarchy.
Definition AMReX_ParticleContainer.H:93
Box m_grown_gridbox
Definition AMReX_ParticleContainer.H:100
IntVect m_cell
Definition AMReX_ParticleContainer.H:97
int m_grid
Definition AMReX_ParticleContainer.H:95
int m_tile
Definition AMReX_ParticleContainer.H:96
int m_lev
Definition AMReX_ParticleContainer.H:94
Box m_tilebox
Definition AMReX_ParticleContainer.H:99
Box m_gridbox
Definition AMReX_ParticleContainer.H:98
Definition AMReX_ParticleTileRT.H:383
Definition AMReX_ParticleTile.H:764
The struct used to store particles.
Definition AMReX_Particle.H:405
ParticleReal RealType
The floating point type used for the particles.
Definition AMReX_Particle.H:418