aboutsummaryrefslogtreecommitdiff
path: root/Source/WarpX.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WarpX.cpp')
-rw-r--r--Source/WarpX.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp
index c3c362e4c..b1cab2aa0 100644
--- a/Source/WarpX.cpp
+++ b/Source/WarpX.cpp
@@ -163,6 +163,11 @@ WarpX::WarpX ()
current_buf.resize(nlevs_max);
charge_buf.resize(nlevs_max);
+ current_fp_owner_masks.resize(nlevs_max);
+ current_cp_owner_masks.resize(nlevs_max);
+ rho_fp_owner_masks.resize(nlevs_max);
+ rho_cp_owner_masks.resize(nlevs_max);
+
pml.resize(nlevs_max);
#ifdef WARPX_DO_ELECTROSTATIC
@@ -461,8 +466,14 @@ WarpX::ClearLevel (int lev)
Efield_cax[lev][i].reset();
Bfield_cax[lev][i].reset();
current_buf[lev][i].reset();
+
+ current_fp_owner_masks[lev][i].reset();
+ current_cp_owner_masks[lev][i].reset();
}
+ rho_fp_owner_masks[lev].reset();
+ rho_cp_owner_masks[lev].reset();
+
charge_buf[lev].reset();
current_buffer_masks[lev].reset();
@@ -555,8 +566,14 @@ WarpX::AllocLevelData (int lev, const BoxArray& ba, const DistributionMapping& d
current_fp[lev][1].reset( new MultiFab(amrex::convert(ba,jy_nodal_flag),dm,1,ngJ));
current_fp[lev][2].reset( new MultiFab(amrex::convert(ba,jz_nodal_flag),dm,1,ngJ));
+ const auto& period = Geom(lev).periodicity();
+ current_fp_owner_masks[lev][0] = std::move(current_fp[lev][0]->OwnerMask(period));
+ current_fp_owner_masks[lev][1] = std::move(current_fp[lev][1]->OwnerMask(period));
+ current_fp_owner_masks[lev][2] = std::move(current_fp[lev][2]->OwnerMask(period));
+
if (do_dive_cleaning || plot_rho){
rho_fp[lev].reset(new MultiFab(amrex::convert(ba,IntVect::TheUnitVector()),dm,2,ngRho));
+ rho_fp_owner_masks[lev] = std::move(rho_fp[lev]->OwnerMask(period));
}
if (do_dive_cleaning)
{
@@ -613,8 +630,14 @@ WarpX::AllocLevelData (int lev, const BoxArray& ba, const DistributionMapping& d
current_cp[lev][1].reset( new MultiFab(amrex::convert(cba,jy_nodal_flag),dm,1,ngJ));
current_cp[lev][2].reset( new MultiFab(amrex::convert(cba,jz_nodal_flag),dm,1,ngJ));
+ const auto& cperiod = Geom(lev).periodicity();
+ current_cp_owner_masks[lev][0] = std::move(current_cp[lev][0]->OwnerMask(cperiod));
+ current_cp_owner_masks[lev][1] = std::move(current_cp[lev][1]->OwnerMask(cperiod));
+ current_cp_owner_masks[lev][2] = std::move(current_cp[lev][2]->OwnerMask(cperiod));
+
if (do_dive_cleaning || plot_rho){
rho_cp[lev].reset(new MultiFab(amrex::convert(cba,IntVect::TheUnitVector()),dm,2,ngRho));
+ rho_cp_owner_masks[lev] = std::move(rho_cp[lev]->OwnerMask(cperiod));
}
if (do_dive_cleaning)
{