aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Initialization/WarpXInitData.cpp12
-rw-r--r--Source/Utils/WarpXMovingWindow.cpp13
-rw-r--r--Source/WarpX.H7
-rw-r--r--Source/WarpX.cpp6
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)
{