DP3
IterativeScalarSolver.h
Go to the documentation of this file.
1 // Copyright (C) 2020 ASTRON (Netherlands Institute for Radio Astronomy)
2 // SPDX-License-Identifier: GPL-3.0-or-later
3 
4 #ifndef DDECAL_ITERATIVE_SCALAR_SOLVER_H
5 #define DDECAL_ITERATIVE_SCALAR_SOLVER_H
6 
7 #include "SolverBase.h"
8 #include "SolveData.h"
9 
10 namespace dp3 {
11 namespace ddecal {
12 
16 template <typename VisMatrix>
17 class IterativeScalarSolver final : public SolverBase {
18  public:
21  std::vector<std::vector<DComplex>>& solutions,
22  double time) override;
23 
24  size_t NSolutionPolarizations() const override { return 1; }
25 
26  bool SupportsDdSolutionIntervals() const override { return true; }
27 
28  private:
29  void PerformIteration(size_t ch_block, const ChannelBlockData& cb_data,
30  std::vector<VisMatrix>& v_residual,
31  const std::vector<DComplex>& solutions,
32  SolutionTensor& next_solutions);
33 
34  template <bool Add>
35  void AddOrSubtractDirection(const ChannelBlockData& cb_data,
36  std::vector<VisMatrix>& v_residual,
37  size_t direction,
38  const std::vector<DComplex>& solutions);
39 
40  void SolveDirection(size_t ch_block, const ChannelBlockData& cb_data,
41  const std::vector<VisMatrix>& v_residual,
42  size_t direction, const std::vector<DComplex>& solutions,
43  SolutionTensor& next_solutions);
44 };
45 
46 extern template class IterativeScalarSolver<std::complex<float>>;
47 extern template class IterativeScalarSolver<aocommon::MC2x2F>;
48 extern template class IterativeScalarSolver<aocommon::MC2x2FDiag>;
49 
50 } // namespace ddecal
51 } // namespace dp3
52 
53 #endif // DDECAL_ITERATIVE_SCALAR_SOLVER_H
Definition: IterativeScalarSolver.h:17
typename SolveData< VisMatrix >::ChannelBlockData ChannelBlockData
Definition: IterativeScalarSolver.h:19
size_t NSolutionPolarizations() const override
Definition: IterativeScalarSolver.h:24
bool SupportsDdSolutionIntervals() const override
Definition: IterativeScalarSolver.h:26
SolveResult Solve(const SolveData< VisMatrix > &data, std::vector< std::vector< DComplex >> &solutions, double time) override
Definition: SolveData.h:29
Definition: SolverBase.h:24
xt::xtensor< std::complex< double >, 4 > SolutionTensor
Definition: Solutions.h:19
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53
Definition: SolverBase.h:61