Block-Structured AMR Software Framework
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>
21 #include <AMReX_ParticleMPIUtil.H>
22 #include <AMReX_StructOfArrays.H>
23 #include <AMReX_ArrayOfStructs.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>
29 #include <AMReX_ParticleReduce.H>
32 #include <AMReX_ParticleLocator.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 <tuple>
64 #include <type_traits>
65 #include <utility>
66 #include <vector>
67 
68 namespace amrex {
69 
70 #ifdef AMREX_USE_HDF5_ASYNC
71  extern hid_t es_par_g;
72 #endif
78 {
79  using RealType = ParticleReal;
80  int m_lev;
81  int m_grid;
83  RealType m_data[1 + AMREX_SPACEDIM];
84 };
85 
90 {
91  int m_lev = -1;
92  int m_grid = -1;
93  int m_tile = -1;
98 };
99 
113 template<int NStructReal, int NStructInt, int NArrayReal, int NArrayInt>
115 {
116  std::array<double, NStructReal> real_struct_data;
117  std::array<int, NStructInt > int_struct_data;
118  std::array<double, NArrayReal > real_array_data;
119  std::array<int, NArrayInt > int_array_data;
120 };
121 
122 template <bool is_const, typename T_ParticleType, int NArrayReal, int NArrayInt,
123  template<class> class Allocator, class CellAssignor>
124 class ParIterBase_impl;
125 
139 template <typename T_ParticleType, int T_NArrayReal, int T_NArrayInt,
140  template<class> class Allocator=DefaultAllocator,
141  class T_CellAssignor=DefaultAssignor>
142 
144 {
145 public:
146  using ParticleType = T_ParticleType;
147  using ConstParticleType = typename ParticleType::ConstType;
148  using CellAssignor = T_CellAssignor;
149 
151  static constexpr int NStructReal = ParticleType::NReal;
153  static constexpr int NStructInt = ParticleType::NInt;
155  static constexpr int NArrayReal = T_NArrayReal;
157  static constexpr int NArrayInt = T_NArrayInt;
159 
160 private:
161  friend class ParIterBase_impl<true,ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor>;
162  friend class ParIterBase_impl<false,ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignor>;
163 
164 public:
166  template <typename T>
167  using AllocatorType = Allocator<T>;
172 
173 #ifdef AMREX_SINGLE_PRECISION_PARTICLES
175 #else
177 #endif
178 
182 
185  using ParticleLevel = std::map<std::pair<int, int>, ParticleTileType>;
186  using AoS = typename ParticleTileType::AoS;
187  using SoA = typename ParticleTileType::SoA;
188 
189  using RealVector = typename SoA::RealVector;
190  using IntVector = typename SoA::IntVector;
191  using ParticleVector = typename AoS::ParticleVector;
195 
199  :
201  h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true),
203  {
204  Initialize ();
205  }
206 
215  :
217  h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true),
219  {
220  Initialize ();
223  }
224 
233  const DistributionMapping & dmap,
234  const BoxArray & ba)
235  :
236  ParticleContainerBase(geom, dmap, ba),
237  h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true),
239  {
240  Initialize ();
243  }
244 
255  const Vector<DistributionMapping> & dmap,
256  const Vector<BoxArray> & ba,
257  const Vector<int> & rr)
258  :
259  ParticleContainerBase(geom, dmap, ba, rr),
260  h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true),
262  {
263  Initialize ();
266  }
267 
277  const Vector<DistributionMapping> & dmap,
278  const Vector<BoxArray> & ba,
279  const Vector<IntVect> & rr)
280  :
281  ParticleContainerBase(geom, dmap, ba, rr),
282  h_redistribute_real_comp(AMREX_SPACEDIM + NStructReal + NArrayReal, true),
284  {
285  Initialize ();
288  }
289 
290  ~ParticleContainer_impl () override = default;
291 
294 
296  ParticleContainer_impl& operator= ( ParticleContainer_impl && ) noexcept = default;
297 
298 
306  void Define (ParGDBBase* gdb)
307  {
309  reserveData();
310  resizeData();
311  }
312 
320  void Define (const Geometry & geom,
321  const DistributionMapping & dmap,
322  const BoxArray & ba)
323  {
324  this->ParticleContainerBase::Define(geom, dmap, ba);
325  reserveData();
326  resizeData();
327  }
328 
338  void Define (const Vector<Geometry> & geom,
339  const Vector<DistributionMapping> & dmap,
340  const Vector<BoxArray> & ba,
341  const Vector<int> & rr)
342  {
343  this->ParticleContainerBase::Define(geom, dmap, ba, rr);
344  reserveData();
345  resizeData();
346  }
347 
357  void Define (const Vector<Geometry> & geom,
358  const Vector<DistributionMapping> & dmap,
359  const Vector<BoxArray> & ba,
360  const Vector<IntVect> & rr)
361  {
362  this->ParticleContainerBase::Define(geom, dmap, ba, rr);
363  reserveData();
364  resizeData();
365  }
366 
368  int numLocalTilesAtLevel (int lev) const {
369  return (lev < m_particles.size()) ? m_particles[lev].size() : 0;
370  }
371 
376  void reserveData () override;
377 
384  void resizeData () override;
385 
386  void InitFromAsciiFile (const std::string& file, int extradata,
387  const IntVect* Nrep = nullptr);
388 
389  void InitFromBinaryFile (const std::string& file, int extradata);
390 
391  void InitFromBinaryMetaFile (const std::string& file, int extradata);
392 
409  void InitRandom (Long icount, ULong iseed,
410  const ParticleInitData& pdata,
411  bool serialize = false, RealBox bx = RealBox());
412 
413 
429  void InitRandomPerBox (Long icount, ULong iseed, const ParticleInitData& pdata);
430 
431 
446  void InitOnePerCell (Real x_off, Real y_off, Real z_off,
447  const ParticleInitData& pdata);
448 
449 
461  void InitNRandomPerCell (int n_per_cell, const ParticleInitData& pdata);
462 
463  void Increment (MultiFab& mf, int level);
464 
465  Long IncrementWithTotal (MultiFab& mf, int level, bool local = false);
466 
503  void Redistribute (int lev_min = 0, int lev_max = -1, int nGrow = 0, int local=0,
504  bool remove_negative=true);
505 
506 
518  template <class index_type>
519  void ReorderParticles (int lev, const MFIter& mfi, const index_type* permutations);
520 
535  void SortParticlesForDeposition (IntVect idx_type);
536 
540  void SortParticlesByCell ();
541 
548  void SortParticlesByBin (IntVect bin_size);
549 
560  bool OK (int lev_min = 0, int lev_max = -1, int nGrow = 0) const;
561 
562  std::array<Long, 3> ByteSpread () const;
563 
564  std::array<Long, 3> PrintCapacity () const;
565 
566  void ShrinkToFit ();
567 
578  Long NumberOfParticlesAtLevel (int level, bool only_valid = true, bool only_local = false) const;
579 
580  Vector<Long> NumberOfParticlesInGrid (int level, bool only_valid = true, bool only_local = false) const;
581 
590  Long TotalNumberOfParticles (bool only_valid=true, bool only_local=false) const;
591 
592 
600  void RemoveParticlesAtLevel (int level);
601 
603 
611  void CreateVirtualParticles (int level, AoS& virts) const;
612 
621  void CreateGhostParticles (int level, int ngrow, AoS& ghosts) const;
622 
630  void AddParticlesAtLevel (AoS& particles, int level, int nGrow=0);
631 
639  void CreateVirtualParticles (int level, ParticleTileType& virts) const;
640 
649  void CreateGhostParticles (int level, int ngrow, ParticleTileType& ghosts) const;
650 
658  void AddParticlesAtLevel (ParticleTileType& particles, int level, int nGrow=0);
659 
660 
664  void clearParticles ();
665 
666 
675  template <class PCType,
676  std::enable_if_t<IsParticleContainer<PCType>::value, int> foo = 0>
677  void copyParticles (const PCType& other, bool local=false);
678 
686  template <class PCType,
687  std::enable_if_t<IsParticleContainer<PCType>::value, int> foo = 0>
688  void addParticles (const PCType& other, bool local=false);
689 
704  template <class F, class PCType,
705  std::enable_if_t<IsParticleContainer<PCType>::value, int> foo = 0,
706  std::enable_if_t<! std::is_integral_v<F>, int> bar = 0>
707  void copyParticles (const PCType& other, F&&f, bool local=false);
708 
722  template <class F, class PCType,
723  std::enable_if_t<IsParticleContainer<PCType>::value, int> foo = 0,
724  std::enable_if_t<! std::is_integral_v<F>, int> bar = 0>
725  void addParticles (const PCType& other, F const& f, bool local=false);
726 
734  void WriteParticleRealData (void* data, size_t size, std::ostream& os) const;
735 
744  void ReadParticleRealData (void* data, size_t size, std::istream& is);
745 
754  void Checkpoint (const std::string& dir, const std::string& name,
755  const Vector<std::string>& real_comp_names = Vector<std::string>(),
756  const Vector<std::string>& int_comp_names = Vector<std::string>()) const
757  {
758  Checkpoint(dir, name, true, real_comp_names, int_comp_names);
759  }
760 
766  void Checkpoint (const std::string& dir, const std::string& name, bool is_checkpoint,
767  const Vector<std::string>& real_comp_names = Vector<std::string>(),
768  const Vector<std::string>& int_comp_names = Vector<std::string>()) const;
769 
784  template <class F>
785  void WriteBinaryParticleData (const std::string& dir,
786  const std::string& name,
787  const Vector<int>& write_real_comp,
788  const Vector<int>& write_int_comp,
789  const Vector<std::string>& real_comp_names,
790  const Vector<std::string>& int_comp_names,
791  F&& f, bool is_checkpoint=false) const;
792 
793  void CheckpointPre ();
794 
795  void CheckpointPost ();
796 
803  void Restart (const std::string& dir, const std::string& file);
804 
812  void Restart (const std::string& dir, const std::string& file, bool is_checkpoint);
813 
820  void WritePlotFile (const std::string& dir, const std::string& name) const;
821 
833  template <class F, std::enable_if_t<!std::is_same_v<std::decay_t<F>, Vector<std::string>>>* = nullptr>
834  void WritePlotFile (const std::string& dir, const std::string& name, F&& f) const;
835 
844  void WritePlotFile (const std::string& dir, const std::string& name,
845  const Vector<std::string>& real_comp_names,
846  const Vector<std::string>& int_comp_names) const;
847 
861  template <class F>
862  void WritePlotFile (const std::string& dir, const std::string& name,
863  const Vector<std::string>& real_comp_names,
864  const Vector<std::string>& int_comp_names, F&& f) const;
865 
874  void WritePlotFile (const std::string& dir, const std::string& name,
875  const Vector<std::string>& real_comp_names) const;
876 
890  template <class F, std::enable_if_t<!std::is_same_v<std::decay_t<F>, Vector<std::string>>>* = nullptr>
891  void WritePlotFile (const std::string& dir, const std::string& name,
892  const Vector<std::string>& real_comp_names, F&& f) const;
893 
903  void WritePlotFile (const std::string& dir,
904  const std::string& name,
905  const Vector<int>& write_real_comp,
906  const Vector<int>& write_int_comp) const;
907 
922  template <class F>
923  void WritePlotFile (const std::string& dir,
924  const std::string& name,
925  const Vector<int>& write_real_comp,
926  const Vector<int>& write_int_comp, F&& f) const;
927 
941  void WritePlotFile (const std::string& dir,
942  const std::string& name,
943  const Vector<int>& write_real_comp,
944  const Vector<int>& write_int_comp,
945  const Vector<std::string>& real_comp_names,
946  const Vector<std::string>& int_comp_names) const;
947 
966  template <class F>
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,
973  F&& f) const;
974 
975  void WritePlotFilePre ();
976 
977  void WritePlotFilePost ();
978 
979  void WriteAsciiFile (const std::string& file);
980 
985  const Vector<ParticleLevel>& GetParticles () const { return m_particles; }
986 
992 
1006  const ParticleLevel& GetParticles (int lev) const { return m_particles[lev]; }
1007 
1021  ParticleLevel & GetParticles (int lev) { return m_particles[lev]; }
1022 
1045  const ParticleTileType& ParticlesAt (int lev, int grid, int tile) const
1046  { return m_particles[lev].at(std::make_pair(grid, tile)); }
1047 
1070  ParticleTileType& ParticlesAt (int lev, int grid, int tile)
1071  { return m_particles[lev].at(std::make_pair(grid, tile)); }
1072 
1094  template <class Iterator>
1095  const ParticleTileType& ParticlesAt (int lev, const Iterator& iter) const
1096  { return ParticlesAt(lev, iter.index(), iter.LocalTileIndex()); }
1097 
1119  template <class Iterator>
1120  ParticleTileType& ParticlesAt (int lev, const Iterator& iter)
1121  { return ParticlesAt(lev, iter.index(), iter.LocalTileIndex()); }
1122 
1145  ParticleTileType& DefineAndReturnParticleTile (int lev, int grid, int tile)
1146  {
1147  m_particles[lev][std::make_pair(grid, tile)].define(NumRuntimeRealComps(), NumRuntimeIntComps());
1148  return ParticlesAt(lev, grid, tile);
1149  }
1150 
1172  template <class Iterator>
1173  ParticleTileType& DefineAndReturnParticleTile (int lev, const Iterator& iter)
1174  {
1175  auto index = std::make_pair(iter.index(), iter.LocalTileIndex());
1176  m_particles[lev][index].define(NumRuntimeRealComps(), NumRuntimeIntComps());
1177  return ParticlesAt(lev, iter);
1178  }
1179 
1190  void AssignDensity (int rho_index,
1191  Vector<std::unique_ptr<MultiFab> >& mf_to_be_filled,
1192  int lev_min, int ncomp, int finest_level, int ngrow=2) const;
1193 
1194  void AssignCellDensitySingleLevel (int rho_index, MultiFab& mf, int level,
1195  int ncomp=1, int particle_lvl_offset = 0) const;
1196 
1197  template <typename P, typename Assignor=CellAssignor>
1198  IntVect Index (const P& p, int lev) const;
1199 
1209  ParticleLocData Reset (ParticleType& prt, bool update, bool verbose=true,
1210  ParticleLocData pld = ParticleLocData()) const;
1211 
1217  template <typename P>
1218  bool PeriodicShift (P& p) const;
1219 
1221 
1223 
1224  void SetUsePrePost (bool tf) const {
1225  usePrePost = tf;
1226  }
1227  bool GetUsePrePost () const {
1228  return usePrePost;
1229  }
1230 
1231  int GetMaxNextIDPrePost () const { return maxnextidPrePost; }
1232  Long GetNParticlesPrePost () const { return nparticlesPrePost; }
1233 
1234  void SetUseUnlink (bool tf) const {
1235  doUnlink = tf;
1236  }
1237 
1238  bool GetUseUnlink () const {
1239  return doUnlink;
1240  }
1241 
1242  void RedistributeCPU (int lev_min = 0, int lev_max = -1, int nGrow = 0, int local=0,
1243  bool remove_negative=true);
1244 
1245  void RedistributeGPU (int lev_min = 0, int lev_max = -1, int nGrow = 0, int local=0,
1246  bool remove_negative=true);
1247 
1248  Long superParticleSize() const { return superparticle_size; }
1249 
1250  template <typename T,
1251  std::enable_if_t<std::is_same_v<T,bool>,int> = 0>
1252  void AddRealComp (T communicate=true)
1253  {
1254  m_runtime_comps_defined = true;
1256  h_redistribute_real_comp.push_back(communicate);
1257  SetParticleSize();
1258  this->resizeData();
1259 
1260  // resize runtime SoA
1261  for (int lev = 0; lev < numLevels(); ++lev) {
1262  for (ParIterType pti(*this,lev); pti.isValid(); ++pti) {
1263  auto& tile = DefineAndReturnParticleTile(lev, pti);
1264  auto np = tile.numParticles();
1265  if (np > 0) {
1266  auto& soa = tile.GetStructOfArrays();
1267  soa.resize(np);
1268  }
1269  }
1270  }
1271  }
1272 
1273  template <typename T,
1274  std::enable_if_t<std::is_same_v<T,bool>,int> = 0>
1275  void AddIntComp (T communicate=true)
1276  {
1277  m_runtime_comps_defined = true;
1279  h_redistribute_int_comp.push_back(communicate);
1280  SetParticleSize();
1281  this->resizeData();
1282 
1283  // resize runtime SoA
1284  for (int lev = 0; lev < numLevels(); ++lev) {
1285  for (ParIterType pti(*this,lev); pti.isValid(); ++pti) {
1286  auto& tile = DefineAndReturnParticleTile(lev, pti);
1287  auto np = tile.numParticles();
1288  if (np > 0) {
1289  auto& soa = tile.GetStructOfArrays();
1290  soa.resize(np);
1291  }
1292  }
1293  }
1294  }
1295 
1296  int NumRuntimeRealComps () const { return m_num_runtime_real; }
1297  int NumRuntimeIntComps () const { return m_num_runtime_int; }
1298 
1299  int NumRealComps () const { return NArrayReal + NumRuntimeRealComps(); }
1300  int NumIntComps () const { return NArrayInt + NumRuntimeIntComps() ; }
1301 
1307  void ResizeRuntimeRealComp (int new_size, bool communicate);
1308 
1314  void ResizeRuntimeIntComp (int new_size, bool communicate);
1315 
1317  template <template<class> class NewAllocator=amrex::DefaultAllocator>
1319 
1330  template <template<class> class NewAllocator=amrex::DefaultAllocator>
1332  make_alike () const
1333  {
1335 
1336  // add runtime real comps to tmp
1337  for (int ic = 0; ic < this->NumRuntimeRealComps(); ++ic) { tmp.AddRealComp(false); }
1338 
1339  // add runtime int comps to tmp
1340  for (int ic = 0; ic < this->NumRuntimeIntComps(); ++ic) { tmp.AddIntComp(false); }
1341 
1342  return tmp;
1343  }
1344 
1347 
1350  mutable bool usePrePost;
1351  mutable bool doUnlink;
1353  mutable int nOutFilesPrePost;
1359  mutable std::string HdrFileNamePrePost;
1361 
1362 protected:
1363 
1377  template <typename P>
1378  bool Where (const P& prt, ParticleLocData& pld,
1379  int lev_min = 0, int lev_max = -1, int nGrow=0, int local_grid=-1) const;
1380 
1381 
1392  template <typename P>
1394  int lev_min = 0, int lev_max = -1, int local_grid=-1) const;
1395 
1396 public:
1397  void
1398  WriteParticles (int level, std::ofstream& ofs, int fnum,
1399  Vector<int>& which, Vector<int>& count, Vector<Long>& where,
1400  const Vector<int>& write_real_comp, const Vector<int>& write_int_comp,
1401  const Vector<std::map<std::pair<int, int>,IntVector>>& particle_io_flags, bool is_checkpoint) const;
1402 #ifdef AMREX_USE_HDF5
1403 #include "AMReX_ParticlesHDF5.H"
1404 #endif
1405 
1406 protected:
1407 
1408  template <class RTYPE>
1409  void ReadParticles (int cnt, int grd, int lev, std::ifstream& ifs, int finest_level_in_file, bool convert_ids);
1410 
1411  void SetParticleSize ();
1412 
1414 
1415 private:
1416  virtual void particlePostLocate (ParticleType& /*p*/, const ParticleLocData& /*pld*/,
1417  const int /*lev*/) {}
1418 
1419  virtual void correctCellVectors (int /*old_index*/, int /*new_index*/,
1420  int /*grid*/, const ParticleType& /*p*/) {}
1421 
1422  void RedistributeMPI (std::map<int, Vector<char> >& not_ours,
1423  int lev_min = 0, int lev_max = 0, int nGrow = 0, int local=0);
1424 
1425  template <typename P>
1427  int lev_min, int lev_max, int nGrow, int local_grid=-1) const;
1428 
1429  void Initialize ();
1430 
1434 
1438 };
1439 
1440 template <int T_NStructReal, int T_NStructInt, int T_NArrayReal, int T_NArrayInt, template<class> class Allocator, class CellAssignor>
1441 using ParticleContainer = ParticleContainer_impl<Particle<T_NStructReal, T_NStructInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
1442 
1443 template <int T_NArrayReal, int T_NArrayInt, template<class> class Allocator=DefaultAllocator, class CellAssignor=DefaultAssignor>
1444 using ParticleContainerPureSoA = ParticleContainer_impl<SoAParticle<T_NArrayReal, T_NArrayInt>, T_NArrayReal, T_NArrayInt, Allocator, CellAssignor>;
1445 
1446 
1447 #include "AMReX_ParticleInit.H"
1448 #include "AMReX_ParticleContainerI.H"
1449 #include "AMReX_ParticleIO.H"
1450 
1451 #ifdef AMREX_USE_HDF5
1452 #include "AMReX_ParticleHDF5.H"
1453 #endif
1454 
1455 }
1456 
1457 #endif /*_PARTICLES_H_*/
#define AMREX_D_DECL(a, b, c)
Definition: AMReX_SPACE.H:104
Definition: AMReX_GpuAllocators.H:114
A collection of Boxes stored in an Array.
Definition: AMReX_BoxArray.H:530
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:41
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:73
Definition: AMReX_MFIter.H:57
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition: AMReX_MFIter.H:141
A collection (stored as an array) of FArrayBox objects.
Definition: AMReX_MultiFab.H:38
Definition: AMReX_PODVector.H:246
Definition: AMReX_ParIter.H:142
Definition: AMReX_ParGDB.H:13
Definition: AMReX_ParIter.H:32
Definition: AMReX_ParIter.H:113
Definition: AMReX_ParticleContainerBase.H:23
ParGDBBase * m_gdb
Definition: AMReX_ParticleContainerBase.H:264
void Define(ParGDBBase *gdb)
Definition: AMReX_ParticleContainerBase.H:83
int numLevels() const
the number of defined levels in the ParticleContainer
Definition: AMReX_ParticleContainerBase.H:222
A distributed container for Particles sorted onto the levels, grids, and tiles of a block-structured ...
Definition: AMReX_ParticleContainer.H:144
void AssignDensity(int rho_index, Vector< std::unique_ptr< MultiFab > > &mf_to_be_filled, int lev_min, int ncomp, int finest_level, int ngrow=2) const
Functions depending the layout of the data. Use with caution.
Definition: AMReX_AmrParticles.H:17
void SetUseUnlink(bool tf) const
Definition: AMReX_ParticleContainer.H:1234
Vector< ParticleLevel > m_particles
Definition: AMReX_ParticleContainer.H:1437
Vector< Long > nParticlesAtLevelPrePost
Definition: AMReX_ParticleContainer.H:1355
void WriteBinaryParticleData(const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f, bool is_checkpoint=false) const
Writes particle data to disk in the AMReX native format.
void InitFromBinaryFile(const std::string &file, int extradata)
Definition: AMReX_ParticleInit.H:483
bool GetLevelDirectoriesCreated() const
Definition: AMReX_ParticleContainer.H:1222
size_t superparticle_size
Definition: AMReX_ParticleContainer.H:1435
std::array< Long, 3 > ByteSpread() const
Definition: AMReX_ParticleContainerI.H:467
void clearParticles()
Clear all the particles in this container. This does not free memory.
Definition: AMReX_ParticleContainerI.H:976
void copyParticles(const PCType &other, bool local=false)
Copy particles from other to this ParticleContainer. Will clear all the particles from this container...
bool doUnlink
Definition: AMReX_ParticleContainer.H:1351
Vector< Vector< int > > whichPrePost
Definition: AMReX_ParticleContainer.H:1356
void WriteParticleRealData(void *data, size_t size, std::ostream &os) const
Write a contiguous chunk of real particle data to an ostream.
Definition: AMReX_ParticleIO.H:11
const ParticleTileType & ParticlesAt(int lev, const Iterator &iter) const
Return the ParticleTile for level "lev" and Iterator "iter". Const version.
Definition: AMReX_ParticleContainer.H:1095
ParticleContainer_impl(const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
Same as the above, but accepts different refinement ratios in each direction.
Definition: AMReX_ParticleContainer.H:276
std::string HdrFileNamePrePost
Definition: AMReX_ParticleContainer.H:1359
Vector< Vector< Long > > wherePrePost
Definition: AMReX_ParticleContainer.H:1358
void WritePlotFile(const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, F &&f) const
This version of WritePlotFile writes all components and allows the user to specify the names of the c...
RealDescriptor ParticleRealDescriptor
Definition: AMReX_ParticleContainer.H:176
ParticleTileType & DefineAndReturnParticleTile(int lev, int grid, int tile)
Define and return the ParticleTile for level "lev", grid "grid" and tile "tile.".
Definition: AMReX_ParticleContainer.H:1145
int nOutFilesPrePost
Definition: AMReX_ParticleContainer.H:1353
int maxnextidPrePost
Definition: AMReX_ParticleContainer.H:1352
void WritePlotFile(const std::string &dir, const std::string &name, F &&f) const
This version of WritePlotFile writes all components and assigns component names.
ParticleContainer_impl(ParticleContainer_impl &&) noexcept=default
void Checkpoint(const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names=Vector< std::string >(), const Vector< std::string > &int_comp_names=Vector< std::string >()) const
Writes a particle checkpoint to file, suitable for restarting.
Definition: AMReX_ParticleContainer.H:754
void addParticles(const PCType &other, bool local=false)
Add particles from other to this ParticleContainer. local controls whether or not to call Redistribut...
std::map< std::pair< int, int >, ParticleTileType > ParticleLevel
Definition: AMReX_ParticleContainer.H:185
bool levelDirectoriesCreated
Variables for i/o optimization saved for pre and post checkpoint.
Definition: AMReX_ParticleContainer.H:1349
ContainerLike< NewAllocator > make_alike() const
Definition: AMReX_ParticleContainer.H:1332
void WriteAsciiFile(const std::string &file)
Definition: AMReX_ParticleIO.H:1128
static constexpr int NArrayInt
Number of extra integer components stored in struct-of-array form.
Definition: AMReX_ParticleContainer.H:157
void Initialize()
Definition: AMReX_ParticleContainerI.H:33
static constexpr int NArrayReal
Number of extra Real components stored in struct-of-array form.
Definition: AMReX_ParticleContainer.H:155
int GetMaxNextIDPrePost() const
Definition: AMReX_ParticleContainer.H:1231
std::array< Long, 3 > PrintCapacity() const
Definition: AMReX_ParticleContainerI.H:511
bool GetUsePrePost() const
Definition: AMReX_ParticleContainer.H:1227
ParticleContainer_impl & operator=(const ParticleContainer_impl &)=delete
bool PeriodicShift(P &p) const
Returns true if the particle was shifted.
typename ParticleTileType::AoS AoS
Definition: AMReX_ParticleContainer.H:186
ParticleInitType< NStructReal, NStructInt, NArrayReal, NArrayInt > ParticleInitData
Definition: AMReX_ParticleContainer.H:181
typename SoA::RealVector RealVector
Definition: AMReX_ParticleContainer.H:189
typename ParticleType::ConstType ConstParticleType
Definition: AMReX_ParticleContainer.H:147
ParticleContainer_impl(const ParticleContainer_impl &)=delete
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:580
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:232
Long NumberOfParticlesAtLevel(int level, bool only_valid=true, bool only_local=false) const
Returns # of particles at specified the level.
Definition: AMReX_ParticleContainerI.H:421
void AssignCellDensitySingleLevel(int rho_index, MultiFab &mf, int level, int ncomp=1, int particle_lvl_offset=0) const
Definition: AMReX_ParticleContainerI.H:2361
void Increment(MultiFab &mf, int level)
Definition: AMReX_ParticleContainerI.H:571
void SetLevelDirectoriesCreated(bool tf)
Definition: AMReX_ParticleContainer.H:1220
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.
typename AoS::ParticleVector ParticleVector
Definition: AMReX_ParticleContainer.H:191
const ParticleLevel & GetParticles(int lev) const
Return the ParticleLevel for level "lev". Const version.
Definition: AMReX_ParticleContainer.H:1006
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:320
static constexpr int NStructInt
Number of extra integer components in the particle struct.
Definition: AMReX_ParticleContainer.H:153
ParticleContainer_impl()
Default constructor - construct an empty particle container that has no concept of a level hierarchy....
Definition: AMReX_ParticleContainer.H:198
void SetUsePrePost(bool tf) const
Definition: AMReX_ParticleContainer.H:1224
int NumRealComps() const
Definition: AMReX_ParticleContainer.H:1299
void WritePlotFilePre()
Definition: AMReX_ParticleIO.H:560
bool EnforcePeriodicWhere(P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, int local_grid=-1) const
Checks whether the particle has crossed a periodic boundary in such a way that it is on levels lev_mi...
void RemoveParticlesAtLevel(int level)
The Following methods are for managing Virtual and Ghost Particles.
Definition: AMReX_ParticleContainerI.H:608
void InitFromAsciiFile(const std::string &file, int extradata, const IntVect *Nrep=nullptr)
Definition: AMReX_ParticleInit.H:37
ParticleTileType & DefineAndReturnParticleTile(int lev, const Iterator &iter)
Define and return the ParticleTile for level "lev", and Iterator "iter".
Definition: AMReX_ParticleContainer.H:1173
Long TotalNumberOfParticles(bool only_valid=true, bool only_local=false) const
Returns # of particles at all levels.
Definition: AMReX_ParticleContainerI.H:351
Vector< int > h_redistribute_int_comp
Definition: AMReX_ParticleContainer.H:1346
typename ParticleTileType::SoA SoA
Definition: AMReX_ParticleContainer.H:187
virtual void correctCellVectors(int, int, int, const ParticleType &)
Definition: AMReX_ParticleContainer.H:1419
void WritePlotFile(const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f) const
This version of WritePlotFile writes all components and allows the user to specify the names of the c...
bool OK(int lev_min=0, int lev_max=-1, int nGrow=0) const
OK checks that all particles are in the right places (for some value of right)
Definition: AMReX_ParticleContainerI.H:2300
void locateParticle(P &p, ParticleLocData &pld, int lev_min, int lev_max, int nGrow, int local_grid=-1) const
int NumRuntimeIntComps() const
Definition: AMReX_ParticleContainer.H:1297
Long GetNParticlesPrePost() const
Definition: AMReX_ParticleContainer.H:1232
void InitRandom(Long icount, ULong iseed, const ParticleInitData &pdata, bool serialize=false, RealBox bx=RealBox())
This initializes the particle container with icount randomly distributed particles....
Definition: AMReX_ParticleInit.H:968
void ResizeRuntimeRealComp(int new_size, bool communicate)
Definition: AMReX_ParticleContainerI.H:2501
T_CellAssignor CellAssignor
Definition: AMReX_ParticleContainer.H:148
void RemoveParticlesNotAtFinestLevel()
Definition: AMReX_ParticleContainerI.H:622
DenseBins< typename ParticleTileType::ParticleTileDataType > m_bins
Definition: AMReX_ParticleContainer.H:1413
void ReadParticleRealData(void *data, size_t size, std::istream &is)
Read a contiguous chunk of real particle data from an istream.
Definition: AMReX_ParticleIO.H:25
void RedistributeCPU(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Definition: AMReX_ParticleContainerI.H:1439
int m_num_runtime_int
Definition: AMReX_ParticleContainer.H:1433
ParticleContainer_impl(ParGDBBase *gdb)
Construct a particle container using a ParGDB object. The container will track changes in the grid st...
Definition: AMReX_ParticleContainer.H:214
void Restart(const std::string &dir, const std::string &file)
Restart from checkpoint.
Definition: AMReX_ParticleIO.H:644
void WritePlotFilePost()
Definition: AMReX_ParticleIO.H:570
void Define(const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
Define a default-constructed ParticleContainer using a ParGDB object. Multi-level version.
Definition: AMReX_ParticleContainer.H:357
void ReadParticles(int cnt, int grd, int lev, std::ifstream &ifs, int finest_level_in_file, bool convert_ids)
void CreateVirtualParticles(int level, AoS &virts) const
Creates virtual particles for a given level that represent in some capacity all particles at finer le...
Definition: AMReX_ParticleContainerI.H:689
int NumRuntimeRealComps() const
Definition: AMReX_ParticleContainer.H:1296
void Checkpoint(const std::string &dir, const std::string &name, bool is_checkpoint, const Vector< std::string > &real_comp_names=Vector< std::string >(), const Vector< std::string > &int_comp_names=Vector< std::string >()) const
Writes a particle checkpoint to file, suitable for restarting. This version allows the particle compo...
Long nparticlesPrePost
Definition: AMReX_ParticleContainer.H:1354
void InitNRandomPerCell(int n_per_cell, const ParticleInitData &pdata)
This initializes the particle container with n_per_cell randomly distributed particles per cell,...
Definition: AMReX_ParticleInit.H:1547
void WritePlotFile(const std::string &dir, const std::string &name) const
This version of WritePlotFile writes all components and assigns component names.
Definition: AMReX_ParticleIO.H:97
void WritePlotFile(const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, F &&f) const
This version of WritePlotFile assigns component names, but allows the user to pass in a vector of int...
int m_num_runtime_real
Definition: AMReX_ParticleContainer.H:1432
void copyParticles(const PCType &other, F &&f, bool local=false)
Copy particles from other to this ParticleContainer. Will clear all the particles from this container...
void CheckpointPre()
Definition: AMReX_ParticleIO.H:447
ParticleLocData Reset(ParticleType &prt, bool update, bool verbose=true, ParticleLocData pld=ParticleLocData()) const
Updates a particle's location (Where), tries to periodic shift any particles that have left the domai...
Definition: AMReX_ParticleContainerI.H:262
Vector< std::string > filePrefixPrePost
Definition: AMReX_ParticleContainer.H:1360
void RedistributeGPU(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Definition: AMReX_ParticleContainerI.H:1249
int numLocalTilesAtLevel(int lev) const
The total number of tiles on this rank on this level.
Definition: AMReX_ParticleContainer.H:368
void reserveData() override
This reserves data in the vector of dummy MultiFabs used by the ParticleContainer for the maximum num...
Definition: AMReX_ParticleContainerI.H:296
void WritePlotFile(const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f) const
This is the most general version of WritePlotFile, which takes component names and flags for whether ...
static constexpr int NStructReal
Number of extra Real components in the particle struct.
Definition: AMReX_ParticleContainer.H:151
Vector< int > h_redistribute_real_comp
Definition: AMReX_ParticleContainer.H:1345
typename Particle< NStructReal, NStructInt >::RealType RealType
The type of the Real data.
Definition: AMReX_ParticleContainer.H:171
bool GetUseUnlink() const
Definition: AMReX_ParticleContainer.H:1238
Vector< Long > NumberOfParticlesInGrid(int level, bool only_valid=true, bool only_local=false) const
Definition: AMReX_ParticleContainerI.H:366
int NumIntComps() const
Definition: AMReX_ParticleContainer.H:1300
Allocator< T > AllocatorType
The memory allocator in use.
Definition: AMReX_ParticleContainer.H:167
void RedistributeMPI(std::map< int, Vector< char > > &not_ours, int lev_min=0, int lev_max=0, int nGrow=0, int local=0)
Definition: AMReX_ParticleContainerI.H:1953
void AddIntComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1275
ParticleLevel & GetParticles(int lev)
Return the ParticleLevel for level "lev". Non-const version.
Definition: AMReX_ParticleContainer.H:1021
void CreateGhostParticles(int level, int ngrow, ParticleTileType &ghosts) const
Create ghost particles for a given level that are copies of particles near coarse->fine boundaries in...
void AddParticlesAtLevel(ParticleTileType &particles, int level, int nGrow=0)
Add particles from a pbox to the grid at this level.
void ShrinkToFit()
Definition: AMReX_ParticleContainerI.H:551
void addParticles(const PCType &other, F const &f, bool local=false)
Add particles from other to this ParticleContainer. local controls whether or not to call Redistribut...
Vector< ParticleLevel > & GetParticles()
Return the underlying Vector (over AMR levels) of ParticleLevels. Non-const version.
Definition: AMReX_ParticleContainer.H:991
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...
void Restart(const std::string &dir, const std::string &file, bool is_checkpoint)
Older version, for backwards compatibility.
void AddRealComp(T communicate=true)
Definition: AMReX_ParticleContainer.H:1252
void Define(ParGDBBase *gdb)
Define a default-constructed ParticleContainer using a ParGDB object. The container will track change...
Definition: AMReX_ParticleContainer.H:306
ParticleContainer_impl(const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
Construct a particle container using a given Geometry, DistributionMapping, BoxArray and Vector of re...
Definition: AMReX_ParticleContainer.H:254
Long superParticleSize() const
Definition: AMReX_ParticleContainer.H:1248
typename SoA::IntVector IntVector
Definition: AMReX_ParticleContainer.H:190
int num_int_comm_comps
Definition: AMReX_ParticleContainer.H:1436
size_t particle_size
Definition: AMReX_ParticleContainer.H:1435
void SortParticlesByBin(IntVect bin_size)
Sort the particles on each tile by groups of cells, given an IntVect bin_size.
Definition: AMReX_ParticleContainerI.H:1186
virtual void particlePostLocate(ParticleType &, const ParticleLocData &, const int)
Definition: AMReX_ParticleContainer.H:1416
void CreateGhostParticles(int level, int ngrow, AoS &ghosts) const
Create ghost particles for a given level that are copies of particles near coarse->fine boundaries in...
void Define(const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
Define a default-constructed ParticleContainer using a ParGDB object. Multi-level version.
Definition: AMReX_ParticleContainer.H:338
void AddParticlesAtLevel(AoS &particles, int level, int nGrow=0)
Add particles from a pbox to the grid at this level.
void SortParticlesByCell()
Sort the particles on each tile by cell, using Fortran ordering.
Definition: AMReX_ParticleContainerI.H:1177
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:1070
void ResizeRuntimeIntComp(int new_size, bool communicate)
Definition: AMReX_ParticleContainerI.H:2527
void InitFromBinaryMetaFile(const std::string &file, int extradata)
Definition: AMReX_ParticleInit.H:929
void resizeData() override
This resizes the vector of dummy MultiFabs used by the ParticleContainer for the current number of le...
Definition: AMReX_ParticleContainerI.H:305
int num_real_comm_comps
Definition: AMReX_ParticleContainer.H:1436
ParticleTileType & ParticlesAt(int lev, const Iterator &iter)
Return the ParticleTile for level "lev" and Iterator "iter". Non-const version.
Definition: AMReX_ParticleContainer.H:1120
IntVect Index(const P &p, int lev) const
void Redistribute(int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
Redistribute puts all the particles back in the right places (for some value of right)
Definition: AMReX_ParticleContainerI.H:1066
Long IncrementWithTotal(MultiFab &mf, int level, bool local=false)
Definition: AMReX_ParticleContainerI.H:598
const Vector< ParticleLevel > & GetParticles() const
Return the underlying Vector (over AMR levels) of ParticleLevels. Const version.
Definition: AMReX_ParticleContainer.H:985
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:1463
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:1045
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:1219
~ParticleContainer_impl() override=default
void CheckpointPost()
Definition: AMReX_ParticleIO.H:504
T_ParticleType ParticleType
Definition: AMReX_ParticleContainer.H:146
bool m_runtime_comps_defined
Definition: AMReX_ParticleContainer.H:1431
Vector< Vector< int > > countPrePost
Definition: AMReX_ParticleContainer.H:1357
void InitRandomPerBox(Long icount, ULong iseed, const ParticleInitData &pdata)
This initializes the container with icount randomly distributed particles per box,...
Definition: AMReX_ParticleInit.H:1362
bool usePrePost
Definition: AMReX_ParticleContainer.H:1350
void SetParticleSize()
Definition: AMReX_ParticleContainerI.H:7
A Box with real dimensions. A RealBox is OK iff volume >= 0.
Definition: AMReX_RealBox.H:21
A Descriptor of the Real Type.
Definition: AMReX_FabConv.H:105
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition: AMReX_Vector.H:27
Long size() const noexcept
Definition: AMReX_Vector.H:50
AMREX_GPU_HOST_DEVICE Long size(T const &b) noexcept
integer version
Definition: AMReX_GpuRange.H:26
static int f(amrex::Real t, N_Vector y_data, N_Vector y_rhs, void *user_data)
Definition: AMReX_SundialsIntegrator.H:44
static constexpr int P
Definition: AMReX_OpenBC.H:14
Definition: AMReX_Amr.cpp:49
amrex::ArenaAllocator< T > DefaultAllocator
Definition: AMReX_GpuAllocators.H:194
int verbose
Definition: AMReX_DistributionMapping.cpp:36
Definition: AMReX_ParticleUtil.H:432
A struct used for communicating particle data across processes during multi-level operations.
Definition: AMReX_ParticleContainer.H:78
ParticleReal RealType
Definition: AMReX_ParticleContainer.H:79
int m_grid
Definition: AMReX_ParticleContainer.H:81
RealType m_data[1+AMREX_SPACEDIM]
Definition: AMReX_ParticleContainer.H:83
IntVect m_cell
Definition: AMReX_ParticleContainer.H:82
int m_lev
Definition: AMReX_ParticleContainer.H:80
A struct used to pass initial data into the various Init methods. This struct is used to pass initial...
Definition: AMReX_ParticleContainer.H:115
std::array< int, NStructInt > int_struct_data
Definition: AMReX_ParticleContainer.H:117
std::array< int, NArrayInt > int_array_data
Definition: AMReX_ParticleContainer.H:119
std::array< double, NArrayReal > real_array_data
Definition: AMReX_ParticleContainer.H:118
std::array< double, NStructReal > real_struct_data
Definition: AMReX_ParticleContainer.H:116
A struct used for storing a particle's position in the AMR hierarchy.
Definition: AMReX_ParticleContainer.H:90
Box m_grown_gridbox
Definition: AMReX_ParticleContainer.H:97
IntVect m_cell
Definition: AMReX_ParticleContainer.H:94
int m_grid
Definition: AMReX_ParticleContainer.H:92
int m_tile
Definition: AMReX_ParticleContainer.H:93
int m_lev
Definition: AMReX_ParticleContainer.H:91
Box m_tilebox
Definition: AMReX_ParticleContainer.H:96
Box m_gridbox
Definition: AMReX_ParticleContainer.H:95
Definition: AMReX_ParticleTile.H:690
std::conditional_t< ParticleType::is_soa_particle, StructOfArrays< NArrayReal, NArrayInt, Allocator, true >, StructOfArrays< NArrayReal, NArrayInt, Allocator, false > > SoA
Definition: AMReX_ParticleTile.H:713
std::conditional_t< ParticleType::is_soa_particle, ThisParticleTileHasNoAoS, ArrayOfStructs< ParticleType, Allocator > > AoS
Definition: AMReX_ParticleTile.H:707
The struct used to store particles.
Definition: AMReX_Particle.H:295
ParticleReal RealType
The floating point type used for the particles.
Definition: AMReX_Particle.H:307