aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Particles')
-rw-r--r--Source/Particles/MultiParticleContainer.H12
-rw-r--r--Source/Particles/MultiParticleContainer.cpp24
-rw-r--r--Source/Particles/PhysicalParticleContainer.cpp39
3 files changed, 33 insertions, 42 deletions
diff --git a/Source/Particles/MultiParticleContainer.H b/Source/Particles/MultiParticleContainer.H
index 8d951263e..5f809f2cc 100644
--- a/Source/Particles/MultiParticleContainer.H
+++ b/Source/Particles/MultiParticleContainer.H
@@ -223,13 +223,13 @@ public:
amrex::Vector<amrex::Real> m_B_external_particle;
amrex::Vector<amrex::Real> m_E_external_particle;
// ParserWrapper for B_external on the particle
- std::unique_ptr<ParserWrapper> m_Bx_particle_parser;
- std::unique_ptr<ParserWrapper> m_By_particle_parser;
- std::unique_ptr<ParserWrapper> m_Bz_particle_parser;
+ std::unique_ptr<ParserWrapper<4> > m_Bx_particle_parser;
+ std::unique_ptr<ParserWrapper<4> > m_By_particle_parser;
+ std::unique_ptr<ParserWrapper<4> > m_Bz_particle_parser;
// ParserWrapper for E_external on the particle
- std::unique_ptr<ParserWrapper> m_Ex_particle_parser;
- std::unique_ptr<ParserWrapper> m_Ey_particle_parser;
- std::unique_ptr<ParserWrapper> m_Ez_particle_parser;
+ std::unique_ptr<ParserWrapper<4> > m_Ex_particle_parser;
+ std::unique_ptr<ParserWrapper<4> > m_Ey_particle_parser;
+ std::unique_ptr<ParserWrapper<4> > m_Ez_particle_parser;
protected:
diff --git a/Source/Particles/MultiParticleContainer.cpp b/Source/Particles/MultiParticleContainer.cpp
index ac3bac467..6252d1ac4 100644
--- a/Source/Particles/MultiParticleContainer.cpp
+++ b/Source/Particles/MultiParticleContainer.cpp
@@ -130,12 +130,12 @@ MultiParticleContainer::ReadParameters ()
str_Bz_ext_particle_function);
// Parser for B_external on the particle
- m_Bx_particle_parser.reset(new ParserWrapper(
- makeParser(str_Bx_ext_particle_function)));
- m_By_particle_parser.reset(new ParserWrapper(
- makeParser(str_By_ext_particle_function)));
- m_Bz_particle_parser.reset(new ParserWrapper(
- makeParser(str_Bz_ext_particle_function)));
+ m_Bx_particle_parser.reset(new ParserWrapper<4>(
+ makeParser(str_Bx_ext_particle_function,{"x","y","z","t"})));
+ m_By_particle_parser.reset(new ParserWrapper<4>(
+ makeParser(str_By_ext_particle_function,{"x","y","z","t"})));
+ m_Bz_particle_parser.reset(new ParserWrapper<4>(
+ makeParser(str_Bz_ext_particle_function,{"x","y","z","t"})));
}
@@ -155,12 +155,12 @@ MultiParticleContainer::ReadParameters ()
Store_parserString(pp, "Ez_external_particle_function(x,y,z,t)",
str_Ez_ext_particle_function);
// Parser for E_external on the particle
- m_Ex_particle_parser.reset(new ParserWrapper(
- makeParser(str_Ex_ext_particle_function)));
- m_Ey_particle_parser.reset(new ParserWrapper(
- makeParser(str_Ey_ext_particle_function)));
- m_Ez_particle_parser.reset(new ParserWrapper(
- makeParser(str_Ez_ext_particle_function)));
+ m_Ex_particle_parser.reset(new ParserWrapper<4>(
+ makeParser(str_Ex_ext_particle_function,{"x","y","z","t"})));
+ m_Ey_particle_parser.reset(new ParserWrapper<4>(
+ makeParser(str_Ey_ext_particle_function,{"x","y","z","t"})));
+ m_Ez_particle_parser.reset(new ParserWrapper<4>(
+ makeParser(str_Ez_ext_particle_function,{"x","y","z","t"})));
}
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);
+ });
}
}