Integrate schur power series expansion options to bundle adjuster
Change-Id: I64c0b135adeece273a7924d0a7200369eb166b0a
diff --git a/examples/bundle_adjuster.cc b/examples/bundle_adjuster.cc
index 832e7e4..a8ae16a 100644
--- a/examples/bundle_adjuster.cc
+++ b/examples/bundle_adjuster.cc
@@ -86,10 +86,12 @@
DEFINE_bool(explicit_schur_complement, false, "If using ITERATIVE_SCHUR "
"then explicitly compute the Schur complement.");
DEFINE_string(preconditioner, "jacobi", "Options are: "
- "identity, jacobi, schur_jacobi, cluster_jacobi, "
+ "identity, jacobi, schur_jacobi, schur_power_series_expansion, cluster_jacobi, "
"cluster_tridiagonal.");
DEFINE_string(visibility_clustering, "canonical_views",
"single_linkage, canonical_views");
+DEFINE_bool(use_power_series_expansion_initialization, false,
+ "Use power series expansion to initialize the solution in ITERATIVE_SCHUR linear solver.");
DEFINE_string(sparse_linear_algebra_library, "suite_sparse",
"Options are: suite_sparse, cx_sparse, accelerate_sparse and eigen_sparse.");
@@ -109,6 +111,12 @@
DEFINE_int32(num_threads, 1, "Number of threads.");
DEFINE_int32(num_iterations, 5, "Number of iterations.");
+DEFINE_int32(max_linear_solve_iterations, 500, "Maximum number of iterations"
+ " for solution of linear system.");
+DEFINE_double(spse_tolerance, 0.1,
+ "Tolerance to reach during the iterations of power series expansion initialization or preconditioning.");
+DEFINE_int32(max_num_spse_iterations, 5,
+ "Maximum number of iterations for power series expansion initialization or preconditioning.");
DEFINE_double(max_solver_time, 1e32, "Maximum solve time in seconds.");
DEFINE_bool(nonmonotonic_steps, false, "Trust region algorithm can use"
" nonmonotic steps.");
@@ -157,6 +165,13 @@
CERES_GET_FLAG(FLAGS_mixed_precision_solves);
options->max_num_refinement_iterations =
CERES_GET_FLAG(FLAGS_max_num_refinement_iterations);
+ options->max_linear_solver_iterations =
+ CERES_GET_FLAG(FLAGS_max_linear_solve_iterations);
+ options->use_power_series_expansion_initialization =
+ CERES_GET_FLAG(FLAGS_use_power_series_expansion_initialization);
+ options->spse_tolerance = CERES_GET_FLAG(FLAGS_spse_tolerance);
+ options->max_num_spse_iterations =
+ CERES_GET_FLAG(FLAGS_max_num_spse_iterations);
}
void SetOrdering(BALProblem* bal_problem, Solver::Options* options) {