diff options
Diffstat (limited to 'Source/WarpXMove.cpp')
-rw-r--r-- | Source/WarpXMove.cpp | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/Source/WarpXMove.cpp b/Source/WarpXMove.cpp index 7a4e346a3..17fa6db2b 100644 --- a/Source/WarpXMove.cpp +++ b/Source/WarpXMove.cpp @@ -54,69 +54,80 @@ WarpX::MoveWindow (bool move_j) new_lo[dir] = current_lo[dir] + num_shift_base * dx[dir]; new_hi[dir] = current_hi[dir] + num_shift_base * dx[dir]; RealBox new_box(new_lo, new_hi); - geom[0].ProbDomain(new_box); + Geometry::ProbDomain(new_box); int num_shift = num_shift_base; int num_shift_crse = num_shift; // Shift the mesh fields - for (int lev = 0; lev <= max_level; ++lev) { + for (int lev = 0; lev <= finest_level; ++lev) { if (lev > 0) { num_shift_crse = num_shift; num_shift *= refRatio(lev-1)[dir]; } + // Shift each component of vector fields (E, B, j) for (int dim = 0; dim < 3; ++dim) { + // Fine grid shiftMF(*Bfield_fp[lev][dim], geom[lev], num_shift, dir); shiftMF(*Efield_fp[lev][dim], geom[lev], num_shift, dir); - if (move_j) { shiftMF(*current_fp[lev][dim], geom[lev], num_shift, dir); } - - if (do_dive_cleaning) { - shiftMF(*F_fp[lev], geom[lev], num_shift, dir); - shiftMF(*rho_fp[lev], geom[lev], num_shift, dir); - } - if (do_pml && pml[lev]->ok()) { const std::array<MultiFab*, 3>& pml_B = pml[lev]->GetB_fp(); const std::array<MultiFab*, 3>& pml_E = pml[lev]->GetE_fp(); shiftMF(*pml_B[dim], geom[lev], num_shift, dir); shiftMF(*pml_E[dim], geom[lev], num_shift, dir); - if (do_dive_cleaning) { - MultiFab* pml_F = pml[lev]->GetF_fp(); - shiftMF(*pml_F, geom[lev], num_shift, dir); - } } if (lev > 0) { - + // Coarse grid shiftMF(*Bfield_cp[lev][dim], geom[lev-1], num_shift_crse, dir); shiftMF(*Efield_cp[lev][dim], geom[lev-1], num_shift_crse, dir); shiftMF(*Bfield_aux[lev][dim], geom[lev], num_shift, dir); shiftMF(*Efield_aux[lev][dim], geom[lev], num_shift, dir); - if (move_j) { shiftMF(*current_cp[lev][dim], geom[lev-1], num_shift_crse, dir); } - - if (do_dive_cleaning) { - shiftMF(*F_cp[lev], geom[lev-1], num_shift_crse, dir); - shiftMF(*rho_cp[lev], geom[lev-1], num_shift_crse, dir); - } - if (do_pml && pml[lev]->ok()) { const std::array<MultiFab*, 3>& pml_B = pml[lev]->GetB_cp(); const std::array<MultiFab*, 3>& pml_E = pml[lev]->GetE_cp(); shiftMF(*pml_B[dim], geom[lev-1], num_shift_crse, dir); shiftMF(*pml_E[dim], geom[lev-1], num_shift_crse, dir); - if (do_dive_cleaning) { - MultiFab* pml_F = pml[lev]->GetF_cp(); - shiftMF(*pml_F, geom[lev-1], num_shift_crse, dir); - } + } + } + } + + // Shift scalar component F for dive cleaning + if (do_dive_cleaning) { + // Fine grid + shiftMF(*F_fp[lev], geom[lev], num_shift, dir); + if (do_pml && pml[lev]->ok()) { + MultiFab* pml_F = pml[lev]->GetF_fp(); + shiftMF(*pml_F, geom[lev], num_shift, dir); + } + if (lev > 0) { + // Coarse grid + shiftMF(*F_cp[lev], geom[lev-1], num_shift_crse, dir); + if (do_pml && pml[lev]->ok()) { + MultiFab* pml_F = pml[lev]->GetF_cp(); + shiftMF(*pml_F, geom[lev-1], num_shift_crse, dir); + } + shiftMF(*rho_cp[lev], geom[lev-1], num_shift_crse, dir); + } + } + + // Shift scalar component rho + if (move_j) { + if (rho_fp[lev]){ + // Fine grid + shiftMF(*rho_fp[lev], geom[lev], num_shift, dir); + if (lev > 0){ + // Coarse grid + shiftMF(*rho_cp[lev], geom[lev-1], num_shift_crse, dir); } } } @@ -124,6 +135,7 @@ WarpX::MoveWindow (bool move_j) // Continuously inject plasma in new cells (by default only on level 0) if (WarpX::do_plasma_injection) { + const int lev = 0; // particleBox encloses the cells where we generate particles @@ -172,7 +184,7 @@ WarpX::shiftMF (MultiFab& mf, const Geometry& geom, int num_shift, int dir) const int nc = mf.nComp(); const IntVect& ng = mf.nGrowVect(); - BL_ASSERT(ng.min() >= num_shift); + AMREX_ALWAYS_ASSERT(ng.min() >= num_shift); MultiFab tmpmf(ba, dm, nc, ng); MultiFab::Copy(tmpmf, mf, 0, 0, nc, ng); |