Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.h42
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