mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Accommodate for PPCWMAX in SWATINIT equilibration
This commit is contained in:
parent
ed591239a7
commit
745d8b5a97
@ -544,7 +544,7 @@ private:
|
|||||||
/// \param[in] pcow O/W capillary pressure value (Po - Pw).
|
/// \param[in] pcow O/W capillary pressure value (Po - Pw).
|
||||||
///
|
///
|
||||||
/// \return Water saturation value.
|
/// \return Water saturation value.
|
||||||
double applySwatInit(const double pcow);
|
std::tuple<double, bool> applySwatInit(const double pcow);
|
||||||
|
|
||||||
/// Derive water saturation from SWATINIT data.
|
/// Derive water saturation from SWATINIT data.
|
||||||
///
|
///
|
||||||
@ -558,7 +558,7 @@ private:
|
|||||||
///
|
///
|
||||||
/// \return Water saturation value. Input value, possibly mollified by
|
/// \return Water saturation value. Input value, possibly mollified by
|
||||||
/// current set of material laws.
|
/// current set of material laws.
|
||||||
double applySwatInit(const double pc, const double sw);
|
std::tuple<double, bool> applySwatInit(const double pc, const double sw);
|
||||||
|
|
||||||
/// Invoke material law container's capillary pressure calculator on
|
/// Invoke material law container's capillary pressure calculator on
|
||||||
/// current fluid state.
|
/// current fluid state.
|
||||||
|
@ -694,9 +694,16 @@ void PhaseSaturations<MaterialLawManager, FluidSystem, Region, CellID>::deriveWa
|
|||||||
// cell.
|
// cell.
|
||||||
const auto pcow = this->press_.oil - this->press_.water;
|
const auto pcow = this->press_.oil - this->press_.water;
|
||||||
|
|
||||||
sw = this->swatInit_.empty()
|
if (this->swatInit_.empty()) {
|
||||||
? this->invertCapPress(pcow, this->waterPos(), isIncr)
|
sw = this->invertCapPress(pcow, this->waterPos(), isIncr);
|
||||||
: this->applySwatInit(pcow);
|
}
|
||||||
|
else {
|
||||||
|
auto [swout, newSwatInit] = this->applySwatInit(pcow);
|
||||||
|
if (newSwatInit == true)
|
||||||
|
sw = this->invertCapPress(pcow, this->waterPos(), isIncr);
|
||||||
|
else
|
||||||
|
sw = swout;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -718,7 +725,13 @@ fixUnphysicalTransition()
|
|||||||
// Re-scale Pc to reflect imposed sw for vanishing oil phase. This
|
// Re-scale Pc to reflect imposed sw for vanishing oil phase. This
|
||||||
// seems consistent with ECLIPSE, but fails to honour SWATINIT in
|
// seems consistent with ECLIPSE, but fails to honour SWATINIT in
|
||||||
// case of non-trivial gas/oil capillary pressure.
|
// case of non-trivial gas/oil capillary pressure.
|
||||||
sw = this->applySwatInit(pcgw, sw);
|
auto [swout, newSwatInit] = this->applySwatInit(pcgw, sw);
|
||||||
|
if (newSwatInit){
|
||||||
|
const auto isIncr = false; // dPcow/dSw <= 0 for all Sw.
|
||||||
|
sw = this->invertCapPress(pcgw, this->waterPos(), isIncr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sw = swout;
|
||||||
}
|
}
|
||||||
|
|
||||||
sw = satFromSumOfPcs<FluidSystem>
|
sw = satFromSumOfPcs<FluidSystem>
|
||||||
@ -846,18 +859,21 @@ accountForScaledSaturations()
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <class MaterialLawManager, class FluidSystem, class Region, typename CellID>
|
template <class MaterialLawManager, class FluidSystem, class Region, typename CellID>
|
||||||
double PhaseSaturations<MaterialLawManager, FluidSystem, Region, CellID>::
|
std::tuple<double, bool>
|
||||||
|
PhaseSaturations<MaterialLawManager, FluidSystem, Region, CellID>::
|
||||||
applySwatInit(const double pcow)
|
applySwatInit(const double pcow)
|
||||||
{
|
{
|
||||||
return this->applySwatInit(pcow, this->swatInit_[this->evalPt_.position->cell]);
|
auto [swout, newSwatInit] = this->applySwatInit(pcow, this->swatInit_[this->evalPt_.position->cell]);
|
||||||
|
return {swout, newSwatInit};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class MaterialLawManager, class FluidSystem, class Region, typename CellID>
|
template <class MaterialLawManager, class FluidSystem, class Region, typename CellID>
|
||||||
double PhaseSaturations<MaterialLawManager, FluidSystem, Region, CellID>::
|
std::tuple<double, bool>
|
||||||
|
PhaseSaturations<MaterialLawManager, FluidSystem, Region, CellID>::
|
||||||
applySwatInit(const double pcow, const double sw)
|
applySwatInit(const double pcow, const double sw)
|
||||||
{
|
{
|
||||||
return this->matLawMgr_
|
auto [swout, newSwatInit] =this->matLawMgr_.applySwatinit(this->evalPt_.position->cell, pcow, sw);
|
||||||
.applySwatinit(this->evalPt_.position->cell, pcow, sw);
|
return {swout, newSwatInit};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class MaterialLawManager, class FluidSystem, class Region, typename CellID>
|
template <class MaterialLawManager, class FluidSystem, class Region, typename CellID>
|
||||||
|
@ -490,7 +490,6 @@ const KeywordValidation::UnsupportedKeywords& unsupportedKeywords()
|
|||||||
{"PLYATEMP", {true, std::nullopt}},
|
{"PLYATEMP", {true, std::nullopt}},
|
||||||
{"PLYCAMAX", {true, std::nullopt}},
|
{"PLYCAMAX", {true, std::nullopt}},
|
||||||
{"PLYDHFLF", {true, std::nullopt}},
|
{"PLYDHFLF", {true, std::nullopt}},
|
||||||
{"PPCWMAX", {true, std::nullopt}},
|
|
||||||
{"PRORDER", {true, std::nullopt}},
|
{"PRORDER", {true, std::nullopt}},
|
||||||
{"PRVD", {true, std::nullopt}},
|
{"PRVD", {true, std::nullopt}},
|
||||||
{"PVTGWO", {true, std::nullopt}},
|
{"PVTGWO", {true, std::nullopt}},
|
||||||
|
Loading…
Reference in New Issue
Block a user