PURIFY
Next-generation radio interferometric imaging
distribute.h
Go to the documentation of this file.
1 #ifndef PURIFY_DISTRIBUTE_H
2 #define PURIFY_DISTRIBUTE_H
3 #include "purify/config.h"
4 #include <iostream>
5 #include <stdio.h>
6 #include <string>
7 #ifdef PURIFY_MPI
8 #include <sopt/mpi/communicator.h>
9 #endif
10 #include "purify/types.h"
11 #include "purify/logging.h"
12 #include "purify/uvw_utilities.h"
13 
14 namespace purify {
15 namespace distribute {
16 enum class plan { none, equal, radial, w_term };
18 std::vector<t_int> distribute_measurements(Vector<t_real> const &u, Vector<t_real> const &v,
19  Vector<t_real> const &w, t_int const number_of_nodes,
20  distribute::plan const distribution_plan = plan::equal,
21  t_int const &grid_size = 128);
22 
23 #ifdef PURIFY_MPI
24 inline std::vector<t_int> distribute_measurements(
25  utilities::vis_params const &params, sopt::mpi::Communicator const &comm,
26  distribute::plan const distribution_plan = plan::equal, t_int const &grid_size = 128) {
27  return distribute_measurements(params.u, params.v, params.w, comm.size(), distribution_plan,
28  grid_size);
29 }
30 #endif
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);
36 #ifdef PURIFY_MPI
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);
49 #endif
51 Vector<t_int> w_distribution(Vector<t_real> const &u, const Vector<t_real> &v,
52  const Vector<t_real> &w);
53 Vector<t_int> w_distribution(Vector<t_real> const &w);
55 Vector<t_int> distance_distribution(Vector<t_real> const &u, Vector<t_real> const &v);
57 Vector<t_int> equal_distribution(Vector<t_real> const &u, Vector<t_real> const &v,
58  t_int const &grid_size);
59 } // namespace distribute
60 } // namespace purify
61 #endif
const std::vector< t_real > u
data for u coordinate
Definition: operators.cc:18
const std::vector< t_real > v
data for v coordinate
Definition: operators.cc:20
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)
Definition: distribute.cc:57
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
Definition: distribute.cc:103
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.
Definition: distribute.cc:78
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.
Definition: distribute.cc:6
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.
Definition: distribute.cc:69
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