15#ifndef dealii_arborx_distributed_tree_h
16#define dealii_arborx_distributed_tree_h
20#if defined(DEAL_II_ARBORX_WITH_MPI) && defined(DEAL_II_WITH_MPI)
25# include <ArborX_DistributedTree.hpp>
26# include <Kokkos_Core.hpp>
36# if ARBORX_VERSION_MAJOR < 2
44 template <
int dim,
typename Number>
53 template <
int dim,
typename Number>
71 template <
typename QueryType>
72 std::pair<std::vector<std::pair<int, int>>, std::vector<int>>
73 query(
const QueryType &queries);
84 template <
int dim,
typename Number>
89 Kokkos::DefaultHostExecutionSpace{},
95 template <
int dim,
typename Number>
104 template <
typename QueryType>
105 std::pair<std::vector<std::pair<int, int>>, std::vector<int>>
108 Kokkos::View<int *, Kokkos::HostSpace> offsets(
"offsets", 0);
109 Kokkos::View<Kokkos::pair<int, int> *, Kokkos::HostSpace> indices_ranks(
116 std::vector<std::pair<int, int>> indices_ranks_vector;
117 for (
unsigned int i = 0; i < indices_ranks.extent(0); ++i)
119 indices_ranks_vector.emplace_back(indices_ranks(i).first,
120 indices_ranks(i).second);
123 std::vector<int> offsets_vector;
124 offsets_vector.insert(offsets_vector.begin(),
126 offsets.data() + offsets.extent(0));
128 return {indices_ranks_vector, offsets_vector};
131 template <
typename Value>
156 template <
typename QueryType>
157 std::pair<std::vector<std::pair<int, int>>, std::vector<int>>
158 query(
const QueryType &queries);
164 ArborX::DistributedTree<Kokkos::HostSpace,
165 ArborX::PairValueIndex<Value, unsigned int>,
166 internal::IndexableGetter>
172 internal::ExtractIndexRank callback;
177 template <
typename Value>
179 const std::vector<Value> &values)
180 : distributed_tree(
comm,
181 Kokkos::DefaultHostExecutionSpace{},
182 ArborX::Experimental::attach_indices(values),
187 template <
typename Value>
188 template <
typename QueryType>
189 std::pair<std::vector<std::pair<int, int>>, std::vector<int>>
192 Kokkos::View<int *, Kokkos::HostSpace> offsets(
"offsets", 0);
193 Kokkos::View<Kokkos::pair<unsigned int, unsigned int> *, Kokkos::HostSpace>
194 indices_ranks(
"indices_ranks", 0);
195 if constexpr (QueryType::is_nearest)
197 distributed_tree.query(
198 Kokkos::DefaultHostExecutionSpace{},
200 ArborX::Experimental::declare_callback_constrained(callback),
206 distributed_tree.query(Kokkos::DefaultHostExecutionSpace{},
213 std::vector<std::pair<int, int>> indices_ranks_vector;
214 for (
unsigned int i = 0; i < indices_ranks.extent(0); ++i)
216 indices_ranks_vector.emplace_back(indices_ranks(i).first,
217 indices_ranks(i).second);
220 std::vector<int> offsets_vector;
221 offsets_vector.insert(offsets_vector.begin(),
223 offsets.data() + offsets.extent(0));
225 return {indices_ranks_vector, offsets_vector};
ArborX::DistributedTree< Kokkos::HostSpace > distributed_tree
std::pair< std::vector< std::pair< int, int > >, std::vector< int > > query(const QueryType &queries)
DistributedTree(const MPI_Comm comm, const std::vector< BoundingBox< dim, Number > > &bounding_boxes)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
*braid_SplitCommworld & comm