8#ifndef WARPX_SMART_CREATE_H_
9#define WARPX_SMART_CREATE_H_
40 template <
typename PartData>
43 PartData& prt,
const int i_prt,
45 const amrex::Real x = 0.0,
46 const amrex::Real y = 0.0,
47 const amrex::Real z = 0.0,
49 const int id = 0) const noexcept
51#if defined(WARPX_DIM_3D)
52 prt.m_rdata[
PIdx::x][i_prt] = x;
53 prt.m_rdata[PIdx::y][i_prt] = y;
54 prt.m_rdata[
PIdx::z][i_prt] = z;
55#elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
56 prt.m_rdata[
PIdx::x][i_prt] = x;
57 prt.m_rdata[
PIdx::z][i_prt] = z;
59#elif defined(WARPX_DIM_1D_Z)
60 prt.m_rdata[
PIdx::z][i_prt] = z;
62#elif defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
63 prt.m_rdata[
PIdx::x][i_prt] = x;
70 for (
int j = AMREX_SPACEDIM; j < PartData::NAR; ++j) {
73 for (
int j = 0; j < prt.m_num_runtime_real; ++j) {
78 for (
int j = 0; j < PartData::NAI; ++j) {
81 for (
int j = 0; j < prt.m_num_runtime_int; ++j) {
101 template <
class PartTileData>
#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
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal initializeRealValue(const InitializationPolicy policy, amrex::RandomEngine const &engine) noexcept
Definition DefaultInitialization.H:62
amrex::Gpu::DeviceVector< InitializationPolicy > PolicyVec
Definition SmartUtils.H:27
PolicyVec getPolicies(std::vector< std::string > const &names_vec) noexcept
Definition SmartUtils.cpp:16
PolicyVec m_policy_real
Definition SmartCreate.H:96
SmartCreateFactory(const PartTileData &part) noexcept
Definition SmartCreate.H:102
bool isDefined() const noexcept
Definition SmartCreate.H:115
SmartCreate getSmartCreate() const noexcept
Definition SmartCreate.H:108
bool m_defined
Definition SmartCreate.H:98
PolicyVec m_policy_int
Definition SmartCreate.H:97
__host__ __device__ void ignore_unused(const Ts &...)
__host__ __device__ std::uint64_t SetParticleIDandCPU(Long id, int cpu) noexcept
@ x
Definition WarpXParticleContainer.H:61
@ z
Definition WarpXParticleContainer.H:67
This is a functor for performing a "smart create" that works in both host and device code.
Definition SmartCreate.H:35
int m_weight_index
Definition SmartCreate.H:38
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:42
const InitializationPolicy * m_policy_int
Definition SmartCreate.H:37
const InitializationPolicy * m_policy_real
Definition SmartCreate.H:36