Skip to content

Commit

Permalink
Fix call to CopyParticleAttribs, remove calls to resize
Browse files Browse the repository at this point in the history
  • Loading branch information
EZoni committed Jan 24, 2025
1 parent 75b7030 commit 2fee7fb
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 43 deletions.
2 changes: 1 addition & 1 deletion Source/Particles/PhotonParticleContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ PhotonParticleContainer::PushPX (WarpXParIter& pti,
}
#endif

auto copyAttribs = CopyParticleAttribs(pti, tmp_particle_data, offset);
auto copyAttribs = CopyParticleAttribs(*this, pti, offset);
const int do_copy = (m_do_back_transformed_particles && (a_dt_type!=DtType::SecondHalf) );

const auto GetPosition = GetParticlePosition<PIdx>(pti, offset);
Expand Down
18 changes: 2 additions & 16 deletions Source/Particles/PhysicalParticleContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1838,20 +1838,6 @@ PhysicalParticleContainer::Evolve (ablastr::fields::MultiFabRegister& fields,
amrex::MultiFab & By = *fields.get(FieldType::Bfield_aux, Direction{1}, lev);
amrex::MultiFab & Bz = *fields.get(FieldType::Bfield_aux, Direction{2}, lev);

if (m_do_back_transformed_particles)
{
for (WarpXParIter pti(*this, lev); pti.isValid(); ++pti)
{
const auto np = pti.numParticles();
const auto t_lev = pti.GetLevel();
const auto index = pti.GetPairIndex();
tmp_particle_data.resize(finestLevel()+1);
for (int i = 0; i < TmpIdx::nattribs; ++i) {
tmp_particle_data[t_lev][index][i].resize(np);
}
}
}

#ifdef AMREX_USE_OMP
#pragma omp parallel
#endif
Expand Down Expand Up @@ -2623,7 +2609,7 @@ PhysicalParticleContainer::PushPX (WarpXParIter& pti,
const int do_copy = (m_do_back_transformed_particles && (a_dt_type!=DtType::SecondHalf) );
CopyParticleAttribs copyAttribs;
if (do_copy) {
copyAttribs = CopyParticleAttribs(pti, tmp_particle_data, offset);
copyAttribs = CopyParticleAttribs(*this, pti, offset);
}

int* AMREX_RESTRICT ion_lev = nullptr;
Expand Down Expand Up @@ -2880,7 +2866,7 @@ PhysicalParticleContainer::ImplicitPushXP (WarpXParIter& pti,
const int do_copy = (m_do_back_transformed_particles && (a_dt_type!=DtType::SecondHalf) );
CopyParticleAttribs copyAttribs;
if (do_copy) {
copyAttribs = CopyParticleAttribs(pti, tmp_particle_data, offset);
copyAttribs = CopyParticleAttribs(*this, pti, offset);
}

int* AMREX_RESTRICT ion_lev = nullptr;
Expand Down
27 changes: 13 additions & 14 deletions Source/Particles/Pusher/CopyParticleAttribs.H
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
*/
struct CopyParticleAttribs
{
using TmpParticles = WarpXParticleContainer::TmpParticles;

GetParticlePosition<PIdx> m_get_position;

const amrex::ParticleReal* AMREX_RESTRICT uxp = nullptr;
Expand All @@ -41,30 +39,31 @@ struct CopyParticleAttribs
/** \brief Construct a new functor
*
* \param a_pti iterator to the tile containing the macroparticles
* \param tmp_particle_data holder for the temporary particle data
* \param a_offset offset to apply when reading / writing particle data
* This is needed because when we use field gather buffers we don't
* always start at the particle with index 0.
*/
CopyParticleAttribs (const WarpXParIter& a_pti, TmpParticles& tmp_particle_data,
long a_offset = 0) noexcept
CopyParticleAttribs (
const WarpXParticleContainer& pc,
WarpXParIter& a_pti,
long a_offset = 0) noexcept
{
if (tmp_particle_data.empty()) { return; }
// FIXME

Check notice

Code scanning / CodeQL

FIXME comment Note

FIXME comment
//if (tmp_particle_data.empty()) { return; }

const auto& attribs = a_pti.GetAttribs();

uxp = attribs[PIdx::ux].dataPtr() + a_offset;
uyp = attribs[PIdx::uy].dataPtr() + a_offset;
uzp = attribs[PIdx::uz].dataPtr() + a_offset;

const auto lev = a_pti.GetLevel();
const auto index = a_pti.GetPairIndex();
xpold = tmp_particle_data[lev].at(index)[TmpIdx::xold ].dataPtr() + a_offset;
ypold = tmp_particle_data[lev].at(index)[TmpIdx::yold ].dataPtr() + a_offset;
zpold = tmp_particle_data[lev].at(index)[TmpIdx::zold ].dataPtr() + a_offset;
uxpold = tmp_particle_data[lev].at(index)[TmpIdx::uxold].dataPtr() + a_offset;
uypold = tmp_particle_data[lev].at(index)[TmpIdx::uyold].dataPtr() + a_offset;
uzpold = tmp_particle_data[lev].at(index)[TmpIdx::uzold].dataPtr() + a_offset;
auto particle_comps = pc.getParticleComps();
xpold = a_pti.GetAttribs(particle_comps["x_n_btd"]).dataPtr();
ypold = a_pti.GetAttribs(particle_comps["y_n_btd"]).dataPtr();
zpold = a_pti.GetAttribs(particle_comps["z_n_btd"]).dataPtr();
uxpold = a_pti.GetAttribs(particle_comps["ux_n_btd"]).dataPtr();
uypold = a_pti.GetAttribs(particle_comps["uy_n_btd"]).dataPtr();
uzpold = a_pti.GetAttribs(particle_comps["uz_n_btd"]).dataPtr();

m_get_position = GetParticlePosition<PIdx>(a_pti, a_offset);
}
Expand Down
12 changes: 0 additions & 12 deletions Source/Particles/WarpXParticleContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1533,18 +1533,6 @@ void WarpXParticleContainer::defineAllParticleTiles () noexcept
{
// Call the parent class's method
NamedComponentParticleContainer<amrex::DefaultAllocator>::defineAllParticleTiles();

// Resize the tmp_particle_data (no present in parent class)
tmp_particle_data.resize(finestLevel()+1);
for (int lev = 0; lev <= finestLevel(); ++lev)
{
for (auto mfi = MakeMFIter(lev); mfi.isValid(); ++mfi)
{
const int grid_id = mfi.index();
const int tile_id = mfi.LocalTileIndex();
tmp_particle_data[lev][std::make_pair(grid_id,tile_id)];
}
}
}

// This function is called in Redistribute, just after locate
Expand Down

0 comments on commit 2fee7fb

Please sign in to comment.