void MUMPSLLT::allocate_coordinate_format_storage(sparse_matrix const& A) { coefficients.clear(); coefficients.reserve(A.nonZeros()); if (build_sparsity_pattern) { rows.reserve(A.nonZeros()); cols.reserve(A.nonZeros()); // Decompress the upper part of the sparse matrix for (auto k = 0; k < A.outerSize(); ++k) { for (sparse_matrix::InnerIterator it(A, k); it; ++it) { if (it.col() >= it.row()) { coefficients.emplace_back(it.value()); rows.emplace_back(it.row() + 1); cols.emplace_back(it.col() + 1); } } } rows.shrink_to_fit(); cols.shrink_to_fit(); } else { // Only update the non-zero numerical values for (auto k = 0; k < A.outerSize(); ++k) { for (sparse_matrix::InnerIterator it(A, k); it; ++it) { if (it.col() >= it.row()) { coefficients.emplace_back(it.value()); } } } } }
void MUMPSLU::allocate_coordinate_format_storage(sparse_matrix const& A) { rows.clear(); cols.clear(); coefficients.clear(); rows.reserve(A.nonZeros()); cols.reserve(A.nonZeros()); coefficients.reserve(A.nonZeros()); for (auto k = 0; k < A.outerSize(); ++k) { for (sparse_matrix::InnerIterator it(A, k); it; ++it) { coefficients.emplace_back(it.value()); rows.emplace_back(it.row() + 1); cols.emplace_back(it.col() + 1); } } }