Skip to content

Commit f87dde1

Browse files
committed
ABLASTR: Coarsen Functions
Move coarsen functions to ABLASTR.
1 parent affb02a commit f87dde1

31 files changed

+529
-434
lines changed

Source/Diagnostics/BTDiagnostics.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515
#include "Diagnostics/FlushFormats/FlushFormat.H"
1616
#include "ComputeDiagFunctors/BackTransformParticleFunctor.H"
1717
#include "Utils/Algorithms/IsIn.H"
18-
#include "Utils/CoarsenIO.H"
1918
#include "Utils/Parser/ParserUtils.H"
2019
#include "Utils/TextMsg.H"
2120
#include "Utils/WarpXConst.H"
2221
#include "WarpX.H"
2322

23+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
2424
#include <ablastr/utils/Communication.H>
2525
#include <ablastr/utils/SignalHandling.H>
2626
#include <ablastr/warn_manager/WarnManager.H>
@@ -601,7 +601,7 @@ BTDiagnostics::PrepareFieldDataForOutput ()
601601
// Flattening out MF over levels
602602

603603
for (int lev = warpx.finestLevel(); lev > 0; --lev) {
604-
CoarsenIO::Coarsen( *m_cell_centered_data[lev-1], *m_cell_centered_data[lev], 0, 0,
604+
ablastr::mesh_refinement::to_cell_centered::Coarsen( *m_cell_centered_data[lev-1], *m_cell_centered_data[lev], 0, 0,
605605
m_cellcenter_varnames.size(), 0, WarpX::RefRatio(lev-1) );
606606
}
607607

Source/Diagnostics/ComputeDiagFunctors/CellCenterFunctor.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#include "CellCenterFunctor.H"
22

3-
#include "Utils/CoarsenIO.H"
43
#include "Utils/TextMsg.H"
54
#ifdef WARPX_DIM_RZ
65
# include "WarpX.H"
76
#endif
87

8+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
9+
910
#include <AMReX.H>
1011
#include <AMReX_IntVect.H>
1112
#include <AMReX_MultiFab.H>
@@ -35,14 +36,14 @@ CellCenterFunctor::operator()(amrex::MultiFab& mf_dst, int dcomp, const int /*i_
3536
// All modes > 0
3637
amrex::MultiFab::Add(mf_dst_stag, *m_mf_src, ic, 0, 1, m_mf_src->nGrowVect());
3738
}
38-
CoarsenIO::Coarsen( mf_dst, mf_dst_stag, dcomp, 0, nComp(), 0, m_crse_ratio);
39+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, mf_dst_stag, dcomp, 0, nComp(), 0, m_crse_ratio);
3940
} else {
40-
CoarsenIO::Coarsen( mf_dst, *m_mf_src, dcomp, 0, nComp(), 0, m_crse_ratio);
41+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, *m_mf_src, dcomp, 0, nComp(), 0, m_crse_ratio);
4142
}
4243
#else
4344
// In cartesian geometry, coarsen and interpolate from simulation MultiFab, m_mf_src,
4445
// to output diagnostic MultiFab, mf_dst.
45-
CoarsenIO::Coarsen( mf_dst, *m_mf_src, dcomp, 0, nComp(), mf_dst.nGrowVect(), m_crse_ratio);
46+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, *m_mf_src, dcomp, 0, nComp(), mf_dst.nGrowVect(), m_crse_ratio);
4647
amrex::ignore_unused(m_lev, m_convertRZmodes2cartesian);
4748
#endif
4849
}

Source/Diagnostics/ComputeDiagFunctors/DivBFunctor.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#include "DivBFunctor.H"
22

3-
#include "Utils/CoarsenIO.H"
43
#include "WarpX.H"
54

5+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
6+
67
#include <AMReX_IntVect.H>
78
#include <AMReX_MultiFab.H>
89

@@ -25,7 +26,7 @@ DivBFunctor::operator()(amrex::MultiFab& mf_dst, int dcomp, const int /*i_buffer
2526
amrex::MultiFab divB( warpx.boxArray(m_lev), warpx.DistributionMap(m_lev), warpx.ncomps, ng );
2627
warpx.ComputeDivB(divB, 0, m_arr_mf_src, WarpX::CellSize(m_lev) );
2728
// // Coarsen and Interpolate from divB to coarsened/reduced_domain mf_dst
28-
// CoarsenIO::Coarsen( mf_dst, divB, dcomp, 0, nComp(), 0, m_crse_ratio);
29+
// ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, divB, dcomp, 0, nComp(), 0, m_crse_ratio);
2930
#ifdef WARPX_DIM_RZ
3031
if (m_convertRZmodes2cartesian) {
3132
// In cylindrical geometry, sum real part of all modes of divE in
@@ -41,15 +42,15 @@ DivBFunctor::operator()(amrex::MultiFab& mf_dst, int dcomp, const int /*i_buffer
4142
amrex::MultiFab::Add(mf_dst_stag, divB, ic, 0, 1, divB.nGrowVect());
4243
}
4344
// TODO check if coarsening is needed, otherwise copy
44-
CoarsenIO::Coarsen( mf_dst, mf_dst_stag, dcomp, 0, nComp(), 0, m_crse_ratio);
45+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, mf_dst_stag, dcomp, 0, nComp(), 0, m_crse_ratio);
4546
} else {
4647
// TODO check if coarsening is needed, otherwise copy
47-
CoarsenIO::Coarsen( mf_dst, divB, dcomp, 0, nComp(), 0, m_crse_ratio);
48+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, divB, dcomp, 0, nComp(), 0, m_crse_ratio);
4849
}
4950
#else
5051
// In cartesian geometry, coarsen and interpolate from simulation MultiFab, divE,
5152
// to output diagnostic MultiFab, mf_dst.
52-
CoarsenIO::Coarsen( mf_dst, divB, dcomp, 0, nComp(), 0, m_crse_ratio);
53+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, divB, dcomp, 0, nComp(), 0, m_crse_ratio);
5354
amrex::ignore_unused(m_convertRZmodes2cartesian);
5455
#endif
5556
}

Source/Diagnostics/ComputeDiagFunctors/DivEFunctor.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#include "DivEFunctor.H"
22

3-
#include "Utils/CoarsenIO.H"
43
#include "Utils/TextMsg.H"
54
#ifdef WARPX_DIM_RZ
65
# include "Utils/WarpXAlgorithmSelection.H"
76
#endif
87
#include "WarpX.H"
98

9+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
10+
1011
#include <AMReX.H>
1112
#include <AMReX_BoxArray.H>
1213
#include <AMReX_IntVect.H>
@@ -55,14 +56,14 @@ DivEFunctor::operator()(amrex::MultiFab& mf_dst, const int dcomp, const int /*i_
5556
// Real part of all modes > 0
5657
amrex::MultiFab::Add(mf_dst_stag, divE, ic, 0, 1, divE.nGrowVect());
5758
}
58-
CoarsenIO::Coarsen( mf_dst, mf_dst_stag, dcomp, 0, nComp(), 0, m_crse_ratio);
59+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, mf_dst_stag, dcomp, 0, nComp(), 0, m_crse_ratio);
5960
} else {
60-
CoarsenIO::Coarsen( mf_dst, divE, dcomp, 0, nComp(), 0, m_crse_ratio);
61+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, divE, dcomp, 0, nComp(), 0, m_crse_ratio);
6162
}
6263
#else
6364
// In cartesian geometry, coarsen and interpolate from simulation MultiFab, divE,
6465
// to output diagnostic MultiFab, mf_dst.
65-
CoarsenIO::Coarsen( mf_dst, divE, dcomp, 0, nComp(), 0, m_crse_ratio);
66+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, divE, dcomp, 0, nComp(), 0, m_crse_ratio);
6667
amrex::ignore_unused(m_convertRZmodes2cartesian);
6768
#endif
6869
}

Source/Diagnostics/ComputeDiagFunctors/PartPerCellFunctor.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
#include "Diagnostics/ComputeDiagFunctors/ComputeDiagFunctor.H"
44
#include "Particles/MultiParticleContainer.H"
5-
#include "Utils/CoarsenIO.H"
65
#include "WarpX.H"
76

7+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
8+
89
#include <AMReX_BLassert.H>
910
#include <AMReX_IntVect.H>
1011
#include <AMReX_MultiFab.H>
@@ -36,5 +37,5 @@ PartPerCellFunctor::operator()(amrex::MultiFab& mf_dst, const int dcomp, const i
3637
// Compute ppc which includes a summation over all species.
3738
warpx.GetPartContainer().Increment(ppc_mf, m_lev);
3839
// Coarsen and interpolate from ppc_mf to the output diagnostic MultiFab, mf_dst.
39-
CoarsenIO::Coarsen(mf_dst, ppc_mf, dcomp, 0, nComp(), 0, m_crse_ratio);
40+
ablastr::mesh_refinement::to_cell_centered::Coarsen(mf_dst, ppc_mf, dcomp, 0, nComp(), 0, m_crse_ratio);
4041
}

Source/Diagnostics/ComputeDiagFunctors/PartPerGridFunctor.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
#include "Diagnostics/ComputeDiagFunctors/ComputeDiagFunctor.H"
44
#include "Particles/MultiParticleContainer.H"
5-
#include "Utils/CoarsenIO.H"
65
#include "WarpX.H"
76

7+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
8+
89
#include <AMReX_BLassert.H>
910
#include <AMReX_Config.H>
1011
#include <AMReX_FArrayBox.H>
@@ -48,5 +49,5 @@ PartPerGridFunctor::operator()(amrex::MultiFab& mf_dst, const int dcomp, const i
4849
}
4950

5051
// Coarsen and interpolate from ppg_mf to the output diagnostic MultiFab, mf_dst.
51-
CoarsenIO::Coarsen(mf_dst, ppg_mf, dcomp, 0, nComp(), 0, m_crse_ratio);
52+
ablastr::mesh_refinement::to_cell_centered::Coarsen(mf_dst, ppg_mf, dcomp, 0, nComp(), 0, m_crse_ratio);
5253
}

Source/Diagnostics/ComputeDiagFunctors/ParticleReductionFunctor.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
#include "Diagnostics/ComputeDiagFunctors/ComputeDiagFunctor.H"
55
#include "Particles/MultiParticleContainer.H"
66
#include "Particles/WarpXParticleContainer.H"
7-
#include "Utils/CoarsenIO.H"
87
#include "WarpX.H"
98

9+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
10+
1011
#include <AMReX_Array.H>
1112
#include <AMReX_BLassert.H>
1213
#include <AMReX_IntVect.H>
@@ -153,5 +154,5 @@ ParticleReductionFunctor::operator() (amrex::MultiFab& mf_dst, const int dcomp,
153154
}
154155

155156
// Coarsen and interpolate from ppc_mf to the output diagnostic MultiFab, mf_dst.
156-
CoarsenIO::Coarsen(mf_dst, red_mf, dcomp, 0, nComp(), 0, m_crse_ratio);
157+
ablastr::mesh_refinement::to_cell_centered::Coarsen(mf_dst, red_mf, dcomp, 0, nComp(), 0, m_crse_ratio);
157158
}

Source/Diagnostics/ComputeDiagFunctors/RhoFunctor.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88
#endif
99
#include "Particles/MultiParticleContainer.H"
1010
#include "Particles/WarpXParticleContainer.H"
11-
#include "Utils/CoarsenIO.H"
1211
#include "Utils/TextMsg.H"
1312
#include "WarpX.H"
1413

14+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
15+
1516
#include <AMReX.H>
1617
#include <AMReX_IntVect.H>
1718
#include <AMReX_MultiFab.H>
@@ -83,14 +84,14 @@ RhoFunctor::operator() ( amrex::MultiFab& mf_dst, const int dcomp, const int /*i
8384
// Real part of all modes > 0
8485
amrex::MultiFab::Add( mf_dst_stag, *rho, ic, 0, 1, rho->nGrowVect() );
8586
}
86-
CoarsenIO::Coarsen( mf_dst, mf_dst_stag, dcomp, 0, nComp(), 0, m_crse_ratio );
87+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, mf_dst_stag, dcomp, 0, nComp(), 0, m_crse_ratio );
8788
} else {
88-
CoarsenIO::Coarsen( mf_dst, *rho, dcomp, 0, nComp(), 0, m_crse_ratio );
89+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, *rho, dcomp, 0, nComp(), 0, m_crse_ratio );
8990
}
9091
#else
9192
// In Cartesian geometry, coarsen and interpolate from temporary MultiFab rho
9293
// to output diagnostic MultiFab mf_dst
93-
CoarsenIO::Coarsen( mf_dst, *rho, dcomp, 0, nComp(), mf_dst.nGrowVect(), m_crse_ratio );
94+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_dst, *rho, dcomp, 0, nComp(), mf_dst.nGrowVect(), m_crse_ratio );
9495
amrex::ignore_unused(m_convertRZmodes2cartesian);
9596
#endif
9697
}

Source/Diagnostics/FieldIO.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
*/
88
#include "FieldIO.H"
99

10-
#include "Utils/CoarsenIO.H"
1110
#include "Utils/TextMsg.H"
1211

12+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
13+
1314
#include <AMReX.H>
1415
#include <AMReX_IntVect.H>
1516
#include <AMReX_MultiFab.H>
@@ -183,9 +184,9 @@ AverageAndPackVectorField( MultiFab& mf_avg,
183184
const std::array<std::unique_ptr<MultiFab>,3> &vector_total = vector_field;
184185
#endif
185186

186-
CoarsenIO::Coarsen( mf_avg, *(vector_total[0]), dcomp , 0, 1, ngrow );
187-
CoarsenIO::Coarsen( mf_avg, *(vector_total[1]), dcomp+1, 0, 1, ngrow );
188-
CoarsenIO::Coarsen( mf_avg, *(vector_total[2]), dcomp+2, 0, 1, ngrow );
187+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_avg, *(vector_total[0]), dcomp , 0, 1, ngrow );
188+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_avg, *(vector_total[1]), dcomp+1, 0, 1, ngrow );
189+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_avg, *(vector_total[2]), dcomp+2, 0, 1, ngrow );
189190
}
190191

