diff --git a/src/Particle/ArrayOfStructs.cpp b/src/Particle/ArrayOfStructs.cpp index da616c35..0b4d54d9 100644 --- a/src/Particle/ArrayOfStructs.cpp +++ b/src/Particle/ArrayOfStructs.cpp @@ -137,7 +137,7 @@ void make_ArrayOfStructs(py::module &m, std::string allocstr) .def("__getitem__", [](AOSType &aos, int const v){ return aos[v]; }, py::return_value_policy::reference) .def("to_host", [](AOSType const & aos) { - ArrayOfStructs h_data; + ArrayOfStructs h_data; h_data.resize(aos.size()); //py::array_t h_data(aos.size()); amrex::Gpu::copy(amrex::Gpu::deviceToHost, @@ -158,6 +158,9 @@ void make_ArrayOfStructs(py::module &m) // AMReX legacy AoS position + id/cpu particle ype using ParticleType = Particle; + // first, because used as copy target in methods in containers with other allocators + make_ArrayOfStructs (m, "pinned"); + // see Src/Base/AMReX_GpuContainers.H // !AMREX_USE_GPU: DefaultAllocator = std::allocator // AMREX_USE_GPU: DefaultAllocator = amrex::ArenaAllocator @@ -173,7 +176,6 @@ void make_ArrayOfStructs(py::module &m) make_ArrayOfStructs (m, "arena"); #endif // end work-around - make_ArrayOfStructs (m, "pinned"); #ifdef AMREX_USE_GPU make_ArrayOfStructs (m, "device"); make_ArrayOfStructs (m, "managed"); diff --git a/src/Particle/ParticleContainer.H b/src/Particle/ParticleContainer.H index d9efdeb4..d283d85b 100644 --- a/src/Particle/ParticleContainer.H +++ b/src/Particle/ParticleContainer.H @@ -394,6 +394,10 @@ void make_ParticleContainer_and_Iterators (py::module &m) if constexpr (!T_ParticleType::is_soa_particle) make_ParticleInitData(m); + // first, because used as copy target in methods in containers with other allocators + make_ParticleContainer_and_Iterators(m, "pinned"); + // see Src/Base/AMReX_GpuContainers.H // !AMREX_USE_GPU: DefaultAllocator = std::allocator // AMREX_USE_GPU: DefaultAllocator = amrex::ArenaAllocator @@ -415,8 +419,6 @@ void make_ParticleContainer_and_Iterators (py::module &m) amrex::ArenaAllocator>(m, "arena"); #endif // end work-around - make_ParticleContainer_and_Iterators(m, "pinned"); #ifdef AMREX_USE_GPU make_ParticleContainer_and_Iterators(m, "device"); diff --git a/src/Particle/ParticleTile.cpp b/src/Particle/ParticleTile.cpp index 68657e6e..7324b36e 100644 --- a/src/Particle/ParticleTile.cpp +++ b/src/Particle/ParticleTile.cpp @@ -143,6 +143,10 @@ void make_ParticleTile(py::module &m) make_ParticleTileData(m); } + // first, because used as copy target in methods in containers with other allocators + make_ParticleTile(m, "pinned"); + // see Src/Base/AMReX_GpuContainers.H // !AMREX_USE_GPU: DefaultAllocator = std::allocator // AMREX_USE_GPU: DefaultAllocator = amrex::ArenaAllocator @@ -164,8 +168,6 @@ void make_ParticleTile(py::module &m) amrex::ArenaAllocator>(m, "arena"); #endif // end work-around - make_ParticleTile(m, "pinned"); #ifdef AMREX_USE_GPU make_ParticleTile(m, "device"); diff --git a/src/Particle/StructOfArrays.cpp b/src/Particle/StructOfArrays.cpp index 6bad4e53..12dbc7f2 100644 --- a/src/Particle/StructOfArrays.cpp +++ b/src/Particle/StructOfArrays.cpp @@ -62,6 +62,9 @@ void make_StructOfArrays(py::module &m, std::string allocstr) template void make_StructOfArrays(py::module &m) { + // first, because used as copy target in methods in containers with other allocators + make_StructOfArrays(m, "pinned"); + // see Src/Base/AMReX_GpuContainers.H // !AMREX_USE_GPU: DefaultAllocator = std::allocator // AMREX_USE_GPU: DefaultAllocator = amrex::ArenaAllocator @@ -77,7 +80,6 @@ void make_StructOfArrays(py::module &m) make_StructOfArrays(m, "arena"); #endif // end work-around - make_StructOfArrays(m, "pinned"); #ifdef AMREX_USE_GPU make_StructOfArrays(m, "device"); make_StructOfArrays(m, "managed");