From 95e37356780e888e6ea347204b7b4aaaa9ea2bfe Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Wed, 12 Feb 2025 07:51:22 +0100 Subject: [PATCH] move assignment of gas fractions into CompositionalContainer --- opm/simulators/flow/CompositionalContainer.cpp | 16 ++++++++++++++++ opm/simulators/flow/CompositionalContainer.hpp | 3 +++ .../flow/OutputCompositionalModule.hpp | 16 +++++++--------- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/opm/simulators/flow/CompositionalContainer.cpp b/opm/simulators/flow/CompositionalContainer.cpp index f9bd6fc40..8f5034b0c 100644 --- a/opm/simulators/flow/CompositionalContainer.cpp +++ b/opm/simulators/flow/CompositionalContainer.cpp @@ -66,6 +66,21 @@ allocate(const unsigned bufferSize, } } +template +void CompositionalContainer:: +assignGasFractions(const unsigned globalDofIdx, + const AssignFunction& fractions) +{ + if (phaseMoleFractions_[gasPhaseIdx][0].empty()) { + return; + } + + std::for_each(phaseMoleFractions_[gasPhaseIdx].begin(), + phaseMoleFractions_[gasPhaseIdx].end(), + [globalDofIdx, &fractions, c = 0](auto& comp) mutable + { comp[globalDofIdx] = fractions(c++); }); +} + template void CompositionalContainer:: assignMoleFractions(const unsigned globalDofIdx, @@ -88,6 +103,7 @@ assignOilFractions(const unsigned globalDofIdx, if (phaseMoleFractions_[oilPhaseIdx][0].empty()) { return; } + std::for_each(phaseMoleFractions_[oilPhaseIdx].begin(), phaseMoleFractions_[oilPhaseIdx].end(), [globalDofIdx, &fractions, c = 0](auto& comp) mutable diff --git a/opm/simulators/flow/CompositionalContainer.hpp b/opm/simulators/flow/CompositionalContainer.hpp index f7e4aca84..9afb7eee8 100644 --- a/opm/simulators/flow/CompositionalContainer.hpp +++ b/opm/simulators/flow/CompositionalContainer.hpp @@ -55,6 +55,9 @@ public: using AssignFunction = std::function; + void assignGasFractions(const unsigned globalDofIdx, + const AssignFunction& fractions); + void assignMoleFractions(const unsigned globalDofIdx, const AssignFunction& fractions); diff --git a/opm/simulators/flow/OutputCompositionalModule.hpp b/opm/simulators/flow/OutputCompositionalModule.hpp index db8dcec9b..a4fdd6ccb 100644 --- a/opm/simulators/flow/OutputCompositionalModule.hpp +++ b/opm/simulators/flow/OutputCompositionalModule.hpp @@ -57,8 +57,7 @@ #include -namespace Opm -{ +namespace Opm { // forward declaration template @@ -196,19 +195,18 @@ public: [&fs](const unsigned compIdx) { return getValue(fs.moleFraction(compIdx)); }); + if (FluidSystem::phaseIsActive(gasPhaseIdx)) { + this->compC_.assignGasFractions(globalDofIdx, + [&fs](const unsigned compIdx) + { return getValue(fs.moleFraction(gasPhaseIdx, compIdx)); }); + } + if (FluidSystem::phaseIsActive(oilPhaseIdx)) { this->compC_.assignOilFractions(globalDofIdx, [&fs](const unsigned compIdx) { return getValue(fs.moleFraction(oilPhaseIdx, compIdx)); }); } } - // XMF and YMF - for (unsigned compIdx = 0; compIdx < numComponents; ++compIdx) { - if (FluidSystem::phaseIsActive(gasPhaseIdx)) { - if (this->compC_.phaseMoleFractions_[gasPhaseIdx][compIdx].empty()) continue; - this->compC_.phaseMoleFractions_[gasPhaseIdx][compIdx][globalDofIdx] = getValue(fs.moleFraction(gasPhaseIdx, compIdx)); - } - } if (!this->fluidPressure_.empty()) { if (FluidSystem::phaseIsActive(oilPhaseIdx)) {