aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/PhysicalParticleContainer.cpp
diff options
context:
space:
mode:
authorGravatar Weiqun Zhang <weiqunzhang@lbl.gov> 2020-02-10 11:20:10 -0800
committerGravatar Weiqun Zhang <weiqunzhang@lbl.gov> 2020-02-10 11:20:10 -0800
commitf9e92c4e2a774100eccbe516b9608944fdb160ff (patch)
treeea7e0649d5b9a18b7974a1ee4a3d3c75ec42375e /Source/Particles/PhysicalParticleContainer.cpp
parentf65189fec6394faf798e29193cc20be07e56dfe6 (diff)
downloadWarpX-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.cpp39
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);
+ });
}
}