Remove Solver::Options::use_postordering
This was an ill-advised and complicated to interpret option
which offers nothing particularly useful.
Change-Id: Ia7741ed62ef977c96fa52299a884e404bee659ac
diff --git a/docs/source/nnls_solving.rst b/docs/source/nnls_solving.rst
index ce10a11..516b261 100644
--- a/docs/source/nnls_solving.rst
+++ b/docs/source/nnls_solving.rst
@@ -1415,30 +1415,6 @@
This option can only be used with the ``SCHUR_JACOBI``
preconditioner.
-.. member:: bool Solver::Options::use_post_ordering
-
- Default: ``false``
-
- Sparse Cholesky factorization algorithms use a fill-reducing
- ordering to permute the columns of the Jacobian matrix. There are
- two ways of doing this.
-
- 1. Compute the Jacobian matrix in some order and then have the
- factorization algorithm permute the columns of the Jacobian.
-
- 2. Compute the Jacobian with its columns already permuted.
-
- The first option incurs a significant memory penalty. The
- factorization algorithm has to make a copy of the permuted Jacobian
- matrix, thus Ceres pre-permutes the columns of the Jacobian matrix
- and generally speaking, there is no performance penalty for doing
- so.
-
- In some rare cases, it is worth using a more complicated reordering
- algorithm which has slightly better runtime performance at the
- expense of an extra copy of the Jacobian matrix. Setting
- ``use_postordering`` to ``true`` enables this tradeoff.
-
.. member:: bool Solver::Options::dynamic_sparsity
Some non-linear least squares problems are symbolically dense but
diff --git a/include/ceres/solver.h b/include/ceres/solver.h
index 43146b1..92cb495 100644
--- a/include/ceres/solver.h
+++ b/include/ceres/solver.h
@@ -588,16 +588,6 @@
// Jacobian matrix and generally speaking, there is no performance
// penalty for doing so.
- // TODO(sameeragarwal): Remove this option. It is too obscure and
- // there is no clear way of figuring out when this is a useful
- // thing to do.
- //
- // In some rare cases, it is worth using a more complicated
- // reordering algorithm which has slightly better runtime
- // performance at the expense of an extra copy of the Jacobian
- // matrix. Setting use_postordering to true enables this tradeoff.
- bool use_postordering = false;
-
// Some non-linear least squares problems are symbolically dense but
// numerically sparse. i.e. at any given state only a small number
// of jacobian entries are non-zero, but the position and number of
diff --git a/internal/ceres/reorder_program.cc b/internal/ceres/reorder_program.cc
index 1f50a39..2757725 100644
--- a/internal/ceres/reorder_program.cc
+++ b/internal/ceres/reorder_program.cc
@@ -602,13 +602,7 @@
const LinearSolverType linear_solver_type,
const PreconditionerType preconditioner_type,
const SparseLinearAlgebraLibraryType sparse_linear_algebra_library_type,
- const LinearSolverOrderingType linear_solver_ordering_type,
- const bool use_postordering,
- const bool dynamic_sparsity) {
- if (use_postordering || dynamic_sparsity) {
- return false;
- }
-
+ const LinearSolverOrderingType linear_solver_ordering_type) {
if (sparse_linear_algebra_library_type == SUITE_SPARSE) {
if (linear_solver_type == SPARSE_NORMAL_CHOLESKY ||
(linear_solver_type == CGNR && preconditioner_type == SUBSET)) {
diff --git a/internal/ceres/reorder_program.h b/internal/ceres/reorder_program.h
index 8ae456e..ab91825 100644
--- a/internal/ceres/reorder_program.h
+++ b/internal/ceres/reorder_program.h
@@ -120,9 +120,7 @@
LinearSolverType linear_solver_type,
PreconditionerType preconditioner_type,
SparseLinearAlgebraLibraryType sparse_linear_algebra_library_type,
- LinearSolverOrderingType linear_solver_ordering_type,
- bool use_postordering,
- bool dynamic_sparsity);
+ LinearSolverOrderingType linear_solver_ordering_type);
} // namespace ceres::internal
diff --git a/internal/ceres/trust_region_preprocessor.cc b/internal/ceres/trust_region_preprocessor.cc
index ed62aa9..a5a986f 100644
--- a/internal/ceres/trust_region_preprocessor.cc
+++ b/internal/ceres/trust_region_preprocessor.cc
@@ -229,12 +229,11 @@
}
}
- if (AreJacobianColumnsOrdered(options.linear_solver_type,
+ if (!options.dynamic_sparsity &&
+ AreJacobianColumnsOrdered(options.linear_solver_type,
options.preconditioner_type,
options.sparse_linear_algebra_library_type,
- options.linear_solver_ordering_type,
- options.use_postordering,
- options.dynamic_sparsity)) {
+ options.linear_solver_ordering_type)) {
pp->linear_solver_options.ordering_type = OrderingType::NATURAL;
} else {
if (options.linear_solver_ordering_type == ceres::AMD) {