diff --git a/src/Hipace.cpp b/src/Hipace.cpp index 20700c02b9..f06fd9d473 100644 --- a/src/Hipace.cpp +++ b/src/Hipace.cpp @@ -700,7 +700,7 @@ Hipace::SolveOneSlice (int islice, int step) // Push plasma particles for (int lev=0; lev 1) { diff --git a/src/particles/plasma/MultiPlasma.H b/src/particles/plasma/MultiPlasma.H index e8e5843134..c0e0c09492 100644 --- a/src/particles/plasma/MultiPlasma.H +++ b/src/particles/plasma/MultiPlasma.H @@ -75,9 +75,11 @@ public: * \param[in] gm Geometry of the simulation, to get the cell size etc. * \param[in] temp_slice if true, the temporary data (x_temp, ...) will be used * \param[in] lev MR level + * \param[in] current_N_level number of MR levels */ void AdvanceParticles ( - const Fields & fields, amrex::Vector const& gm, bool temp_slice, int lev); + const Fields & fields, amrex::Vector const& gm, bool temp_slice, int lev, + int const current_N_level); /** \brief Loop over plasma species and deposit their neutralizing background, if needed * diff --git a/src/particles/plasma/MultiPlasma.cpp b/src/particles/plasma/MultiPlasma.cpp index 3e4799a5f5..2e72100c50 100644 --- a/src/particles/plasma/MultiPlasma.cpp +++ b/src/particles/plasma/MultiPlasma.cpp @@ -96,10 +96,11 @@ MultiPlasma::ExplicitDeposition (Fields& fields, amrex::Vector void MultiPlasma::AdvanceParticles ( - const Fields & fields, amrex::Vector const& gm, bool temp_slice, int lev) + const Fields & fields, amrex::Vector const& gm, bool temp_slice, int lev, + int const current_N_level) { for (int i=0; i const& gm, const bool temp_slice, - int const lev); + int const lev, int const current_N_level); #endif // PLASMAPARTICLEADVANCE_H_ diff --git a/src/particles/pusher/PlasmaParticleAdvance.cpp b/src/particles/pusher/PlasmaParticleAdvance.cpp index ab5bba6c5d..539d056c60 100644 --- a/src/particles/pusher/PlasmaParticleAdvance.cpp +++ b/src/particles/pusher/PlasmaParticleAdvance.cpp @@ -29,7 +29,7 @@ template struct PlasmaMomentumDerivative; void AdvancePlasmaParticles (PlasmaParticleContainer& plasma, const Fields & fields, amrex::Vector const& gm, const bool temp_slice, - int const lev) + int const lev, int const current_N_level) { HIPACE_PROFILE("AdvancePlasmaParticles()"); using namespace amrex::literals; @@ -272,7 +272,7 @@ AdvancePlasmaParticles (PlasmaParticleContainer& plasma, const Fields & fields, }); #ifdef HIPACE_USE_AB5_PUSH - if (!temp_slice) { + if (!temp_slice && lev == current_N_level - 1) { auto& rd = pti.GetStructOfArrays().GetRealData(); // shift force terms diff --git a/src/salame/Salame.cpp b/src/salame/Salame.cpp index bcec61bf77..6fe1763a12 100644 --- a/src/salame/Salame.cpp +++ b/src/salame/Salame.cpp @@ -44,7 +44,8 @@ SalameModule (Hipace* hipace, const int n_iter, const bool do_advance, int& last for (int lev=0; levm_multi_plasma.AdvanceParticles(hipace->m_fields, hipace->m_3D_geom, true, lev); + hipace->m_multi_plasma.AdvanceParticles(hipace->m_fields, hipace->m_3D_geom, true, lev, + current_N_level); hipace->m_fields.duplicate(lev, WhichSlice::Salame, {"jx", "jy"}, WhichSlice::Next, {"jx_beam", "jy_beam"});