From 86c621b68f23f98fc30ed230be222ce4dd9432cd Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@unibas.ch>
Date: Thu, 28 Apr 2022 16:23:19 +0200
Subject: [PATCH] bugfix: avoid Eigen assertion in FindMembrane with cmake flag
-DOPTIMIZE=0
Eigen does not like to compute "Thin" U and V matrices in JacobiSVD when
matrix size is fixed at compile time. This triggers an assertion (optimized
away with -DOPTIMIZE=1). Since we're talking of a quadratic matrix here,
"Thin" and "Full" make no difference.
---
modules/mol/alg/src/find_membrane.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/mol/alg/src/find_membrane.cc b/modules/mol/alg/src/find_membrane.cc
index a967bb306..8669efd8a 100644
--- a/modules/mol/alg/src/find_membrane.cc
+++ b/modules/mol/alg/src/find_membrane.cc
@@ -135,7 +135,7 @@ class LevenbergMarquardt {
// LOG(INFO) << "u: " << u;
// LOG(INFO) << "v: " << v;
AMatrixType A_augmented = A + u*AMatrixType::Identity(J.cols(), J.cols());
- Solver solver(A_augmented, Eigen::ComputeThinU | Eigen::ComputeThinV);
+ Solver solver(A_augmented, Eigen::ComputeFullU | Eigen::ComputeFullV);
dx = solver.solve(g);
if (dx.norm() <= params.relative_step_threshold * x.norm()) {
results.status = RELATIVE_STEP_SIZE_TOO_SMALL;
--
GitLab