From 0f9af72f25f92dd5e98f8c0cedaba18ca7dcd933 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sun, 13 Dec 2020 16:44:41 +0100 Subject: [PATCH] GCS: reduce input parameters in makeDenseQRDecomposition --- src/Mod/Sketcher/App/planegcs/GCS.cpp | 24 +++++++++++++++++------- src/Mod/Sketcher/App/planegcs/GCS.h | 4 ++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/Mod/Sketcher/App/planegcs/GCS.cpp b/src/Mod/Sketcher/App/planegcs/GCS.cpp index b4ccaa5277..45628392ec 100644 --- a/src/Mod/Sketcher/App/planegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/planegcs/GCS.cpp @@ -3915,14 +3915,15 @@ SolverReportingManager::Manager().LogToFile("GCS::System::diagnose()\n"); #endif Eigen::MatrixXd R; - int paramsNum = 0; - int constrNum = 0; - int rank = 0; + int rank = 0; // rank is not cheap to retrieve from qrJT in DenseQR Eigen::FullPivHouseholderQR qrJT; if(qrAlgorithm==EigenDenseQR){ - makeDenseQRDecomposition( J, jacobianconstraintmap, qrJT, paramsNum, constrNum, rank, R); + makeDenseQRDecomposition( J, jacobianconstraintmap, qrJT, rank, R); + + int paramsNum = qrJT.rows(); + int constrNum = qrJT.cols(); if (J.rows() > 0) { identifyDependentGeometryParametersInTransposedJacobianDenseQRDecomposition( @@ -3951,7 +3952,10 @@ SolverReportingManager::Manager().LogToFile("GCS::System::diagnose()\n"); } } else if(qrAlgorithm==EigenSparseQR){ - makeSparseQRDecomposition( J, jacobianconstraintmap, SqrJT, paramsNum, constrNum, rank, R); + makeSparseQRDecomposition( J, jacobianconstraintmap, SqrJT, rank, R); + + int paramsNum = SqrJT.rows(); + int constrNum = SqrJT.cols(); if (J.rows() > 0) { // Detecting conflicting or redundant constraints @@ -3983,7 +3987,7 @@ SolverReportingManager::Manager().LogToFile("GCS::System::diagnose()\n"); void System::makeDenseQRDecomposition( const Eigen::MatrixXd &J, std::map &jacobianconstraintmap, Eigen::FullPivHouseholderQR& qrJT, - int ¶msNum, int &constrNum, int &rank, Eigen::MatrixXd & R) + int &rank, Eigen::MatrixXd & R) { #ifdef _GCS_DEBUG @@ -3995,6 +3999,9 @@ void System::makeDenseQRDecomposition( const Eigen::MatrixXd &J, std::map 0) { qrJT.compute(J.topRows(jacobianconstraintmap.size()).transpose()); //Eigen::MatrixXd Q = qrJT.matrixQ (); @@ -4034,7 +4041,7 @@ void System::makeDenseQRDecomposition( const Eigen::MatrixXd &J, std::map &jacobianconstraintmap, Eigen::SparseQR, Eigen::COLAMDOrdering > &SqrJT, - int ¶msNum, int &constrNum, int &rank, Eigen::MatrixXd & R) + int &rank, Eigen::MatrixXd & R) { #ifdef EIGEN_SPARSEQR_COMPATIBLE Eigen::SparseMatrix SJ; @@ -4055,6 +4062,9 @@ void System::makeSparseQRDecomposition( const Eigen::MatrixXd &J, std::map 0) { auto SJT = SJ.topRows(jacobianconstraintmap.size()).transpose(); diff --git a/src/Mod/Sketcher/App/planegcs/GCS.h b/src/Mod/Sketcher/App/planegcs/GCS.h index 13d4ba852d..8140f34e6c 100644 --- a/src/Mod/Sketcher/App/planegcs/GCS.h +++ b/src/Mod/Sketcher/App/planegcs/GCS.h @@ -135,11 +135,11 @@ namespace GCS void makeDenseQRDecomposition( const Eigen::MatrixXd &J, std::map &jacobianconstraintmap, Eigen::FullPivHouseholderQR& qrJT, - int ¶msNum, int &constrNum, int &rank, Eigen::MatrixXd &R); + int &rank, Eigen::MatrixXd &R); void makeSparseQRDecomposition( const Eigen::MatrixXd &J, std::map &jacobianconstraintmap, Eigen::SparseQR, Eigen::COLAMDOrdering > &SqrJT, - int ¶msNum, int &constrNum, int &rank, Eigen::MatrixXd &R); + int &rank, Eigen::MatrixXd &R); // This function name is long for a reason: // - Only for DenseQR