From a72fb5173b307861d2f5360ae775b31465240144 Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Mon, 6 May 2024 09:20:38 -0700 Subject: [PATCH] Fix assertions involving IntVect (#3919) A MultiFab used to have the same number of ghost cells in all directions. This has no longer been the case for many years. But many assertions have not been updated for this change. This commit fixes various assertions to make it more appropriate. Also added are overloaded functions for element-wise comparison between an IntVect and an integer. This makes the code cleaner. --- Src/Amr/AMReX_AmrLevel.cpp | 6 +-- Src/Amr/AMReX_Extrapolater.cpp | 2 +- Src/Amr/AMReX_StateData.cpp | 8 ++-- Src/AmrCore/AMReX_Interpolater.cpp | 2 +- Src/Base/AMReX_BCUtil.cpp | 2 +- Src/Base/AMReX_Box.H | 4 +- Src/Base/AMReX_FabArray.H | 8 ++-- Src/Base/AMReX_FabArrayBase.cpp | 4 +- Src/Base/AMReX_IntVect.H | 34 ++++++++++++++++- Src/Base/AMReX_MultiFab.cpp | 34 ++++++++--------- Src/Base/AMReX_MultiFabUtil.cpp | 13 +++---- Src/Base/AMReX_VisMF.cpp | 2 +- Src/Base/AMReX_iMultiFab.cpp | 38 +++++++++---------- Src/Boundary/AMReX_FabSet.H | 3 +- Src/EB/AMReX_EB_Redistribution.cpp | 2 +- Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp | 2 +- .../MLMG/AMReX_MLNodeLaplacian.cpp | 2 +- .../MLMG/AMReX_MLNodeLaplacian_misc.cpp | 2 +- .../MLMG/AMReX_MLNodeLaplacian_sync.cpp | 2 +- Src/Particle/AMReX_Particle.H | 2 +- Src/Particle/AMReX_ParticleUtil.H | 2 +- Src/Particle/AMReX_TracerParticles.cpp | 14 +++---- 22 files changed, 109 insertions(+), 79 deletions(-) diff --git a/Src/Amr/AMReX_AmrLevel.cpp b/Src/Amr/AMReX_AmrLevel.cpp index f0a54cac62a..41d7c02b654 100644 --- a/Src/Amr/AMReX_AmrLevel.cpp +++ b/Src/Amr/AMReX_AmrLevel.cpp @@ -1531,7 +1531,7 @@ AmrLevel::FillCoarsePatch (MultiFab& mf, // BL_ASSERT(level != 0); BL_ASSERT(ncomp <= (mf.nComp()-dcomp)); - BL_ASSERT(nghost <= mf.nGrow()); + BL_ASSERT(mf.nGrowVect().allGE(nghost)); BL_ASSERT(0 <= idx && idx < desc_lst.size()); int DComp = dcomp; @@ -2186,7 +2186,7 @@ AmrLevel::FillPatch (AmrLevel& amrlevel, { BL_PROFILE("AmrLevel::FillPatch()"); BL_ASSERT(dcomp+ncomp-1 <= leveldata.nComp()); - BL_ASSERT(boxGrow <= leveldata.nGrow()); + BL_ASSERT(leveldata.nGrowVect().allGE(boxGrow)); FillPatchIterator fpi(amrlevel, leveldata, boxGrow, time, index, scomp, ncomp); const MultiFab& mf_fillpatched = fpi.get_mf(); MultiFab::Copy(leveldata, mf_fillpatched, 0, dcomp, ncomp, boxGrow); @@ -2204,7 +2204,7 @@ AmrLevel::FillPatchAdd (AmrLevel& amrlevel, { BL_PROFILE("AmrLevel::FillPatchAdd()"); BL_ASSERT(dcomp+ncomp-1 <= leveldata.nComp()); - BL_ASSERT(boxGrow <= leveldata.nGrow()); + BL_ASSERT(leveldata.nGrowVect().allGE(boxGrow)); FillPatchIterator fpi(amrlevel, leveldata, boxGrow, time, index, scomp, ncomp); const MultiFab& mf_fillpatched = fpi.get_mf(); MultiFab::Add(leveldata, mf_fillpatched, 0, dcomp, ncomp, boxGrow); diff --git a/Src/Amr/AMReX_Extrapolater.cpp b/Src/Amr/AMReX_Extrapolater.cpp index cbac2648b9b..27c6dd7c223 100644 --- a/Src/Amr/AMReX_Extrapolater.cpp +++ b/Src/Amr/AMReX_Extrapolater.cpp @@ -17,7 +17,7 @@ namespace amrex::Extrapolater void FirstOrderExtrap (MultiFab& mf, const Geometry& geom, int scomp, int ncomp, int ngrow) { - BL_ASSERT(mf.nGrow() >= ngrow); + BL_ASSERT(mf.nGrowVect().allGE(ngrow)); BL_ASSERT(scomp >= 0); BL_ASSERT((scomp+ncomp) <= mf.nComp()); diff --git a/Src/Amr/AMReX_StateData.cpp b/Src/Amr/AMReX_StateData.cpp index 7fd2c0c5745..87960d8a55c 100644 --- a/Src/Amr/AMReX_StateData.cpp +++ b/Src/Amr/AMReX_StateData.cpp @@ -140,10 +140,10 @@ StateData::copyOld (const StateData& state) const MultiFab& MF = state.oldData(); int nc = MF.nComp(); - int ng = MF.nGrow(); + auto ng = MF.nGrowVect(); BL_ASSERT(nc == (*old_data).nComp()); - BL_ASSERT(ng == (*old_data).nGrow()); + BL_ASSERT(ng == (*old_data).nGrowVect()); MultiFab::Copy(*old_data, state.oldData(), 0, 0, nc, ng); @@ -156,10 +156,10 @@ StateData::copyNew (const StateData& state) const MultiFab& MF = state.newData(); int nc = MF.nComp(); - int ng = MF.nGrow(); + auto ng = MF.nGrowVect(); BL_ASSERT(nc == (*new_data).nComp()); - BL_ASSERT(ng == (*new_data).nGrow()); + BL_ASSERT(ng == (*new_data).nGrowVect()); MultiFab::Copy(*new_data, state.newData(), 0, 0, nc, ng); diff --git a/Src/AmrCore/AMReX_Interpolater.cpp b/Src/AmrCore/AMReX_Interpolater.cpp index b5e855feb13..e3c7340660c 100644 --- a/Src/AmrCore/AMReX_Interpolater.cpp +++ b/Src/AmrCore/AMReX_Interpolater.cpp @@ -1110,7 +1110,7 @@ CellConservativeProtected::protect (const FArrayBox& /*crse*/, Vector& /*bcr*/, RunOn runon) { - AMREX_ALWAYS_ASSERT(ratio.allGT(IntVect(1))); + AMREX_ALWAYS_ASSERT(ratio.allGT(1)); #if (AMREX_SPACEDIM == 1) amrex::ignore_unused(fine,fine_state, diff --git a/Src/Base/AMReX_BCUtil.cpp b/Src/Base/AMReX_BCUtil.cpp index dc5b4f4f10c..115b4d7dcf2 100644 --- a/Src/Base/AMReX_BCUtil.cpp +++ b/Src/Base/AMReX_BCUtil.cpp @@ -36,7 +36,7 @@ struct dummy_gpu_fill_extdir void FillDomainBoundary (MultiFab& phi, const Geometry& geom, const Vector& bc) { if (geom.isAllPeriodic()) { return; } - if (phi.nGrow() == 0) { return; } + if (phi.nGrowVect() == 0) { return; } AMREX_ALWAYS_ASSERT(phi.ixType().cellCentered()); diff --git a/Src/Base/AMReX_Box.H b/Src/Base/AMReX_Box.H index 82a2ad9cd13..f29428b1022 100644 --- a/Src/Base/AMReX_Box.H +++ b/Src/Base/AMReX_Box.H @@ -78,7 +78,7 @@ public: bigend(big), btype(typ) { - BL_ASSERT(typ.allGE(IntVect::TheZeroVector()) && typ.allLE(IntVect::TheUnitVector())); + BL_ASSERT(typ.allGE(0) && typ.allLE(1)); } //! Construct dimension specific Boxes. @@ -829,7 +829,7 @@ AMREX_FORCE_INLINE Box& Box::convert (const IntVect& typ) noexcept { - BL_ASSERT(typ.allGE(IntVect::TheZeroVector()) && typ.allLE(IntVect::TheUnitVector())); + BL_ASSERT(typ.allGE(0) && typ.allLE(1)); IntVect shft(typ - btype.ixType()); bigend += shft; btype = IndexType(typ); diff --git a/Src/Base/AMReX_FabArray.H b/Src/Base/AMReX_FabArray.H index 5e9ca09c140..6475b39f0e1 100644 --- a/Src/Base/AMReX_FabArray.H +++ b/Src/Base/AMReX_FabArray.H @@ -2035,7 +2035,7 @@ FabArray::define (const BoxArray& bxs, define_function_called = true; - AMREX_ASSERT(ngrow.allGE(IntVect::TheZeroVector())); + AMREX_ASSERT(ngrow.allGE(0)); AMREX_ASSERT(boxarray.empty()); FabArrayBase::define(bxs, dm, nvar, ngrow); @@ -2509,7 +2509,7 @@ FabArray::setVal (value_type val, int ncomp, const IntVect& nghost) { - AMREX_ASSERT(nghost.allGE(IntVect::TheZeroVector()) && nghost.allLE(n_grow)); + AMREX_ASSERT(nghost.allGE(0) && nghost.allLE(n_grow)); AMREX_ALWAYS_ASSERT(comp+ncomp <= n_comp); BL_PROFILE("FabArray::setVal()"); @@ -2564,7 +2564,7 @@ FabArray::setVal (value_type val, int ncomp, const IntVect& nghost) { - AMREX_ASSERT(nghost.allGE(IntVect::TheZeroVector()) && nghost.allLE(n_grow)); + AMREX_ASSERT(nghost.allGE(0) && nghost.allLE(n_grow)); AMREX_ALWAYS_ASSERT(comp+ncomp <= n_comp); BL_PROFILE("FabArray::setVal(val,region,comp,ncomp,nghost)"); @@ -2617,7 +2617,7 @@ template ::value,int>Z> void FabArray::abs (int comp, int ncomp, const IntVect& nghost) { - AMREX_ASSERT(nghost.allGE(IntVect::TheZeroVector()) && nghost.allLE(n_grow)); + AMREX_ASSERT(nghost.allGE(0) && nghost.allLE(n_grow)); AMREX_ALWAYS_ASSERT(comp+ncomp <= n_comp); BL_PROFILE("FabArray::abs()"); diff --git a/Src/Base/AMReX_FabArrayBase.cpp b/Src/Base/AMReX_FabArrayBase.cpp index c5168fb2ceb..d8820e97e6f 100644 --- a/Src/Base/AMReX_FabArrayBase.cpp +++ b/Src/Base/AMReX_FabArrayBase.cpp @@ -184,7 +184,7 @@ FabArrayBase::define (const BoxArray& bxs, int nvar, const IntVect& ngrow) { - BL_ASSERT(ngrow.allGE(IntVect::TheZeroVector())); + BL_ASSERT(ngrow.allGE(0)); BL_ASSERT(boxarray.empty()); indexArray.clear(); ownership.clear(); @@ -875,7 +875,7 @@ FabArrayBase::define_fb_metadata (CommMetaData& cmd, const IntVect& nghost, void FabArrayBase::FB::define_fb (const FabArrayBase& fa) { - AMREX_ASSERT(m_multi_ghost ? fa.nGrow() >= 2 : true); // must have >= 2 ghost nodes + AMREX_ASSERT(m_multi_ghost ? fa.nGrowVect().allGE(2) : true); // must have >= 2 ghost nodes AMREX_ASSERT(m_multi_ghost ? !m_period.isAnyPeriodic() : true); // this only works for non-periodic fa.define_fb_metadata(*this, m_ngrow, m_cross, m_period, m_multi_ghost); diff --git a/Src/Base/AMReX_IntVect.H b/Src/Base/AMReX_IntVect.H index b2658a5ec94..e2c0adf120f 100644 --- a/Src/Base/AMReX_IntVect.H +++ b/Src/Base/AMReX_IntVect.H @@ -299,6 +299,14 @@ public: return AMREX_D_TERM(vect[0] < rhs[0], && vect[1] < rhs[1], && vect[2] < rhs[2]); } /** + * \brief Returns true if this is less than argument for all components. + */ + [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE + bool allLT (int rhs) const noexcept + { + return AMREX_D_TERM(vect[0] < rhs, && vect[1] < rhs, && vect[2] < rhs); + } + /** * \brief Returns true if this is less than or equal to argument for all components. * NOTE: This is NOT a strict weak ordering usable by STL sorting algorithms. */ @@ -308,6 +316,14 @@ public: return AMREX_D_TERM(vect[0] <= rhs[0], && vect[1] <= rhs[1], && vect[2] <= rhs[2]); } /** + * \brief Returns true if this is less than or equal to argument for all components. + */ + [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE + bool allLE (int rhs) const noexcept + { + return AMREX_D_TERM(vect[0] <= rhs, && vect[1] <= rhs, && vect[2] <= rhs); + } + /** * \brief Returns true if this is greater than argument for all components. * NOTE: This is NOT a strict weak ordering usable by STL sorting algorithms. */ @@ -317,6 +333,14 @@ public: return AMREX_D_TERM(vect[0] > rhs[0], && vect[1] > rhs[1], && vect[2] > rhs[2]); } /** + * \brief Returns true if this is greater than argument for all components. + */ + [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE + bool allGT (int rhs) const noexcept + { + return AMREX_D_TERM(vect[0] > rhs, && vect[1] > rhs, && vect[2] > rhs); + } + /** * \brief Returns true if this is greater than or equal to argument for all components. * NOTE: This is NOT a strict weak ordering usable by STL sorting algorithms. */ @@ -325,6 +349,14 @@ public: { return AMREX_D_TERM(vect[0] >= rhs[0], && vect[1] >= rhs[1], && vect[2] >= rhs[2]); } + /** + * \brief Returns true if this is greater than or equal to argument for all components. + */ + [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE + bool allGE (int rhs) const noexcept + { + return AMREX_D_TERM(vect[0] >= rhs, && vect[1] >= rhs, && vect[2] >= rhs); + } //! Unary plus -- for completeness. AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE IntVect operator+ () const noexcept { return *this; } @@ -580,7 +612,7 @@ AMREX_FORCE_INLINE IntVect& IntVect::coarsen (const IntVect& p) noexcept { - BL_ASSERT(p.allGT(IntVect::TheZeroVector())); + BL_ASSERT(p.allGT(0)); AMREX_D_TERM(vect[0] = amrex::coarsen(vect[0], p.vect[0]);, vect[1] = amrex::coarsen(vect[1], p.vect[1]);, vect[2] = amrex::coarsen(vect[2], p.vect[2]);); diff --git a/Src/Base/AMReX_MultiFab.cpp b/Src/Base/AMReX_MultiFab.cpp index 8dc2c64bd37..9df0d13c740 100644 --- a/Src/Base/AMReX_MultiFab.cpp +++ b/Src/Base/AMReX_MultiFab.cpp @@ -44,7 +44,7 @@ MultiFab::Dot (const MultiFab& x, int xcomp, Real MultiFab::Dot (const MultiFab& x, int xcomp, int numcomp, int nghost, bool local) { - BL_ASSERT(x.nGrow() >= nghost); + BL_ASSERT(x.nGrowVect().allGE(nghost)); BL_PROFILE("MultiFab::Dot()"); @@ -97,8 +97,8 @@ MultiFab::Dot (const iMultiFab& mask, BL_ASSERT(x.boxArray() == mask.boxArray()); BL_ASSERT(x.DistributionMap() == y.DistributionMap()); BL_ASSERT(x.DistributionMap() == mask.DistributionMap()); - BL_ASSERT(x.nGrow() >= nghost && y.nGrow() >= nghost); - BL_ASSERT(mask.nGrow() >= nghost); + BL_ASSERT(x.nGrowVect().allGE(nghost) && y.nGrowVect().allGE(nghost)); + BL_ASSERT(mask.nGrowVect().allGE(nghost)); Real sm = Real(0.0); #ifdef AMREX_USE_GPU @@ -712,7 +712,7 @@ MultiFab::contains_inf (int scomp, int ncomp, int ngrow, bool local) const bool MultiFab::contains_inf (bool local) const { - return contains_inf(0,nComp(),nGrow(),local); + return contains_inf(0,nComp(),nGrowVect(),local); } Real @@ -720,7 +720,7 @@ MultiFab::min (int comp, int nghost, bool local) const { BL_PROFILE("MultiFab::min()"); - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); Real mn = std::numeric_limits::max(); @@ -801,7 +801,7 @@ MultiFab::min (int comp, int nghost, bool local) const Real MultiFab::min (const Box& region, int comp, int nghost, bool local) const { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_PROFILE("MultiFab::min(region)"); @@ -847,7 +847,7 @@ MultiFab::min (const Box& region, int comp, int nghost, bool local) const Real MultiFab::max (int comp, int nghost, bool local) const { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_PROFILE("MultiFab::max()"); @@ -1006,7 +1006,7 @@ indexFromValue (MultiFab const& mf, int comp, int nghost, Real value, MPI_Op mml IntVect MultiFab::minIndex (int comp, int nghost) const { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); Real mn = this->min(comp, nghost, true); return indexFromValue(*this, comp, nghost, mn, MPI_MINLOC); } @@ -1014,7 +1014,7 @@ MultiFab::minIndex (int comp, int nghost) const IntVect MultiFab::maxIndex (int comp, int nghost) const { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); Real mx = this->max(comp, nghost, true); return indexFromValue(*this, comp, nghost, mx, MPI_MAXLOC); } @@ -1374,7 +1374,7 @@ void MultiFab::plus (Real val, int comp, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -1384,7 +1384,7 @@ MultiFab::plus (Real val, int comp, int num_comp, int nghost) void MultiFab::plus (Real val, const Box& region, int comp, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -1400,7 +1400,7 @@ MultiFab::plus (const MultiFab& mf, int strt_comp, int num_comp, int nghost) void MultiFab::mult (Real val, int comp, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -1410,7 +1410,7 @@ MultiFab::mult (Real val, int comp, int num_comp, int nghost) void MultiFab::mult (Real val, const Box& region, int comp, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -1420,7 +1420,7 @@ MultiFab::mult (Real val, const Box& region, int comp, int num_comp, int nghost) void MultiFab::invert (Real numerator, int comp, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -1430,7 +1430,7 @@ MultiFab::invert (Real numerator, int comp, int num_comp, int nghost) void MultiFab::invert (Real numerator, const Box& region, int comp, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -1440,7 +1440,7 @@ MultiFab::invert (Real numerator, const Box& region, int comp, int num_comp, int void MultiFab::negate (int comp, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); FabArray::mult(-1., comp, num_comp, nghost); @@ -1449,7 +1449,7 @@ MultiFab::negate (int comp, int num_comp, int nghost) void MultiFab::negate (const Box& region, int comp, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); FabArray::mult(-1.,region,comp,num_comp,nghost); diff --git a/Src/Base/AMReX_MultiFabUtil.cpp b/Src/Base/AMReX_MultiFabUtil.cpp index 5dd97fa6536..a2a1f14ed8d 100644 --- a/Src/Base/AMReX_MultiFabUtil.cpp +++ b/Src/Base/AMReX_MultiFabUtil.cpp @@ -228,7 +228,7 @@ namespace amrex const Geometry& geom, int ncomp, bool use_harmonic_averaging) { AMREX_ASSERT(cc.nComp() == ncomp); - AMREX_ASSERT(cc.nGrow() >= 1); + AMREX_ASSERT(cc.nGrowVect().allGE(1)); AMREX_ASSERT(fc[0]->nComp() == ncomp); // We only expect fc to have the gradient perpendicular to the face #if (AMREX_SPACEDIM >= 2) AMREX_ASSERT(fc[1]->nComp() == ncomp); // We only expect fc to have the gradient perpendicular to the face @@ -396,10 +396,9 @@ namespace amrex const Geometry& cgeom, const Geometry& /*fgeom*/) { AMREX_ASSERT(S_crse.nComp() == S_fine.nComp()); - AMREX_ASSERT(ratio == ratio[0]); - AMREX_ASSERT(S_fine.nGrow() % ratio[0] == 0); - const int nGrow = S_fine.nGrow() / ratio[0]; + const IntVect nGrow = S_fine.nGrowVect() / ratio; + AMREX_ASSERT((nGrow*ratio) == S_fine.nGrowVect()); // // Coarsen() the fine stuff on processors owning the fine data. @@ -412,7 +411,7 @@ namespace amrex if (Gpu::inLaunchRegion() && crse_S_fine.isFusingCandidate()) { auto const& crsema = crse_S_fine.arrays(); auto const& finema = S_fine.const_arrays(); - ParallelFor(crse_S_fine, IntVect(nGrow), ncomp, + ParallelFor(crse_S_fine, nGrow, ncomp, [=] AMREX_GPU_DEVICE (int box_no, int i, int j, int k, int n) noexcept { amrex_avgdown(i,j,k,n,crsema[box_no],finema[box_no],0,scomp,ratio); @@ -440,7 +439,7 @@ namespace amrex } } - S_crse.ParallelCopy(crse_S_fine, 0, scomp, ncomp, nGrow, 0, + S_crse.ParallelCopy(crse_S_fine, 0, scomp, ncomp, nGrow, IntVect(0), cgeom.periodicity(), FabArrayBase::ADD); } @@ -556,7 +555,7 @@ namespace amrex BL_PROFILE("amrex::get_slice_data"); if (interpolate) { - AMREX_ASSERT(cc.nGrow() >= 1); + AMREX_ASSERT(cc.nGrowVect().allGE(1)); } const auto geomdata = geom.data(); diff --git a/Src/Base/AMReX_VisMF.cpp b/Src/Base/AMReX_VisMF.cpp index cec4766abfd..4c8b4b43fb2 100644 --- a/Src/Base/AMReX_VisMF.cpp +++ b/Src/Base/AMReX_VisMF.cpp @@ -368,7 +368,7 @@ operator>> (std::istream &is, is >> ng; hd.m_ngrow = IntVect(AMREX_D_DECL(ng,ng,ng)); } - BL_ASSERT(hd.m_ngrow.min() >= 0); + BL_ASSERT(hd.m_ngrow.allGE(0)); int ba_ndims = hd.m_ba.readFrom(is); for (int i = ba_ndims; i < AMREX_SPACEDIM; ++i) { diff --git a/Src/Base/AMReX_iMultiFab.cpp b/Src/Base/AMReX_iMultiFab.cpp index 3941c4267b2..d79e1d71444 100644 --- a/Src/Base/AMReX_iMultiFab.cpp +++ b/Src/Base/AMReX_iMultiFab.cpp @@ -31,7 +31,7 @@ iMultiFab::Add (iMultiFab& dst, { BL_ASSERT(dst.boxArray() == src.boxArray()); BL_ASSERT(dst.distributionMap == src.distributionMap); - BL_ASSERT(dst.nGrow() >= nghost && src.nGrow() >= nghost); + BL_ASSERT(dst.nGrowVect().allGE(nghost) && src.nGrowVect().allGE(nghost)); amrex::Add(dst,src,srccomp,dstcomp,numcomp,IntVect(nghost)); } @@ -46,7 +46,7 @@ iMultiFab::Copy (iMultiFab& dst, { BL_ASSERT(dst.boxArray() == src.boxArray()); BL_ASSERT(dst.distributionMap == src.distributionMap); - BL_ASSERT(dst.nGrow() >= nghost && src.nGrow() >= nghost); + BL_ASSERT(dst.nGrowVect().allGE(nghost) && src.nGrowVect().allGE(nghost)); amrex::Copy(dst,src,srccomp,dstcomp,numcomp,IntVect(nghost)); } @@ -74,7 +74,7 @@ iMultiFab::Subtract (iMultiFab& dst, { BL_ASSERT(dst.boxArray() == src.boxArray()); BL_ASSERT(dst.distributionMap == src.distributionMap); - BL_ASSERT(dst.nGrow() >= nghost && src.nGrow() >= nghost); + BL_ASSERT(dst.nGrowVect().allGE(nghost) && src.nGrowVect().allGE(nghost)); amrex::Subtract(dst,src,srccomp,dstcomp,numcomp,IntVect(nghost)); } @@ -89,7 +89,7 @@ iMultiFab::Multiply (iMultiFab& dst, { BL_ASSERT(dst.boxArray() == src.boxArray()); BL_ASSERT(dst.distributionMap == src.distributionMap); - BL_ASSERT(dst.nGrow() >= nghost && src.nGrow() >= nghost); + BL_ASSERT(dst.nGrowVect().allGE(nghost) && src.nGrowVect().allGE(nghost)); amrex::Multiply(dst,src,srccomp,dstcomp,numcomp,IntVect(nghost)); } @@ -104,7 +104,7 @@ iMultiFab::Divide (iMultiFab& dst, { BL_ASSERT(dst.boxArray() == src.boxArray()); BL_ASSERT(dst.distributionMap == src.distributionMap); - BL_ASSERT(dst.nGrow() >= nghost && src.nGrow() >= nghost); + BL_ASSERT(dst.nGrowVect().allGE(nghost) && src.nGrowVect().allGE(nghost)); amrex::Divide(dst,src,srccomp,dstcomp,numcomp,IntVect(nghost)); } @@ -226,7 +226,7 @@ iMultiFab::min (int comp, int nghost, bool local) const { BL_PROFILE("iMultiFab::min()"); - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); int mn = std::numeric_limits::max(); @@ -266,7 +266,7 @@ iMultiFab::min (const Box& region, int comp, int nghost, bool local) const { BL_PROFILE("iMultiFab::min(region)"); - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); int mn = std::numeric_limits::max(); @@ -310,7 +310,7 @@ iMultiFab::max (int comp, int nghost, bool local) const { BL_PROFILE("iMultiFab::max()"); - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); int mx = std::numeric_limits::lowest(); @@ -350,7 +350,7 @@ iMultiFab::max (const Box& region, int comp, int nghost, bool local) const { BL_PROFILE("iMultiFab::max(region)"); - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); int mx = std::numeric_limits::lowest(); @@ -394,7 +394,7 @@ iMultiFab::sum (int comp, int nghost, bool local) const { BL_PROFILE("iMultiFab::sum()"); - AMREX_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + AMREX_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); Long sm = 0; @@ -466,7 +466,7 @@ indexFromValue (iMultiFab const& mf, int comp, int nghost, int value, MPI_Op mml IntVect iMultiFab::minIndex (int comp, int nghost) const { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); int mn = this->min(comp, nghost, true); return indexFromValue(*this, comp, nghost, mn, MPI_MINLOC); } @@ -474,7 +474,7 @@ iMultiFab::minIndex (int comp, int nghost) const IntVect iMultiFab::maxIndex (int comp, int nghost) const { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); int mx = this->max(comp, nghost, true); return indexFromValue(*this, comp, nghost, mx, MPI_MAXLOC); } @@ -503,7 +503,7 @@ iMultiFab::plus (int val, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -517,7 +517,7 @@ iMultiFab::plus (int val, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -534,7 +534,7 @@ iMultiFab::plus (const iMultiFab& mf, BL_ASSERT(strt_comp >= 0); BL_ASSERT(num_comp > 0); BL_ASSERT(strt_comp + num_comp - 1 < n_comp && strt_comp + num_comp - 1 < mf.n_comp); - BL_ASSERT(nghost <= n_grow.min() && nghost <= mf.n_grow.min()); + BL_ASSERT(n_grow.allGE(nghost) && mf.n_grow.allGE(nghost)); amrex::Add(*this, mf, strt_comp, strt_comp, num_comp, nghost); } @@ -545,7 +545,7 @@ iMultiFab::mult (int val, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -559,7 +559,7 @@ iMultiFab::mult (int val, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); BL_ASSERT(num_comp > 0); @@ -571,7 +571,7 @@ iMultiFab::negate (int comp, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); FabArray::mult(-1,comp,num_comp,nghost); @@ -583,7 +583,7 @@ iMultiFab::negate (const Box& region, int num_comp, int nghost) { - BL_ASSERT(nghost >= 0 && nghost <= n_grow.min()); + BL_ASSERT(nghost >= 0 && n_grow.allGE(nghost)); BL_ASSERT(comp+num_comp <= n_comp); FabArray::mult(-1,region,comp,num_comp,nghost); diff --git a/Src/Boundary/AMReX_FabSet.H b/Src/Boundary/AMReX_FabSet.H index 0e9051b182d..f05b531c9d7 100644 --- a/Src/Boundary/AMReX_FabSet.H +++ b/Src/Boundary/AMReX_FabSet.H @@ -318,8 +318,7 @@ FabSetT::linComb (value_type a, const MF& mfa, int a_comp, int dcomp, int ncomp, int ngrow) { BL_PROFILE("FabSetT::linComb()"); - BL_ASSERT(ngrow <= mfa.nGrow()); - BL_ASSERT(ngrow <= mfb.nGrow()); + BL_ASSERT(mfa.nGrowVect().allGE(ngrow) && mfb.nGrowVect().allGE(ngrow)); BL_ASSERT(mfa.boxArray() == mfb.boxArray()); BL_ASSERT(boxArray() != mfa.boxArray()); diff --git a/Src/EB/AMReX_EB_Redistribution.cpp b/Src/EB/AMReX_EB_Redistribution.cpp index 0bfcefa61c1..ca43edeaad7 100644 --- a/Src/EB/AMReX_EB_Redistribution.cpp +++ b/Src/EB/AMReX_EB_Redistribution.cpp @@ -64,7 +64,7 @@ namespace amrex { Box domain(geom.Domain()); int nghost = 2; - AMREX_ASSERT(div_tmp_in.nGrow() >= nghost); + AMREX_ASSERT(div_tmp_in.nGrowVect().allGE(nghost)); EB_set_covered(div_tmp_in, 0, ncomp, div_tmp_in.nGrow(), eb_covered_val); diff --git a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp index 740d8d5cc00..87853eb37bb 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp +++ b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp @@ -312,7 +312,7 @@ MLCurlCurl::apply (int amrlev, int mglev, MF& out, MF& in, BCMode /*bc_mode*/, void MLCurlCurl::smooth (int amrlev, int mglev, MF& sol, const MF& rhs, bool skip_fillboundary) const { - AMREX_ASSERT(rhs[0].nGrowVect().allGE(IntVect(1))); + AMREX_ASSERT(rhs[0].nGrowVect().allGE(1)); applyBC(amrlev, mglev, const_cast(rhs), CurlCurlStateType::b); diff --git a/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian.cpp b/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian.cpp index 6c9e88c9816..6f37af7af27 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian.cpp +++ b/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian.cpp @@ -750,7 +750,7 @@ MLNodeLaplacian::restrictInteriorNodes (int camrlev, MultiFab& crhs, MultiFab& a MultiFab* frhs = nullptr; std::unique_ptr mf; - if (a_frhs.nGrowVect().allGE(IntVect(amrrr-1))) + if (a_frhs.nGrowVect().allGE(amrrr-1)) { frhs = &a_frhs; } diff --git a/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian_misc.cpp b/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian_misc.cpp index 2c3e7bc3423..e3d7a566fa2 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian_misc.cpp +++ b/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian_misc.cpp @@ -937,7 +937,7 @@ MLNodeLaplacian::compRHS (const Vector& rhs, const Vector& { const Geometry& geom = m_geom[ilev][0]; AMREX_ASSERT(vel[ilev]->nComp() >= AMREX_SPACEDIM); - AMREX_ASSERT(vel[ilev]->nGrow() >= 1); + AMREX_ASSERT(vel[ilev]->nGrowVect().allGE(1)); if (has_inflow) { // Zero out transverse velocity so that it's not seen. Box domain = geom.Domain(); diff --git a/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian_sync.cpp b/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian_sync.cpp index 07cf1628f48..fdf1f08ae59 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian_sync.cpp +++ b/Src/LinearSolvers/MLMG/AMReX_MLNodeLaplacian_sync.cpp @@ -674,7 +674,7 @@ MLNodeLaplacian::reflux (int crse_amrlev, MultiFab fine_res_for_coarse(amrex::coarsen(fba, amrrr), fdm, 1, 0); std::unique_ptr tmp_fine_res; - if (amrrr == 4 && !a_fine_res.nGrowVect().allGE(IntVect(3))) { + if (amrrr == 4 && !a_fine_res.nGrowVect().allGE(3)) { tmp_fine_res = std::make_unique(a_fine_res.boxArray(), a_fine_res.DistributionMap(), 1, 3); MultiFab::Copy(*tmp_fine_res, a_fine_res, 0, 0, 1, 0); diff --git a/Src/Particle/AMReX_Particle.H b/Src/Particle/AMReX_Particle.H index 5d34751587f..b87b8f638bb 100644 --- a/Src/Particle/AMReX_Particle.H +++ b/Src/Particle/AMReX_Particle.H @@ -408,7 +408,7 @@ struct Particle [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE RealVect rvec (const IntVect& indices) const & { - AMREX_ASSERT(indices.max() < NReal); + AMREX_ASSERT(indices.allLT(NReal)); return RealVect(AMREX_D_DECL(this->m_rdata[indices[0]], this->m_rdata[indices[1]], this->m_rdata[indices[2]])); diff --git a/Src/Particle/AMReX_ParticleUtil.H b/Src/Particle/AMReX_ParticleUtil.H index 0d6954d61f5..a457323214b 100644 --- a/Src/Particle/AMReX_ParticleUtil.H +++ b/Src/Particle/AMReX_ParticleUtil.H @@ -778,7 +778,7 @@ template void PermutationForDeposition (Gpu::DeviceVector& perm, index_type nitems, const PTile& ptile, Box bx, Geometry geom, const IntVect idx_type) { - AMREX_ALWAYS_ASSERT(idx_type.allGE(IntVect(0)) && idx_type.allLE(IntVect(2))); + AMREX_ALWAYS_ASSERT(idx_type.allGE(0) && idx_type.allLE(2)); const IntVect refine_vect = max(idx_type, IntVect(1)).min(IntVect(2)); const IntVect type_vect = idx_type - idx_type / 2 * 2; diff --git a/Src/Particle/AMReX_TracerParticles.cpp b/Src/Particle/AMReX_TracerParticles.cpp index f0e47e1fd3a..339cb58cfa8 100644 --- a/Src/Particle/AMReX_TracerParticles.cpp +++ b/Src/Particle/AMReX_TracerParticles.cpp @@ -13,13 +13,13 @@ TracerParticleContainer::AdvectWithUmac (MultiFab* umac, int lev, Real dt) AMREX_ASSERT(OK(lev, lev, umac[0].nGrow()-1)); AMREX_ASSERT(lev >= 0 && lev < GetParticles().size()); - AMREX_D_TERM(AMREX_ASSERT(umac[0].nGrow() >= 1);, - AMREX_ASSERT(umac[1].nGrow() >= 1);, - AMREX_ASSERT(umac[2].nGrow() >= 1);); + AMREX_ASSERT(AMREX_D_TERM(umac[0].nGrowVect().allGE(1), + && umac[1].nGrowVect().allGE(1), + && umac[2].nGrowVect().allGE(1))); - AMREX_D_TERM(AMREX_ASSERT(!umac[0].contains_nan());, - AMREX_ASSERT(!umac[1].contains_nan());, - AMREX_ASSERT(!umac[2].contains_nan());); + AMREX_ASSERT(AMREX_D_TERM(!umac[0].contains_nan(), + && !umac[1].contains_nan(), + && !umac[2].contains_nan())); const auto strttime = amrex::second(); const Geometry& geom = m_gdb->Geom(lev); @@ -120,7 +120,7 @@ void TracerParticleContainer::AdvectWithUcc (const MultiFab& Ucc, int lev, Real dt) { BL_PROFILE("TracerParticleContainer::AdvectWithUcc()"); - AMREX_ASSERT(Ucc.nGrow() > 0); + AMREX_ASSERT(Ucc.nGrowVect().allGT(0)); AMREX_ASSERT(OK(lev, lev, Ucc.nGrow()-1)); AMREX_ASSERT(lev >= 0 && lev < GetParticles().size()); AMREX_ASSERT(!Ucc.contains_nan());