diff --git a/resources/3rdparty/patches/eigen.patch b/resources/3rdparty/patches/eigen.patch index 9f9535b7d..63443bcab 100644 --- a/resources/3rdparty/patches/eigen.patch +++ b/resources/3rdparty/patches/eigen.patch @@ -1,20 +1,18 @@ -From 9f1a66bef29005a4cbe178241cad563fcb0dfa5f Mon Sep 17 00:00:00 2001 +From 4d2074e54b27877bcd694add91447b569d88e918 Mon Sep 17 00:00:00 2001 From: Tim Quatmann -Date: Mon, 18 May 2020 11:58:47 +0200 -Subject: [PATCH 1/2] Adaptions for SparseLU to work with Scalar types that do - not default construct from a double (like CLN numbers) or that do not have an - operator< or std::abs +Date: Wed, 20 May 2020 15:48:43 +0200 +Subject: [PATCH] Eigen Patch --- Eigen/src/SparseLU/SparseLU.h | 10 +-- Eigen/src/SparseLU/SparseLU_column_bmod.h | 2 +- Eigen/src/SparseLU/SparseLU_copy_to_ucol.h | 2 +- Eigen/src/SparseLU/SparseLU_panel_bmod.h | 6 +- - Eigen/src/SparseLU/SparseLU_pivotL.h | 74 +++++++++++++++------- - 5 files changed, 62 insertions(+), 32 deletions(-) + Eigen/src/SparseLU/SparseLU_pivotL.h | 79 +++++++++++++++------- + 5 files changed, 63 insertions(+), 36 deletions(-) diff --git a/Eigen/src/SparseLU/SparseLU.h b/Eigen/src/SparseLU/SparseLU.h -index 7104831c0..9aeceb021 100644 +index 7104831..9aeceb0 100644 --- a/Eigen/src/SparseLU/SparseLU.h +++ b/Eigen/src/SparseLU/SparseLU.h @@ -97,12 +97,12 @@ class SparseLU : public SparseSolverBase >, @@ -60,7 +58,7 @@ index 7104831c0..9aeceb021 100644 // which are available in the L part :) for (Index j = 0; j < this->cols(); ++j) diff --git a/Eigen/src/SparseLU/SparseLU_column_bmod.h b/Eigen/src/SparseLU/SparseLU_column_bmod.h -index b57f06802..be15e5ee6 100644 +index b57f068..be15e5e 100644 --- a/Eigen/src/SparseLU/SparseLU_column_bmod.h +++ b/Eigen/src/SparseLU/SparseLU_column_bmod.h @@ -129,7 +129,7 @@ Index SparseLUImpl::column_bmod(const Index jcol, const Ind @@ -73,7 +71,7 @@ index b57f06802..be15e5ee6 100644 } diff --git a/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h b/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h -index c32d8d8b1..03c8aaf85 100644 +index c32d8d8..03c8aaf 100644 --- a/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +++ b/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h @@ -87,7 +87,7 @@ Index SparseLUImpl::copy_to_ucol(const Index jcol, const In @@ -86,7 +84,7 @@ index c32d8d8b1..03c8aaf85 100644 isub++; } diff --git a/Eigen/src/SparseLU/SparseLU_panel_bmod.h b/Eigen/src/SparseLU/SparseLU_panel_bmod.h -index 822cf32c3..5dc819cf7 100644 +index 822cf32..5dc819c 100644 --- a/Eigen/src/SparseLU/SparseLU_panel_bmod.h +++ b/Eigen/src/SparseLU/SparseLU_panel_bmod.h @@ -122,7 +122,7 @@ void SparseLUImpl::panel_bmod(const Index m, const Index w, @@ -117,7 +115,7 @@ index 822cf32c3..5dc819cf7 100644 u_col++; } diff --git a/Eigen/src/SparseLU/SparseLU_pivotL.h b/Eigen/src/SparseLU/SparseLU_pivotL.h -index a86dac93f..2ad56531c 100644 +index a86dac9..f1ebd3c 100644 --- a/Eigen/src/SparseLU/SparseLU_pivotL.h +++ b/Eigen/src/SparseLU/SparseLU_pivotL.h @@ -32,7 +32,46 @@ @@ -125,11 +123,11 @@ index a86dac93f..2ad56531c 100644 namespace Eigen { namespace internal { - -+ template::value, int>::type = 0> ++ template::value, int>::type = 0> + void findLargestAbsolutePivotElement(const Index& nsupc, const Index& nsupr, Scalar const* lu_col_ptr, StorageIndex const* lsub_ptr, Index const& diagind, Index& diag, Index& pivptr, Scalar& pivmax) { -+ double rtemp = 0; ++ Scalar rtemp = 0; + for (Index isub = nsupc; isub < nsupr; ++isub) { -+ rtemp = std::abs(lu_col_ptr[isub]); ++ rtemp = storm::utility::abs(lu_col_ptr[isub]); + if (rtemp > pivmax) { + pivmax = rtemp; + pivptr = isub; @@ -138,7 +136,7 @@ index a86dac93f..2ad56531c 100644 + } + } + -+ template::value, int>::type = 0> ++ template::value, int>::type = 0> + void findLargestAbsolutePivotElement(const Index& nsupc, const Index& nsupr, Scalar const* lu_col_ptr, StorageIndex const* lsub_ptr, Index const& diagind, Index& diag, Index& pivptr, Scalar& pivmax) { + bool foundPivotElement = false; + for (Index isub = nsupc; isub < nsupr; ++isub) { @@ -168,7 +166,7 @@ index a86dac93f..2ad56531c 100644 /** * \brief Performs the numerical pivotin on the current column of L, and the CDIV operation. * -@@ -70,26 +109,19 @@ Index SparseLUImpl::pivotL(const Index jcol, const RealScal +@@ -70,42 +109,30 @@ Index SparseLUImpl::pivotL(const Index jcol, const RealScal StorageIndex* lsub_ptr = &(glu.lsub.data()[lptr]); // Start of row indices of the supernode // Determine the largest abs numerical value for partial pivoting @@ -205,7 +203,14 @@ index a86dac93f..2ad56531c 100644 perm_r(pivrow) = StorageIndex(jcol); return (jcol+1); } -@@ -103,9 +135,7 @@ Index SparseLUImpl::pivotL(const Index jcol, const RealScal + +- RealScalar thresh = diagpivotthresh * pivmax; +- +- // Choose appropriate pivotal element +- ++ // Choose appropriate pivotal element + { + // Test if the diagonal element can be used as a pivot (given the threshold value) if (diag >= 0 ) { // Diagonal element exists @@ -216,7 +221,7 @@ index a86dac93f..2ad56531c 100644 } pivrow = lsub_ptr[pivptr]; } -@@ -125,7 +155,7 @@ Index SparseLUImpl::pivotL(const Index jcol, const RealScal +@@ -125,7 +152,7 @@ Index SparseLUImpl::pivotL(const Index jcol, const RealScal } } // cdiv operations @@ -226,46 +231,5 @@ index a86dac93f..2ad56531c 100644 lu_col_ptr[k] *= temp; return 0; -- -2.24.2 (Apple Git-127) - - -From 366d73d04bedd7c58fc6b7e96f32a72422ceea89 Mon Sep 17 00:00:00 2001 -From: Tim Quatmann -Date: Tue, 19 May 2020 08:52:28 +0200 -Subject: [PATCH 2/2] Fixed actually using largest pivot with rational numbers - ---- - Eigen/src/SparseLU/SparseLU_pivotL.h | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/Eigen/src/SparseLU/SparseLU_pivotL.h b/Eigen/src/SparseLU/SparseLU_pivotL.h -index 2ad56531c..cc2dd9292 100644 ---- a/Eigen/src/SparseLU/SparseLU_pivotL.h -+++ b/Eigen/src/SparseLU/SparseLU_pivotL.h -@@ -32,11 +32,11 @@ - - namespace Eigen { - namespace internal { -- template::value, int>::type = 0> -+ template::value, int>::type = 0> - void findLargestAbsolutePivotElement(const Index& nsupc, const Index& nsupr, Scalar const* lu_col_ptr, StorageIndex const* lsub_ptr, Index const& diagind, Index& diag, Index& pivptr, Scalar& pivmax) { -- double rtemp = 0; -+ Scalar rtemp = 0; - for (Index isub = nsupc; isub < nsupr; ++isub) { -- rtemp = std::abs(lu_col_ptr[isub]); -+ rtemp = storm::utility::abs(lu_col_ptr[isub]); - if (rtemp > pivmax) { - pivmax = rtemp; - pivptr = isub; -@@ -45,7 +45,7 @@ namespace internal { - } - } - -- template::value, int>::type = 0> -+ template::value, int>::type = 0> - void findLargestAbsolutePivotElement(const Index& nsupc, const Index& nsupr, Scalar const* lu_col_ptr, StorageIndex const* lsub_ptr, Index const& diagind, Index& diag, Index& pivptr, Scalar& pivmax) { - bool foundPivotElement = false; - for (Index isub = nsupc; isub < nsupr; ++isub) { --- -2.24.2 (Apple Git-127) +2.21.0 (Apple Git-122)