Пример #1
0
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());
                }
            }
        }
    }
}
Пример #2
0
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);
        }
    }
}