PURIFY
Next-generation radio interferometric imaging
parallel_mpi_utilities.cc
Go to the documentation of this file.
1 #include "catch2/catch_all.hpp"
2 #include "purify/mpi_utilities.h"
3 
4 using namespace purify;
5 using Catch::Approx;
6 
7 TEST_CASE("Distribution of visibility data") {
8  auto const world = sopt::mpi::Communicator::World();
9  auto const N = 5;
10  utilities::vis_params params;
11 
12  params.u = Vector<t_real>::Random(N);
13  params.v = Vector<t_real>::Random(N);
14  params.w = Vector<t_real>::Random(N);
15  params.vis = Vector<t_complex>::Random(N);
16  params.weights = Vector<t_complex>::Random(N);
17 
18  std::vector<t_int> order(N);
19 
20  if (world.size() == 1) return;
21  order[0] = 1;
22  std::fill(order.begin() + 1, order.end(), 0);
23 
24  auto actual = utilities::regroup_and_scatter(params, order, world);
25  if (world.rank() == 0) {
26  CHECK(actual.u.size() == 4);
27  CHECK(actual.u(0) == Approx(params.u(N - 1)));
28  CHECK(actual.u.tail(N - 2).isApprox(params.u.segment(1, N - 2)));
29  } else if (world.rank() == 1) {
30  CHECK(actual.u.size() == 1);
31  CHECK(actual.u(0) == Approx(params.u(0)));
32  } else
33  CHECK(actual.u.size() == 0);
34 }
#define CHECK(CONDITION, ERROR)
Definition: casa.cc:6
vis_params regroup_and_scatter(vis_params const &params, std::vector< t_int > const &groups, sopt::mpi::Communicator const &comm)
TEST_CASE("Distribution of visibility data")
Vector< t_complex > vis
Definition: uvw_utilities.h:22
Vector< t_complex > weights
Definition: uvw_utilities.h:23