diff options
Diffstat (limited to 'extern/libmv/third_party/ceres/internal/ceres/solver_impl.h')
-rw-r--r-- | extern/libmv/third_party/ceres/internal/ceres/solver_impl.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/extern/libmv/third_party/ceres/internal/ceres/solver_impl.h b/extern/libmv/third_party/ceres/internal/ceres/solver_impl.h index c05483021a4..22ca6229b81 100644 --- a/extern/libmv/third_party/ceres/internal/ceres/solver_impl.h +++ b/extern/libmv/third_party/ceres/internal/ceres/solver_impl.h @@ -46,6 +46,7 @@ class CoordinateDescentMinimizer; class Evaluator; class LinearSolver; class Program; +class TripletSparseMatrix; class SolverImpl { public: @@ -151,6 +152,47 @@ class SolverImpl { const Program& program, const ProblemImpl::ParameterMap& parameter_map, Solver::Summary* summary); + + // If the linear solver is of Schur type, then replace it with the + // closest equivalent linear solver. This is done when the user + // requested a Schur type solver but the problem structure makes it + // impossible to use one. + // + // If the linear solver is not of Schur type, the function is a + // no-op. + static void AlternateLinearSolverForSchurTypeLinearSolver( + Solver::Options* options); + + // Schur type solvers require that all parameter blocks eliminated + // by the Schur eliminator occur before others and the residuals be + // sorted in lexicographic order of their parameter blocks. + // + // If ordering has atleast two groups, then apply the ordering, + // otherwise compute a new ordering using a Maximal Independent Set + // algorithm and apply it. + // + // Upon return, ordering contains the parameter block ordering that + // was used to order the program. + static bool ReorderProgramForSchurTypeLinearSolver( + const ProblemImpl::ParameterMap& parameter_map, + ParameterBlockOrdering* ordering, + Program* program, + string* error); + + // CHOLMOD when doing the sparse cholesky factorization of the + // Jacobian matrix, reorders its columns to reduce the + // fill-in. Compute this permutation and re-order the parameter + // blocks. + // + static void ReorderProgramForSparseNormalCholesky(Program* program); + + // Create a TripletSparseMatrix which contains the zero-one + // structure corresponding to the block sparsity of the transpose of + // the Jacobian matrix. + // + // Caller owns the result. + static TripletSparseMatrix* CreateJacobianBlockSparsityTranspose( + const Program* program); }; } // namespace internal |