aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-09-03 11:04:06 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-09-03 11:04:06 +0200
commitef2b54f422a68ca40e9aedb07969228141ce1ede (patch)
tree31b9f2e2a580a947332ef00e43edaa6fa659a722
parent5ad7981f7360f8acd820f954591b5d365ab62a21 (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.h2
-rw-r--r--test/sparselu.cpp6
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);