Skip to content

Commit 040fac1

Browse files
authored
EdgeFluxRegister: add plus() member function (#5329)
## Summary Adds `plus(rhs)` to `EdgeFluxRegister`. (`FluxRegister` already has this operator.) ## Additional background This allows the user to add a temporary EdgeFluxRegister (say, for a given hydro step) to a simulation-wide EdgeFluxRegister. Then, for example, if a hydro step is rejected, the temporary EdgeFluxRegister (which may have been incremented during each stage for a multi-stage integrator) for that step can simply be discarded and implicitly deallocated.
1 parent 25407fc commit 040fac1

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

Src/Boundary/AMReX_EdgeFluxRegister.H

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ public:
8787
//! Reset accumulated state at the start of a coarse step.
8888
void reset ();
8989

90+
//! Accumulate another register with identical layout into this one.
91+
EdgeFluxRegister& plus (EdgeFluxRegister const& rhs);
92+
9093
#if (AMREX_SPACEDIM == 3)
9194

9295
/**

Src/Boundary/AMReX_EdgeFluxRegister.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,31 @@ void EdgeFluxRegister::reset ()
182182
Gpu::synchronize();
183183
}
184184

185+
EdgeFluxRegister&
186+
EdgeFluxRegister::plus (EdgeFluxRegister const& rhs)
187+
{
188+
AMREX_ALWAYS_ASSERT(m_ratio == rhs.m_ratio);
189+
AMREX_ALWAYS_ASSERT(m_ncomp == rhs.m_ncomp);
190+
191+
#if (AMREX_SPACEDIM == 3)
192+
for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
193+
MultiFab::Add(m_E_crse[idim], rhs.m_E_crse[idim], 0, 0, m_ncomp, 0);
194+
}
195+
for (int iface = 0; iface < AMREX_SPACEDIM*2; ++iface) {
196+
for (int icomp = 0; icomp < 2; ++icomp) {
197+
MultiFab::Add(m_E_fine[iface][icomp], rhs.m_E_fine[iface][icomp], 0, 0, m_ncomp, 0);
198+
}
199+
}
200+
#else
201+
MultiFab::Add(m_E_crse, rhs.m_E_crse, 0, 0, m_ncomp, 0);
202+
for (int iface = 0; iface < AMREX_SPACEDIM*2; ++iface) {
203+
MultiFab::Add(m_E_fine[iface], rhs.m_E_fine[iface], 0, 0, m_ncomp, 0);
204+
}
205+
#endif
206+
207+
return *this;
208+
}
209+
185210
#if (AMREX_SPACEDIM == 3)
186211

187212
void EdgeFluxRegister::CrseAdd (MFIter const& mfi, const Array<FArrayBox const*,3>& E_crse,

0 commit comments

Comments
 (0)