diff options
author | 2020-02-10 11:20:10 -0800 | |
---|---|---|
committer | 2020-02-10 11:20:10 -0800 | |
commit | f9e92c4e2a774100eccbe516b9608944fdb160ff (patch) | |
tree | ea7e0649d5b9a18b7974a1ee4a3d3c75ec42375e /Source/Particles/PhysicalParticleContainer.cpp | |
parent | f65189fec6394faf798e29193cc20be07e56dfe6 (diff) | |
download | WarpX-f9e92c4e2a774100eccbe516b9608944fdb160ff.tar.gz WarpX-f9e92c4e2a774100eccbe516b9608944fdb160ff.tar.zst WarpX-f9e92c4e2a774100eccbe516b9608944fdb160ff.zip |
template Parser so that it works for any number of variables
Diffstat (limited to 'Source/Particles/PhysicalParticleContainer.cpp')
-rw-r--r-- | Source/Particles/PhysicalParticleContainer.cpp | 39 |
1 files changed, 15 insertions, 24 deletions
diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index 6572657ff..0277a9fe6 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -553,7 +553,6 @@ PhysicalParticleContainer::AddPlasma (int lev, RealBox part_realbox) overlap_realbox.lo(1), overlap_realbox.lo(2))}; - std::size_t shared_mem_bytes = plasma_injector->sharedMemoryNeeded(); int lrrfac = rrfac; bool loc_do_field_ionization = do_field_ionization; @@ -738,7 +737,7 @@ PhysicalParticleContainer::AddPlasma (int lev, RealBox part_realbox) p.pos(0) = xb; p.pos(1) = z; #endif - }, shared_mem_bytes); + }); if (cost) { wt = (amrex::second() - wt) / tile_box.d_numPts(); @@ -992,44 +991,36 @@ PhysicalParticleContainer::AssignExternalFieldOnParticles(WarpXParIter& pti, Real* const AMREX_RESTRICT Exp_data = Exp.dataPtr(); Real* const AMREX_RESTRICT Eyp_data = Eyp.dataPtr(); Real* const AMREX_RESTRICT Ezp_data = Ezp.dataPtr(); - ParserWrapper *xfield_partparser = mypc.m_Ex_particle_parser.get(); - ParserWrapper *yfield_partparser = mypc.m_Ey_particle_parser.get(); - ParserWrapper *zfield_partparser = mypc.m_Ez_particle_parser.get(); + ParserWrapper<4> *xfield_partparser = mypc.m_Ex_particle_parser.get(); + ParserWrapper<4> *yfield_partparser = mypc.m_Ey_particle_parser.get(); + ParserWrapper<4> *zfield_partparser = mypc.m_Ez_particle_parser.get(); Real time = warpx.gett_new(lev); amrex::ParallelFor(pti.numParticles(), [=] AMREX_GPU_DEVICE (long i) { ParticleReal x, y, z; GetPosition(i, x, y, z); - Exp_data[i] = xfield_partparser->getField(x, y, z, time); - Eyp_data[i] = yfield_partparser->getField(x, y, z, time); - Ezp_data[i] = zfield_partparser->getField(x, y, z, time); - }, - /* To allocate shared memory for the GPU threads. */ - /* But, for now only 4 doubles (x,y,z,t) are allocated. */ - amrex::Gpu::numThreadsPerBlockParallelFor() * sizeof(double) * 4 - ); + Exp_data[i] = (*xfield_partparser)(x, y, z, time); + Eyp_data[i] = (*yfield_partparser)(x, y, z, time); + Ezp_data[i] = (*zfield_partparser)(x, y, z, time); + }); } if (mypc.m_B_ext_particle_s=="parse_b_ext_particle_function") { const auto GetPosition = GetParticlePosition(pti); Real* const AMREX_RESTRICT Bxp_data = Bxp.dataPtr(); Real* const AMREX_RESTRICT Byp_data = Byp.dataPtr(); Real* const AMREX_RESTRICT Bzp_data = Bzp.dataPtr(); - ParserWrapper *xfield_partparser = mypc.m_Bx_particle_parser.get(); - ParserWrapper *yfield_partparser = mypc.m_By_particle_parser.get(); - ParserWrapper *zfield_partparser = mypc.m_Bz_particle_parser.get(); + ParserWrapper<4> *xfield_partparser = mypc.m_Bx_particle_parser.get(); + ParserWrapper<4> *yfield_partparser = mypc.m_By_particle_parser.get(); + ParserWrapper<4> *zfield_partparser = mypc.m_Bz_particle_parser.get(); Real time = warpx.gett_new(lev); amrex::ParallelFor(pti.numParticles(), [=] AMREX_GPU_DEVICE (long i) { ParticleReal x, y, z; GetPosition(i, x, y, z); - Bxp_data[i] = xfield_partparser->getField(x, y, z, time); - Byp_data[i] = yfield_partparser->getField(x, y, z, time); - Bzp_data[i] = zfield_partparser->getField(x, y, z, time); - }, - /* To allocate shared memory for the GPU threads. */ - /* But, for now only 4 doubles (x,y,z,t) are allocated. */ - amrex::Gpu::numThreadsPerBlockParallelFor() * sizeof(double) * 4 - ); + Bxp_data[i] = (*xfield_partparser)(x, y, z, time); + Byp_data[i] = (*yfield_partparser)(x, y, z, time); + Bzp_data[i] = (*zfield_partparser)(x, y, z, time); + }); } } |