diff options
author | 2022-10-10 13:50:56 -0700 | |
---|---|---|
committer | 2022-10-10 20:50:56 +0000 | |
commit | 23fa23209879cbdf5ef829530def162c2b343c72 (patch) | |
tree | 1560b42388bd1792625f73f7ed71e08e7bc44e9d /Source/Python/WarpXWrappers.cpp | |
parent | e9cc65ffeb0684a97618b67c2164d95ea497226c (diff) | |
download | WarpX-23fa23209879cbdf5ef829530def162c2b343c72.tar.gz WarpX-23fa23209879cbdf5ef829530def162c2b343c72.tar.zst WarpX-23fa23209879cbdf5ef829530def162c2b343c72.zip |
Add functions for reading particle id and cpu numbers correctly (#3457)
Diffstat (limited to 'Source/Python/WarpXWrappers.cpp')
-rw-r--r-- | Source/Python/WarpXWrappers.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Source/Python/WarpXWrappers.cpp b/Source/Python/WarpXWrappers.cpp index 61909cff7..bbcc26daf 100644 --- a/Source/Python/WarpXWrappers.cpp +++ b/Source/Python/WarpXWrappers.cpp @@ -488,6 +488,42 @@ namespace return data; } + void warpx_convert_id_to_long (amrex::Long* ids, const WarpXParticleContainer::ParticleType* pstructs, int size) + { + amrex::Long* d_ptr = nullptr; +#ifdef AMREX_USE_GPU + amrex::Gpu::DeviceVector<amrex::Long> d_ids(size); + d_ptr = d_ids.data(); +#else + d_ptr = ids; +#endif + amrex::ParallelFor(size, [=] AMREX_GPU_DEVICE (int i) noexcept + { + d_ptr[i] = pstructs[i].id(); + }); +#ifdef AMREX_USE_GPU + amrex::Gpu::dtoh_memcpy(ids, d_ptr, size*sizeof(amrex::Long)); +#endif + } + + void warpx_convert_cpu_to_int (int* cpus, const WarpXParticleContainer::ParticleType* pstructs, int size) + { + int* d_ptr = nullptr; +#ifdef AMREX_USE_GPU + amrex::Gpu::DeviceVector<int> d_cpus(size); + d_ptr = d_cpus.data(); +#else + d_ptr = cpus; +#endif + amrex::ParallelFor(size, [=] AMREX_GPU_DEVICE (int i) noexcept + { + d_ptr[i] = pstructs[i].cpu(); + }); +#ifdef AMREX_USE_GPU + amrex::Gpu::dtoh_memcpy(cpus, d_ptr, size*sizeof(int)); +#endif + } + int warpx_getParticleCompIndex ( const char* char_species_name, const char* char_comp_name ) { |