From 581196d5a142db7fdf36f82ffd446c482bb55eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Mon, 13 Jan 2020 14:07:41 +0100 Subject: [PATCH] #5313 Switch to use FullPivLU instead of the default PartialPivLU when inverting Tii. The full pivoting is more robust against numerical issues, and to fracture islands. --- .../RigTransmissibilityCondenser.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp index 3cb1b93459..6d75f9e3fe 100644 --- a/ApplicationCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp +++ b/ApplicationCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp @@ -29,9 +29,11 @@ #include #include + #include #include +#include //-------------------------------------------------------------------------------------------------- /// @@ -350,8 +352,21 @@ void RigTransmissibilityCondenser::calculateCondensedTransmissibilities() } else { - MatrixXd Tei = totalSystem.bottomLeftCorner( externalEquationCount, internalEquationCount ); - m_TiiInv = totalSystem.topLeftCorner( internalEquationCount, internalEquationCount ).inverse(); + MatrixXd Tei = totalSystem.bottomLeftCorner( externalEquationCount, internalEquationCount ); + MatrixXd Tii = totalSystem.topLeftCorner( internalEquationCount, internalEquationCount ); + + // std::ofstream outFileStream( "D:\\Data\\TestData\\TiiMatrix.txt" ); + // outFileStream << Tii; + + Eigen::FullPivLU solver( Tii ); + + // outFileStream << std::endl; + // outFileStream << "Rows x Cols: " << Tii.rows() << "x" << Tii.cols() << std::endl; + // outFileStream << "Invertible: " << ( solver.isInvertible() ? "True" : "False" ) << std::endl; + // outFileStream << "Condition: " << solver.rcond() << std::endl; + // outFileStream << "Rank: " << solver.rank() << std::endl; + + m_TiiInv = solver.inverse(); m_Tie = totalSystem.topRightCorner( internalEquationCount, externalEquationCount ); condensedSystem = Tee - Tei * m_TiiInv * m_Tie; }