diff options
Diffstat (limited to 'Source/WarpX.cpp')
-rw-r--r-- | Source/WarpX.cpp | 23 |
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) { |