From 3789855545c6ce8c8493971d67af4b5cf50d9c6e Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 25 Mar 2024 14:21:35 -0700 Subject: [PATCH 1/5] `MultiFab::copy()` Create a copy of this MultiFab, using the same Arena. --- Src/Base/AMReX_MultiFab.H | 6 ++++++ Src/Base/AMReX_MultiFab.cpp | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/Src/Base/AMReX_MultiFab.H b/Src/Base/AMReX_MultiFab.H index b2fc9c80a1f..005a3dd154a 100644 --- a/Src/Base/AMReX_MultiFab.H +++ b/Src/Base/AMReX_MultiFab.H @@ -486,6 +486,12 @@ public: int dstcomp, int numcomp, const IntVect& nghost); + + + /** Create a copy of this MultiFab, using the same Arena. + */ + MultiFab copy (); + /** * \brief Copy from src to dst including nghost ghost cells. * The two MultiFabs MUST have the same underlying BoxArray. diff --git a/Src/Base/AMReX_MultiFab.cpp b/Src/Base/AMReX_MultiFab.cpp index 15f9490b1c2..072cbf074c5 100644 --- a/Src/Base/AMReX_MultiFab.cpp +++ b/Src/Base/AMReX_MultiFab.cpp @@ -167,6 +167,27 @@ MultiFab::Add (MultiFab& dst, const MultiFab& src, amrex::Add(dst, src, srccomp, dstcomp, numcomp, nghost); } +MultiFab +MultiFab::copy () +{ + auto mf = MultiFab( + this->boxArray(), + this->DistributionMap(), + this->nComp(), + this->nGrowVect(), + MFInfo().SetArena(this->arena()) + ); + MultiFab::Copy( + mf, + *this, + 0, + 0, + this->nComp(), + this->nGrowVect() + ); + return mf; +} + void MultiFab::Copy (MultiFab& dst, const MultiFab& src, int srccomp, int dstcomp, int numcomp, int nghost) From b7fdbf3d413c9a8324b3a12fe1a2a64218359bd8 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 25 Mar 2024 21:50:43 -0700 Subject: [PATCH 2/5] Conserve factory, too. Co-authored-by: Weiqun Zhang --- Src/Base/AMReX_MultiFab.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Src/Base/AMReX_MultiFab.cpp b/Src/Base/AMReX_MultiFab.cpp index 072cbf074c5..6e61ee82999 100644 --- a/Src/Base/AMReX_MultiFab.cpp +++ b/Src/Base/AMReX_MultiFab.cpp @@ -175,7 +175,8 @@ MultiFab::copy () this->DistributionMap(), this->nComp(), this->nGrowVect(), - MFInfo().SetArena(this->arena()) + MFInfo().SetArena(this->arena()), + this->Factory() ); MultiFab::Copy( mf, From 5cd477f3f4e13f9d00262c37f9520acdf33c0306 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 25 Mar 2024 22:13:21 -0700 Subject: [PATCH 3/5] Keep `FabArray::copy` Overloads --- Src/Base/AMReX_MultiFab.H | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Src/Base/AMReX_MultiFab.H b/Src/Base/AMReX_MultiFab.H index 005a3dd154a..a149e2930fd 100644 --- a/Src/Base/AMReX_MultiFab.H +++ b/Src/Base/AMReX_MultiFab.H @@ -488,6 +488,8 @@ public: const IntVect& nghost); + using FabArray::copy; + /** Create a copy of this MultiFab, using the same Arena. */ MultiFab copy (); From a1686f357772704ffeff9fce6cdc8cd8c2b31638 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Wed, 27 Mar 2024 15:09:39 -0700 Subject: [PATCH 4/5] Rename: `deepCopy` --- Src/Base/AMReX_MultiFab.H | 10 +++++----- Src/Base/AMReX_MultiFab.cpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Src/Base/AMReX_MultiFab.H b/Src/Base/AMReX_MultiFab.H index a149e2930fd..6cb4c46e7df 100644 --- a/Src/Base/AMReX_MultiFab.H +++ b/Src/Base/AMReX_MultiFab.H @@ -487,12 +487,12 @@ public: int numcomp, const IntVect& nghost); - - using FabArray::copy; - - /** Create a copy of this MultiFab, using the same Arena. + /** Create a deep copy of this MultiFab and its data. + * + * This uses the same arena and factory in the copy and copies + * all data. */ - MultiFab copy (); + MultiFab deepCopy (); /** * \brief Copy from src to dst including nghost ghost cells. diff --git a/Src/Base/AMReX_MultiFab.cpp b/Src/Base/AMReX_MultiFab.cpp index 6e61ee82999..41ec0093b62 100644 --- a/Src/Base/AMReX_MultiFab.cpp +++ b/Src/Base/AMReX_MultiFab.cpp @@ -168,7 +168,7 @@ MultiFab::Add (MultiFab& dst, const MultiFab& src, } MultiFab -MultiFab::copy () +MultiFab::deepCopy () { auto mf = MultiFab( this->boxArray(), From db8a619f517f18d6efdfd25cc7758cbab757f39c Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Wed, 27 Mar 2024 18:36:55 -0700 Subject: [PATCH 5/5] Apply suggestions from code review --- Src/Base/AMReX_MultiFab.H | 2 +- Src/Base/AMReX_MultiFab.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Src/Base/AMReX_MultiFab.H b/Src/Base/AMReX_MultiFab.H index 6cb4c46e7df..8ec62700cc1 100644 --- a/Src/Base/AMReX_MultiFab.H +++ b/Src/Base/AMReX_MultiFab.H @@ -492,7 +492,7 @@ public: * This uses the same arena and factory in the copy and copies * all data. */ - MultiFab deepCopy (); + [[nodiscard]] MultiFab deepCopy () const; /** * \brief Copy from src to dst including nghost ghost cells. diff --git a/Src/Base/AMReX_MultiFab.cpp b/Src/Base/AMReX_MultiFab.cpp index 41ec0093b62..2a80123836b 100644 --- a/Src/Base/AMReX_MultiFab.cpp +++ b/Src/Base/AMReX_MultiFab.cpp @@ -168,9 +168,9 @@ MultiFab::Add (MultiFab& dst, const MultiFab& src, } MultiFab -MultiFab::deepCopy () +MultiFab::deepCopy () const { - auto mf = MultiFab( + MultiFab mf( this->boxArray(), this->DistributionMap(), this->nComp(),