Use numext::sqrt in ConjugateGradient.

(cherry picked from commit 7896c7dc6bd1bd34dd9636bdd3426e3c28e6a246)
This commit is contained in:
Antonio Sánchez 2022-07-29 20:17:23 +00:00 committed by Antonio Sanchez
parent a5469a6f0f
commit 61efca2e90
2 changed files with 5 additions and 7 deletions

View File

@ -29,8 +29,6 @@ void conjugate_gradient(const MatrixType& mat, const Rhs& rhs, Dest& x,
const Preconditioner& precond, Index& iters,
typename Dest::RealScalar& tol_error)
{
using std::sqrt;
using std::abs;
typedef typename Dest::RealScalar RealScalar;
typedef typename Dest::Scalar Scalar;
typedef Matrix<Scalar,Dynamic,1> VectorType;
@ -56,7 +54,7 @@ void conjugate_gradient(const MatrixType& mat, const Rhs& rhs, Dest& x,
if (residualNorm2 < threshold)
{
iters = 0;
tol_error = sqrt(residualNorm2 / rhsNorm2);
tol_error = numext::sqrt(residualNorm2 / rhsNorm2);
return;
}
@ -86,7 +84,7 @@ void conjugate_gradient(const MatrixType& mat, const Rhs& rhs, Dest& x,
p = z + beta * p; // update search direction
i++;
}
tol_error = sqrt(residualNorm2 / rhsNorm2);
tol_error = numext::sqrt(residualNorm2 / rhsNorm2);
iters = i;
}

View File

@ -279,10 +279,10 @@ struct vectorization_logic_half
// which causes many of these tests to fail since they don't vectorize if
// EIGEN_UNALIGNED_VECTORIZE is 0 (the matrix is assumed unaligned).
// Adjust the matrix sizes to account for these alignment issues.
constexpr int PacketBytes = sizeof(Scalar)*PacketSize;
constexpr int MinVSize = EIGEN_UNALIGNED_VECTORIZE ? PacketSize
enum { PacketBytes = sizeof(Scalar)*PacketSize };
enum { MinVSize = EIGEN_UNALIGNED_VECTORIZE ? PacketSize
: PacketBytes >= EIGEN_MIN_ALIGN_BYTES ? PacketSize
: (EIGEN_MIN_ALIGN_BYTES + sizeof(Scalar) - 1) / sizeof(Scalar);
: (EIGEN_MIN_ALIGN_BYTES + sizeof(Scalar) - 1) / sizeof(Scalar) };
typedef Matrix<Scalar,MinVSize,1> Vector1;
typedef Matrix<Scalar,MinVSize,MinVSize> Matrix11;