aboutsummaryrefslogtreecommitdiff
path: root/Source/Evolve/WarpXEvolve.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Evolve/WarpXEvolve.cpp')
-rw-r--r--Source/Evolve/WarpXEvolve.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp
index 39b51b261..e632409f6 100644
--- a/Source/Evolve/WarpXEvolve.cpp
+++ b/Source/Evolve/WarpXEvolve.cpp
@@ -21,7 +21,6 @@
#include <cmath>
#include <limits>
-
using namespace amrex;
void
@@ -303,6 +302,7 @@ WarpX::OneStep_nosub (Real cur_time)
if (warpx_py_particlescraper) warpx_py_particlescraper();
if (warpx_py_beforedeposition) warpx_py_beforedeposition();
PushParticlesandDepose(cur_time);
+
if (warpx_py_afterdeposition) warpx_py_afterdeposition();
// Synchronize J and rho
@@ -317,7 +317,6 @@ WarpX::OneStep_nosub (Real cur_time)
VayDeposition();
}
-
// At this point, J is up-to-date inside the domain, and E and B are
// up-to-date including enough guard cells for first step of the field
// solve.
@@ -601,17 +600,27 @@ WarpX::PushParticlesandDepose (amrex::Real cur_time)
void
WarpX::PushParticlesandDepose (int lev, amrex::Real cur_time, DtType a_dt_type)
{
+ // If warpx.do_current_centering = 1, the current is deposited on the nodal MultiFab current_fp_nodal
+ // and then centered onto the staggered MultiFab current_fp
+ amrex::MultiFab* current_x = (WarpX::do_current_centering) ? current_fp_nodal[lev][0].get()
+ : current_fp[lev][0].get();
+ amrex::MultiFab* current_y = (WarpX::do_current_centering) ? current_fp_nodal[lev][1].get()
+ : current_fp[lev][1].get();
+ amrex::MultiFab* current_z = (WarpX::do_current_centering) ? current_fp_nodal[lev][2].get()
+ : current_fp[lev][2].get();
+
mypc->Evolve(lev,
*Efield_aux[lev][0],*Efield_aux[lev][1],*Efield_aux[lev][2],
*Bfield_aux[lev][0],*Bfield_aux[lev][1],*Bfield_aux[lev][2],
*Efield_avg_aux[lev][0],*Efield_avg_aux[lev][1],*Efield_avg_aux[lev][2],
*Bfield_avg_aux[lev][0],*Bfield_avg_aux[lev][1],*Bfield_avg_aux[lev][2],
- *current_fp[lev][0],*current_fp[lev][1],*current_fp[lev][2],
+ *current_x, *current_y, *current_z,
current_buf[lev][0].get(), current_buf[lev][1].get(), current_buf[lev][2].get(),
rho_fp[lev].get(), charge_buf[lev].get(),
Efield_cax[lev][0].get(), Efield_cax[lev][1].get(), Efield_cax[lev][2].get(),
Bfield_cax[lev][0].get(), Bfield_cax[lev][1].get(), Bfield_cax[lev][2].get(),
cur_time, dt[lev], a_dt_type);
+
#ifdef WARPX_DIM_RZ
// This is called after all particles have deposited their current and charge.
ApplyInverseVolumeScalingToCurrentDensity(current_fp[lev][0].get(), current_fp[lev][1].get(), current_fp[lev][2].get(), lev);