diff options
author | 2015-09-03 11:04:06 +0200 | |
---|---|---|
committer | 2015-09-03 11:04:06 +0200 | |
commit | ef2b54f422a68ca40e9aedb07969228141ce1ede (patch) | |
tree | 31b9f2e2a580a947332ef00e43edaa6fa659a722 | |
parent | 5ad7981f7360f8acd820f954591b5d365ab62a21 (diff) |
Fix AMD ordering when a column has only one off-diagonal non-zero (also fix bug #1045)
-rw-r--r-- | Eigen/src/OrderingMethods/Amd.h | 2 | ||||
-rw-r--r-- | test/sparselu.cpp | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/Eigen/src/OrderingMethods/Amd.h b/Eigen/src/OrderingMethods/Amd.h index 63d996cb4..323255e0a 100644 --- a/Eigen/src/OrderingMethods/Amd.h +++ b/Eigen/src/OrderingMethods/Amd.h @@ -150,7 +150,7 @@ void minimum_degree_ordering(SparseMatrix<Scalar,ColMajor,StorageIndex>& C, Perm } d = degree[i]; - if(d == 1) /* node i is empty */ + if(d == 1 && has_diag) /* node i is empty */ { elen[i] = -2; /* element i is dead */ nel++; diff --git a/test/sparselu.cpp b/test/sparselu.cpp index c725847d8..78615ff3b 100644 --- a/test/sparselu.cpp +++ b/test/sparselu.cpp @@ -41,9 +41,9 @@ template<typename T> void test_sparselu_T() SparseLU<SparseMatrix<T, ColMajor>, AMDOrdering<int> > sparselu_amd; SparseLU<SparseMatrix<T, ColMajor, long int>, NaturalOrdering<long int> > sparselu_natural; - check_sparse_square_solving(sparselu_colamd); - check_sparse_square_solving(sparselu_amd, 300, 2000, !true); // FIXME AMD ordering fails for structurally deficient matrices! - check_sparse_square_solving(sparselu_natural, 300, 2000, true); + check_sparse_square_solving(sparselu_colamd, 300, 100000, true); + check_sparse_square_solving(sparselu_amd, 300, 10000, true); + check_sparse_square_solving(sparselu_natural, 300, 2000, true); check_sparse_square_abs_determinant(sparselu_colamd); check_sparse_square_abs_determinant(sparselu_amd); |