14 #include <AMReX_GpuContainers.H> 15 #include <AMReX_ParallelDescriptor.H> 46 template <
typename DstData,
typename SrcData>
47 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
48 void operator() (DstData& dst,
const SrcData& src,
int i_src,
int i_dst,
49 amrex::RandomEngine
const& engine)
const noexcept
52 dst.m_aos[i_dst] = src.m_aos[i_src];
55 for (
int j = 0; j < DstData::NAR; ++j)
57 for (
int j = 0; j < dst.m_num_runtime_real; ++j)
61 for (
int j = 0; j < DstData::NAI; ++j)
63 for (
int j = 0; j < dst.m_num_runtime_int; ++j)
69 int src_comp, dst_comp;
70 amrex::ParticleReal* AMREX_RESTRICT dst_data;
71 const amrex::ParticleReal* AMREX_RESTRICT src_data;
73 if (m_src_comps_r[j] < SrcData::NAR)
76 src_comp = m_src_comps_r[j];
77 src_data = src.m_rdata[src_comp];
82 src_comp = m_src_comps_r[j] - SrcData::NAR;
83 src_data = src.m_runtime_rdata[src_comp];
86 if (m_dst_comps_r[j] < DstData::NAR)
89 dst_comp = m_dst_comps_r[j];
90 dst_data = dst.m_rdata[dst_comp];
95 dst_comp = m_dst_comps_r[j] - DstData::NAR;
96 dst_data = dst.m_runtime_rdata[dst_comp];
99 dst_data[i_dst] = src_data[i_src];
105 int src_comp, dst_comp;
106 int* AMREX_RESTRICT dst_data;
107 int* AMREX_RESTRICT src_data;
109 if (m_src_comps_i[j] < SrcData::NAI)
111 src_comp = m_src_comps_i[j];
112 src_data = src.m_idata[src_comp];
116 src_comp = m_src_comps_i[j] - SrcData::NAI;
117 src_data = src.m_runtime_idata[src_comp];
120 if (m_dst_comps_i[j] < DstData::NAI)
122 dst_comp = m_dst_comps_i[j];
123 dst_data = dst.m_idata[dst_comp];
127 dst_comp = m_dst_comps_i[j] - DstData::NAI;
128 dst_data = dst.m_runtime_idata[dst_comp];
131 dst_data[i_dst] = src_data[i_src];
152 template <
class SrcPC,
class DstPC>
156 m_tag_real =
getSmartCopyTag(src.getParticleComps(), dst.getParticleComps());
157 m_tag_int =
getSmartCopyTag(src.getParticleiComps(), dst.getParticleiComps());
159 m_policy_real =
getPolicies(dst.getParticleComps());
160 m_policy_int =
getPolicies(dst.getParticleiComps());
167 AMREX_ASSERT(m_defined);
172 m_tag_int. src_comps.dataPtr(),
173 m_tag_int. dst_comps.dataPtr(),
174 m_policy_real.dataPtr(),
175 m_policy_int.dataPtr()};
int m_num_copy_int
Definition: SmartCopy.H:39
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_dst_comps_i
Definition: SmartCopy.H:41
SmartCopyTag getSmartCopyTag(const NameMap &src, const NameMap &dst) noexcept
Definition: SmartUtils.cpp:21
PolicyVec m_policy_int
Definition: SmartCopy.H:148
SmartCopyTag m_tag_int
Definition: SmartCopy.H:146
int m_num_copy_real
Definition: SmartCopy.H:35
const int * m_src_comps_r
Definition: SmartCopy.H:36
int size() const noexcept
Definition: SmartUtils.H:23
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int initializeIntValue(const InitializationPolicy policy) noexcept
Definition: DefaultInitialization.H:72
const InitializationPolicy * m_policy_real
Definition: SmartCopy.H:43
const InitializationPolicy * m_policy_int
Definition: SmartCopy.H:44
amrex::Gpu::DeviceVector< InitializationPolicy > PolicyVec
Definition: SmartUtils.H:15
const int * m_dst_comps_r
Definition: SmartCopy.H:37
Definition: SmartUtils.H:17
bool m_defined
Definition: SmartCopy.H:149
const int * m_src_comps_i
Definition: SmartCopy.H:40
SmartCopyFactory(const SrcPC &src, const DstPC &dst) noexcept
Definition: SmartCopy.H:153
PolicyVec m_policy_real
Definition: SmartCopy.H:147
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal initializeRealValue(const InitializationPolicy policy, amrex::RandomEngine const &engine) noexcept
Definition: DefaultInitialization.H:56
amrex::Gpu::DeviceVector< int > dst_comps
Definition: SmartUtils.H:21
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
SmartCopyTag m_tag_real
Definition: SmartCopy.H:145
This is a functor for performing a "smart copy" that works in both host and device code...
Definition: SmartCopy.H:33
bool isDefined() const noexcept
Definition: SmartCopy.H:178
SmartCopy getSmartCopy() const noexcept
Definition: SmartCopy.H:165
A factory for creating SmartCopy functors.
Definition: SmartCopy.H:143
amrex::Gpu::DeviceVector< int > src_comps
Definition: SmartUtils.H:20