34 CH_TIME(
"EBAMRSurfaceDeposition::deposit");
36 pout() <<
"EBAMRSurfaceDeposition::deposit" << endl;
39 CH_assert(a_meshData.getRealm() == a_particles.getRealm());
42 for (
int lvl = 0; lvl <= m_finestLevel; lvl++) {
43 const DisjointBoxLayout& dbl = m_ebGrids[lvl]->getDBL();
44 const EBISLayout& ebisl = m_ebGrids[lvl]->getEBISL();
45 const DataIterator& dit = dbl.dataIterator();
47 const int nbox = dit.size();
49#pragma omp parallel for schedule(runtime)
50 for (
int mybox = 0; mybox < nbox; mybox++) {
51 const DataIndex& din = dit[mybox];
53 const Box cellBox = dbl[din];
54 const EBISBox& ebisbox = ebisl[din];
55 const BaseIVFAB<VoFStencil>& stencils = (*m_depositionStencils[lvl])[din];
57 BaseIVFAB<Real>& meshData = (*m_data[lvl])[din];
62 for (std::size_t i = 0; i < leaf.
size(); i++) {
66 if (!(cellBox.contains(iv))) {
67 MayDay::Error(
"CD_EBAMRSurfaceDeposition::deposit -- particle is not inside the box");
70 if (ebisbox.isIrregular(iv)) {
71 const VoFStencil& stencil = stencils(VolIndex(iv, 0), 0);
73 for (
int k = 0; k < stencil.size(); k++) {
74 const VolIndex& stencilVoF = stencil.vof(k);
75 const Real& stencilWeight = stencil.weight(k);
76 const Real depositionWeight = stencilWeight * leaf.
weight(i);
78 meshData(stencilVoF, 0) += depositionWeight;
85 m_data[lvl]->exchange(Interval(0, 0), m_copierLevel[lvl],
IrregAddOp());
90 this->addInvalidCoarseDataToFineData();
91 this->addFineGhostDataToValidCoarData();
94 for (
int lvl = 0; lvl <= m_finestLevel; lvl++) {
95 CH_assert(!(a_meshData[lvl].isNull()));
96 CH_assert(a_meshData[lvl]->nComp() == 1);
98 const Interval interv = Interval(0, 0);
100 m_data[lvl]->copyTo(interv, *a_meshData[lvl], interv, m_validToValidCopiers[lvl]);
Declaration of a static class containing some common useful particle routines that would otherwise be...
void deposit(EBAMRIVData &a_meshData, const ParticleContainer< P, Traits > &a_particles) const noexcept
Deposit the container-owned weight column of an SoA particle container onto the surface.
Definition CD_EBAMRSurfaceDepositionImplem.H:32
AMR-hierarchy container of computational particles, stored per patch in Struct-of-Arrays form.
Definition CD_ParticleContainer.H:123
static IntVect getParticleCellIndex(const RealVect &a_particlePosition, const RealVect &a_probLo, const Real &a_dx) noexcept
Get the cell index corresponding to the particle position.
Definition CD_ParticleOpsImplem.H:32
Arena-backed Struct-of-Arrays particle container for a single grid patch.
Definition CD_ParticleSoA.H:655
RealVect position(const std::size_t a_index) const noexcept
Position of particle i as a RealVect (by value, assembled from the scalar columns).
Definition CD_ParticleSoA.H:1188
double & weight(const std::size_t a_index) noexcept
Weight of particle i.
Definition CD_ParticleSoA.H:1222
std::size_t size() const noexcept
Number of particles currently stored.
Definition CD_ParticleSoA.H:882