Merge pull request #5258 from bska/prune-inactive-pavg-conns

Allow for Sparse Source-Location Subsets
This commit is contained in:
Bård Skaflestad 2024-03-19 14:34:22 +01:00 committed by GitHub
commit 84052fcefc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 9 deletions

View File

@ -350,14 +350,13 @@ initializeWellPerfData()
hasFirstConnection = true; hasFirstConnection = true;
} }
auto pd = PerforationData{}; auto& pd = well_perf_data_[well_index].emplace_back();
pd.cell_index = active_index; pd.cell_index = active_index;
pd.connection_transmissibility_factor = connection.CF(); pd.connection_transmissibility_factor = connection.CF();
pd.satnum_id = connection.satTableId(); pd.satnum_id = connection.satTableId();
pd.ecl_index = connection_index; pd.ecl_index = connection_index;
well_perf_data_[well_index].push_back(pd);
parallelWellInfo.pushBackEclIndex(connection_index_above, parallelWellInfo.pushBackEclIndex(connection_index_above,
connection_index); connection_index);
} }

View File

@ -148,7 +148,19 @@ void Opm::ParallelPAvgDynamicSourceData::defineCommunication()
// 4) Build translation mapping from source term element indices to // 4) Build translation mapping from source term element indices to
// storage indices. // storage indices.
this->storageIndex_.resize(allIndices.size()); //
// Note that if the source terms aren't all active--e.g., if a well
// is connected in deactivated cells--then allIndices is not a
// permutation of 0..allIndices.size()-1 and the maximum source
// location may exceed size()-1. Resize the storageIndex_ according
// to the largest source location ID.
if (auto maxIxPos = std::max_element(allIndices.begin(), allIndices.end());
maxIxPos != allIndices.end())
{
// +1 for zero-based indices.
this->storageIndex_.resize(*maxIxPos + 1);
}
auto storageIx = std::vector<double>::size_type{0}; auto storageIx = std::vector<double>::size_type{0};
for (const auto& elemIndex : allIndices) { for (const auto& elemIndex : allIndices) {
this->storageIndex_[elemIndex] = storageIx++; this->storageIndex_[elemIndex] = storageIx++;

View File

@ -28,12 +28,12 @@ namespace Opm
/// Static data associated with a well perforation. /// Static data associated with a well perforation.
struct PerforationData struct PerforationData
{ {
int cell_index; int cell_index{};
double connection_transmissibility_factor; double connection_transmissibility_factor{};
double connection_d_factor; double connection_d_factor{};
int satnum_id; int satnum_id{};
/// \brief The original index of the perforation in ECL Schedule /// \brief The original index of the perforation in ECL Schedule
std::size_t ecl_index; std::size_t ecl_index{};
}; };
struct PerforationRates struct PerforationRates