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)); } }