diff --git a/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.C b/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.C index df786419ce..681c82c07d 100644 --- a/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.C +++ b/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -74,11 +74,9 @@ void Foam::DiagonalMatrix::invert() { for (Type& val : *this) { - if (mag(val) < VSMALL) - { - val = Zero; - } - else + // If mag(val) VSMALL) { val = Type(1)/val; } @@ -149,21 +147,19 @@ namespace Foam // * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * // -//- Return the matrix inverse as a DiagonalMatrix if no elem is equal to zero +//- Return the matrix inverse as a DiagonalMatrix template DiagonalMatrix inv(const DiagonalMatrix& mat) { - DiagonalMatrix Ainv(mat.size()); + // Construct with fall-back value conditional calculation + // of invert to avoid over-eager compiler optimisation + DiagonalMatrix Ainv(mat.size(), Zero); Type* iter = Ainv.begin(); for (const Type& val : mat) { - if (mag(val) < VSMALL) - { - *iter = Zero; - } - else + if (mag(val) > VSMALL) { *iter = Type(1)/val; } diff --git a/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H b/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H index e9e80d4c23..857daea5d8 100644 --- a/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H +++ b/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2019-2020 OpenCFD Ltd. + Copyright (C) 2019-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -94,7 +94,7 @@ public: // Member Functions - //- Return the matrix inverse into itself if no elem is equal to zero + //- Return the matrix inverse into itself void invert(); //- Return a sort permutation labelList according to