diff options
Diffstat (limited to 'internal/ceres/schur_jacobi_preconditioner.cc')
-rw-r--r-- | internal/ceres/schur_jacobi_preconditioner.cc | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/internal/ceres/schur_jacobi_preconditioner.cc b/internal/ceres/schur_jacobi_preconditioner.cc index 338df71..6dc9e89 100644 --- a/internal/ceres/schur_jacobi_preconditioner.cc +++ b/internal/ceres/schur_jacobi_preconditioner.cc @@ -33,10 +33,9 @@ #include <utility> #include <vector> #include "Eigen/Dense" -#include "ceres/block_random_access_sparse_matrix.h" +#include "ceres/block_random_access_diagonal_matrix.h" #include "ceres/block_sparse_matrix.h" #include "ceres/collections_port.h" -#include "ceres/detect_structure.h" #include "ceres/internal/scoped_ptr.h" #include "ceres/linear_solver.h" #include "ceres/schur_eliminator.h" @@ -57,16 +56,11 @@ SchurJacobiPreconditioner::SchurJacobiPreconditioner( << "SCHUR_JACOBI preconditioner."; block_size_.resize(num_blocks); - set<pair<int, int> > block_pairs; - - int num_block_diagonal_entries = 0; for (int i = 0; i < num_blocks; ++i) { block_size_[i] = bs.cols[i + options_.elimination_groups[0]].size; - block_pairs.insert(make_pair(i, i)); - num_block_diagonal_entries += block_size_[i] * block_size_[i]; } - m_.reset(new BlockRandomAccessSparseMatrix(block_size_, block_pairs)); + m_.reset(new BlockRandomAccessDiagonalMatrix(block_size_)); InitEliminator(bs); } @@ -77,17 +71,13 @@ SchurJacobiPreconditioner::~SchurJacobiPreconditioner() { void SchurJacobiPreconditioner::InitEliminator( const CompressedRowBlockStructure& bs) { LinearSolver::Options eliminator_options; - eliminator_options.elimination_groups = options_.elimination_groups; eliminator_options.num_threads = options_.num_threads; - - DetectStructure(bs, options_.elimination_groups[0], - &eliminator_options.row_block_size, - &eliminator_options.e_block_size, - &eliminator_options.f_block_size); - + eliminator_options.e_block_size = options_.e_block_size; + eliminator_options.f_block_size = options_.f_block_size; + eliminator_options.row_block_size = options_.row_block_size; eliminator_.reset(SchurEliminatorBase::Create(eliminator_options)); - eliminator_->Init(options_.elimination_groups[0], &bs); + eliminator_->Init(eliminator_options.elimination_groups[0], &bs); } // Update the values of the preconditioner matrix and factorize it. @@ -118,7 +108,7 @@ void SchurJacobiPreconditioner::RightMultiply(const double* x, CHECK_NOTNULL(y); const double* lhs_values = - down_cast<BlockRandomAccessSparseMatrix*>(m_.get())->matrix()->values(); + down_cast<BlockRandomAccessDiagonalMatrix*>(m_.get())->matrix()->values(); // This loop can be easily multi-threaded with OpenMP if need be. for (int i = 0; i < block_size_.size(); ++i) { |