1 #ifndef PURIFY_DISTRIBUTE_H
2 #define PURIFY_DISTRIBUTE_H
3 #include "purify/config.h"
8 #include <sopt/mpi/communicator.h>
15 namespace distribute {
19 Vector<t_real>
const &w, t_int
const number_of_nodes,
21 t_int
const &grid_size = 128);
32 std::tuple<std::vector<t_int>, std::vector<t_real>>
kmeans_algo(
33 const Vector<t_real> &w,
const t_int number_of_nodes,
const t_int iters,
34 const std::function<t_real(t_real)> &cost = [](t_real x) {
return x * x; },
35 const t_real rel_diff = 1e-3);
39 std::tuple<std::vector<t_int>, std::vector<t_real>>
kmeans_algo(
40 const Vector<t_real> &w,
const t_int number_of_nodes,
const t_int iters,
41 sopt::mpi::Communicator
const &comm,
42 const std::function<t_real(t_real)> &cost = [](t_real x) {
return x * x; },
43 const t_real rel_diff = 1e-3);
45 std::vector<t_int>
w_support(Vector<t_real>
const &w,
const std::vector<t_int> &image_index,
46 const std::vector<t_real> &w_stacks,
const t_real du,
47 const t_int min_support,
const t_int max_support,
48 const t_real fill_relaxation, sopt::mpi::Communicator
const &comm);
51 Vector<t_int>
w_distribution(Vector<t_real>
const &
u,
const Vector<t_real> &
v,
52 const Vector<t_real> &w);
58 t_int
const &grid_size);
const std::vector< t_real > u
data for u coordinate
const std::vector< t_real > v
data for v coordinate
Vector< t_int > w_distribution(const Vector< t_real > &u, const Vector< t_real > &v, Vector< t_real > const &w)
Distribute visibilities into nodes in order of w terms (useful for w-stacking)
std::tuple< std::vector< t_int >, std::vector< t_real > > kmeans_algo(const Vector< t_real > &w, const t_int number_of_nodes, const t_int iters, const std::function< t_real(t_real)> &cost, const t_real rel_diff)
patition w terms using k-means
Vector< t_int > equal_distribution(Vector< t_real > const &u, Vector< t_real > const &v, t_int const &grid_size)
Distribute the visiblities into nodes in order of density.
std::vector< t_int > distribute_measurements(Vector< t_real > const &u, Vector< t_real > const &v, Vector< t_real > const &w, t_int const number_of_nodes, distribute::plan const distribution_plan, t_int const &grid_size)
Distribute visiblities into groups.
Vector< t_int > distance_distribution(Vector< t_real > const &u, Vector< t_real > const &v)
Distribute visiblities into nodes in order of distance from the centre.
t_int w_support(const t_real w, const t_real du, const t_int min, const t_int max)
estimate support size of w given u resolution du