mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #465 from GitPaean/fixing_single_precision_restart
each phase needs to be above certain value to be treated to be present
This commit is contained in:
commit
70a7207578
@ -1868,6 +1868,9 @@ private:
|
|||||||
elemFluidState.setPvtRegionIndex(pvtRegionIndex(elemIdx));
|
elemFluidState.setPvtRegionIndex(pvtRegionIndex(elemIdx));
|
||||||
eclWriter_->eclOutputModule().initHysteresisParams(this->simulator(), elemIdx);
|
eclWriter_->eclOutputModule().initHysteresisParams(this->simulator(), elemIdx);
|
||||||
eclWriter_->eclOutputModule().assignToFluidState(elemFluidState, elemIdx);
|
eclWriter_->eclOutputModule().assignToFluidState(elemFluidState, elemIdx);
|
||||||
|
|
||||||
|
processRestartSaturations_(elemFluidState);
|
||||||
|
|
||||||
lastRs_[elemIdx] = elemFluidState.Rs();
|
lastRs_[elemIdx] = elemFluidState.Rs();
|
||||||
lastRv_[elemIdx] = elemFluidState.Rv();
|
lastRv_[elemIdx] = elemFluidState.Rv();
|
||||||
if (enableSolvent)
|
if (enableSolvent)
|
||||||
@ -1894,6 +1897,30 @@ private:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void processRestartSaturations_(InitialFluidState& elemFluidState) {
|
||||||
|
// each phase needs to be above certain value to be claimed to be existing
|
||||||
|
// this is used to recover some RESTART running with the defaulted single-precision format
|
||||||
|
const Scalar smallSaturationTolerance = 1.e-6;
|
||||||
|
Scalar sumSaturation = 0.;
|
||||||
|
for (size_t phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
|
||||||
|
if (FluidSystem::phaseIsActive(phaseIdx)) {
|
||||||
|
if (elemFluidState.saturation(phaseIdx) < smallSaturationTolerance)
|
||||||
|
elemFluidState.setSaturation(phaseIdx, 0.);
|
||||||
|
|
||||||
|
sumSaturation += elemFluidState.saturation(phaseIdx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(sumSaturation > 0.);
|
||||||
|
|
||||||
|
for (size_t phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
|
||||||
|
if (FluidSystem::phaseIsActive(phaseIdx)) {
|
||||||
|
const Scalar saturation = elemFluidState.saturation(phaseIdx) / sumSaturation;
|
||||||
|
elemFluidState.setSaturation(phaseIdx, saturation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void readExplicitInitialCondition_()
|
void readExplicitInitialCondition_()
|
||||||
{
|
{
|
||||||
const auto& vanguard = this->simulator().vanguard();
|
const auto& vanguard = this->simulator().vanguard();
|
||||||
|
Loading…
Reference in New Issue
Block a user