mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-11-25 10:40:21 -06:00
Merge pull request #2023 from totto82/fix_solvent_restart
Fix solvent restart
This commit is contained in:
commit
96af6ca5f0
@ -1039,6 +1039,17 @@ public:
|
||||
so -= sol.data("SGAS")[globalDofIndex];
|
||||
}
|
||||
|
||||
if (sSol_.size() > 0) {
|
||||
// keep the SSOL option for backward compatibility
|
||||
// should be removed after 10.2018 release
|
||||
if (sol.has("SSOL"))
|
||||
sSol_[elemIdx] = sol.data("SSOL")[globalDofIndex];
|
||||
else if (sol.has("SSOLVENT"))
|
||||
sSol_[elemIdx] = sol.data("SSOLVENT")[globalDofIndex];
|
||||
|
||||
so -= sSol_[elemIdx];
|
||||
}
|
||||
|
||||
assert(saturation_[oilPhaseIdx].size() > 0);
|
||||
saturation_[oilPhaseIdx][elemIdx] = so;
|
||||
|
||||
@ -1050,14 +1061,6 @@ public:
|
||||
rs_[elemIdx] = sol.data("RS")[globalDofIndex];
|
||||
if (rv_.size() > 0 && sol.has("RV"))
|
||||
rv_[elemIdx] = sol.data("RV")[globalDofIndex];
|
||||
if (sSol_.size() > 0) {
|
||||
// keep the SSOL option for backward compatibility
|
||||
// should be removed after 10.2018 release
|
||||
if (sol.has("SSOL"))
|
||||
sSol_[elemIdx] = sol.data("SSOL")[globalDofIndex];
|
||||
else if (sol.has("SSOLVENT"))
|
||||
sSol_[elemIdx] = sol.data("SSOLVENT")[globalDofIndex];
|
||||
}
|
||||
if (cPolymer_.size() > 0 && sol.has("POLYMER"))
|
||||
cPolymer_[elemIdx] = sol.data("POLYMER")[globalDofIndex];
|
||||
if (cFoam_.size() > 0 && sol.has("FOAM"))
|
||||
|
@ -2489,12 +2489,14 @@ private:
|
||||
eclWriter_->eclOutputModule().initHysteresisParams(simulator, elemIdx);
|
||||
eclWriter_->eclOutputModule().assignToFluidState(elemFluidState, elemIdx);
|
||||
|
||||
processRestartSaturations_(elemFluidState);
|
||||
if (enableSolvent)
|
||||
solventSaturation_[elemIdx] = eclWriter_->eclOutputModule().getSolventSaturation(elemIdx);
|
||||
|
||||
processRestartSaturations_(elemFluidState, solventSaturation_[elemIdx]);
|
||||
|
||||
lastRs_[elemIdx] = elemFluidState.Rs();
|
||||
lastRv_[elemIdx] = elemFluidState.Rv();
|
||||
if (enableSolvent)
|
||||
solventSaturation_[elemIdx] = eclWriter_->eclOutputModule().getSolventSaturation(elemIdx);
|
||||
|
||||
if (enablePolymer)
|
||||
polymerConcentration_[elemIdx] = eclWriter_->eclOutputModule().getPolymerConcentration(elemIdx);
|
||||
// if we need to restart for polymer molecular weight simulation, we need to add related here
|
||||
@ -2545,7 +2547,7 @@ private:
|
||||
eclWriter_->endRestart();
|
||||
}
|
||||
|
||||
void processRestartSaturations_(InitialFluidState& elemFluidState)
|
||||
void processRestartSaturations_(InitialFluidState& elemFluidState, Scalar& solventSaturation)
|
||||
{
|
||||
// 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
|
||||
@ -2558,6 +2560,13 @@ private:
|
||||
|
||||
sumSaturation += elemFluidState.saturation(phaseIdx);
|
||||
}
|
||||
|
||||
}
|
||||
if (enableSolvent) {
|
||||
if (solventSaturation < smallSaturationTolerance)
|
||||
solventSaturation = 0.0;
|
||||
|
||||
sumSaturation += solventSaturation;
|
||||
}
|
||||
|
||||
assert(sumSaturation > 0.0);
|
||||
@ -2568,6 +2577,9 @@ private:
|
||||
elemFluidState.setSaturation(phaseIdx, saturation);
|
||||
}
|
||||
}
|
||||
if (enableSolvent) {
|
||||
solventSaturation = solventSaturation / sumSaturation;
|
||||
}
|
||||
}
|
||||
|
||||
void readExplicitInitialCondition_()
|
||||
|
@ -157,6 +157,8 @@ class EclWriter
|
||||
typedef std::vector<Scalar> ScalarBuffer;
|
||||
|
||||
enum { enableEnergy = GET_PROP_VALUE(TypeTag, EnableEnergy) };
|
||||
enum { enableSolvent = GET_PROP_VALUE(TypeTag, EnableSolvent) };
|
||||
|
||||
|
||||
public:
|
||||
static void registerParameters()
|
||||
@ -392,6 +394,7 @@ public:
|
||||
{"SWAT", Opm::UnitSystem::measure::identity, static_cast<bool>(FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx))},
|
||||
{"SGAS", Opm::UnitSystem::measure::identity, static_cast<bool>(FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx))},
|
||||
{"TEMP" , Opm::UnitSystem::measure::temperature, enableEnergy},
|
||||
{"SSOLVENT" , Opm::UnitSystem::measure::identity, enableSolvent},
|
||||
{"RS", Opm::UnitSystem::measure::gas_oil_ratio, FluidSystem::enableDissolvedGas()},
|
||||
{"RV", Opm::UnitSystem::measure::oil_gas_ratio, FluidSystem::enableVaporizedOil()},
|
||||
{"SOMAX", Opm::UnitSystem::measure::identity, simulator_.problem().vapparsActive()},
|
||||
|
Loading…
Reference in New Issue
Block a user