From 6724cd3214b31be4ee38d95c3929c5461db99d0f Mon Sep 17 00:00:00 2001
From: Tammo Jan Dijkema <dijkema@astron.nl>
Date: Fri, 7 Sep 2018 13:15:26 +0000
Subject: [PATCH] Task #11550: cherry-pick r40722 into release branch

---
 CEP/DP3/DPPP_DDECal/src/DDECal.cc         |  1 -
 CEP/DP3/DPPP_DDECal/src/MultiDirSolver.cc | 11 ++++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/CEP/DP3/DPPP_DDECal/src/DDECal.cc b/CEP/DP3/DPPP_DDECal/src/DDECal.cc
index 7b90208bd8b..a6b1fc64f0d 100644
--- a/CEP/DP3/DPPP_DDECal/src/DDECal.cc
+++ b/CEP/DP3/DPPP_DDECal/src/DDECal.cc
@@ -877,7 +877,6 @@ namespace LOFAR {
             // Put solution weights in a contiguous piece of memory
             vector<double> weights;
             if (!itsConstraintSols[0][constraintNum][solNameNum].weights.empty()) {
-	      std::cout << "Has weights.\n";
               weights.resize(numSols);
               vector<double>::iterator nextpos = weights.begin();
               for (uint time=0; time<itsSols.size(); ++time) {
diff --git a/CEP/DP3/DPPP_DDECal/src/MultiDirSolver.cc b/CEP/DP3/DPPP_DDECal/src/MultiDirSolver.cc
index d2d4f985425..69019b9f281 100644
--- a/CEP/DP3/DPPP_DDECal/src/MultiDirSolver.cc
+++ b/CEP/DP3/DPPP_DDECal/src/MultiDirSolver.cc
@@ -167,7 +167,7 @@ bool MultiDirSolver::assignSolutions(std::vector<std::vector<DComplex> >& soluti
 
   // The stepsize is taken out, so that a small stepsize won't cause
   // a premature stopping criterion.
-  double stepMagnitude = avgAbsDiff/_stepSize/n;
+  double stepMagnitude = (n==0 ? 0 : avgAbsDiff/_stepSize/n);
   stepMagnitudes.emplace_back(stepMagnitude);
 
   if(useConstraintAccuracy)
@@ -375,7 +375,7 @@ void MultiDirSolver::performScalarIteration(size_t channelBlockIndex,
     // solve x^H in [g C] x^H  = v
     bool success = solver.Solve(gTimesCs[ant].data(), vs[ant].data());
     Matrix& x = vs[ant];
-    if(success)
+    if(success && x(0, 0) != 0.)
     {
       for(size_t d=0; d!=_nDirections; ++d)
         nextSolutions[ant*_nDirections + d] = x(d, 0);
@@ -639,7 +639,7 @@ void MultiDirSolver::performFullMatrixIteration(size_t channelBlockIndex,
     // solve x^H in [g C] x^H  = v
     bool success = solver.Solve(gTimesCs[ant].data(), vs[ant].data());
     Matrix& x = vs[ant];
-    if(success)
+    if(success && x(0, 0) != 0.)
     {
       for(size_t d=0; d!=_nDirections; ++d)
       {
@@ -650,8 +650,9 @@ void MultiDirSolver::performFullMatrixIteration(size_t channelBlockIndex,
       }
     }
     else {
-      for(size_t i=0; i!=_nDirections*4; ++i)
-        nextSolutions[ant*_nDirections + i] = std::numeric_limits<double>::quiet_NaN();
+      for(size_t i=0; i!=_nDirections*4; ++i) {
+        nextSolutions[ant*_nDirections*4 + i] = std::numeric_limits<double>::quiet_NaN();
+      }
     }
   }
   _timerSolve.Pause();
-- 
GitLab