From 56fb3948e5972b30aa427882bebbb26aefba81cf Mon Sep 17 00:00:00 2001 From: Tong Dong Qiu Date: Fri, 26 Nov 2021 14:09:58 +0100 Subject: [PATCH] Fill restriction matrix faster --- opm/simulators/linalg/bda/CPR.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/opm/simulators/linalg/bda/CPR.cpp b/opm/simulators/linalg/bda/CPR.cpp index 6ae1be21d..5bf52decc 100644 --- a/opm/simulators/linalg/bda/CPR.cpp +++ b/opm/simulators/linalg/bda/CPR.cpp @@ -383,33 +383,32 @@ void CPR::analyzeAggregateMaps() { for(int level = 0; level < num_levels - 1; ++mapIter, ++level) { DuneAmg::AggregatesMap *map = *mapIter; + Rmatrices.emplace_back(level_sizes[level+1], level_sizes[level], level_sizes[level]); + std::fill(Rmatrices.back().nnzValues.begin(), Rmatrices.back().nnzValues.end(), 1.0); + // get indices for each row of P and R + std::vector > indicesR(level_sizes[level+1]); PcolIndices[level].resize(level_sizes[level]); - std::vector > indicesR(level_sizes[level+1]); + using AggregateIterator = DuneAmg::AggregatesMap::const_iterator; for(AggregateIterator ai = map->begin(); ai != map->end(); ++ai){ if (*ai != DuneAmg::AggregatesMap::ISOLATED) { const long int diff = ai - map->begin(); PcolIndices[level][diff] = *ai; - indicesR[*ai].insert(diff); + indicesR[*ai].emplace_back(diff); } } - Rmatrices.emplace_back(level_sizes[level+1], level_sizes[level], level_sizes[level]); - std::fill(Rmatrices.back().nnzValues.begin(), Rmatrices.back().nnzValues.end(), 1.0); - - // set sparsity pattern of R int col_idx = 0; + // set sparsity pattern of R Rmatrices.back().rowPointers[0] = 0; for (unsigned int i = 0; i < indicesR.size(); ++i) { Rmatrices.back().rowPointers[i + 1] = Rmatrices.back().rowPointers[i] + indicesR[i].size(); for (auto it = indicesR[i].begin(); it != indicesR[i].end(); ++it) { - Rmatrices.back().colIndices[col_idx] = *it; - col_idx++; + Rmatrices.back().colIndices[col_idx++] = *it; } } } - }