26#include "system/System.hpp"
30#include <boost/mpi/collectives/gather.hpp>
36#include <unordered_map>
37#include <unordered_set>
58 auto const &box_geo = *
system.box_geo;
59 auto &cell_structure = *
system.cell_structure;
64 for (
auto const &[
pid1,
pid2] : m_pairs) {
65 for (
auto const pid : {
pid1,
pid2}) {
67 auto const *p = cell_structure.get_local_particle(pid);
68 if (p
and not p->is_ghost()) {
77 std::vector<std::vector<std::pair<int, Utils::Vector3d>>>
all_pid_pos;
80 if (comm.rank() != 0) {
85 std::unordered_map<int, Utils::Vector3d>
pos_map;
87 for (
auto const &[pid, pos] :
rank_data) {
94 for (
auto const &[
pid1,
pid2] : m_pairs) {
102 std::vector<std::size_t>
shape()
const override {
return {m_pairs.size()}; }
105 std::vector<std::pair<int, int>> m_pairs;
107 std::vector<std::pair<int, int>>
108 get_unique_pairs(std::vector<int>
const &ids1, std::vector<int>
const &ids2) {
110 for (
int id1 : ids1) {
111 for (
int id2 : ids2) {
Vector implementation and trait types for boost qvm interoperability.
This file contains everything related to the global cell structure / cell system.
Track pairwise distances between two sets of particles.
std::vector< double > evaluate(boost::mpi::communicator const &comm, ParticleReferenceRange const &, ParticleObservables::traits< Particle > const &) const override
Evaluate pairwise distances, gathering positions from all ranks.
std::vector< std::size_t > shape() const override
PairwiseDistances(std::vector< int > const &ids, std::vector< int > const &target_ids)
std::vector< int > const & ids() const
Calculate pairwise distances between two sets of particles.
std::vector< int > const & target_ids() const
PidPairwiseDistancesObservable(std::vector< int > const &ids, std::vector< int > const &target_ids)
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
std::vector< std::reference_wrapper< Particle const > > ParticleReferenceRange