aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/PhysicalParticleContainer.cpp
diff options
context:
space:
mode:
authorGravatar Neïl Zaim <49716072+NeilZaim@users.noreply.github.com> 2022-09-02 18:06:32 +0200
committerGravatar GitHub <noreply@github.com> 2022-09-02 09:06:32 -0700
commit09940d721ac2cbb6173f7a3855a969f1f6e98bce (patch)
treec1d4541ee072ea0a20033e171a7751354dfb28c2 /Source/Particles/PhysicalParticleContainer.cpp
parent1c49cd4bf7180308cd37e65f21e6a0bf77a56dbb (diff)
downloadWarpX-09940d721ac2cbb6173f7a3855a969f1f6e98bce.tar.gz
WarpX-09940d721ac2cbb6173f7a3855a969f1f6e98bce.tar.zst
WarpX-09940d721ac2cbb6173f7a3855a969f1f6e98bce.zip
Initialize user defined runtime attributes in AddPlasmaFlux (#3359)
Diffstat (limited to '')
-rw-r--r--Source/Particles/PhysicalParticleContainer.cpp34
1 files changed, 32 insertions, 2 deletions
diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp
index 981dce211..97f890f33 100644
--- a/Source/Particles/PhysicalParticleContainer.cpp
+++ b/Source/Particles/PhysicalParticleContainer.cpp
@@ -1392,8 +1392,10 @@ PhysicalParticleContainer::AddPlasmaFlux (amrex::Real dt)
InjectorPosition* inj_pos = plasma_injector->getInjectorPosition();
InjectorDensity* inj_rho = plasma_injector->getInjectorDensity();
InjectorMomentum* inj_mom = plasma_injector->getInjectorMomentum();
- Real density_min = plasma_injector->density_min;
- Real density_max = plasma_injector->density_max;
+ const amrex::Real density_min = plasma_injector->density_min;
+ const amrex::Real density_max = plasma_injector->density_max;
+ constexpr int level_zero = 0;
+ const amrex::Real t = WarpX::GetInstance().gett_new(level_zero);
#ifdef WARPX_DIM_RZ
const int nmodes = WarpX::n_rz_azimuthal_modes;
@@ -1558,6 +1560,26 @@ PhysicalParticleContainer::AddPlasmaFlux (amrex::Real dt)
pa[ia] = soa.GetRealData(ia).data() + old_size;
}
+ // user-defined integer and real attributes
+ const int n_user_int_attribs = m_user_int_attribs.size();
+ const int n_user_real_attribs = m_user_real_attribs.size();
+ amrex::Gpu::DeviceVector<int*> pa_user_int(n_user_int_attribs);
+ amrex::Gpu::DeviceVector<ParticleReal*> pa_user_real(n_user_real_attribs);
+ amrex::Gpu::DeviceVector< amrex::ParserExecutor<7> > user_int_attrib_parserexec(n_user_int_attribs);
+ amrex::Gpu::DeviceVector< amrex::ParserExecutor<7> > user_real_attrib_parserexec(n_user_real_attribs);
+ for (int ia = 0; ia < n_user_int_attribs; ++ia) {
+ pa_user_int[ia] = soa.GetIntData(particle_icomps[m_user_int_attribs[ia]]).data() + old_size;
+ user_int_attrib_parserexec[ia] = m_user_int_attrib_parser[ia]->compile<7>();
+ }
+ for (int ia = 0; ia < n_user_real_attribs; ++ia) {
+ pa_user_real[ia] = soa.GetRealData(particle_comps[m_user_real_attribs[ia]]).data() + old_size;
+ user_real_attrib_parserexec[ia] = m_user_real_attrib_parser[ia]->compile<7>();
+ }
+ int** pa_user_int_data = pa_user_int.dataPtr();
+ ParticleReal** pa_user_real_data = pa_user_real.dataPtr();
+ amrex::ParserExecutor<7> const* user_int_parserexec_data = user_int_attrib_parserexec.dataPtr();
+ amrex::ParserExecutor<7> const* user_real_parserexec_data = user_real_attrib_parserexec.dataPtr();
+
int* p_ion_level = nullptr;
if (do_field_ionization) {
p_ion_level = soa.GetIntData(particle_icomps["ionizationLevel"]).data() + old_size;
@@ -1719,6 +1741,14 @@ PhysicalParticleContainer::AddPlasmaFlux (amrex::Real dt)
p_optical_depth_BW[ip] = breit_wheeler_get_opt(engine);
}
#endif
+ // Initialize user-defined integers with user-defined parser
+ for (int ia = 0; ia < n_user_int_attribs; ++ia) {
+ pa_user_int_data[ia][ip] = static_cast<int>(user_int_parserexec_data[ia](pos.x, pos.y, pos.z, u.x, u.y, u.z, t));
+ }
+ // Initialize user-defined real attributes with user-defined parser
+ for (int ia = 0; ia < n_user_real_attribs; ++ia) {
+ pa_user_real_data[ia][ip] = user_real_parserexec_data[ia](pos.x, pos.y, pos.z, u.x, u.y, u.z, t);
+ }
Real weight = dens * scale_fac * dt;
#ifdef WARPX_DIM_RZ