8 #ifndef WARPX_SMART_COPY_H_
9 #define WARPX_SMART_COPY_H_
46 template <
typename DstData,
typename SrcData>
48 void operator() (DstData& dst,
const SrcData& src,
int i_src,
int i_dst,
52 for (
int j = 0; j < DstData::NAR; ++j) {
55 for (
int j = 0; j < dst.m_num_runtime_real; ++j) {
60 for (
int j = 0; j < DstData::NAI; ++j) {
63 for (
int j = 0; j < dst.m_num_runtime_int; ++j) {
70 int src_comp, dst_comp;
78 src_data = src.m_rdata[src_comp];
84 src_data = src.m_runtime_rdata[src_comp];
91 dst_data = dst.m_rdata[dst_comp];
97 dst_data = dst.m_runtime_rdata[dst_comp];
100 dst_data[i_dst] = src_data[i_src];
106 int src_comp, dst_comp;
111 static_assert(SrcData::NAI == 0 && DstData::NAI == 0,
112 "SmartCopy assumes all int data is runtime-added.");
115 src_data = src.m_runtime_idata[src_comp];
118 dst_data = dst.m_runtime_idata[dst_comp];
120 dst_data[i_dst] = src_data[i_src];
141 template <
class SrcPC,
class DstPC>
#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
PolicyVec getPolicies(const NameMap &names) noexcept
Definition: SmartUtils.cpp:16
SmartCopyTag getSmartCopyTag(const NameMap &src, const NameMap &dst) noexcept
Definition: SmartUtils.cpp:34
A factory for creating SmartCopy functors.
Definition: SmartCopy.H:133
SmartCopyTag m_tag_int
Definition: SmartCopy.H:135
PolicyVec m_policy_int
Definition: SmartCopy.H:137
SmartCopy getSmartCopy() const noexcept
Definition: SmartCopy.H:150
SmartCopyFactory(const SrcPC &src, const DstPC &dst) noexcept
Definition: SmartCopy.H:142
bool isDefined() const noexcept
Definition: SmartCopy.H:163
bool m_defined
Definition: SmartCopy.H:138
PolicyVec m_policy_real
Definition: SmartCopy.H:136
SmartCopyTag m_tag_real
Definition: SmartCopy.H:134
This is a functor for performing a "smart copy" that works in both host and device code.
Definition: SmartCopy.H:34
const int * m_dst_comps_i
Definition: SmartCopy.H:41
const int * m_dst_comps_r
Definition: SmartCopy.H:37
int m_num_copy_int
Definition: SmartCopy.H:39
const int * m_src_comps_r
Definition: SmartCopy.H:36
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void operator()(DstData &dst, const SrcData &src, int i_src, int i_dst, amrex::RandomEngine const &engine) const noexcept
Definition: SmartCopy.H:48
const int * m_src_comps_i
Definition: SmartCopy.H:40
const InitializationPolicy * m_policy_real
Definition: SmartCopy.H:43
const InitializationPolicy * m_policy_int
Definition: SmartCopy.H:44
int m_num_copy_real
Definition: SmartCopy.H:35
Definition: SmartUtils.H:30
amrex::Gpu::DeviceVector< int > dst_comps
Definition: SmartUtils.H:33
int size() const noexcept
Definition: SmartUtils.H:35
amrex::Gpu::DeviceVector< int > src_comps
Definition: SmartUtils.H:32