aboutsummaryrefslogtreecommitdiff
path: root/Source/WarpXMove.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WarpXMove.cpp')
-rw-r--r--Source/WarpXMove.cpp64
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);