chombo-discharge
Loading...
Searching...
No Matches
CD_ParticleContainer.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_PARTICLECONTAINER_H
14#define CD_PARTICLECONTAINER_H
15
16// Chombo includes
17#include <Particle.H>
18#include <ParticleData.H>
19#include <ParticleValidRegion.H>
20#include <BinItem.H>
21#include <BinFab.H>
22#include <ProblemDomain.H>
23#include <DisjointBoxLayout.H>
24#include <BaseEBCellFAB.H>
25
26// Our includes
27#include <CD_OpenMP.H>
28#include <CD_LevelTiles.H>
29#include <CD_ParticleMap.H>
30#include <CD_NamespaceHeader.H>
31
35template <class P>
37
41template <class P>
43
50template <class P>
52{
53public:
56
61
77 const Vector<Real>& a_dx,
78 const Vector<int>& a_refRat,
81 const RealVect& a_probLo,
83 int a_finestLevel,
85
89 virtual ~ParticleContainer();
90
91 ParticleContainer(const ParticleContainer&) = delete;
93 operator=(const ParticleContainer&) = delete;
94
99
106
120 void
123 const Vector<Real>& a_dx,
124 const Vector<int>& a_refRat,
127 const RealVect& a_probLo,
129 int a_finestLevel,
130 const std::string& a_realm);
131
143 void
146 const Vector<Real>& a_dx,
147 const Vector<int>& a_refRat,
150 int a_base,
151 int a_newFinestLevel);
152
157 void
158 preRegrid(int a_lmin);
159
163 void
165
171 void
173
179 void
181
187 void
189
195 void
197
201 void
203
207 void
209
213 void
215
219 void
221
225 void
227
232 void
234
239 bool
241
246 int
248
253 std::string
254 getRealm() const;
255
261 getParticles();
262
269
276
283
290
297
303 getGrids() const;
304
311
318
325 operator[](int a_lvl);
326
333 operator[](int a_level) const;
334
342
350
359
368
376 BinFab<P>&
378
386 const BinFab<P>&
388
396 void
398
406 void
408
413 void
415
420 void
422
427 void
429
434 void
436
443 void
445
452 void
454
459 void
461
466 void
468
472 void
474
478 void
479 remap();
480
486 void
488
494 void
496
503 void
505
514 inline void
516
525 inline void
527
532 unsigned long long
534
539 unsigned long long
541
546 unsigned long long
548
553 unsigned long long
555
560 unsigned long long
562
567 unsigned long long
569
571 // Reductions for performing catenation and join operations in a thread-safe manner.
572#pragma omp declare reduction(catenate : List<P> : ThreadSafeCatenation<P>(omp_out, omp_in))
573#pragma omp declare reduction(join : List<P> : ThreadSafeJoin<P>(omp_out, omp_in))
574
579
584
589
594
598 bool m_isDefined = false;
599
604
608 bool m_profile = false;
609
613 bool m_debug = false;
614
618 bool m_verbose = false;
619
624
629
634
639
644
649
654
659
664
673
679
685
690
696 void
698
704 void
706
713 inline void
715
722 inline void
724
730 inline void
732 List<P>& a_unmappedParticles) const noexcept;
733
739 inline void
742
748 inline void
750};
751
752#include <CD_NamespaceFooter.H>
753
755
756#endif
Declaration of LevelTiles.
Declaration of various useful OpenMP-related utilities.
Implementation of CD_ParticleContainer.H.
Vector< RefCountedPtr< LayoutData< BinFab< P > > > > AMRCellParticles
Alias for cell-sorted particles on each AMR level.
Definition CD_ParticleContainer.H:42
Vector< RefCountedPtr< ParticleData< P > > > AMRParticles
Alias for ParticleData on each AMR level.
Definition CD_ParticleContainer.H:36
Implementation of CD_ParticleOps.H.
std::unordered_map< std::pair< uint32_t, uint32_t >, T, PairHash > ParticleMap
Underlying particle map when gathering/scattering particles.
Definition CD_ParticleMap.H:75
Templated class for holding particles on an AMR hierarchy with particle remapping.
Definition CD_ParticleContainer.H:52
Vector< RealVect > getDx() const noexcept
Get grid resolutions.
Definition CD_ParticleContainerImplem.H:257
Vector< ProblemDomain > m_domains
Problem domains.
Definition CD_ParticleContainer.H:638
RealVect getProbLo() const noexcept
Get lower-left corner.
Definition CD_ParticleContainerImplem.H:250
AMRCellParticles< P > & getCellParticles()
Get all cell particles.
Definition CD_ParticleContainerImplem.H:352
Vector< BoxLayout > m_grownGrids
Grown layouts.
Definition CD_ParticleContainer.H:648
void organizeParticlesByPatch()
Sort particles by cell.
Definition CD_ParticleContainerImplem.H:502
bool m_verbose
Verbose or not.
Definition CD_ParticleContainer.H:618
void clearMaskParticles() const
Clear the "mask" particles.
Definition CD_ParticleContainerImplem.H:1726
unsigned long long getNumberOfOutcastParticlesGlobal() const
Get global number of particles.
Definition CD_ParticleContainerImplem.H:1512
Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > m_validRegion
Map of valid cells; evaluates to false if a cell is covered by a finer grid.
Definition CD_ParticleContainer.H:643
AMRCellParticles< P > m_cellSortedParticles
Cell particles.
Definition CD_ParticleContainer.H:689
AMRParticles< P > m_particles
The actual particles that this ParticleContainer represents.
Definition CD_ParticleContainer.H:663
unsigned long long getNumberOfValidParticlesLocal() const
Get local number of particles.
Definition CD_ParticleContainerImplem.H:1441
void getCellParticlesDestructive(BinFab< P > &a_cellParticles, int a_lvl, const DataIndex &a_dit)
Fill a cell-sorted particle data holder with all the particles in the grid patch. The original partic...
Definition CD_ParticleContainerImplem.H:422
void preRegrid(int a_lmin)
Cache particles before calling regrid.
Definition CD_ParticleContainerImplem.H:1217
bool m_debug
Debug or not.
Definition CD_ParticleContainer.H:613
bool m_isOrganizedByCell
Check if particle container is "cell sorted".
Definition CD_ParticleContainer.H:603
std::string getRealm() const
Get the realm where this ParticleContainer lives.
Definition CD_ParticleContainerImplem.H:234
void regrid(const Vector< DisjointBoxLayout > &a_grids, const Vector< ProblemDomain > &a_domains, const Vector< Real > &a_dx, const Vector< int > &a_refRat, const Vector< ValidMask > &a_validMask, const Vector< RefCountedPtr< LevelTiles > > &a_levelTiles, int a_base, int a_newFinestLevel)
Regrid function. a_base is the coarsest grid level which did not change.
Definition CD_ParticleContainerImplem.H:1296
virtual ~ParticleContainer()
Destructor ( does nothing)
Definition CD_ParticleContainerImplem.H:64
Vector< RefCountedPtr< LevelTiles > > m_levelTiles
Tiled AMR space.
Definition CD_ParticleContainer.H:623
void sortParticles() noexcept
Sort particles according to the < operator in the particle.
Definition CD_ParticleContainerImplem.H:191
const Vector< DisjointBoxLayout > & getGrids() const
Get the AMR grids.
Definition CD_ParticleContainerImplem.H:243
ParticleContainer(ParticleContainer &&)=default
Move constructor.
int m_blockingFactor
Blocking factor, aka grid size.
Definition CD_ParticleContainer.H:583
unsigned long long getNumberOfOutcastParticlesLocal() const
Get local number of particles.
Definition CD_ParticleContainerImplem.H:1483
void addParticles(const List< P > &a_particles)
Add particles to container.
Definition CD_ParticleContainerImplem.H:547
unsigned long long getNumberOfMaskParticlesGlobal() const
Get the number particles in the halo cells.
Definition CD_ParticleContainerImplem.H:1554
void define(const Vector< DisjointBoxLayout > &a_grids, const Vector< ProblemDomain > &a_domains, const Vector< Real > &a_dx, const Vector< int > &a_refRat, const Vector< ValidMask > &a_validMask, const Vector< RefCountedPtr< LevelTiles > > &a_levelTiles, const RealVect &a_probLo, int a_blockingFactor, int a_finestLevel, const std::string &a_realm)
Define the container. This will do a clear-out of all particles.
Definition CD_ParticleContainerImplem.H:71
void admitValidParticles(List< P > &a_evictedParticles, ParticleData< P > &a_particles, int a_coarseLevel)
Evict particles if they move out of the valid region.
void clear(AMRParticles< P > &a_particles) const
Clear particles on input data holder.
Definition CD_ParticleContainerImplem.H:1750
void remap()
Remap over the entire AMR hierarchy.
Definition CD_ParticleContainerImplem.H:971
Vector< int > m_refRat
Refinement ratios. Entry at index 'l' is the refinement between level 'l' and level 'l+1'.
Definition CD_ParticleContainer.H:658
bool m_profile
Profile or not.
Definition CD_ParticleContainer.H:608
void setupParticleData(int a_base, int a_finestLevel)
Setup function for the particle data (m_particles and m_maskParticles)
Definition CD_ParticleContainerImplem.H:148
void clearParticles()
Clear all particles.
Definition CD_ParticleContainerImplem.H:1708
int m_finestLevel
Finest grid level.
Definition CD_ParticleContainer.H:588
bool m_isDefined
Check if particle container is defined.
Definition CD_ParticleContainer.H:598
void clearOutcast() noexcept
Clear outcast particles.
Definition CD_ParticleContainerImplem.H:1735
void catenateParticleMaps(std::vector< ParticleMap< List< P > > > &a_globalParticles, std::vector< ParticleMap< List< P > > > &a_localParticles) const noexcept
Catenate the particles. This is usually called within OpenMP parallel regions.
Definition CD_ParticleContainerImplem.H:1167
unsigned long long getNumberOfMaskParticlesLocal() const
Get the number particles in the halo cells.
Definition CD_ParticleContainerImplem.H:1525
void organizeParticlesByCell()
Sort particles by cell.
Definition CD_ParticleContainerImplem.H:468
AMRParticles< P > m_bufferParticles
Special data holder that holds particles on a grown grid layout.
Definition CD_ParticleContainer.H:672
void mapParticlesToAMRGrid(std::vector< ParticleMap< List< P > > > &a_mappedParticles, List< P > &a_unmappedParticles) const noexcept
Iterate through the unmapped particles and map them to proper level, grid indices,...
Definition CD_ParticleContainerImplem.H:1108
int getFinestLevel() const
Get finest AMR level.
Definition CD_ParticleContainerImplem.H:225
std::string m_realm
Realm on which the ParticleContainer is defined.
Definition CD_ParticleContainer.H:578
void clearBufferParticles() const
Clear the buffer particles.
Definition CD_ParticleContainerImplem.H:1717
void assignLocalParticles(ParticleMap< List< P > > &a_mappedParticles, AMRParticles< P > &a_particleData) const noexcept
Gather particles locally.
Definition CD_ParticleContainerImplem.H:1187
Vector< DisjointBoxLayout > m_grids
AMR grids.
Definition CD_ParticleContainer.H:628
RealVect m_probLo
Lower left corner of the physical domain.
Definition CD_ParticleContainer.H:593
void transferParticlesToSingleList(List< P > &a_list, AMRParticles< P > &a_particles) const noexcept
Gather the particles onto a single list.
Definition CD_ParticleContainerImplem.H:1062
bool isOrganizedByCell() const
Is cell-sorted or not.
Definition CD_ParticleContainerImplem.H:218
void transferMaskParticles(const Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > &a_mask)
Copy particles to the mask particle data holder.
Definition CD_ParticleContainerImplem.H:1635
ParticleContainer & operator=(ParticleContainer &&)=default
Move assignment operator.
void copyParticlesToSingleList(List< P > &a_list, const AMRParticles< P > &a_particles) const noexcept
Copy the input particles onto a single list.
Definition CD_ParticleContainerImplem.H:1085
ParticleContainer()
Default constructor. Leaves object in undefined state.
void sanityCheck() const noexcept
Run a sanity check and make sure all particles are in their correctly assigned box.
Definition CD_ParticleContainerImplem.H:1036
void setValue(Real a_value)
Set the particle member to the input value.
Definition CD_ParticleContainerImplem.H:1386
Vector< DisjointBoxLayout > m_oldGrids
Old AMR grids. Used during regrids.
Definition CD_ParticleContainer.H:633
AMRParticles< P > m_maskParticles
Special data holder that holds copies of particles on the coarse level that are within a specified ra...
Definition CD_ParticleContainer.H:678
AMRParticles< P > & getMaskParticles()
Get the mask particles.
Definition CD_ParticleContainerImplem.H:308
RefCountedPtr< LevelData< BaseFab< bool > > > ValidMask
alias type alias.
Definition CD_ParticleContainer.H:55
unsigned long long getNumberOfValidParticlesGlobal() const
Get global number of particles.
Definition CD_ParticleContainerImplem.H:1470
void resetParticleIDs() noexcept
Compute new particle IDs.
Definition CD_ParticleContainerImplem.H:1258
void addParticlesDestructive(List< P > &a_particles)
Add particles to container. The input particles are destroyed by this routine.
Definition CD_ParticleContainerImplem.H:613
void setupGrownGrids(int a_base, int a_finestLevel)
Set up grown grids.
Definition CD_ParticleContainerImplem.H:117
AMRParticles< P > & getBufferParticles()
Get buffer particles on all levels.
Definition CD_ParticleContainerImplem.H:290
Vector< RealVect > m_dx
Resolutions on each grid level.
Definition CD_ParticleContainer.H:653
AMRParticles< P > & getParticles()
Get all particles on all levels.
Definition CD_ParticleContainerImplem.H:264
AMRParticles< P > m_cacheParticles
Particles stored on the old grid.
Definition CD_ParticleContainer.H:684
void transferParticles(ParticleContainer< P > &a_otherContainer)
Move particles into this container.
Definition CD_ParticleContainerImplem.H:912
void copyMaskParticles(const Vector< RefCountedPtr< LevelData< BaseFab< bool > > > > &a_mask) const
Copy particles to mask particle data holder.
Definition CD_ParticleContainerImplem.H:1567
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:26