8 #ifndef SMART_CREATE_H_ 9 #define SMART_CREATE_H_ 13 #include <AMReX_AmrCore.H> 14 #include <AMReX_GpuContainers.H> 15 #include <AMReX_ParallelDescriptor.H> 38 template <
typename PartData>
39 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
41 PartData& prt,
const int i_prt,
42 amrex::RandomEngine
const& engine,
43 const amrex::Real
x = 0.0,
44 const amrex::Real y = 0.0,
45 const amrex::Real
z = 0.0,
47 const int id = 0) const noexcept
49 prt.m_aos[i_prt].pos(0) =
x;
50 #if (AMREX_SPACEDIM == 3) 51 prt.m_aos[i_prt].pos(1) = y;
52 prt.m_aos[i_prt].pos(2) =
z;
53 #elif (AMREX_SPACEDIM == 2) 54 prt.m_aos[i_prt].pos(1) =
z;
55 amrex::ignore_unused(y);
58 prt.m_aos[i_prt].cpu() = cpu;
59 prt.m_aos[i_prt].id() = id;
62 for (
int j = 0; j < PartData::NAR; ++j)
64 for (
int j = 0; j < prt.m_num_runtime_real; ++j)
65 prt.m_runtime_rdata[j][i_prt] =
initializeRealValue(m_policy_real[j+PartData::NAR], engine);
68 for (
int j = 0; j < PartData::NAI; ++j)
70 for (
int j = 0; j < prt.m_num_runtime_int; ++j)
89 template <
class PartTileData>
93 m_policy_real =
getPolicies(part.getParticleComps());
94 m_policy_int =
getPolicies(part.getParticleiComps());
100 AMREX_ASSERT(m_defined);
102 m_policy_int.dataPtr()};
108 #endif //SMART_CREATE_H_ const InitializationPolicy * m_policy_real
Definition: SmartCreate.H:34
bool m_defined
Definition: SmartCreate.H:86
SmartCreateFactory(const PartTileData &part) noexcept
Definition: SmartCreate.H:90
def x
Definition: read_lab_particles.py:25
This is a functor for performing a "smart create" that works in both host and device code...
Definition: SmartCreate.H:32
def z
Definition: read_lab_particles.py:26
PolicyVec m_policy_int
Definition: SmartCreate.H:85
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int initializeIntValue(const InitializationPolicy policy) noexcept
Definition: DefaultInitialization.H:72
amrex::Gpu::DeviceVector< InitializationPolicy > PolicyVec
Definition: SmartUtils.H:15
bool isDefined() const noexcept
Definition: SmartCreate.H:105
A factory for creating SmartCreate functors.
Definition: SmartCreate.H:82
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void operator()(PartData &prt, const int i_prt, amrex::RandomEngine const &engine, const amrex::Real x=0.0, const amrex::Real y=0.0, const amrex::Real z=0.0, const int cpu=0, const int id=0) const noexcept
Definition: SmartCreate.H:40
SmartCreate getSmartCreate() const noexcept
Definition: SmartCreate.H:98
PolicyVec m_policy_real
Definition: SmartCreate.H:84
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal initializeRealValue(const InitializationPolicy policy, amrex::RandomEngine const &engine) noexcept
Definition: DefaultInitialization.H:56
InitializationPolicy
This set of initialization policies describes what happens when we need to create a new particle due ...
Definition: DefaultInitialization.H:33
PolicyVec getPolicies(const NameMap &names) noexcept
Definition: SmartUtils.cpp:10
const InitializationPolicy * m_policy_int
Definition: SmartCreate.H:35
const int m_weight_index
Definition: SmartCreate.H:36