aboutsummaryrefslogtreecommitdiff
path: root/Source/Evolve/WarpXEvolveEM.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Evolve/WarpXEvolveEM.cpp')
-rw-r--r--Source/Evolve/WarpXEvolveEM.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/Source/Evolve/WarpXEvolveEM.cpp b/Source/Evolve/WarpXEvolveEM.cpp
index 32a4747db..16b5905d1 100644
--- a/Source/Evolve/WarpXEvolveEM.cpp
+++ b/Source/Evolve/WarpXEvolveEM.cpp
@@ -299,6 +299,7 @@ WarpX::OneStep_nosub (Real cur_time)
// (And update guard cells immediately afterwards)
#ifdef WARPX_USE_PSATD
PushPSATD(dt[0]);
+ if (do_pml) DampPML();
FillBoundaryE();
FillBoundaryB();
#else
@@ -481,6 +482,19 @@ WarpX::PushParticlesandDepose (int lev, Real cur_time)
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]);
+#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);
+ if (current_buf[lev][0].get()) {
+ ApplyInverseVolumeScalingToCurrentDensity(current_buf[lev][0].get(), current_buf[lev][1].get(), current_buf[lev][2].get(), lev-1);
+ }
+ if (rho_fp[lev].get()) {
+ ApplyInverseVolumeScalingToChargeDensity(rho_fp[lev].get(), lev);
+ if (charge_buf[lev].get()) {
+ ApplyInverseVolumeScalingToChargeDensity(charge_buf[lev].get(), lev-1);
+ }
+ }
+#endif
}
void
@@ -491,7 +505,7 @@ WarpX::ComputeDt ()
if (maxwell_fdtd_solver_id == 0) {
// CFL time step Yee solver
-#ifdef WARPX_RZ
+#ifdef WARPX_DIM_RZ
// Derived semi-analytically by R. Lehe
deltat = cfl * 1./( std::sqrt((1+0.2105)/(dx[0]*dx[0]) + 1./(dx[1]*dx[1])) * PhysConst::c );
#else
@@ -536,10 +550,7 @@ WarpX::computeMaxStepBoostAccelerator(amrex::Geometry a_geom){
WarpX::moving_window_dir == AMREX_SPACEDIM-1,
"Can use zmax_plasma_to_compute_max_step only if " +
"moving window along z. TODO: all directions.");
- AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
- maxLevel() == 0,
- "Can use zmax_plasma_to_compute_max_step only if " +
- "max level = 0.");
+
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
(WarpX::boost_direction[0]-0)*(WarpX::boost_direction[0]-0) +
(WarpX::boost_direction[1]-0)*(WarpX::boost_direction[1]-0) +
@@ -560,7 +571,12 @@ WarpX::computeMaxStepBoostAccelerator(amrex::Geometry a_geom){
const Real interaction_time_boost = (len_plasma_boost-zmin_domain_boost)/
(moving_window_v-v_plasma_boost);
// Divide by dt, and update value of max_step.
- const int computed_max_step = interaction_time_boost/dt[0];
+ int computed_max_step;
+ if (do_subcycling){
+ computed_max_step = interaction_time_boost/dt[0];
+ } else {
+ computed_max_step = interaction_time_boost/dt[maxLevel()];
+ }
max_step = computed_max_step;
Print()<<"max_step computed in computeMaxStepBoostAccelerator: "
<<computed_max_step<<std::endl;