From 20801634613030c775336dac9a81d3cbe3d9b048 Mon Sep 17 00:00:00 2001 From: Nora Abi Akar <nora.abiakar@gmail.com> Date: Tue, 7 Jan 2020 15:43:59 +0100 Subject: [PATCH] Choose pivot on the diagonal if possible, otherwise choose leftmost element (#933) * Choose the pivot on the diagonal if possible when performing symbolic Gaussian elimination in modcc-generated mechanisms. --- modcc/symge.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modcc/symge.cpp b/modcc/symge.cpp index 704936c3..0968b040 100644 --- a/modcc/symge.cpp +++ b/modcc/symge.cpp @@ -94,10 +94,14 @@ std::vector<std::vector<symge::symbol>> gj_reduce(sym_matrix& A, symbol_table& t pivot p; p.row = r; const sym_row &row = A[r]; - for (unsigned c = 0; c < A.nrow(); ++c) { - if (row[c]) { - p.col = c; - break; + if (row[r]) { + p.col = r; + } else { + for (unsigned c = 0; c < A.nrow(); ++c) { + if (row[c]) { + p.col = c; + break; + } } } pivots.push_back(std::move(p)); -- GitLab