diff options
Diffstat (limited to 'Source/Parallelization')
-rw-r--r-- | Source/Parallelization/GuardCellManager.cpp | 8 | ||||
-rw-r--r-- | Source/Parallelization/WarpXComm.cpp | 28 | ||||
-rw-r--r-- | Source/Parallelization/WarpXComm_K.H | 241 | ||||
-rw-r--r-- | Source/Parallelization/WarpXRegrid.cpp | 6 |
4 files changed, 148 insertions, 135 deletions
diff --git a/Source/Parallelization/GuardCellManager.cpp b/Source/Parallelization/GuardCellManager.cpp index 9a5c07b4a..a4547c25c 100644 --- a/Source/Parallelization/GuardCellManager.cpp +++ b/Source/Parallelization/GuardCellManager.cpp @@ -82,10 +82,10 @@ guardCellManager::Init ( // interpolation from coarse grid to fine grid. int ngx = (ngx_tmp % 2) ? ngx_tmp+1 : ngx_tmp; // Always even number int ngy = (ngy_tmp % 2) ? ngy_tmp+1 : ngy_tmp; // Always even number - int ngz_nonci = (ngz_tmp % 2) ? ngz_tmp+1 : ngz_tmp; // Always even number + const int ngz_nonci = (ngz_tmp % 2) ? ngz_tmp+1 : ngz_tmp; // Always even number int ngz; if (do_fdtd_nci_corr) { - int ng = ngz_tmp + nci_corr_stencil; + const int ng = ngz_tmp + nci_corr_stencil; ngz = (ng % 2) ? ng+1 : ng; } else { ngz = ngz_nonci; @@ -104,7 +104,7 @@ guardCellManager::Init ( WARPX_ALWAYS_ASSERT_WITH_MESSAGE(ref_ratios.size() <= 1, "The number of grow cells for the moving window currently assumes 2 levels max."); const int nlevs = ref_ratios.size()+1; - int max_r = (nlevs > 1) ? ref_ratios[0][moving_window_dir] : 2; + const int max_r = (nlevs > 1) ? ref_ratios[0][moving_window_dir] : 2; ngx = std::max(ngx,max_r); ngy = std::max(ngy,max_r); @@ -202,7 +202,7 @@ guardCellManager::Init ( int ngFFt_y = (grid_type == GridType::Collocated) ? noy_fft : noy_fft / 2; int ngFFt_z = (grid_type == GridType::Collocated || galilean) ? noz_fft : noz_fft / 2; - ParmParse pp_psatd("psatd"); + const ParmParse pp_psatd("psatd"); utils::parser::queryWithParser(pp_psatd, "nx_guard", ngFFt_x); utils::parser::queryWithParser(pp_psatd, "ny_guard", ngFFt_y); utils::parser::queryWithParser(pp_psatd, "nz_guard", ngFFt_z); diff --git a/Source/Parallelization/WarpXComm.cpp b/Source/Parallelization/WarpXComm.cpp index 538aa888b..d0567fd39 100644 --- a/Source/Parallelization/WarpXComm.cpp +++ b/Source/Parallelization/WarpXComm.cpp @@ -111,7 +111,7 @@ WarpX::UpdateAuxilaryDataStagToNodal () // Loop includes ghost cells (`growntilebox`) // (input arrays will be padded with zeros beyond ghost cells // for out-of-bound accesses due to large-stencil operations) - Box bx = mfi.growntilebox(); + const Box bx = mfi.growntilebox(); // Order of finite-order centering of fields const int fg_nox = WarpX::field_centering_nox; @@ -162,7 +162,7 @@ WarpX::UpdateAuxilaryDataStagToNodal () *Bfield_cax[lev][i], amrex::make_alias, 0, 1); } } else { - IntVect ngtmp = Bfield_aux[lev-1][0]->nGrowVect(); + const IntVect ngtmp = Bfield_aux[lev-1][0]->nGrowVect(); for (int i = 0; i < 3; ++i) { Btmp[i] = std::make_unique<MultiFab>(cnba, dm, 1, ngtmp); } @@ -172,7 +172,7 @@ WarpX::UpdateAuxilaryDataStagToNodal () Btmp[2]->setVal(0.0); // ParallelCopy from coarse level for (int i = 0; i < 3; ++i) { - IntVect ng = Btmp[i]->nGrowVect(); + const IntVect ng = Btmp[i]->nGrowVect(); // Guard cells may not be up to date beyond ng_FieldGather const amrex::IntVect& ng_src = guard_cells.ng_FieldGather; // Copy Bfield_aux to Btmp, using up to ng_src (=ng_FieldGather) guard cells from @@ -219,7 +219,7 @@ WarpX::UpdateAuxilaryDataStagToNodal () *Efield_cax[lev][i], amrex::make_alias, 0, 1); } } else { - IntVect ngtmp = Efield_aux[lev-1][0]->nGrowVect(); + const IntVect ngtmp = Efield_aux[lev-1][0]->nGrowVect(); for (int i = 0; i < 3; ++i) { Etmp[i] = std::make_unique<MultiFab>( cnba, dm, 1, ngtmp); @@ -230,7 +230,7 @@ WarpX::UpdateAuxilaryDataStagToNodal () Etmp[2]->setVal(0.0); // ParallelCopy from coarse level for (int i = 0; i < 3; ++i) { - IntVect ng = Etmp[i]->nGrowVect(); + const IntVect ng = Etmp[i]->nGrowVect(); // Guard cells may not be up to date beyond ng_FieldGather const amrex::IntVect& ng_src = guard_cells.ng_FieldGather; // Copy Efield_aux to Etmp, using up to ng_src (=ng_FieldGather) guard cells from @@ -449,7 +449,7 @@ void WarpX::UpdateCurrentNodalToStag (amrex::MultiFab& dst, amrex::MultiFab cons // Loop over full box including ghost cells // (input arrays will be padded with zeros beyond ghost cells // for out-of-bound accesses due to large-stencil operations) - Box bx = mfi.growntilebox(); + const Box bx = mfi.growntilebox(); amrex::Array4<amrex::Real const> const& src_arr = src.const_array(mfi); amrex::Array4<amrex::Real> const& dst_arr = dst.array(mfi); @@ -557,7 +557,7 @@ WarpX::FillBoundaryE (const int lev, const PatchType patch_type, const amrex::In { if (pml[lev] && pml[lev]->ok()) { - std::array<amrex::MultiFab*,3> mf_pml = + const std::array<amrex::MultiFab*,3> mf_pml = (patch_type == PatchType::fine) ? pml[lev]->GetE_fp() : pml[lev]->GetE_cp(); pml[lev]->Exchange(mf_pml, mf, patch_type, do_pml_in_domain); @@ -614,7 +614,7 @@ WarpX::FillBoundaryB (const int lev, const PatchType patch_type, const amrex::In { if (pml[lev] && pml[lev]->ok()) { - std::array<amrex::MultiFab*,3> mf_pml = + const std::array<amrex::MultiFab*,3> mf_pml = (patch_type == PatchType::fine) ? pml[lev]->GetB_fp() : pml[lev]->GetB_cp(); pml[lev]->Exchange(mf_pml, mf, patch_type, do_pml_in_domain); @@ -660,7 +660,7 @@ WarpX::FillBoundaryE_avg (int lev, PatchType patch_type, IntVect ng) const amrex::Periodicity& period = Geom(lev).periodicity(); if ( safe_guard_cells ){ - Vector<MultiFab*> mf{Efield_avg_fp[lev][0].get(),Efield_avg_fp[lev][1].get(),Efield_avg_fp[lev][2].get()}; + const Vector<MultiFab*> mf{Efield_avg_fp[lev][0].get(),Efield_avg_fp[lev][1].get(),Efield_avg_fp[lev][2].get()}; ablastr::utils::communication::FillBoundary(mf, WarpX::do_single_precision_comms, period); } else { WARPX_ALWAYS_ASSERT_WITH_MESSAGE( @@ -680,7 +680,7 @@ WarpX::FillBoundaryE_avg (int lev, PatchType patch_type, IntVect ng) const amrex::Periodicity& cperiod = Geom(lev-1).periodicity(); if ( safe_guard_cells ) { - Vector<MultiFab*> mf{Efield_avg_cp[lev][0].get(),Efield_avg_cp[lev][1].get(),Efield_avg_cp[lev][2].get()}; + const Vector<MultiFab*> mf{Efield_avg_cp[lev][0].get(),Efield_avg_cp[lev][1].get(),Efield_avg_cp[lev][2].get()}; ablastr::utils::communication::FillBoundary(mf, WarpX::do_single_precision_comms, cperiod); } else { @@ -713,7 +713,7 @@ WarpX::FillBoundaryB_avg (int lev, PatchType patch_type, IntVect ng) } const amrex::Periodicity& period = Geom(lev).periodicity(); if ( safe_guard_cells ) { - Vector<MultiFab*> mf{Bfield_avg_fp[lev][0].get(),Bfield_avg_fp[lev][1].get(),Bfield_avg_fp[lev][2].get()}; + const Vector<MultiFab*> mf{Bfield_avg_fp[lev][0].get(),Bfield_avg_fp[lev][1].get(),Bfield_avg_fp[lev][2].get()}; ablastr::utils::communication::FillBoundary(mf, WarpX::do_single_precision_comms, period); } else { WARPX_ALWAYS_ASSERT_WITH_MESSAGE( @@ -733,7 +733,7 @@ WarpX::FillBoundaryB_avg (int lev, PatchType patch_type, IntVect ng) const amrex::Periodicity& cperiod = Geom(lev-1).periodicity(); if ( safe_guard_cells ){ - Vector<MultiFab*> mf{Bfield_avg_cp[lev][0].get(),Bfield_avg_cp[lev][1].get(),Bfield_avg_cp[lev][2].get()}; + const Vector<MultiFab*> mf{Bfield_avg_cp[lev][0].get(),Bfield_avg_cp[lev][1].get(),Bfield_avg_cp[lev][2].get()}; ablastr::utils::communication::FillBoundary(mf, WarpX::do_single_precision_comms, cperiod); } else { WARPX_ALWAYS_ASSERT_WITH_MESSAGE( @@ -1153,7 +1153,7 @@ void WarpX::SumBoundaryJ ( { amrex::MultiFab& J = *current[lev][idim]; - amrex::IntVect ng = J.nGrowVect(); + const amrex::IntVect ng = J.nGrowVect(); amrex::IntVect ng_depos_J = get_ng_depos_J(); if (WarpX::do_current_centering) @@ -1231,7 +1231,7 @@ void WarpX::AddCurrentFromFineLevelandSumBoundary ( J_fp[lev][idim]->DistributionMap(), J_fp[lev][idim]->nComp(), 0); mf.setVal(0.0); - IntVect ng = J_cp[lev+1][idim]->nGrowVect(); + const IntVect ng = J_cp[lev+1][idim]->nGrowVect(); if (use_filter && current_buf[lev+1][idim]) { diff --git a/Source/Parallelization/WarpXComm_K.H b/Source/Parallelization/WarpXComm_K.H index afe0617a8..269827496 100644 --- a/Source/Parallelization/WarpXComm_K.H +++ b/Source/Parallelization/WarpXComm_K.H @@ -53,9 +53,9 @@ void warpx_interp (int j, int k, int l, // Interpolate from coarse grid to fine grid using 2 points // with weights depending on the distance, for both nodal and cell-centered grids - amrex::Real hj = (sj == 0) ? 0.5_rt : 0._rt; - amrex::Real hk = (sk == 0) ? 0.5_rt : 0._rt; - amrex::Real hl = (sl == 0) ? 0.5_rt : 0._rt; + const amrex::Real hj = (sj == 0) ? 0.5_rt : 0._rt; + const amrex::Real hk = (sk == 0) ? 0.5_rt : 0._rt; + const amrex::Real hl = (sl == 0) ? 0.5_rt : 0._rt; amrex::Real res = 0.0_rt; @@ -87,54 +87,56 @@ void warpx_interp_nd_bfield_x (int j, int k, int l, return Bxf.contains(jj,kk,ll) ? Bxf(jj,kk,ll) : 0.0_rt; }; - int jg = amrex::coarsen(j,2); - Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt; - Real owx = 1.0_rt-wx; + const int jg = amrex::coarsen(j,2); + const Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt; + const Real owx = 1.0_rt-wx; - int kg = amrex::coarsen(k,2); - Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt; - Real owy = 1.0_rt-wy; + const int kg = amrex::coarsen(k,2); + Real wy = 0.0_rt; + Real owy = 0.0_rt; + wy = (k == kg*2) ? 0.0_rt : 0.5_rt; + owy = 1.0_rt-wy; #if defined(WARPX_DIM_1D_Z) // interp from coarse nodal to fine nodal - Real bg = owx * Bxg(jg ,0,0) + const Real bg = owx * Bxg(jg ,0,0) + wx * Bxg(jg+1,0,0); // interp from coarse staggered to fine nodal - Real bc = owx * Bxc(jg ,0,0) + const Real bc = owx * Bxc(jg ,0,0) + wx * Bxc(jg+1,0,0); // interp from fine staggered to fine nodal - Real bf = 0.5_rt*(Bxf_zeropad(j-1,0,0) + Bxf_zeropad(j,0,0)); + const Real bf = 0.5_rt*(Bxf_zeropad(j-1,0,0) + Bxf_zeropad(j,0,0)); amrex::ignore_unused(owy); #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) // interp from coarse nodal to fine nodal - Real bg = owx * owy * Bxg(jg ,kg ,0) + const Real bg = owx * owy * Bxg(jg ,kg ,0) + owx * wy * Bxg(jg ,kg+1,0) + wx * owy * Bxg(jg+1,kg ,0) + wx * wy * Bxg(jg+1,kg+1,0); // interp from coarse staggered to fine nodal wy = 0.5_rt-wy; owy = 1.0_rt-wy; - Real bc = owx * owy * Bxc(jg ,kg ,0) + const Real bc = owx * owy * Bxc(jg ,kg ,0) + owx * wy * Bxc(jg ,kg-1,0) + wx * owy * Bxc(jg+1,kg ,0) + wx * wy * Bxc(jg+1,kg-1,0); // interp from fine staggered to fine nodal - Real bf = 0.5_rt*(Bxf_zeropad(j,k-1,0) + Bxf_zeropad(j,k,0)); + const Real bf = 0.5_rt*(Bxf_zeropad(j,k-1,0) + Bxf_zeropad(j,k,0)); #else - int lg = amrex::coarsen(l,2); + const int lg = amrex::coarsen(l,2); Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt; Real owz = 1.0_rt-wz; // interp from coarse nodal to fine nodal - Real bg = owx * owy * owz * Bxg(jg ,kg ,lg ) + const Real bg = owx * owy * owz * Bxg(jg ,kg ,lg ) + wx * owy * owz * Bxg(jg+1,kg ,lg ) + owx * wy * owz * Bxg(jg ,kg+1,lg ) + wx * wy * owz * Bxg(jg+1,kg+1,lg ) @@ -146,7 +148,7 @@ void warpx_interp_nd_bfield_x (int j, int k, int l, // interp from coarse staggered to fine nodal wy = 0.5_rt-wy; owy = 1.0_rt-wy; wz = 0.5_rt-wz; owz = 1.0_rt-wz; - Real bc = owx * owy * owz * Bxc(jg ,kg ,lg ) + const Real bc = owx * owy * owz * Bxc(jg ,kg ,lg ) + wx * owy * owz * Bxc(jg+1,kg ,lg ) + owx * wy * owz * Bxc(jg ,kg-1,lg ) + wx * wy * owz * Bxc(jg+1,kg-1,lg ) @@ -156,7 +158,7 @@ void warpx_interp_nd_bfield_x (int j, int k, int l, + wx * wy * wz * Bxc(jg+1,kg-1,lg-1); // interp from fine stagged to fine nodal - Real bf = 0.25_rt*(Bxf_zeropad(j,k-1,l-1) + Bxf_zeropad(j,k,l-1) + Bxf_zeropad(j,k-1,l) + Bxf_zeropad(j,k,l)); + const Real bf = 0.25_rt*(Bxf_zeropad(j,k-1,l-1) + Bxf_zeropad(j,k,l-1) + Bxf_zeropad(j,k-1,l) + Bxf_zeropad(j,k,l)); #endif Bxa(j,k,l) = bg + (bf-bc); @@ -177,32 +179,35 @@ void warpx_interp_nd_bfield_y (int j, int k, int l, return Byf.contains(jj,kk,ll) ? Byf(jj,kk,ll) : 0.0_rt; }; - int jg = amrex::coarsen(j,2); - Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt; - Real owx = 1.0_rt-wx; + const int jg = amrex::coarsen(j,2); + Real wx, owx; + wx = (j == jg*2) ? 0.0_rt : 0.5_rt; + owx = 1.0_rt-wx; - int kg = amrex::coarsen(k,2); - Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt; - Real owy = 1.0_rt-wy; + const int kg = amrex::coarsen(k,2); + Real wy = 0.0_rt; + Real owy = 0.0_rt; + wy = (k == kg*2) ? 0.0_rt : 0.5_rt; + owy = 1.0_rt-wy; #if defined(WARPX_DIM_1D_Z) // interp from coarse nodal to fine nodal - Real bg = owx * Byg(jg ,0,0) + const Real bg = owx * Byg(jg ,0,0) + wx * Byg(jg+1,0,0); // interp from coarse staggered to fine nodal - Real bc = owx * Byc(jg ,0,0) + const Real bc = owx * Byc(jg ,0,0) + wx * Byc(jg+1,0,0); // interp from fine staggered to fine nodal - Real bf = 0.5_rt*(Byf_zeropad(j-1,0,0) + Byf_zeropad(j,0,0)); + const Real bf = 0.5_rt*(Byf_zeropad(j-1,0,0) + Byf_zeropad(j,0,0)); amrex::ignore_unused(owy); #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) // interp from coarse nodal to fine nodal - Real bg = owx * owy * Byg(jg ,kg ,0) + const Real bg = owx * owy * Byg(jg ,kg ,0) + owx * wy * Byg(jg ,kg+1,0) + wx * owy * Byg(jg+1,kg ,0) + wx * wy * Byg(jg+1,kg+1,0); @@ -210,22 +215,22 @@ void warpx_interp_nd_bfield_y (int j, int k, int l, // interp from coarse stagged (cell-centered for By) to fine nodal wx = 0.5_rt-wx; owx = 1.0_rt-wx; wy = 0.5_rt-wy; owy = 1.0_rt-wy; - Real bc = owx * owy * Byc(jg ,kg ,0) + const Real bc = owx * owy * Byc(jg ,kg ,0) + owx * wy * Byc(jg ,kg-1,0) + wx * owy * Byc(jg-1,kg ,0) + wx * wy * Byc(jg-1,kg-1,0); // interp form fine stagger (cell-centered for By) to fine nodal - Real bf = 0.25_rt*(Byf_zeropad(j,k,0) + Byf_zeropad(j-1,k,0) + Byf_zeropad(j,k-1,0) + Byf_zeropad(j-1,k-1,0)); + const Real bf = 0.25_rt*(Byf_zeropad(j,k,0) + Byf_zeropad(j-1,k,0) + Byf_zeropad(j,k-1,0) + Byf_zeropad(j-1,k-1,0)); #else - int lg = amrex::coarsen(l,2); + const int lg = amrex::coarsen(l,2); Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt; Real owz = 1.0_rt-wz; // interp from coarse nodal to fine nodal - Real bg = owx * owy * owz * Byg(jg ,kg ,lg ) + const Real bg = owx * owy * owz * Byg(jg ,kg ,lg ) + wx * owy * owz * Byg(jg+1,kg ,lg ) + owx * wy * owz * Byg(jg ,kg+1,lg ) + wx * wy * owz * Byg(jg+1,kg+1,lg ) @@ -237,7 +242,7 @@ void warpx_interp_nd_bfield_y (int j, int k, int l, // interp from coarse staggered to fine nodal wx = 0.5_rt-wx; owx = 1.0_rt-wx; wz = 0.5_rt-wz; owz = 1.0_rt-wz; - Real bc = owx * owy * owz * Byc(jg ,kg ,lg ) + const Real bc = owx * owy * owz * Byc(jg ,kg ,lg ) + wx * owy * owz * Byc(jg-1,kg ,lg ) + owx * wy * owz * Byc(jg ,kg+1,lg ) + wx * wy * owz * Byc(jg-1,kg+1,lg ) @@ -247,7 +252,7 @@ void warpx_interp_nd_bfield_y (int j, int k, int l, + wx * wy * wz * Byc(jg-1,kg+1,lg-1); // interp from fine stagged to fine nodal - Real bf = 0.25_rt*(Byf_zeropad(j-1,k,l-1) + Byf_zeropad(j,k,l-1) + Byf_zeropad(j-1,k,l) + Byf_zeropad(j,k,l)); + const Real bf = 0.25_rt*(Byf_zeropad(j-1,k,l-1) + Byf_zeropad(j,k,l-1) + Byf_zeropad(j-1,k,l) + Byf_zeropad(j,k,l)); #endif @@ -269,54 +274,57 @@ void warpx_interp_nd_bfield_z (int j, int k, int l, return Bzf.contains(jj,kk,ll) ? Bzf(jj,kk,ll) : 0.0_rt; }; - int jg = amrex::coarsen(j,2); - Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt; - Real owx = 1.0_rt-wx; + const int jg = amrex::coarsen(j,2); + Real wx, owx; + wx = (j == jg*2) ? 0.0_rt : 0.5_rt; + owx = 1.0_rt-wx; - int kg = amrex::coarsen(k,2); - Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt; - Real owy = 1.0_rt-wy; + const int kg = amrex::coarsen(k,2); + Real wy = 0.0_rt; + Real owy = 0.0_rt; + wy = (k == kg*2) ? 0.0_rt : 0.5_rt; + owy = 1.0_rt-wy; #if defined(WARPX_DIM_1D_Z) // interp from coarse nodal to fine nodal - Real bg = owx * Bzg(jg ,0,0) + const Real bg = owx * Bzg(jg ,0,0) + wx * Bzg(jg+1,0,0); // interp from coarse staggered to fine nodal - Real bc = owx * Bzc(jg ,0,0) + const Real bc = owx * Bzc(jg ,0,0) + wx * Bzc(jg+1,0,0); // interp from fine staggered to fine nodal - Real bf = Bzf_zeropad(j,0,0); + const Real bf = Bzf_zeropad(j,0,0); amrex::ignore_unused(owy); #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) // interp from coarse nodal to fine nodal - Real bg = owx * owy * Bzg(jg ,kg ,0) + const Real bg = owx * owy * Bzg(jg ,kg ,0) + owx * wy * Bzg(jg ,kg+1,0) + wx * owy * Bzg(jg+1,kg ,0) + wx * wy * Bzg(jg+1,kg+1,0); // interp from coarse staggered to fine nodal wx = 0.5_rt-wx; owx = 1.0_rt-wx; - Real bc = owx * owy * Bzc(jg ,kg ,0) + const Real bc = owx * owy * Bzc(jg ,kg ,0) + owx * wy * Bzc(jg ,kg+1,0) + wx * owy * Bzc(jg-1,kg ,0) + wx * wy * Bzc(jg-1,kg+1,0); // interp from fine staggered to fine nodal - Real bf = 0.5_rt*(Bzf_zeropad(j-1,k,0) + Bzf_zeropad(j,k,0)); + const Real bf = 0.5_rt*(Bzf_zeropad(j-1,k,0) + Bzf_zeropad(j,k,0)); #else - int lg = amrex::coarsen(l,2); - Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt; - Real owz = 1.0_rt-wz; + const int lg = amrex::coarsen(l,2); + const Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt; + const Real owz = 1.0_rt-wz; // interp from coarse nodal to fine nodal - Real bg = owx * owy * owz * Bzg(jg ,kg ,lg ) + const Real bg = owx * owy * owz * Bzg(jg ,kg ,lg ) + wx * owy * owz * Bzg(jg+1,kg ,lg ) + owx * wy * owz * Bzg(jg ,kg+1,lg ) + wx * wy * owz * Bzg(jg+1,kg+1,lg ) @@ -328,7 +336,7 @@ void warpx_interp_nd_bfield_z (int j, int k, int l, // interp from coarse staggered to fine nodal wx = 0.5_rt-wx; owx = 1.0_rt-wx; wy = 0.5_rt-wy; owy = 1.0_rt-wy; - Real bc = owx * owy * owz * Bzc(jg ,kg ,lg ) + const Real bc = owx * owy * owz * Bzc(jg ,kg ,lg ) + wx * owy * owz * Bzc(jg-1,kg ,lg ) + owx * wy * owz * Bzc(jg ,kg-1,lg ) + wx * wy * owz * Bzc(jg-1,kg-1,lg ) @@ -338,7 +346,7 @@ void warpx_interp_nd_bfield_z (int j, int k, int l, + wx * wy * wz * Bzc(jg-1,kg-1,lg+1); // interp from fine stagged to fine nodal - Real bf = 0.25_rt*(Bzf_zeropad(j-1,k-1,l) + Bzf_zeropad(j,k-1,l) + Bzf_zeropad(j-1,k,l) + Bzf_zeropad(j,k,l)); + const Real bf = 0.25_rt*(Bzf_zeropad(j-1,k-1,l) + Bzf_zeropad(j,k-1,l) + Bzf_zeropad(j-1,k,l) + Bzf_zeropad(j,k,l)); #endif @@ -360,54 +368,57 @@ void warpx_interp_nd_efield_x (int j, int k, int l, return Exf.contains(jj,kk,ll) ? Exf(jj,kk,ll) : 0.0_rt; }; - int jg = amrex::coarsen(j,2); - Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt; - Real owx = 1.0_rt-wx; + const int jg = amrex::coarsen(j,2); + Real wx, owx; + wx = (j == jg*2) ? 0.0_rt : 0.5_rt; + owx = 1.0_rt-wx; - int kg = amrex::coarsen(k,2); - Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt; - Real owy = 1.0_rt-wy; + const int kg = amrex::coarsen(k,2); + Real wy = 0.0_rt; + Real owy =0.0_rt; + wy = (k == kg*2) ? 0.0_rt : 0.5_rt; + owy = 1.0_rt-wy; #if defined(WARPX_DIM_1D_Z) // interp from coarse nodal to fine nodal - Real eg = owx * Exg(jg ,0,0) + const Real eg = owx * Exg(jg ,0,0) + wx * Exg(jg+1,0,0); // interp from coarse staggered to fine nodal - Real ec = owx * Exc(jg ,0,0) + const Real ec = owx * Exc(jg ,0,0) + wx * Exc(jg+1,0,0); // interp from fine staggered to fine nodal - Real ef = Exf_zeropad(j,0,0); + const Real ef = Exf_zeropad(j,0,0); amrex::ignore_unused(owy); #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) // interp from coarse nodal to fine nodal - Real eg = owx * owy * Exg(jg ,kg ,0) + const Real eg = owx * owy * Exg(jg ,kg ,0) + owx * wy * Exg(jg ,kg+1,0) + wx * owy * Exg(jg+1,kg ,0) + wx * wy * Exg(jg+1,kg+1,0); // interp from coarse staggered to fine nodal wx = 0.5_rt-wx; owx = 1.0_rt-wx; - Real ec = owx * owy * Exc(jg ,kg ,0) + const Real ec = owx * owy * Exc(jg ,kg ,0) + owx * wy * Exc(jg ,kg+1,0) + wx * owy * Exc(jg-1,kg ,0) + wx * wy * Exc(jg-1,kg+1,0); // interp from fine staggered to fine nodal - Real ef = 0.5_rt*(Exf_zeropad(j-1,k,0) + Exf_zeropad(j,k,0)); + const Real ef = 0.5_rt*(Exf_zeropad(j-1,k,0) + Exf_zeropad(j,k,0)); #else - int lg = amrex::coarsen(l,2); - Real wz = (l == lg*2) ? 0.0 : 0.5; - Real owz = 1.0_rt-wz; + const int lg = amrex::coarsen(l,2); + const Real wz = (l == lg*2) ? 0.0 : 0.5; + const Real owz = 1.0_rt-wz; // interp from coarse nodal to fine nodal - Real eg = owx * owy * owz * Exg(jg ,kg ,lg ) + const Real eg = owx * owy * owz * Exg(jg ,kg ,lg ) + wx * owy * owz * Exg(jg+1,kg ,lg ) + owx * wy * owz * Exg(jg ,kg+1,lg ) + wx * wy * owz * Exg(jg+1,kg+1,lg ) @@ -418,7 +429,7 @@ void warpx_interp_nd_efield_x (int j, int k, int l, // interp from coarse staggered to fine nodal wx = 0.5_rt-wx; owx = 1.0_rt-wx; - Real ec = owx * owy * owz * Exc(jg ,kg ,lg ) + const Real ec = owx * owy * owz * Exc(jg ,kg ,lg ) + wx * owy * owz * Exc(jg-1,kg ,lg ) + owx * wy * owz * Exc(jg ,kg+1,lg ) + wx * wy * owz * Exc(jg-1,kg+1,lg ) @@ -428,7 +439,7 @@ void warpx_interp_nd_efield_x (int j, int k, int l, + wx * wy * wz * Exc(jg-1,kg+1,lg+1); // interp from fine staggered to fine nodal - Real ef = 0.5_rt*(Exf_zeropad(j-1,k,l) + Exf_zeropad(j,k,l)); + const Real ef = 0.5_rt*(Exf_zeropad(j-1,k,l) + Exf_zeropad(j,k,l)); #endif @@ -450,55 +461,55 @@ void warpx_interp_nd_efield_y (int j, int k, int l, return Eyf.contains(jj,kk,ll) ? Eyf(jj,kk,ll) : 0.0_rt; }; - int jg = amrex::coarsen(j,2); - Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt; - Real owx = 1.0_rt-wx; - - int kg = amrex::coarsen(k,2); - Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt; - Real owy = 1.0_rt-wy; - + const int jg = amrex::coarsen(j,2); + const Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt; + const Real owx = 1.0_rt-wx; + const int kg = amrex::coarsen(k,2); + Real wy = 0.0_rt; + Real owy = 0.0_rt; + wy = (k == kg*2) ? 0.0_rt : 0.5_rt; + owy = 1.0_rt-wy; #if defined(WARPX_DIM_1D_Z) // interp from coarse nodal to fine nodal - Real eg = owx * Eyg(jg ,0,0) + const Real eg = owx * Eyg(jg ,0,0) + wx * Eyg(jg+1,0,0); // interp from coarse staggered to fine nodal - Real ec = owx * Eyc(jg ,0,0) + const Real ec = owx * Eyc(jg ,0,0) + wx * Eyc(jg+1,0,0); // interp from fine staggered to fine nodal - Real ef = Eyf_zeropad(j,0,0); + const Real ef = Eyf_zeropad(j,0,0); amrex::ignore_unused(owy); #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) // interp from coarse nodal to fine nodal - Real eg = owx * owy * Eyg(jg ,kg ,0) + const Real eg = owx * owy * Eyg(jg ,kg ,0) + owx * wy * Eyg(jg ,kg+1,0) + wx * owy * Eyg(jg+1,kg ,0) + wx * wy * Eyg(jg+1,kg+1,0); // interp from coarse staggered to fine nodal (Eyc is actually nodal) - Real ec = owx * owy * Eyc(jg ,kg ,0) + const Real ec = owx * owy * Eyc(jg ,kg ,0) + owx * wy * Eyc(jg ,kg+1,0) + wx * owy * Eyc(jg+1,kg ,0) + wx * wy * Eyc(jg+1,kg+1,0); // interp from fine staggered to fine nodal - Real ef = Eyf_zeropad(j,k,0); + const Real ef = Eyf_zeropad(j,k,0); #else - int lg = amrex::coarsen(l,2); - Real wz = (l == lg*2) ? 0.0 : 0.5; - Real owz = 1.0_rt-wz; + const int lg = amrex::coarsen(l,2); + const Real wz = (l == lg*2) ? 0.0 : 0.5; + const Real owz = 1.0_rt-wz; // interp from coarse nodal to fine nodal - Real eg = owx * owy * owz * Eyg(jg ,kg ,lg ) + const Real eg = owx * owy * owz * Eyg(jg ,kg ,lg ) + wx * owy * owz * Eyg(jg+1,kg ,lg ) + owx * wy * owz * Eyg(jg ,kg+1,lg ) + wx * wy * owz * Eyg(jg+1,kg+1,lg ) @@ -509,7 +520,7 @@ void warpx_interp_nd_efield_y (int j, int k, int l, // interp from coarse staggered to fine nodal wy = 0.5_rt-wy; owy = 1.0_rt-wy; - Real ec = owx * owy * owz * Eyc(jg ,kg ,lg ) + const Real ec = owx * owy * owz * Eyc(jg ,kg ,lg ) + wx * owy * owz * Eyc(jg+1,kg ,lg ) + owx * wy * owz * Eyc(jg ,kg-1,lg ) + wx * wy * owz * Eyc(jg+1,kg-1,lg ) @@ -519,7 +530,7 @@ void warpx_interp_nd_efield_y (int j, int k, int l, + wx * wy * wz * Eyc(jg+1,kg-1,lg+1); // interp from fine staggered to fine nodal - Real ef = 0.5_rt*(Eyf_zeropad(j,k-1,l) + Eyf_zeropad(j,k,l)); + const Real ef = 0.5_rt*(Eyf_zeropad(j,k-1,l) + Eyf_zeropad(j,k,l)); #endif @@ -541,54 +552,56 @@ void warpx_interp_nd_efield_z (int j, int k, int l, return Ezf.contains(jj,kk,ll) ? Ezf(jj,kk,ll) : 0.0_rt; }; - int jg = amrex::coarsen(j,2); - Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt; - Real owx = 1.0_rt-wx; + const int jg = amrex::coarsen(j,2); + const Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt; + const Real owx = 1.0_rt-wx; - int kg = amrex::coarsen(k,2); - Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt; - Real owy = 1.0_rt-wy; + const int kg = amrex::coarsen(k,2); + Real wy = 0.0_rt; + Real owy = 0.0_rt; + wy = (k == kg*2) ? 0.0_rt : 0.5_rt; + owy = 1.0_rt-wy; #if defined(WARPX_DIM_1D_Z) // interp from coarse nodal to fine nodal - Real eg = owx * Ezg(jg ,0,0) + const Real eg = owx * Ezg(jg ,0,0) + wx * Ezg(jg+1,0,0); // interp from coarse staggered to fine nodal - Real ec = owx * Ezc(jg ,0,0) + const Real ec = owx * Ezc(jg ,0,0) + wx * Ezc(jg+1,0,0); // interp from fine staggered to fine nodal - Real ef = 0.5_rt*(Ezf_zeropad(j-1,0,0) + Ezf_zeropad(j,0,0)); + const Real ef = 0.5_rt*(Ezf_zeropad(j-1,0,0) + Ezf_zeropad(j,0,0)); amrex::ignore_unused(owy); #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) // interp from coarse nodal to fine nodal - Real eg = owx * owy * Ezg(jg ,kg ,0) + const Real eg = owx * owy * Ezg(jg ,kg ,0) + owx * wy * Ezg(jg ,kg+1,0) + wx * owy * Ezg(jg+1,kg ,0) + wx * wy * Ezg(jg+1,kg+1,0); // interp from coarse stagged to fine nodal wy = 0.5_rt-wy; owy = 1.0_rt-wy; - Real ec = owx * owy * Ezc(jg ,kg ,0) + const Real ec = owx * owy * Ezc(jg ,kg ,0) + owx * wy * Ezc(jg ,kg-1,0) + wx * owy * Ezc(jg+1,kg ,0) + wx * wy * Ezc(jg+1,kg-1,0); // interp from fine staggered to fine nodal - Real ef = 0.5_rt*(Ezf_zeropad(j,k-1,0) + Ezf_zeropad(j,k,0)); + const Real ef = 0.5_rt*(Ezf_zeropad(j,k-1,0) + Ezf_zeropad(j,k,0)); #else - int lg = amrex::coarsen(l,2); + const int lg = amrex::coarsen(l,2); Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt; Real owz = 1.0_rt-wz; // interp from coarse nodal to fine nodal - Real eg = owx * owy * owz * Ezg(jg ,kg ,lg ) + const Real eg = owx * owy * owz * Ezg(jg ,kg ,lg ) + wx * owy * owz * Ezg(jg+1,kg ,lg ) + owx * wy * owz * Ezg(jg ,kg+1,lg ) + wx * wy * owz * Ezg(jg+1,kg+1,lg ) @@ -599,7 +612,7 @@ void warpx_interp_nd_efield_z (int j, int k, int l, // interp from coarse staggered to fine nodal wz = 0.5_rt-wz; owz = 1.0_rt-wz; - Real ec = owx * owy * owz * Ezc(jg ,kg ,lg ) + const Real ec = owx * owy * owz * Ezc(jg ,kg ,lg ) + wx * owy * owz * Ezc(jg+1,kg ,lg ) + owx * wy * owz * Ezc(jg ,kg+1,lg ) + wx * wy * owz * Ezc(jg+1,kg+1,lg ) @@ -609,7 +622,7 @@ void warpx_interp_nd_efield_z (int j, int k, int l, + wx * wy * wz * Ezc(jg+1,kg+1,lg-1); // interp from fine staggered to fine nodal - Real ef = 0.5_rt*(Ezf_zeropad(j,k,l-1) + Ezf_zeropad(j,k,l)); + const Real ef = 0.5_rt*(Ezf_zeropad(j,k,l-1) + Ezf_zeropad(j,k,l)); #endif @@ -785,10 +798,6 @@ void warpx_interp (const int j, amrex::Real res = 0.0_rt; - amrex::Real cj = 1.0_rt; - amrex::Real ck = 1.0_rt; - amrex::Real cl = 1.0_rt; - #if defined(WARPX_DIM_1D_Z) amrex::Real const* scj = stencil_coeffs_z; #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) @@ -803,16 +812,20 @@ void warpx_interp (const int j, for (int ll = 0; ll <= nl; ll++) { #if defined(WARPX_DIM_3D) - if (interp_l) cl = scl[ll]; + const amrex::Real cl = (interp_l)? scl[ll] : 1.0_rt; +#else + const amrex::Real cl = 1.0_rt; #endif for (int kk = 0; kk <= nk; kk++) { #if (AMREX_SPACEDIM >= 2) - if (interp_k) ck = sck[kk]; + const amrex::Real ck = (interp_k)? sck[kk] : 1.0_rt; +#else + const amrex::Real ck = 1.0_rt; #endif for (int jj = 0; jj <= nj; jj++) { - if (interp_j) cj = scj[jj]; + const amrex::Real cj = (interp_j)? scj[jj] : 1.0_rt; res += cj * ck * cl * src_arr_zeropad(jmin+jj,kmin+kk,lmin+ll); } diff --git a/Source/Parallelization/WarpXRegrid.cpp b/Source/Parallelization/WarpXRegrid.cpp index 25eff3045..4d10b3691 100644 --- a/Source/Parallelization/WarpXRegrid.cpp +++ b/Source/Parallelization/WarpXRegrid.cpp @@ -292,7 +292,7 @@ WarpX::RemakeLevel (int lev, Real /*time*/, const BoxArray& ba, const Distributi if (spectral_solver_cp[lev] != nullptr) { BoxArray cba = ba; cba.coarsen(refRatio(lev-1)); - std::array<Real,3> cdx = CellSize(lev-1); + const std::array<Real,3> cdx = CellSize(lev-1); // Get the cell-centered box BoxArray c_realspace_ba = cba; // Copy box @@ -345,7 +345,7 @@ WarpX::RemakeLevel (int lev, Real /*time*/, const BoxArray& ba, const Distributi { costs[lev] = std::make_unique<LayoutData<Real>>(ba, dm); const auto iarr = costs[lev]->IndexArray(); - for (int i : iarr) + for (const auto& i : iarr) { (*costs[lev])[i] = 0.0; setLoadBalanceEfficiency(lev, -1); @@ -402,7 +402,7 @@ WarpX::ResetCosts () for (int lev = 0; lev <= finest_level; ++lev) { const auto iarr = costs[lev]->IndexArray(); - for (int i : iarr) + for (const auto& i : iarr) { // Reset costs (*costs[lev])[i] = 0.0; |