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>
26#include <AMReX_TypeTraits.H>
27#include <AMReX_GpuContainers.H>
28#include <AMReX_ParticleUtil.H>
33#include <AMReX_Scan.H>
34#include <AMReX_DenseBins.H>
35#include <AMReX_SparseBins.H>
37#include <AMReX_ParticleMesh.H>
38#include <AMReX_OpenMP.H>
39#include <AMReX_ParIter.H>
40
41#ifdef AMREX_LAZY
42#include <AMReX_Lazy.H>
43#endif
44
45#ifdef AMREX_USE_OMP
46#include <omp.h>
47#endif
48
49#ifdef AMREX_USE_HDF5
50#include <hdf5.h>
51#endif
52
53#include <algorithm>
54#include <array>
55#include <cstring>
56#include <fstream>
57#include <iostream>
58#include <limits>
59#include <map>
60#include <memory>
61#include <numeric>
62#include <random>
63#include <stdexcept>
64#include <string>
65#include <tuple>
66#include <type_traits>
67#include <utility>
68#include <vector>
69
70namespace amrex {
71
72#ifdef AMREX_USE_HDF5_ASYNC
73 extern hid_t es_par_g;
74#endif
80{
82 int m_lev;
83 int m_grid;
85 RealType m_data[1 + AMREX_SPACEDIM];
86};
87
101
116template<int NStructReal, int NStructInt, int NArrayReal, int NArrayInt>
118{
119 std::array<double, NStructReal> real_struct_data;
120 std::array<int, NStructInt > int_struct_data;
121 std::array<double, NArrayReal > real_array_data;
122 std::array<int, NArrayInt > int_array_data;
123};
124
125template <bool is_const, typename T_ParticleType, int NArrayReal, int NArrayInt,
126 template<class> class Allocator, class CellAssignor>
127class ParIterBase_impl;
128
143template <typename T_ParticleType, int T_NArrayReal, int T_NArrayInt,
144 template<class> class Allocator=DefaultAllocator,
145 class T_CellAssignor=DefaultAssignor>
146
148{
149public:
150 using ParticleType = T_ParticleType;
151 using ConstParticleType = typename ParticleType::ConstType;
152 using CellAssignor = T_CellAssignor;
153
155 static constexpr int NStructReal = ParticleType::NReal;
157 static constexpr int NStructInt = ParticleType::NInt;
159 static constexpr int NArrayReal = T_NArrayReal;
161 static constexpr int NArrayInt = T_NArrayInt;
163
164private:
165 friend class ParIterBase_impl<true,ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor>;
166 friend class ParIterBase_impl<false,ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor>;
167
168public:
170 template <typename T>
171 using AllocatorType = Allocator<T>;
176
177#ifdef AMREX_SINGLE_PRECISION_PARTICLES
179#else
181#endif
182
186
189 using ParticleLevel = std::map<std::pair<int, int>, ParticleTileType>;
192 using AoS = typename ParticleTileType::AoS;
193 using SoA = typename ParticleTileType::SoA;
194
195 using RealVector = typename SoA::RealVector;
196 using IntVector = typename SoA::IntVector;
197 using ParticleVector = typename AoS::ParticleVector;
201
202 static constexpr bool has_polymorphic_allocator =
204
205 static_assert(!ParticleType::is_soa_particle || T_NArrayReal >= AMREX_SPACEDIM,
206 "Pure SoA particle containers require at least AMREX_SPACEDIM real components for positions");
207
211 :
213 {
214 Initialize ();
215 }
216
232
241 const DistributionMapping & dmap,
242 const BoxArray & ba)
243 :
244 ParticleContainerBase(geom, dmap, ba)
245 {
246 Initialize ();
249 }
250
261 const Vector<DistributionMapping> & dmap,
262 const Vector<BoxArray> & ba,
263 const Vector<int> & rr)
264 :
265 ParticleContainerBase(geom, dmap, ba, rr)
266 {
267 Initialize ();
270 }
271
281 const Vector<DistributionMapping> & dmap,
282 const Vector<BoxArray> & ba,
283 const Vector<IntVect> & rr)
284 :
285 ParticleContainerBase(geom, dmap, ba, rr)
286 {
287 Initialize ();
290 }
291
292 ~ParticleContainer_impl () override = default;
293
296
298 ParticleContainer_impl& operator= ( ParticleContainer_impl && ) noexcept = default;
299
300
308 void Define (ParGDBBase* gdb)
309 {
311 reserveData();
312 resizeData();
313 }
314
322 void Define (const Geometry & geom,
323 const DistributionMapping & dmap,
324 const BoxArray & ba)
325 {
326 this->ParticleContainerBase::Define(geom, dmap, ba);
327 reserveData();
328 resizeData();
329 }
330
340 void Define (const Vector<Geometry> & geom,
341 const Vector<DistributionMapping> & dmap,
342 const Vector<BoxArray> & ba,
343 const Vector<int> & rr)
344 {
345 this->ParticleContainerBase::Define(geom, dmap, ba, rr);
346 reserveData();
347 resizeData();
348 }
349
359 void Define (const Vector<Geometry> & geom,
360 const Vector<DistributionMapping> & dmap,
361 const Vector<BoxArray> & ba,
362 const Vector<IntVect> & rr)
363 {
364 this->ParticleContainerBase::Define(geom, dmap, ba, rr);
365 reserveData();
366 resizeData();
367 }
368
370 int numLocalTilesAtLevel (int lev) const {
371 return (lev < m_particles.size()) ? m_particles[lev].size() : 0;
372 }
373
378 void reserveData () override;
379
386 void resizeData () override;
387
388 void InitFromAsciiFile (const std::string& file, int extradata,
389 const IntVect* Nrep = nullptr);
390
391 void InitFromBinaryFile (const std::string& file, int extradata);
392
393 void InitFromBinaryMetaFile (const std::string& file, int extradata);
394
411 void InitRandom (Long icount, ULong iseed,
412 const ParticleInitData& pdata,
413 bool serialize = false, RealBox bx = RealBox());
414
415
431 void InitRandomPerBox (Long icount, ULong iseed, const ParticleInitData& pdata);
432
433
448 void InitOnePerCell (Real x_off, Real y_off, Real z_off,
449 const ParticleInitData& pdata);
450
451
463 void InitNRandomPerCell (int n_per_cell, const ParticleInitData& pdata);
464
465 void Increment (MultiFab& mf, int level);
466
467 Long IncrementWithTotal (MultiFab& mf, int level, bool local = false);
468
506 void Redistribute (int lev_min = 0, int lev_max = -1, int nGrow = 0, int local=0,
507 bool remove_negative=true);
508
509
521 template <class index_type>
522 void ReorderParticles (int lev, const MFIter& mfi, const index_type* permutations);
523
538 void SortParticlesForDeposition (IntVect idx_type);
539
543 void SortParticlesByCell ();
544
551 void SortParticlesByBin (IntVect bin_size);
552
563 bool OK (int lev_min = 0, int lev_max = -1, int nGrow = 0) const;
564
565 std::array<Long, 3> ByteSpread () const;
566
567 std::array<Long, 3> PrintCapacity () const;
568
569 void ShrinkToFit ();
570
581 Long NumberOfParticlesAtLevel (int level, bool only_valid = true, bool only_local = false) const;
582
583 Vector<Long> NumberOfParticlesInGrid (int level, bool only_valid = true, bool only_local = false) const;
584
588 template <typename I, std::enable_if_t<std::is_integral_v<I> && (sizeof(I) >= sizeof(Long)), int> = 0>
589 void CapacityOfParticlesInGrid (LayoutData<I>& mem, int lev) const;
590
599 Long TotalNumberOfParticles (bool only_valid=true, bool only_local=false) const;
600
601
609 void RemoveParticlesAtLevel (int level);
610
612
620 void CreateVirtualParticles (int level, AoS& virts) const;
621
630 void CreateGhostParticles (int level, int ngrow, AoS& ghosts) const;
631
639 void AddParticlesAtLevel (AoS& particles, int level, int nGrow=0);
640
648 void CreateVirtualParticles (int level, ParticleTileType& virts) const;
649
658 void CreateGhostParticles (int level, int ngrow, ParticleTileType& ghosts) const;
659
667 void AddParticlesAtLevel (ParticleTileType& particles, int level, int nGrow=0);
668
669
673 void clearParticles ();
674
675
684 template <class PCType,
685 std::enable_if_t<IsParticleContainer<PCType>::value, int> foo = 0>
686 void copyParticles (const PCType& other, bool local=false);
687
695 template <class PCType,
696 std::enable_if_t<IsParticleContainer<PCType>::value, int> foo = 0>
697 void addParticles (const PCType& other, bool local=false);
698
713 template <class F, class PCType,
714 std::enable_if_t<IsParticleContainer<PCType>::value, int> foo = 0,
715 std::enable_if_t<! std::is_integral_v<F>, int> bar = 0>
716 void copyParticles (const PCType& other, F&&f, bool local=false);
717
731 template <class F, class PCType,
732 std::enable_if_t<IsParticleContainer<PCType>::value, int> foo = 0,
733 std::enable_if_t<! std::is_integral_v<F>, int> bar = 0>
734 void addParticles (const PCType& other, F const& f, bool local=false);
735
743 void WriteParticleRealData (void* data, size_t size, std::ostream& os) const;
744
752 void ReadParticleRealData (void* data, size_t size, std::istream& is);
753
762 void Checkpoint (const std::string& dir, const std::string& name,
763 const Vector<std::string>& real_comp_names = Vector<std::string>(),
764 const Vector<std::string>& int_comp_names = Vector<std::string>()) const
765 {
766 Checkpoint(dir, name, true, real_comp_names, int_comp_names);
767 }
768
774 void Checkpoint (const std::string& dir, const std::string& name, bool is_checkpoint,
775 const Vector<std::string>& real_comp_names = Vector<std::string>(),
776 const Vector<std::string>& int_comp_names = Vector<std::string>()) const;
777
790 void Checkpoint (const std::string& dir, const std::string& name,
791 const Vector<int>& write_real_comp,
792 const Vector<int>& write_int_comp,
793 const Vector<std::string>& real_comp_names,
794 const Vector<std::string>& int_comp_names) const;
795
810 template <class F>
811 void WriteBinaryParticleData (const std::string& dir,
812 const std::string& name,
813 const Vector<int>& write_real_comp,
814 const Vector<int>& write_int_comp,
815 const Vector<std::string>& real_comp_names,
816 const Vector<std::string>& int_comp_names,
817 F&& f, bool is_checkpoint=false) const;
818
819 void CheckpointPre ();
820
821 void CheckpointPost ();
822
829 void Restart (const std::string& dir, const std::string& file);
830
838 void Restart (const std::string& dir, const std::string& file, bool is_checkpoint);
839
846 void WritePlotFile (const std::string& dir, const std::string& name) const;
847
859 template <class F, std::enable_if_t<!std::is_same_v<std::decay_t<F>, Vector<std::string>>>* = nullptr>
860 void WritePlotFile (const std::string& dir, const std::string& name, F&& f) const;
861
870 void WritePlotFile (const std::string& dir, const std::string& name,
871 const Vector<std::string>& real_comp_names,
872 const Vector<std::string>& int_comp_names) const;
873
887 template <class F>
888 void WritePlotFile (const std::string& dir, const std::string& name,
889 const Vector<std::string>& real_comp_names,
890 const Vector<std::string>& int_comp_names, F&& f) const;
891
900 void WritePlotFile (const std::string& dir, const std::string& name,
901 const Vector<std::string>& real_comp_names) const;
902
916 template <class F, std::enable_if_t<!std::is_same_v<std::decay_t<F>, Vector<std::string>>>* = nullptr>
917 void WritePlotFile (const std::string& dir, const std::string& name,
918 const Vector<std::string>& real_comp_names, F&& f) const;
919
929 void WritePlotFile (const std::string& dir,
930 const std::string& name,
931 const Vector<int>& write_real_comp,
932 const Vector<int>& write_int_comp) const;
933
948 template <class F>
949 void WritePlotFile (const std::string& dir,
950 const std::string& name,
951 const Vector<int>& write_real_comp,
952 const Vector<int>& write_int_comp, F&& f) const;
953
967 void WritePlotFile (const std::string& dir,
968 const std::string& name,
969 const Vector<int>& write_real_comp,
970 const Vector<int>& write_int_comp,
971 const Vector<std::string>& real_comp_names,
972 const Vector<std::string>& int_comp_names) const;
973
992 template <class F>
993 void WritePlotFile (const std::string& dir,
994 const std::string& name,
995 const Vector<int>& write_real_comp,
996 const Vector<int>& write_int_comp,
997 const Vector<std::string>& real_comp_names,
998 const Vector<std::string>& int_comp_names,
999 F&& f) const;
1000
1001 void WritePlotFilePre ();
1002
1003 void WritePlotFilePost ();
1004
1005 void WriteAsciiFile (const std::string& file);
1006
1011 const Vector<ParticleLevel>& GetParticles () const { return m_particles; }
1012
1017 Vector <ParticleLevel>& GetParticles () { return m_particles; }
1018
1032 const ParticleLevel& GetParticles (int lev) const { return m_particles[lev]; }
1033
1047 ParticleLevel & GetParticles (int lev) { return m_particles[lev]; }
1048
1071 const ParticleTileType& ParticlesAt (int lev, int grid, int tile) const
1072 { return m_particles[lev].at(std::make_pair(grid, tile)); }
1073
1096 ParticleTileType& ParticlesAt (int lev, int grid, int tile)
1097 { return m_particles[lev].at(std::make_pair(grid, tile)); }
1098
1120 template <class Iterator>
1121 const ParticleTileType& ParticlesAt (int lev, const Iterator& iter) const
1122 { return ParticlesAt(lev, iter.index(), iter.LocalTileIndex()); }
1123
1145 template <class Iterator>
1146 ParticleTileType& ParticlesAt (int lev, const Iterator& iter)
1147 { return ParticlesAt(lev, iter.index(), iter.LocalTileIndex()); }
1148
1171 ParticleTileType& DefineAndReturnParticleTile (int lev, int grid, int tile)
1172 {
1173 m_particles[lev][std::make_pair(grid, tile)].define(
1175 &m_soa_rdata_names, &m_soa_idata_names,
1176 arena()
1177 );
1178 return ParticlesAt(lev, grid, tile);
1179 }
1180
1202 template <class Iterator>
1203 ParticleTileType& DefineAndReturnParticleTile (int lev, const Iterator& iter)
1204 {
1205 auto index = std::make_pair(iter.index(), iter.LocalTileIndex());
1206 m_particles[lev][index].define(
1208 &m_soa_rdata_names, &m_soa_idata_names,
1209 arena()
1210 );
1211 return ParticlesAt(lev, iter);
1212 }
1213
1224 void AssignDensity (int rho_index,
1225 Vector<std::unique_ptr<MultiFab> >& mf_to_be_filled,
1226 int lev_min, int ncomp, int finest_level, int ngrow=2) const;
1227
1228 void AssignCellDensitySingleLevel (int rho_index, MultiFab& mf, int level,
1229 int ncomp=1, int particle_lvl_offset = 0) const;
1230
1231 template <typename P, typename Assignor=CellAssignor>
1232 IntVect Index (const P& p, int lev) const;
1233
1243 ParticleLocData Reset (ParticleType& prt, bool update, bool verbose=true,
1244 ParticleLocData pld = ParticleLocData()) const;
1245
1251 template <typename P>
1252 bool PeriodicShift (P& p) const;
1253
1255
1257
1258 void SetUsePrePost (bool tf) const {
1259 usePrePost = tf;
1260 }
1261 bool GetUsePrePost () const {
1262 return usePrePost;
1263 }
1264
1267
1268 void SetUseUnlink (bool tf) const {
1269 doUnlink = tf;
1270 }
1271
1272 bool GetUseUnlink () const {
1273 return doUnlink;
1274 }
1275
1276 void RedistributeCPU (int lev_min = 0, int lev_max = -1, int nGrow = 0, int local=0,
1277 bool remove_negative=true);
1278
1279 void RedistributeGPU (int lev_min = 0, int lev_max = -1, int nGrow = 0, int local=0,
1280 bool remove_negative=true);
1281
1282 void ReserveForRedistribute (ParticleCopyPlan const& plan);
1283
1284 Long superParticleSize() const { return superparticle_size; }
1285
1286 void AddRealComp (std::string const & name, int communicate=1)
1287 {
1288 // names must be unique
1289 auto const it = std::find(m_soa_rdata_names.begin(), m_soa_rdata_names.end(), name);
1290 if (it != m_soa_rdata_names.end()) {
1291 throw std::runtime_error("AddRealComp: name '" + name + "' is already present in the SoA.");
1292 }
1293 m_soa_rdata_names.push_back(name);
1294
1295 m_runtime_comps_defined = true;
1296 m_num_runtime_real++;
1297 h_redistribute_real_comp.push_back(communicate);
1299 this->resizeData();
1300
1301 // resize runtime SoA
1302 for (int lev = 0; lev < numLevels(); ++lev) {
1303 for (ParIterType pti(*this,lev); pti.isValid(); ++pti) {
1304 auto& tile = DefineAndReturnParticleTile(lev, pti);
1305 auto np = tile.numParticles();
1306 if (np > 0) {
1307 auto& soa = tile.GetStructOfArrays();
1308 soa.resize(np);
1309 }
1310 }
1311 }
1312 }
1313
1314 void AddRealComp (int communicate=1)
1315 {
1316 AddRealComp(getDefaultCompNameReal<ParticleType>(NArrayReal+m_num_runtime_real), communicate);
1317 }
1318
1319 void AddIntComp (std::string const & name, int communicate=1)
1320 {
1321 // names must be unique
1322 auto const it = std::find(m_soa_idata_names.begin(), m_soa_idata_names.end(), name);
1323 if (it != m_soa_idata_names.end()) {
1324 throw std::runtime_error("AddIntComp: name '" + name + "' is already present in the SoA.");
1325 }
1326 m_soa_idata_names.push_back(name);
1327
1328 m_runtime_comps_defined = true;
1329 m_num_runtime_int++;
1330 h_redistribute_int_comp.push_back(communicate);
1332 this->resizeData();
1333
1334 // resize runtime SoA
1335 for (int lev = 0; lev < numLevels(); ++lev) {
1336 for (ParIterType pti(*this,lev); pti.isValid(); ++pti) {
1337 auto& tile = DefineAndReturnParticleTile(lev, pti);
1338 auto np = tile.numParticles();
1339 if (np > 0) {
1340 auto& soa = tile.GetStructOfArrays();
1341 soa.resize(np);
1342 }
1343 }
1344 }
1345 }
1346
1347 void AddIntComp (int communicate=1)
1348 {
1349 AddIntComp(getDefaultCompNameInt<ParticleType>(NArrayInt+m_num_runtime_int), communicate);
1350 }
1351
1352 int NumRuntimeRealComps () const { return m_num_runtime_real; }
1353 int NumRuntimeIntComps () const { return m_num_runtime_int; }
1354
1355 int NumRealComps () const { return NArrayReal + NumRuntimeRealComps(); }
1356 int NumIntComps () const { return NArrayInt + NumRuntimeIntComps() ; }
1357
1363 void ResizeRuntimeRealComp (int new_size, bool communicate);
1364
1370 void ResizeRuntimeIntComp (int new_size, bool communicate);
1371
1373 template <template<class> class NewAllocator=amrex::DefaultAllocator>
1375
1386 template <template<class> class NewAllocator=Allocator>
1388 make_alike () const
1389 {
1391
1392 std::vector<std::string> const real_names = this->GetRealSoANames();
1393 std::vector<std::string> real_ct_names(NArrayReal);
1394 for (int ic = 0; ic < NArrayReal; ++ic) { real_ct_names.at(ic) = real_names[ic]; }
1395
1396 std::vector<std::string> const int_names = this->GetIntSoANames();
1397 std::vector<std::string> int_ct_names(NArrayInt);
1398 for (int ic = 0; ic < NArrayInt; ++ic) { int_ct_names.at(ic) = int_names[ic]; }
1399
1400 tmp.SetSoACompileTimeNames(real_ct_names, int_ct_names);
1401
1402 // add runtime real comps to tmp
1403 for (int ic = 0; ic < this->NumRuntimeRealComps(); ++ic) {
1404 tmp.AddRealComp(real_names.at(ic + NArrayReal));
1405 }
1406
1407 // add runtime int comps to tmp
1408 for (int ic = 0; ic < this->NumRuntimeIntComps(); ++ic) {
1409 tmp.AddIntComp(int_names.at(ic + NArrayInt));
1410 }
1411
1414
1415 return tmp;
1416 }
1417
1420
1423 mutable bool usePrePost;
1424 mutable bool doUnlink;
1426 mutable int nOutFilesPrePost;
1432 mutable std::string HdrFileNamePrePost;
1434
1435protected:
1436
1450 template <typename P>
1451 bool Where (const P& prt, ParticleLocData& pld,
1452 int lev_min = 0, int lev_max = -1, int nGrow=0, int local_grid=-1) const;
1453
1454
1465 template <typename P>
1466 bool EnforcePeriodicWhere (P& prt, ParticleLocData& pld,
1467 int lev_min = 0, int lev_max = -1, int local_grid=-1) const;
1468
1469public:
1470 void
1471 WriteParticles (int level, std::ofstream& ofs, int fnum,
1472 Vector<int>& which, Vector<int>& count, Vector<Long>& where,
1473 const Vector<int>& write_real_comp, const Vector<int>& write_int_comp,
1474 const Vector<std::map<std::pair<int, int>,IntVector>>& particle_io_flags, bool is_checkpoint) const;
1475
1476#ifdef AMREX_USE_HDF5
1477#include "AMReX_ParticlesHDF5.H"
1478#endif
1479
1480public: // NOLINT(readability-redundant-access-specifiers)
1482 void SetSoACompileTimeNames (std::vector<std::string> const & rdata_name, std::vector<std::string> const & idata_name);
1483
1485 std::vector<std::string> GetRealSoANames () const {return m_soa_rdata_names;}
1486
1488 std::vector<std::string> GetIntSoANames () const {return m_soa_idata_names;}
1489
1495 bool HasRealComp (std::string const & name);
1496
1502 bool HasIntComp (std::string const & name);
1503
1511 int GetRealCompIndex (std::string const & name);
1512
1520 int GetIntCompIndex (std::string const & name);
1521
1522protected:
1523
1524 template <class RTYPE>
1525 void ReadParticles (int cnt, int grd, int lev, std::ifstream& ifs, int finest_level_in_file, bool convert_ids);
1526
1527 void SetParticleSize ();
1528
1530
1531private:
1532 virtual void particlePostLocate (ParticleType& /*p*/, const ParticleLocData& /*pld*/,
1533 const int /*lev*/) {}
1534
1535 virtual void correctCellVectors (int /*old_index*/, int /*new_index*/,
1536 int /*grid*/, const ParticleType& /*p*/) {}
1537
1538 void RedistributeMPI (std::map<int, Vector<char> >& not_ours,
1539 int lev_min = 0, int lev_max = 0, int nGrow = 0, int local=0);
1540
1541 template <typename P>
1542 void locateParticle (P& p, ParticleLocData& pld,
1543 int lev_min, int lev_max, int nGrow, int local_grid=-1) const;
1544
1545 void Initialize ();
1546
1547 bool m_runtime_comps_defined{false};
1548 int m_num_runtime_real{0};
1549 int m_num_runtime_int{0};
1550
1551 size_t particle_size, superparticle_size;
1552 int num_real_comm_comps, num_int_comm_comps;
1553 Vector<ParticleLevel> m_particles;
1554
1555 // names of both compile-time and runtime Real and Int SoA data
1556 std::vector<std::string> m_soa_rdata_names;
1557 std::vector<std::string> m_soa_idata_names;
1558};
1559
1561template <int T_NStructReal, int T_NStructInt, int T_NArrayReal, int T_NArrayInt, template<class> class Allocator, class CellAssignor>
1562using ParticleContainer = ParticleContainer_impl<Particle<T_NStructReal, T_NStructInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
1563
1564template <int T_NArrayReal, int T_NArrayInt, template<class> class Allocator=DefaultAllocator, class CellAssignor=DefaultAssignor>
1565using ParticleContainerPureSoA = ParticleContainer_impl<SoAParticle<T_NArrayReal, T_NArrayInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
1566
1567}
1568
1569#include "AMReX_ParticleInit.H"
1571#include "AMReX_ParticleIO.H"
1572
1573#ifdef AMREX_USE_HDF5
1574#include "AMReX_ParticleHDF5.H"
1575#endif
1576
1577#endif /*_PARTICLES_H_*/
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
Definition AMReX_GpuAllocators.H:115
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:568
A container for storing items in a set of bins.
Definition AMReX_DenseBins.H:77
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:43
static const RealDescriptor & Native64RealDescriptor()
Definition AMReX_FPC.cpp:137
static const RealDescriptor & Native32RealDescriptor()
NativeRealDescriptor is equivalent to Native32RealDescriptor if BL_FLOAT is used. Otherwise,...
Definition AMReX_FPC.cpp:124
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:74
a one-thingy-per-box distributed object
Definition AMReX_LayoutData.H:13
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:85
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition AMReX_MFIter.H:169
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:40
Dynamically allocated vector for trivially copyable data.
Definition AMReX_PODVector.H:308
Definition AMReX_ParIter.H:144
Definition AMReX_ParGDB.H:13
Definition AMReX_ParIter.H:32
Definition AMReX_ParIter.H:115
Definition AMReX_ParticleContainerBase.H:23
ParGDBBase * m_gdb
Definition AMReX_ParticleContainerBase.H:278
void Define(ParGDBBase *gdb)
Definition AMReX_ParticleContainerBase.H:83
int numLevels() const
the number of defined levels in the ParticleContainer
Definition AMReX_ParticleContainerBase.H:222
Arena * arena() const
Definition AMReX_ParticleContainerBase.H:248
A distributed container for Particles sorted onto the levels, grids, and tiles of a block-structured ...
Definition AMReX_ParticleContainer.H:148
ParticleTileType & DefineAndReturnParticleTile(int lev, const Iterator &iter)
Define and return the ParticleTile for level "lev", and Iterator "iter".
Definition AMReX_ParticleContainer.H:1203
void WritePlotFilePre()
Definition AMReX_ParticleIO.H:565
void AssignDensity(int rho_index, Vector< std::unique_ptr< MultiFab > > &mf_to_be_filled, int lev_min, int ncomp, int finest_level, int ngrow=2) const
Functions depending the layout of the data. Use with caution.
Definition AMReX_AmrParticles.H:36
typename ParticleTileType::ConstParticleTileDataType ConstPTDType
Definition AMReX_ParticleContainer.H:191
void addParticles(const PCType &other, bool local=false)
Add particles from other to this ParticleContainer. local controls whether or not to call Redistribut...
Definition AMReX_ParticleContainerI.H:1155
void SetUseUnlink(bool tf) const
Definition AMReX_ParticleContainer.H:1268
Vector< Long > nParticlesAtLevelPrePost
Definition AMReX_ParticleContainer.H:1428
bool GetLevelDirectoriesCreated() const
Definition AMReX_ParticleContainer.H:1256
IntVect Index(const P &p, int lev) const
Definition AMReX_ParticleContainerI.H:201
void Redistribute(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Redistribute puts all the particles back in the right places (for some value of right)
Definition AMReX_ParticleContainerI.H:1236
void AddIntComp(std::string const &name, int communicate=1)
Definition AMReX_ParticleContainer.H:1319
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:297
void ResizeRuntimeIntComp(int new_size, bool communicate)
Definition AMReX_ParticleContainerI.H:2557
bool doUnlink
Definition AMReX_ParticleContainer.H:1424
Vector< Vector< int > > whichPrePost
Definition AMReX_ParticleContainer.H:1429
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:280
std::string HdrFileNamePrePost
Definition AMReX_ParticleContainer.H:1432
Vector< Vector< Long > > wherePrePost
Definition AMReX_ParticleContainer.H:1431
RealDescriptor ParticleRealDescriptor
Definition AMReX_ParticleContainer.H:180
bool OK(int lev_min=0, int lev_max=-1, int nGrow=0) const
OK checks that all particles are in the right places (for some value of right)
Definition AMReX_ParticleContainerI.H:2330
ParticleTileType & ParticlesAt(int lev, const Iterator &iter)
Return the ParticleTile for level "lev" and Iterator "iter". Non-const version.
Definition AMReX_ParticleContainer.H:1146
int nOutFilesPrePost
Definition AMReX_ParticleContainer.H:1426
void ReadParticleRealData(void *data, size_t size, std::istream &is)
Read a contiguous chunk of real particle data from an istream.
Definition AMReX_ParticleIO.H:28
void InitRandomPerBox(Long icount, ULong iseed, const ParticleInitData &pdata)
This initializes the container with icount randomly distributed particles per box,...
Definition AMReX_ParticleInit.H:1364
ParticleContainer_impl(ParticleContainer_impl &&) noexcept=default
void Checkpoint(const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names=Vector< std::string >(), const Vector< std::string > &int_comp_names=Vector< std::string >()) const
Writes a particle checkpoint to file, suitable for restarting.
Definition AMReX_ParticleContainer.H:762
bool PeriodicShift(P &p) const
Returns true if the particle was shifted.
Definition AMReX_ParticleContainerI.H:376
std::map< std::pair< int, int >, ParticleTileType > ParticleLevel
Definition AMReX_ParticleContainer.H:189
bool levelDirectoriesCreated
Variables for i/o optimization saved for pre and post checkpoint.
Definition AMReX_ParticleContainer.H:1422
bool Where(const P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, int nGrow=0, int local_grid=-1) const
Checks a particle's location on levels lev_min and higher. Returns false if the particle does not exi...
Definition AMReX_ParticleContainerI.H:216
void RedistributeCPU(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Definition AMReX_ParticleContainerI.H:1671
static constexpr int NArrayInt
Number of extra integer components stored in struct-of-array form.
Definition AMReX_ParticleContainer.H:161
void InitFromAsciiFile(const std::string &file, int extradata, const IntVect *Nrep=nullptr)
Definition AMReX_ParticleInit.H:39
static constexpr int NArrayReal
Number of extra Real components stored in struct-of-array form.
Definition AMReX_ParticleContainer.H:159
const ParticleTileType & ParticlesAt(int lev, const Iterator &iter) const
Return the ParticleTile for level "lev" and Iterator "iter". Const version.
Definition AMReX_ParticleContainer.H:1121
void WritePlotFilePost()
Definition AMReX_ParticleIO.H:575
bool GetUsePrePost() const
Definition AMReX_ParticleContainer.H:1261
void SetSoACompileTimeNames(std::vector< std::string > const &rdata_name, std::vector< std::string > const &idata_name)
Definition AMReX_ParticleContainerI.H:109
typename ParticleTileType::AoS AoS
Definition AMReX_ParticleContainer.H:192
ParticleInitType< NStructReal, NStructInt, NArrayReal, NArrayInt > ParticleInitData
Definition AMReX_ParticleContainer.H:185
typename SoA::RealVector RealVector
Definition AMReX_ParticleContainer.H:195
typename ParticleType::ConstType ConstParticleType
Definition AMReX_ParticleContainer.H:151
ParticleContainer_impl(const ParticleContainer_impl &)=delete
void WriteAsciiFile(const std::string &file)
Definition AMReX_ParticleIO.H:1141
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:240
void SetParticleSize()
Definition AMReX_ParticleContainerI.H:16
void CheckpointPost()
Definition AMReX_ParticleIO.H:509
void InitNRandomPerCell(int n_per_cell, const ParticleInitData &pdata)
This initializes the particle container with n_per_cell randomly distributed particles per cell,...
Definition AMReX_ParticleInit.H:1549
void SetLevelDirectoriesCreated(bool tf)
Definition AMReX_ParticleContainer.H:1254
void RemoveParticlesAtLevel(int level)
The Following methods are for managing Virtual and Ghost Particles.
Definition AMReX_ParticleContainerI.H:757
const ParticleTileType & ParticlesAt(int lev, int grid, int tile) const
Return the ParticleTile for level "lev", grid "grid" and tile "tile." Const version.
Definition AMReX_ParticleContainer.H:1071
typename AoS::ParticleVector ParticleVector
Definition AMReX_ParticleContainer.H:197
void Define(const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
Define a default-constructed ParticleContainer using a ParGDB object. Single-level version.
Definition AMReX_ParticleContainer.H:322
static constexpr int NStructInt
Number of extra integer components in the particle struct.
Definition AMReX_ParticleContainer.H:157
void SortParticlesForDeposition(IntVect idx_type)
Sort particles on each tile such that particles adjacent in memory are likely to map to adjacent cell...
Definition AMReX_ParticleContainerI.H:1405
ParticleContainer_impl()
Default constructor - construct an empty particle container that has no concept of a level hierarchy....
Definition AMReX_ParticleContainer.H:210
void SetUsePrePost(bool tf) const
Definition AMReX_ParticleContainer.H:1258
int NumRealComps() const
Definition AMReX_ParticleContainer.H:1355
Long GetMaxNextIDPrePost() const
Definition AMReX_ParticleContainer.H:1265
void clearParticles()
Clear all the particles in this container. This does not free memory.
Definition AMReX_ParticleContainerI.H:1128
void ReadParticles(int cnt, int grd, int lev, std::ifstream &ifs, int finest_level_in_file, bool convert_ids)
Definition AMReX_ParticleIO.H:960
void Increment(MultiFab &mf, int level)
Definition AMReX_ParticleContainerI.H:720
Vector< int > h_redistribute_int_comp
Definition AMReX_ParticleContainer.H:1419
typename ParticleTileType::SoA SoA
Definition AMReX_ParticleContainer.H:193
void AssignCellDensitySingleLevel(int rho_index, MultiFab &mf, int level, int ncomp=1, int particle_lvl_offset=0) const
Definition AMReX_ParticleContainerI.H:2391
int NumRuntimeIntComps() const
Definition AMReX_ParticleContainer.H:1353
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:1083
Long GetNParticlesPrePost() const
Definition AMReX_ParticleContainer.H:1266
void SortParticlesByBin(IntVect bin_size)
Sort the particles on each tile by groups of cells, given an IntVect bin_size.
Definition AMReX_ParticleContainerI.H:1372
void InitOnePerCell(Real x_off, Real y_off, Real z_off, const ParticleInitData &pdata)
This initializes the particle container with one particle per cell, where the other particle data and...
Definition AMReX_ParticleInit.H:1465
bool HasIntComp(std::string const &name)
Definition AMReX_ParticleContainerI.H:148
T_CellAssignor CellAssignor
Definition AMReX_ParticleContainer.H:152
const Vector< ParticleLevel > & GetParticles() const
Return the underlying Vector (over AMR levels) of ParticleLevels. Const version.
Definition AMReX_ParticleContainer.H:1011
const ParticleLevel & GetParticles(int lev) const
Return the ParticleLevel for level "lev". Const version.
Definition AMReX_ParticleContainer.H:1032
std::vector< std::string > GetRealSoANames() const
Definition AMReX_ParticleContainer.H:1485
DenseBins< typename ParticleTileType::ParticleTileDataType > m_bins
Definition AMReX_ParticleContainer.H:1529
void CheckpointPre()
Definition AMReX_ParticleIO.H:452
void ShrinkToFit()
Definition AMReX_ParticleContainerI.H:700
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:224
bool HasRealComp(std::string const &name)
Definition AMReX_ParticleContainerI.H:140
void InitRandom(Long icount, ULong iseed, const ParticleInitData &pdata, bool serialize=false, RealBox bx=RealBox())
This initializes the particle container with icount randomly distributed particles....
Definition AMReX_ParticleInit.H:970
void Define(const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
Define a default-constructed ParticleContainer using a ParGDB object. Multi-level version.
Definition AMReX_ParticleContainer.H:359
void resizeData() override
This resizes the vector of dummy MultiFabs used by the ParticleContainer for the current number of le...
Definition AMReX_ParticleContainerI.H:435
int NumRuntimeRealComps() const
Definition AMReX_ParticleContainer.H:1352
void ResizeRuntimeRealComp(int new_size, bool communicate)
Definition AMReX_ParticleContainerI.H:2531
void AddIntComp(int communicate=1)
Definition AMReX_ParticleContainer.H:1347
Long nparticlesPrePost
Definition AMReX_ParticleContainer.H:1427
Vector< std::string > filePrefixPrePost
Definition AMReX_ParticleContainer.H:1433
int numLocalTilesAtLevel(int lev) const
The total number of tiles on this rank on this level.
Definition AMReX_ParticleContainer.H:370
Long IncrementWithTotal(MultiFab &mf, int level, bool local=false)
Definition AMReX_ParticleContainerI.H:747
static constexpr int NStructReal
Number of extra Real components in the particle struct.
Definition AMReX_ParticleContainer.H:155
Long NumberOfParticlesAtLevel(int level, bool only_valid=true, bool only_local=false) const
Returns # of particles at specified the level.
Definition AMReX_ParticleContainerI.H:551
void SortParticlesByCell()
Sort the particles on each tile by cell, using Fortran ordering.
Definition AMReX_ParticleContainerI.H:1363
Vector< int > h_redistribute_real_comp
Definition AMReX_ParticleContainer.H:1418
typename Particle< NStructReal, NStructInt >::RealType RealType
The type of the Real data.
Definition AMReX_ParticleContainer.H:175
ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > ParticleTileType
Definition AMReX_ParticleContainer.H:184
bool GetUseUnlink() const
Definition AMReX_ParticleContainer.H:1272
int GetRealCompIndex(std::string const &name)
Definition AMReX_ParticleContainerI.H:161
Long maxnextidPrePost
Definition AMReX_ParticleContainer.H:1425
void InitFromBinaryMetaFile(const std::string &file, int extradata)
Definition AMReX_ParticleInit.H:931
int NumIntComps() const
Definition AMReX_ParticleContainer.H:1356
void ReserveForRedistribute(ParticleCopyPlan const &plan)
Definition AMReX_ParticleContainerI.H:1631
typename ParticleTileType::ParticleTileDataType PTDType
Definition AMReX_ParticleContainer.H:190
void RedistributeGPU(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Definition AMReX_ParticleContainerI.H:1435
ParticleContainer_impl & operator=(const ParticleContainer_impl &)=delete
Allocator< T > AllocatorType
The memory allocator in use.
Definition AMReX_ParticleContainer.H:171
ParticleLevel & GetParticles(int lev)
Return the ParticleLevel for level "lev". Non-const version.
Definition AMReX_ParticleContainer.H:1047
int GetIntCompIndex(std::string const &name)
Definition AMReX_ParticleContainerI.H:183
ParticleTileType & DefineAndReturnParticleTile(int lev, int grid, int tile)
Define and return the ParticleTile for level "lev", grid "grid" and tile "tile.".
Definition AMReX_ParticleContainer.H:1171
std::vector< std::string > GetIntSoANames() const
Definition AMReX_ParticleContainer.H:1488
void RemoveParticlesNotAtFinestLevel()
Definition AMReX_ParticleContainerI.H:771
Vector< Long > NumberOfParticlesInGrid(int level, bool only_valid=true, bool only_local=false) const
Definition AMReX_ParticleContainerI.H:496
void Define(ParGDBBase *gdb)
Define a default-constructed ParticleContainer using a ParGDB object. The container will track change...
Definition AMReX_ParticleContainer.H:308
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:260
void Restart(const std::string &dir, const std::string &file)
Restart from checkpoint.
Definition AMReX_ParticleIO.H:653
Long superParticleSize() const
Definition AMReX_ParticleContainer.H:1284
typename SoA::IntVector IntVector
Definition AMReX_ParticleContainer.H:196
void copyParticles(const PCType &other, bool local=false)
Copy particles from other to this ParticleContainer. Will clear all the particles from this container...
Definition AMReX_ParticleContainerI.H:1144
void WriteParticles(int level, std::ofstream &ofs, int fnum, Vector< int > &which, Vector< int > &count, Vector< Long > &where, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::map< std::pair< int, int >, IntVector > > &particle_io_flags, bool is_checkpoint) const
Definition AMReX_ParticleIO.H:585
ParticleLocData Reset(ParticleType &prt, bool update, bool verbose=true, ParticleLocData pld=ParticleLocData()) const
Updates a particle's location (Where), tries to periodic shift any particles that have left the domai...
Definition AMReX_ParticleContainerI.H:392
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:340
void CapacityOfParticlesInGrid(LayoutData< I > &mem, int lev) const
Return capacity of memory for particles at specific grid.
Definition AMReX_ParticleContainerI.H:593
std::array< Long, 3 > PrintCapacity() const
Definition AMReX_ParticleContainerI.H:660
void CreateVirtualParticles(int level, AoS &virts) const
Creates virtual particles for a given level that represent in some capacity all particles at finer le...
Definition AMReX_ParticleContainerI.H:838
static constexpr bool has_polymorphic_allocator
Definition AMReX_ParticleContainer.H:202
ParticleTileType & ParticlesAt(int lev, int grid, int tile)
Return the ParticleTile for level "lev", grid "grid" and tile "tile." Non-const version.
Definition AMReX_ParticleContainer.H:1096
void InitFromBinaryFile(const std::string &file, int extradata)
Definition AMReX_ParticleInit.H:485
void AddRealComp(std::string const &name, int communicate=1)
Definition AMReX_ParticleContainer.H:1286
std::array< Long, 3 > ByteSpread() const
Definition AMReX_ParticleContainerI.H:616
void WriteParticleRealData(void *data, size_t size, std::ostream &os) const
Write a contiguous chunk of real particle data to an ostream.
Definition AMReX_ParticleIO.H:14
ContainerLike< NewAllocator > make_alike() const
Definition AMReX_ParticleContainer.H:1388
void AddRealComp(int communicate=1)
Definition AMReX_ParticleContainer.H:1314
void AddParticlesAtLevel(AoS &particles, int level, int nGrow=0)
Add particles from a pbox to the grid at this level.
Definition AMReX_ParticleContainerI.H:2345
~ParticleContainer_impl() override=default
Long TotalNumberOfParticles(bool only_valid=true, bool only_local=false) const
Returns # of particles at all levels.
Definition AMReX_ParticleContainerI.H:481
void reserveData() override
This reserves data in the vector of dummy MultiFabs used by the ParticleContainer for the maximum num...
Definition AMReX_ParticleContainerI.H:426
Vector< ParticleLevel > & GetParticles()
Return the underlying Vector (over AMR levels) of ParticleLevels. Non-const version.
Definition AMReX_ParticleContainer.H:1017
void WriteBinaryParticleData(const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f, bool is_checkpoint=false) const
Writes particle data to disk in the AMReX native format.
Definition AMReX_ParticleIO.H:428
T_ParticleType ParticleType
Definition AMReX_ParticleContainer.H:150
Vector< Vector< int > > countPrePost
Definition AMReX_ParticleContainer.H:1430
bool usePrePost
Definition AMReX_ParticleContainer.H:1423
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:28
Long size() const noexcept
Definition AMReX_Vector.H:53
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
amrex_ulong ULong
Unsigned integer type guaranteed to be wider than unsigned int.
Definition AMReX_INT.H:32
amrex_particle_real ParticleReal
Floating Point Type for Particles.
Definition AMReX_REAL.H:90
amrex_long Long
Definition AMReX_INT.H:30
void WritePlotFile(const std::string &dir, const std::string &name) const
This version of WritePlotFile writes all components and assigns component names.
Definition AMReX_ParticleIO.H:113
ParticleContainer_impl< Particle< T_NStructReal, T_NStructInt >, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor > ParticleContainer
Definition AMReX_ParIter.H:26
Definition AMReX_Amr.cpp:49
amrex::ArenaAllocator< T > DefaultAllocator
Definition AMReX_GpuAllocators.H:199
Definition AMReX_ParticleUtil.H:394
Definition AMReX_GpuAllocators.H:178
A struct used for communicating particle data across processes during multi-level operations.
Definition AMReX_ParticleContainer.H:80
RealType m_data[1+3]
Definition AMReX_ParticleContainer.H:85
ParticleReal RealType
Definition AMReX_ParticleContainer.H:81
int m_grid
Definition AMReX_ParticleContainer.H:83
IntVect m_cell
Definition AMReX_ParticleContainer.H:84
int m_lev
Definition AMReX_ParticleContainer.H:82
Definition AMReX_ParticleCommunication.H:81
A struct used to pass initial data into the various Init methods. This struct is used to pass initial...
Definition AMReX_ParticleContainer.H:118
std::array< int, NStructInt > int_struct_data
Definition AMReX_ParticleContainer.H:120
std::array< int, NArrayInt > int_array_data
Definition AMReX_ParticleContainer.H:122
std::array< double, NArrayReal > real_array_data
Definition AMReX_ParticleContainer.H:121
std::array< double, NStructReal > real_struct_data
Definition AMReX_ParticleContainer.H:119
A struct used for storing a particle's position in the AMR hierarchy.
Definition AMReX_ParticleContainer.H:92
Box m_grown_gridbox
Definition AMReX_ParticleContainer.H:99
IntVect m_cell
Definition AMReX_ParticleContainer.H:96
int m_grid
Definition AMReX_ParticleContainer.H:94
int m_tile
Definition AMReX_ParticleContainer.H:95
int m_lev
Definition AMReX_ParticleContainer.H:93
Box m_tilebox
Definition AMReX_ParticleContainer.H:98
Box m_gridbox
Definition AMReX_ParticleContainer.H:97
Definition AMReX_ParticleTile.H:721
ParticleTileData< StorageParticleType, NArrayReal, NArrayInt > ParticleTileDataType
Definition AMReX_ParticleTile.H:749
std::conditional_t< ParticleType::is_soa_particle, StructOfArrays< NArrayReal, NArrayInt, Allocator, true >, StructOfArrays< NArrayReal, NArrayInt, Allocator, false > > SoA
Definition AMReX_ParticleTile.H:744
ConstParticleTileData< StorageParticleType, NArrayReal, NArrayInt > ConstParticleTileDataType
Definition AMReX_ParticleTile.H:750
std::conditional_t< ParticleType::is_soa_particle, ThisParticleTileHasNoAoS, ArrayOfStructs< ParticleType, Allocator > > AoS
Definition AMReX_ParticleTile.H:738
The struct used to store particles.
Definition AMReX_Particle.H:404
ParticleReal RealType
The floating point type used for the particles.
Definition AMReX_Particle.H:416