8 #ifndef WARPX_DEFAULTINITIALIZATION_H_
9 #define WARPX_DEFAULTINITIALIZATION_H_
117 template <
typename PTile>
119 const int n_external_attr_real,
120 const int n_external_attr_int,
121 const std::vector<std::string>& user_real_attribs,
122 const std::vector<std::string>& user_int_attribs,
123 const std::map<std::string, int>& particle_comps,
124 const std::map<std::string, int>& particle_icomps,
125 const std::vector<amrex::Parser*>& user_real_attrib_parser,
126 const std::vector<amrex::Parser*>& user_int_attrib_parser,
128 const bool do_qed_comps,
132 const int ionization_initial_level,
135 using namespace amrex::literals;
138 const auto n_user_real_attribs =
static_cast<int>(user_real_attribs.size());
139 const auto n_user_int_attribs =
static_cast<int>(user_int_attribs.size());
141 const auto soa = ptile.getParticleTileData();
145 constexpr
int lev = 0;
149 for (
int j =
PIdx::nattribs + n_external_attr_real; j < ptile.NumRealComps() ; ++j)
151 auto attr_ptr = ptile.GetStructOfArrays().GetRealData(j).data();
154 if (particle_comps.find(
"opticalDepthQSR") != particle_comps.end() &&
155 particle_comps.at(
"opticalDepthQSR") == j)
157 if (!do_qed_comps) {
continue; }
164 const int ip =
i + start;
165 attr_ptr[ip] = quantum_sync_get_opt(engine);
169 for (
int ip = start; ip < stop; ++ip) {
176 if (particle_comps.find(
"opticalDepthBW") != particle_comps.end() &&
177 particle_comps.at(
"opticalDepthBW") == j)
179 if (!do_qed_comps) {
continue; }
186 const int ip =
i + start;
187 attr_ptr[ip] = breit_wheeler_get_opt(engine);
191 for (
int ip = start; ip < stop; ++ip) {
198 for (
int ia = 0; ia < n_user_real_attribs; ++ia)
201 if (particle_comps.find(user_real_attribs[ia]) != particle_comps.end() &&
202 particle_comps.at(user_real_attribs[ia]) == j)
205 user_real_attrib_parser[ia]->compile<7>();
210 const int ip =
i + start;
211 amrex::ParticleReal xp, yp, zp;
212 get_position(ip, xp, yp, zp);
213 attr_ptr[ip] = user_real_attrib_parserexec(xp, yp, zp,
214 ux[ip], uy[ip], uz[ip], t);
218 for (
int ip = start; ip < stop; ++ip) {
219 amrex::ParticleReal xp, yp, zp;
220 get_position(ip, xp, yp, zp);
221 attr_ptr[ip] = user_real_attrib_parserexec(xp, yp, zp,
222 ux[ip], uy[ip], uz[ip], t);
230 for (
int j = n_external_attr_int; j < ptile.NumIntComps() ; ++j)
232 auto attr_ptr = ptile.GetStructOfArrays().GetIntData(j).data();
235 if (particle_icomps.find(
"ionizationLevel") != particle_icomps.end() &&
236 particle_icomps.at(
"ionizationLevel") == j)
241 const int ip =
i + start;
242 attr_ptr[ip] = ionization_initial_level;
245 for (
int ip = start; ip < stop; ++ip) {
246 attr_ptr[ip] = ionization_initial_level;
251 for (
int ia = 0; ia < n_user_int_attribs; ++ia)
254 if (particle_icomps.find(user_int_attribs[ia]) != particle_icomps.end() &&
255 particle_icomps.at(user_int_attribs[ia]) == j)
258 user_int_attrib_parser[ia]->compile<7>();
262 const int ip =
i + start;
263 amrex::ParticleReal xp, yp, zp;
264 get_position(ip, xp, yp, zp);
265 attr_ptr[ip] =
static_cast<int>(
266 user_int_attrib_parserexec(xp, yp, zp, ux[ip], uy[ip], uz[ip], t));
269 for (
int ip = start; ip < stop; ++ip) {
270 amrex::ParticleReal xp, yp, zp;
271 get_position(ip, xp, yp, zp);
272 attr_ptr[ip] =
static_cast<int>(
273 user_int_attrib_parserexec(xp, yp, zp, ux[ip], uy[ip], uz[ip], t));
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int initializeIntValue(const InitializationPolicy policy) noexcept
Definition: DefaultInitialization.H:78
InitializationPolicy
This set of initialization policies describes what happens when we need to create a new particle due ...
Definition: DefaultInitialization.H:39
static std::map< std::string, InitializationPolicy > initialization_policies
This map sets the initialization policy for each particle component used in WarpX.
Definition: DefaultInitialization.H:45
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal initializeRealValue(const InitializationPolicy policy, amrex::RandomEngine const &engine) noexcept
Definition: DefaultInitialization.H:62
Definition: BreitWheelerEngineWrapper.H:294
BreitWheelerGetOpticalDepth build_optical_depth_functor() const
Definition: BreitWheelerEngineWrapper.cpp:39
Definition: BreitWheelerEngineWrapper.H:78
Definition: QuantumSyncEngineWrapper.H:273
QuantumSynchrotronGetOpticalDepth build_optical_depth_functor()
Definition: QuantumSyncEngineWrapper.cpp:39
Definition: QuantumSyncEngineWrapper.H:76
amrex::Vector< amrex::Real > gett_new() const
Definition: WarpX.H:848
static WarpX & GetInstance()
Definition: WarpX.cpp:239
Definition: DefaultInitialization.H:90
void DefaultInitializeRuntimeAttributes(PTile &ptile, const int n_external_attr_real, const int n_external_attr_int, const std::vector< std::string > &user_real_attribs, const std::vector< std::string > &user_int_attribs, const std::map< std::string, int > &particle_comps, const std::map< std::string, int > &particle_icomps, const std::vector< amrex::Parser * > &user_real_attrib_parser, const std::vector< amrex::Parser * > &user_int_attrib_parser, const bool do_qed_comps, BreitWheelerEngine *p_bw_engine, QuantumSynchrotronEngine *p_qs_engine, const int ionization_initial_level, int start, int stop)
Default initialize runtime attributes in a tile. This routine does not initialize the first n_externa...
Definition: DefaultInitialization.H:118
void Abort(const std::string &msg)
std::enable_if_t< std::is_integral_v< T > > ParallelFor(TypeList< CTOs... >, std::array< int, sizeof...(CTOs)> const &runtime_options, T N, F &&f)
AMREX_ATTRIBUTE_FLATTEN_FOR void ParallelForRNG(T n, L const &f) noexcept
i
Definition: check_interp_points_and_weights.py:174
default
Definition: run_alltests.py:113
value
Definition: updateAMReX.py:141
@ nattribs
number of compile-time attributes
Definition: NamedComponentParticleContainer.H:38
@ uz
Definition: NamedComponentParticleContainer.H:34
@ uy
Definition: NamedComponentParticleContainer.H:34
@ ux
Definition: NamedComponentParticleContainer.H:34