Small tweaks to the block jacobi preconditioner.
diff --git a/internal/ceres/block_jacobi_preconditioner.cc b/internal/ceres/block_jacobi_preconditioner.cc
index f043200..1a5001f 100644
--- a/internal/ceres/block_jacobi_preconditioner.cc
+++ b/internal/ceres/block_jacobi_preconditioner.cc
@@ -105,13 +105,15 @@
for (int c = 0; c < bs->cols.size(); ++c) {
const int size = block_structure_.cols[c].size;
const int position = block_structure_.cols[c].position;
- MatrixRef DD(blocks_[c], size, size);
+ MatrixRef block(blocks_[c], size, size);
- DD.diagonal() += ConstVectorRef(D + position, size).array().square().matrix();
+ if (D != NULL) {
+ block.diagonal() += ConstVectorRef(D + position, size).array().square().matrix();
+ }
- DD = DD.selfadjointView<Eigen::Upper>()
- .ldlt()
- .solve(Matrix::Identity(size, size));
+ block = block.selfadjointView<Eigen::Upper>()
+ .ldlt()
+ .solve(Matrix::Identity(size, size));
}
}