diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/Initialization/WarpXInitData.cpp | 12 | ||||
-rw-r--r-- | Source/Utils/WarpXMovingWindow.cpp | 13 | ||||
-rw-r--r-- | Source/WarpX.H | 7 | ||||
-rw-r--r-- | Source/WarpX.cpp | 6 |
4 files changed, 25 insertions, 13 deletions
diff --git a/Source/Initialization/WarpXInitData.cpp b/Source/Initialization/WarpXInitData.cpp index 385993f78..e890435f5 100644 --- a/Source/Initialization/WarpXInitData.cpp +++ b/Source/Initialization/WarpXInitData.cpp @@ -303,18 +303,18 @@ WarpX::InitLevelData (int lev, Real time) { for (int i = 0; i < 3; ++i) { current_fp[lev][i]->setVal(0.0); - Efield_fp[lev][i]->setVal(0.0); - Bfield_fp[lev][i]->setVal(0.0); + Efield_fp[lev][i]->setVal(E_external_grid[i]); + Bfield_fp[lev][i]->setVal(B_external_grid[i]); } if (lev > 0) { for (int i = 0; i < 3; ++i) { - Efield_aux[lev][i]->setVal(0.0); - Bfield_aux[lev][i]->setVal(0.0); + Efield_aux[lev][i]->setVal(E_external_grid[i]); + Bfield_aux[lev][i]->setVal(B_external_grid[i]); current_cp[lev][i]->setVal(0.0); - Efield_cp[lev][i]->setVal(0.0); - Bfield_cp[lev][i]->setVal(0.0); + Efield_cp[lev][i]->setVal(E_external_grid[i]); + Bfield_cp[lev][i]->setVal(B_external_grid[i]); } } diff --git a/Source/Utils/WarpXMovingWindow.cpp b/Source/Utils/WarpXMovingWindow.cpp index f84701a02..1597eea01 100644 --- a/Source/Utils/WarpXMovingWindow.cpp +++ b/Source/Utils/WarpXMovingWindow.cpp @@ -99,8 +99,8 @@ WarpX::MoveWindow (bool move_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); + shiftMF(*Bfield_fp[lev][dim], geom[lev], num_shift, dir, B_external_grid[dim]); + shiftMF(*Efield_fp[lev][dim], geom[lev], num_shift, dir, E_external_grid[dim]); if (move_j) { shiftMF(*current_fp[lev][dim], geom[lev], num_shift, dir); } @@ -113,8 +113,8 @@ WarpX::MoveWindow (bool move_j) 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_cp[lev][dim], geom[lev-1], num_shift_crse, dir, B_external_grid[dim]); + shiftMF(*Efield_cp[lev][dim], geom[lev-1], num_shift_crse, dir, E_external_grid[dim]); shiftMF(*Bfield_aux[lev][dim], geom[lev], num_shift, dir); shiftMF(*Efield_aux[lev][dim], geom[lev], num_shift, dir); if (move_j) { @@ -203,7 +203,8 @@ WarpX::MoveWindow (bool move_j) } void -WarpX::shiftMF (MultiFab& mf, const Geometry& geom, int num_shift, int dir) +WarpX::shiftMF (MultiFab& mf, const Geometry& geom, int num_shift, int dir, + amrex::Real external_field) { BL_PROFILE("WarpX::shiftMF()"); const BoxArray& ba = mf.boxArray(); @@ -257,7 +258,7 @@ WarpX::shiftMF (MultiFab& mf, const Geometry& geom, int num_shift, int dir) if (outbox.ok()) { AMREX_PARALLEL_FOR_4D ( outbox, nc, i, j, k, n, { - srcfab(i,j,k,n) = 0.0; + srcfab(i,j,k,n) = external_field; }); } diff --git a/Source/WarpX.H b/Source/WarpX.H index 15676f0e3..376cd0517 100644 --- a/Source/WarpX.H +++ b/Source/WarpX.H @@ -69,7 +69,8 @@ public: MultiParticleContainer& GetPartContainer () { return *mypc; } - static void shiftMF(amrex::MultiFab& mf, const amrex::Geometry& geom, int num_shift, int dir); + static void shiftMF(amrex::MultiFab& mf, const amrex::Geometry& geom, int num_shift, int dir, + amrex::Real external_field = 0.); static void GotoNextLine (std::istream& is); @@ -77,6 +78,10 @@ public: static amrex::Vector<amrex::Real> B_external; static amrex::Vector<amrex::Real> E_external; + // Initial field on grid + static amrex::Vector<amrex::Real> E_external_grid; + static amrex::Vector<amrex::Real> B_external_grid; + // Algorithms static long current_deposition_algo; static long charge_deposition_algo; diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index 14d0e7a2e..ac1fd520c 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -27,6 +27,9 @@ using namespace amrex; Vector<Real> WarpX::B_external(3, 0.0); Vector<Real> WarpX::E_external(3, 0.0); +Vector<Real> WarpX::E_external_grid(3, 0.0); +Vector<Real> WarpX::B_external_grid(3, 0.0); + int WarpX::do_moving_window = 0; int WarpX::moving_window_dir = -1; Real WarpX::moving_window_v = std::numeric_limits<amrex::Real>::max(); @@ -294,6 +297,9 @@ WarpX::ReadParameters () pp.queryarr("B_external", B_external); pp.queryarr("E_external", E_external); + pp.queryarr("E_external_grid", E_external_grid); + pp.queryarr("B_external_grid", B_external_grid); + pp.query("do_moving_window", do_moving_window); if (do_moving_window) { |