191192
/** \brief Take a MultiFab `scalar_field`
@@ -220,7 +221,7 @@ AverageAndPackScalarField (MultiFab& mf_avg,
220221
MultiFab::Copy( mf_avg, *scalar_total, 0, dcomp, 1, ngrow);
221222
} else if ( scalar_total->is_nodal() ){
222223
// - Fully nodal
223-
CoarsenIO::Coarsen( mf_avg, *scalar_total, dcomp, 0, 1, ngrow );
224+
ablastr::mesh_refinement::to_cell_centered::Coarsen( mf_avg, *scalar_total, dcomp, 0, 1, ngrow );
224225
} else {
225226
amrex::Abort(Utils::TextMsg::Err("Unknown staggering."));
226227
}

Source/Diagnostics/ReducedDiags/FieldMaximum.cpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77

88
#include "FieldMaximum.H"
99

10-
#include "Utils/CoarsenIO.H"
1110
#include "Utils/TextMsg.H"
1211
#include "WarpX.H"
1312

13+
#include <ablastr/mesh_refinement/coarsenToCellCentered.H>
14+
1415
#include <AMReX_Algorithm.H>
1516
#include <AMReX_Array.H>
1617
#include <AMReX_Array4.H>
@@ -192,64 +193,64 @@ void FieldMaximum::ComputeDiags (int step)
192193
reduceEx_op.eval(box, reduceEx_data,
193194
[=] AMREX_GPU_DEVICE (int i, int j, int k) -> ReduceTuple
194195
{
195-
const Real Ex_interp = CoarsenIO::Interp(arrEx, Extype, cellCenteredtype,
196+
const Real Ex_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrEx, Extype, cellCenteredtype,
196197
reduction_coarsening_ratio, i, j, k, reduction_comp);
197198
return amrex::Math::abs(Ex_interp);
198199
});
199200
reduceEy_op.eval(box, reduceEy_data,
200201
[=] AMREX_GPU_DEVICE (int i, int j, int k) -> ReduceTuple
201202
{
202-
const Real Ey_interp = CoarsenIO::Interp(arrEy, Eytype, cellCenteredtype,
203+
const Real Ey_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrEy, Eytype, cellCenteredtype,
203204
reduction_coarsening_ratio, i, j, k, reduction_comp);
204205
return amrex::Math::abs(Ey_interp);
205206
});
206207
reduceEz_op.eval(box, reduceEz_data,
207208
[=] AMREX_GPU_DEVICE (int i, int j, int k) -> ReduceTuple
208209
{
209-
const Real Ez_interp = CoarsenIO::Interp(arrEz, Eztype, cellCenteredtype,
210+
const Real Ez_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrEz, Eztype, cellCenteredtype,
210211
reduction_coarsening_ratio, i, j, k, reduction_comp);
211212
return amrex::Math::abs(Ez_interp);
212213
});
213214
reduceBx_op.eval(box, reduceBx_data,
214215
[=] AMREX_GPU_DEVICE (int i, int j, int k) -> ReduceTuple
215216
{
216-
const Real Bx_interp = CoarsenIO::Interp(arrBx, Bxtype, cellCenteredtype,
217+
const Real Bx_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrBx, Bxtype, cellCenteredtype,
217218
reduction_coarsening_ratio, i, j, k, reduction_comp);
218219
return amrex::Math::abs(Bx_interp);
219220
});
220221
reduceBy_op.eval(box, reduceBy_data,
221222
[=] AMREX_GPU_DEVICE (int i, int j, int k) -> ReduceTuple
222223
{
223-
const Real By_interp = CoarsenIO::Interp(arrBy, Bytype, cellCenteredtype,
224+
const Real By_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrBy, Bytype, cellCenteredtype,
224225
reduction_coarsening_ratio, i, j, k, reduction_comp);
225226
return amrex::Math::abs(By_interp);
226227
});
227228
reduceBz_op.eval(box, reduceBz_data,
228229
[=] AMREX_GPU_DEVICE (int i, int j, int k) -> ReduceTuple
229230
{
230-
const Real Bz_interp = CoarsenIO::Interp(arrBz, Bztype, cellCenteredtype,
231+
const Real Bz_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrBz, Bztype, cellCenteredtype,
231232
reduction_coarsening_ratio, i, j, k, reduction_comp);
232233
return amrex::Math::abs(Bz_interp);
233234
});
234235
reduceE_op.eval(box, reduceE_data,
235236
[=] AMREX_GPU_DEVICE (int i, int j, int k) -> ReduceTuple
236237
{
237-
const Real Ex_interp = CoarsenIO::Interp(arrEx, Extype, cellCenteredtype,
238+
const Real Ex_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrEx, Extype, cellCenteredtype,
238239
reduction_coarsening_ratio, i, j, k, reduction_comp);
239-
const Real Ey_interp = CoarsenIO::Interp(arrEy, Eytype, cellCenteredtype,
240+
const Real Ey_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrEy, Eytype, cellCenteredtype,
240241
reduction_coarsening_ratio, i, j, k, reduction_comp);
241-
const Real Ez_interp = CoarsenIO::Interp(arrEz, Eztype, cellCenteredtype,
242+
const Real Ez_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrEz, Eztype, cellCenteredtype,
242243
reduction_coarsening_ratio, i, j, k, reduction_comp);
243244
return Ex_interp*Ex_interp + Ey_interp*Ey_interp + Ez_interp*Ez_interp;
244245
});
245246
reduceB_op.eval(box, reduceB_data,
246247
[=] AMREX_GPU_DEVICE (int i, int j, int k) -> ReduceTuple
247248
{
248-
const Real Bx_interp = CoarsenIO::Interp(arrBx, Bxtype, cellCenteredtype,
249+
const Real Bx_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrBx, Bxtype, cellCenteredtype,
249250
reduction_coarsening_ratio, i, j, k, reduction_comp);
250-
const Real By_interp = CoarsenIO::Interp(arrBy, Bytype, cellCenteredtype,
251+
const Real By_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrBy, Bytype, cellCenteredtype,
251252
reduction_coarsening_ratio, i, j, k, reduction_comp);
252-
const Real Bz_interp = CoarsenIO::Interp(arrBz, Bztype, cellCenteredtype,
253+
const Real Bz_interp = ablastr::mesh_refinement::to_cell_centered::Interp(arrBz, Bztype, cellCenteredtype,
253254
reduction_coarsening_ratio, i, j, k, reduction_comp);
254255
return Bx_interp*Bx_interp + By_interp*By_interp + Bz_interp*Bz_interp;
255256
});

0 commit comments

Comments
 (0)