Skip to content

Commit f4f3ea8

Browse files
Generalize diffmultifab routine to allow for different BoxArrays covering the same region (#4836)
--------- Co-authored-by: Weiqun Zhang <[email protected]>
1 parent 80e2a18 commit f4f3ea8

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

Tools/C_util/DiffMultiFab/diffmultifab.cpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,14 @@ int main(int argc, char* argv[])
6060
if (ngrow > mf2.nGrow()) {
6161
Abort(" ngrow bigger than infile2's ngrow! ");
6262
}
63-
if (mf1.boxArray() != mf2.boxArray()) {
64-
Abort("The two multifabs have different BoxArray");
63+
bool same_boxarray = mf1.boxArray() == mf2.boxArray();
64+
if (! same_boxarray) {
65+
if (ParallelDescriptor::IOProcessor()) {
66+
Warning("The two multifabs have different BoxArrays.");
67+
}
68+
AMREX_ALWAYS_ASSERT(mf1.boxArray().ixType() == mf2.boxArray().ixType() &&
69+
mf1.boxArray().contains(mf2.boxArray()) &&
70+
mf2.boxArray().contains(mf1.boxArray()));
6571
}
6672

6773
const int ncomp = mf1.nComp();
@@ -78,16 +84,23 @@ int main(int argc, char* argv[])
7884
mf2_max[icomp] = mf2.max(icomp,ngrow);
7985
}
8086

81-
MultiFab mfdiff(mf1.boxArray(), mf2.DistributionMap(), ncomp, ngrow);
87+
MultiFab mfdiff;
88+
if (same_boxarray) {
89+
mfdiff.define(mf1.boxArray(), mf2.DistributionMap(), ncomp, ngrow);
8290
#ifdef AMREX_USE_MPI
83-
{
84-
MultiFab tmp(mf1.boxArray(), mf1.DistributionMap(), ncomp, ngrow);
85-
MultiFab::Copy(tmp, mf1, 0, 0, ncomp, ngrow);
86-
mfdiff.Redistribute(tmp, 0, 0, ncomp, IntVect(ngrow));
87-
}
91+
{
92+
MultiFab tmp(mf1.boxArray(), mf1.DistributionMap(), ncomp, ngrow);
93+
MultiFab::Copy(tmp, mf1, 0, 0, ncomp, ngrow);
94+
mfdiff.Redistribute(tmp, 0, 0, ncomp, IntVect(ngrow));
95+
}
8896
#else
89-
MultiFab::Copy(mfdiff, mf1, 0, 0, ncomp, ngrow);
97+
MultiFab::Copy(mfdiff, mf1, 0, 0, ncomp, ngrow);
9098
#endif
99+
} else {
100+
mfdiff.define(mf2.boxArray(), mf2.DistributionMap(), ncomp, ngrow);
101+
mfdiff.ParallelCopy(mf1, 0, 0, ncomp, ngrow, ngrow);
102+
}
103+
91104
MultiFab::Subtract(mfdiff, mf2, 0, 0, ncomp, ngrow);
92105

93106
for (int icomp = 0; icomp < ncomp; ++icomp) {

0 commit comments

Comments
 (0)