diff --git a/cpp/particles/p2p_ghost_collisions.hpp b/cpp/particles/p2p_ghost_collisions.hpp index b82d122ae29dea576c745af12e85448c51b1df59..cb7270fb76128be90ed1a27255a150cfdec48dd6 100644 --- a/cpp/particles/p2p_ghost_collisions.hpp +++ b/cpp/particles/p2p_ghost_collisions.hpp @@ -25,6 +25,28 @@ #include <cstring> #include <set> +#include <utility> +#include <vector> +template < class partsize_t> +std::vector<partsize_t> pairs2vec(std::set <std::pair <partsize_t,partsize_t>> ID_pairs){ + std::vector<partsize_t> v(2*ID_pairs.size()); + for(unsigned int i=0; i < ID_pairs.size(); i++) + { + v[2*i-2] = std::get<0>(*std::next(ID_pairs.begin(), i)); + v[2*i-1] = std::get<1>(*std::next(ID_pairs.begin(), i)); + } + return v; +} + +template < class partsize_t> +std::set <std::pair <partsize_t,partsize_t>> vec2pairs(std::vector<partsize_t> v){ + std::set <std::pair <partsize_t,partsize_t>> ID_pairs; + for(unsigned int i=0; i < v.size()/2; i++) + { + ID_pairs.insert(std::pair <partsize_t,partsize_t> (v[2*i],v[2*i+1])); + } + return ID_pairs; +} template <class real_number, class partsize_t> class p2p_ghost_collisions{ @@ -61,7 +83,7 @@ public: collision_counter += other.collision_counter; std::set <std::pair <partsize_t, partsize_t>> new_collision_pairs; std::set_union(collision_pairs.begin(), collision_pairs.end(), - other.collision_pairs.begin(), other.collision_pairs.end(), + other.collision_pairs.begin(), other.collision_pairs.end(), std::inserter(new_collision_pairs, new_collision_pairs.begin())); collision_pairs = new_collision_pairs; }