move assignment of gas fractions into CompositionalContainer

This commit is contained in:
Arne Morten Kvarving 2025-02-12 07:51:22 +01:00
parent ae23b39d40
commit 95e3735678
3 changed files with 26 additions and 9 deletions

View File

@ -66,6 +66,21 @@ allocate(const unsigned bufferSize,
}
}
template<class FluidSystem>
void CompositionalContainer<FluidSystem>::
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<class FluidSystem>
void CompositionalContainer<FluidSystem>::
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

View File

@ -55,6 +55,9 @@ public:
using AssignFunction = std::function<Scalar(const unsigned)>;
void assignGasFractions(const unsigned globalDofIdx,
const AssignFunction& fractions);
void assignMoleFractions(const unsigned globalDofIdx,
const AssignFunction& fractions);

View File

@ -57,8 +57,7 @@
#include <vector>
namespace Opm
{
namespace Opm {
// forward declaration
template <class TypeTag>
@ -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)) {