SOPT
Sparse OPTimisation
Functions
mpi_wavelets.cc File Reference
#include <catch2/catch_all.hpp>
#include <memory>
#include <random>
#include "sopt/types.h"
#include "sopt/wavelets.h"
+ Include dependency graph for mpi_wavelets.cc:

Go to the source code of this file.

Functions

 TEST_CASE ("Wavelet transform innards with integer data", "[wavelet]")
 

Function Documentation

◆ TEST_CASE()

TEST_CASE ( "Wavelet transform innards with integer data"  ,
""  [wavelet] 
)

Definition at line 8 of file mpi_wavelets.cc.

8  {
9  using namespace sopt::wavelets;
10  using namespace sopt;
11 
12  auto const world = mpi::Communicator::World();
13  sopt::wavelets::SARA const serial{std::make_tuple("DB4", 5), std::make_tuple("DB8", 2)};
14  CAPTURE(serial.size());
15  CAPTURE(world.size());
16  auto const leftover = serial.size() % world.size();
17  auto const start =
18  world.rank() * (serial.size() / world.size()) + std::min(world.rank(), leftover);
19  auto const end = start + (serial.size() / world.size()) +
20  ((1 <= leftover and leftover > world.rank()) ? 1 : 0);
21 
22  sopt::wavelets::SARA const parallel(serial.begin() + start, serial.begin() + end);
23 
24  auto constexpr Nx = 32;
25  auto constexpr Ny = 32;
26  auto const psi_serial = linear_transform<t_real>(serial, Nx, Ny);
27  auto const psi_parallel = linear_transform<t_real>(parallel, Nx, Ny, world);
28 
29  SECTION("Signal to Coefficients") {
30  auto const signal = world.broadcast<Vector<t_real>>(Vector<t_real>::Random(Nx * Ny));
31  Vector<t_real> const serial_coeffs =
32  (psi_serial.adjoint() * signal).segment(start * Nx * Ny, (end - start) * Nx * Ny);
33  Vector<t_real> const para_coeffs = psi_parallel.adjoint() * signal;
34  CAPTURE(start);
35  CAPTURE(end);
36  CHECK(serial_coeffs.isApprox(para_coeffs));
37  }
38 
39  SECTION("Coefficients to Signal") {
40  auto const coefficients =
41  world.broadcast<Vector<t_real>>(Vector<t_real>::Random(Nx * Ny * serial.size()));
42  Vector<t_real> const serial_signal = (psi_serial * coefficients);
43  Vector<t_real> const para_signal =
44  psi_parallel * coefficients.segment(start * Nx * Ny, (end - start) * Nx * Ny);
45  CHECK(serial_signal.isApprox(para_signal));
46  }
47 }
Sparsity Averaging Reweighted Analysis.
Definition: sara.h:20
Eigen::Matrix< T, Eigen::Dynamic, 1 > Vector
A vector of a given type.
Definition: types.h:24