aboutsummaryrefslogtreecommitdiff
path: root/internal/ceres/preconditioner.h
diff options
context:
space:
mode:
Diffstat (limited to 'internal/ceres/preconditioner.h')
-rw-r--r--internal/ceres/preconditioner.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/internal/ceres/preconditioner.h b/internal/ceres/preconditioner.h
index af64e3c..e8d5994 100644
--- a/internal/ceres/preconditioner.h
+++ b/internal/ceres/preconditioner.h
@@ -36,6 +36,7 @@
#include "ceres/compressed_row_sparse_matrix.h"
#include "ceres/linear_operator.h"
#include "ceres/sparse_matrix.h"
+#include "ceres/types.h"
namespace ceres {
namespace internal {
@@ -48,6 +49,7 @@ class Preconditioner : public LinearOperator {
struct Options {
Options()
: type(JACOBI),
+ visibility_clustering_type(CANONICAL_VIEWS),
sparse_linear_algebra_library_type(SUITE_SPARSE),
num_threads(1),
row_block_size(Eigen::Dynamic),
@@ -56,7 +58,7 @@ class Preconditioner : public LinearOperator {
}
PreconditionerType type;
-
+ VisibilityClusteringType visibility_clustering_type;
SparseLinearAlgebraLibraryType sparse_linear_algebra_library_type;
// If possible, how many threads the preconditioner can use.
@@ -94,6 +96,14 @@ class Preconditioner : public LinearOperator {
int f_block_size;
};
+ // If the optimization problem is such that there are no remaining
+ // e-blocks, ITERATIVE_SCHUR with a Schur type preconditioner cannot
+ // be used. This function returns JACOBI if a preconditioner for
+ // ITERATIVE_SCHUR is used. The input preconditioner_type is
+ // returned otherwise.
+ static PreconditionerType PreconditionerForZeroEBlocks(
+ PreconditionerType preconditioner_type);
+
virtual ~Preconditioner();
// Update the numerical value of the preconditioner for the linear