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) {