diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/Particles/PhotonParticleContainer.cpp | 2 | ||||
-rw-r--r-- | Source/Particles/PhysicalParticleContainer.cpp | 10 | ||||
-rw-r--r-- | Source/Particles/RigidInjectedParticleContainer.cpp | 46 |
3 files changed, 28 insertions, 30 deletions
diff --git a/Source/Particles/PhotonParticleContainer.cpp b/Source/Particles/PhotonParticleContainer.cpp index b78396653..5657e595d 100644 --- a/Source/Particles/PhotonParticleContainer.cpp +++ b/Source/Particles/PhotonParticleContainer.cpp @@ -125,7 +125,7 @@ PhotonParticleContainer::PushPX (WarpXParIter& pti, } #endif - auto copyAttribs = CopyParticleAttribs(pti, tmp_particle_data); + auto copyAttribs = CopyParticleAttribs(pti, tmp_particle_data, offset); int do_copy = (WarpX::do_back_transformed_diagnostics && do_back_transformed_diagnostics && a_dt_type!=DtType::SecondHalf); diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index 0ff90993a..d433c6120 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -2513,7 +2513,7 @@ PhysicalParticleContainer::PushPX (WarpXParIter& pti, int* AMREX_RESTRICT ion_lev = nullptr; if (do_field_ionization) { - ion_lev = pti.GetiAttribs(particle_icomps["ionization_level"]).dataPtr(); + ion_lev = pti.GetiAttribs(particle_icomps["ionization_level"]).dataPtr() + offset; } const bool save_previous_position = m_save_previous_position; @@ -2522,16 +2522,16 @@ PhysicalParticleContainer::PushPX (WarpXParIter& pti, ParticleReal* z_old = nullptr; if (save_previous_position) { #if (AMREX_SPACEDIM >= 2) - x_old = pti.GetAttribs(particle_comps["prev_x"]).dataPtr(); + x_old = pti.GetAttribs(particle_comps["prev_x"]).dataPtr() + offset; #else amrex::ignore_unused(x_old); #endif #if defined(WARPX_DIM_3D) - y_old = pti.GetAttribs(particle_comps["prev_y"]).dataPtr(); + y_old = pti.GetAttribs(particle_comps["prev_y"]).dataPtr() + offset; #else amrex::ignore_unused(y_old); #endif - z_old = pti.GetAttribs(particle_comps["prev_z"]).dataPtr(); + z_old = pti.GetAttribs(particle_comps["prev_z"]).dataPtr() + offset; } // Loop over the particles and update their momentum @@ -2550,7 +2550,7 @@ PhysicalParticleContainer::PushPX (WarpXParIter& pti, const bool local_has_quantum_sync = has_quantum_sync(); if (local_has_quantum_sync) { evolve_opt = m_shr_p_qs_engine->build_evolve_functor(); - p_optical_depth_QSR = pti.GetAttribs(particle_comps["opticalDepthQSR"]).dataPtr(); + p_optical_depth_QSR = pti.GetAttribs(particle_comps["opticalDepthQSR"]).dataPtr() + offset; } #endif diff --git a/Source/Particles/RigidInjectedParticleContainer.cpp b/Source/Particles/RigidInjectedParticleContainer.cpp index bf4394d59..e5633f31b 100644 --- a/Source/Particles/RigidInjectedParticleContainer.cpp +++ b/Source/Particles/RigidInjectedParticleContainer.cpp @@ -173,8 +173,8 @@ RigidInjectedParticleContainer::PushPX (WarpXParIter& pti, Gpu::DeviceVector<ParticleReal> xp_save, yp_save, zp_save; RealVector uxp_save, uyp_save, uzp_save; - const auto GetPosition = GetParticlePosition(pti); - auto SetPosition = SetParticlePosition(pti); + const auto GetPosition = GetParticlePosition(pti, offset); + auto SetPosition = SetParticlePosition(pti, offset); ParticleReal* const AMREX_RESTRICT ux = uxp.dataPtr() + offset; ParticleReal* const AMREX_RESTRICT uy = uyp.dataPtr() + offset; @@ -183,25 +183,23 @@ RigidInjectedParticleContainer::PushPX (WarpXParIter& pti, if (!done_injecting_lev) { // If the old values are not already saved, create copies here. - const auto np = pti.numParticles(); + xp_save.resize(np_to_push); + yp_save.resize(np_to_push); + zp_save.resize(np_to_push); - xp_save.resize(np); - yp_save.resize(np); - zp_save.resize(np); + uxp_save.resize(np_to_push); + uyp_save.resize(np_to_push); + uzp_save.resize(np_to_push); - uxp_save.resize(np); - uyp_save.resize(np); - uzp_save.resize(np); + amrex::Real* const AMREX_RESTRICT xp_save_ptr = xp_save.dataPtr(); + amrex::Real* const AMREX_RESTRICT yp_save_ptr = yp_save.dataPtr(); + amrex::Real* const AMREX_RESTRICT zp_save_ptr = zp_save.dataPtr(); - amrex::Real* const AMREX_RESTRICT xp_save_ptr = xp_save.dataPtr() + offset; - amrex::Real* const AMREX_RESTRICT yp_save_ptr = yp_save.dataPtr() + offset; - amrex::Real* const AMREX_RESTRICT zp_save_ptr = zp_save.dataPtr() + offset; + amrex::Real* const AMREX_RESTRICT uxp_save_ptr = uxp_save.dataPtr(); + amrex::Real* const AMREX_RESTRICT uyp_save_ptr = uyp_save.dataPtr(); + amrex::Real* const AMREX_RESTRICT uzp_save_ptr = uzp_save.dataPtr(); - amrex::Real* const AMREX_RESTRICT uxp_save_ptr = uxp_save.dataPtr() + offset; - amrex::Real* const AMREX_RESTRICT uyp_save_ptr = uyp_save.dataPtr() + offset; - amrex::Real* const AMREX_RESTRICT uzp_save_ptr = uzp_save.dataPtr() + offset; - - amrex::ParallelFor( np, + amrex::ParallelFor( np_to_push, [=] AMREX_GPU_DEVICE (long i) { ParticleReal xp, yp, zp; GetPosition(i, xp, yp, zp); @@ -224,12 +222,12 @@ RigidInjectedParticleContainer::PushPX (WarpXParIter& pti, if (!done_injecting_lev) { - ParticleReal* AMREX_RESTRICT x_save = xp_save.dataPtr() + offset; - ParticleReal* AMREX_RESTRICT y_save = yp_save.dataPtr() + offset; - ParticleReal* AMREX_RESTRICT z_save = zp_save.dataPtr() + offset; - ParticleReal* AMREX_RESTRICT ux_save = uxp_save.dataPtr() + offset; - ParticleReal* AMREX_RESTRICT uy_save = uyp_save.dataPtr() + offset; - ParticleReal* AMREX_RESTRICT uz_save = uzp_save.dataPtr() + offset; + ParticleReal* AMREX_RESTRICT x_save = xp_save.dataPtr(); + ParticleReal* AMREX_RESTRICT y_save = yp_save.dataPtr(); + ParticleReal* AMREX_RESTRICT z_save = zp_save.dataPtr(); + ParticleReal* AMREX_RESTRICT ux_save = uxp_save.dataPtr(); + ParticleReal* AMREX_RESTRICT uy_save = uyp_save.dataPtr(); + ParticleReal* AMREX_RESTRICT uz_save = uzp_save.dataPtr(); // Undo the push for particles not injected yet. // The zp are advanced a fixed amount. @@ -237,7 +235,7 @@ RigidInjectedParticleContainer::PushPX (WarpXParIter& pti, const Real vz_ave_boosted = vzbeam_ave_boosted; const bool rigid = rigid_advance; const Real inv_csq = 1._rt/(PhysConst::c*PhysConst::c); - amrex::ParallelFor( pti.numParticles(), + amrex::ParallelFor( np_to_push, [=] AMREX_GPU_DEVICE (long i) { ParticleReal xp, yp, zp; GetPosition(i, xp, yp, zp); |