diff options
author | Gael Guennebaud <g.gael@free.fr> | 2017-06-09 11:57:53 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2017-06-09 11:57:53 +0200 |
commit | a7be4cd1b1ea4d85165f003d793f1d46b199b7bd (patch) | |
tree | f3ce1efddc643d59f4189beea0a42644c1767b98 /Eigen/src/IterativeLinearSolvers | |
parent | 498aa95a8b2b505c919efff8857a6fd2a5bbc172 (diff) |
Fix LeastSquareDiagonalPreconditioner for complexes (issue introduced in previous commit)
Diffstat (limited to 'Eigen/src/IterativeLinearSolvers')
-rw-r--r-- | Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h b/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h index 279c9173c..facdaf890 100644 --- a/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +++ b/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h @@ -158,18 +158,18 @@ class LeastSquareDiagonalPreconditioner : public DiagonalPreconditioner<_Scalar> for(Index j=0; j<mat.outerSize(); ++j) { for(typename MatType::InnerIterator it(mat,j); it; ++it) - m_invdiag(it.index()) += it.value(); + m_invdiag(it.index()) += numext::abs2(it.value()); } for(Index j=0; j<mat.cols(); ++j) - if(m_invdiag(j)>0) - m_invdiag(j) = RealScalar(1)/m_invdiag(j); + if(numext::real(m_invdiag(j))>RealScalar(0)) + m_invdiag(j) = RealScalar(1)/numext::real(m_invdiag(j)); } else { for(Index j=0; j<mat.outerSize(); ++j) { RealScalar sum = mat.innerVector(j).squaredNorm(); - if(sum>0) + if(sum>RealScalar(0)) m_invdiag(j) = RealScalar(1)/sum; else m_invdiag(j) = RealScalar(1); |