mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-12-24 16:30:02 -06:00
Fix solvent restart
This commit is contained in:
parent
20fdd62569
commit
afba6c8e8e
@ -1041,6 +1041,17 @@ public:
|
|||||||
so -= sol.data("SGAS")[globalDofIndex];
|
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);
|
assert(saturation_[oilPhaseIdx].size() > 0);
|
||||||
saturation_[oilPhaseIdx][elemIdx] = so;
|
saturation_[oilPhaseIdx][elemIdx] = so;
|
||||||
|
|
||||||
@ -1052,14 +1063,6 @@ public:
|
|||||||
rs_[elemIdx] = sol.data("RS")[globalDofIndex];
|
rs_[elemIdx] = sol.data("RS")[globalDofIndex];
|
||||||
if (rv_.size() > 0 && sol.has("RV"))
|
if (rv_.size() > 0 && sol.has("RV"))
|
||||||
rv_[elemIdx] = sol.data("RV")[globalDofIndex];
|
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"))
|
if (cPolymer_.size() > 0 && sol.has("POLYMER"))
|
||||||
cPolymer_[elemIdx] = sol.data("POLYMER")[globalDofIndex];
|
cPolymer_[elemIdx] = sol.data("POLYMER")[globalDofIndex];
|
||||||
if (cFoam_.size() > 0 && sol.has("FOAM"))
|
if (cFoam_.size() > 0 && sol.has("FOAM"))
|
||||||
|
@ -2492,12 +2492,14 @@ private:
|
|||||||
eclWriter_->eclOutputModule().initHysteresisParams(simulator, elemIdx);
|
eclWriter_->eclOutputModule().initHysteresisParams(simulator, elemIdx);
|
||||||
eclWriter_->eclOutputModule().assignToFluidState(elemFluidState, elemIdx);
|
eclWriter_->eclOutputModule().assignToFluidState(elemFluidState, elemIdx);
|
||||||
|
|
||||||
processRestartSaturations_(elemFluidState);
|
if (enableSolvent)
|
||||||
|
solventSaturation_[elemIdx] = eclWriter_->eclOutputModule().getSolventSaturation(elemIdx);
|
||||||
|
|
||||||
|
processRestartSaturations_(elemFluidState, solventSaturation_[elemIdx]);
|
||||||
|
|
||||||
lastRs_[elemIdx] = elemFluidState.Rs();
|
lastRs_[elemIdx] = elemFluidState.Rs();
|
||||||
lastRv_[elemIdx] = elemFluidState.Rv();
|
lastRv_[elemIdx] = elemFluidState.Rv();
|
||||||
if (enableSolvent)
|
|
||||||
solventSaturation_[elemIdx] = eclWriter_->eclOutputModule().getSolventSaturation(elemIdx);
|
|
||||||
if (enablePolymer)
|
if (enablePolymer)
|
||||||
polymerConcentration_[elemIdx] = eclWriter_->eclOutputModule().getPolymerConcentration(elemIdx);
|
polymerConcentration_[elemIdx] = eclWriter_->eclOutputModule().getPolymerConcentration(elemIdx);
|
||||||
// if we need to restart for polymer molecular weight simulation, we need to add related here
|
// if we need to restart for polymer molecular weight simulation, we need to add related here
|
||||||
@ -2548,7 +2550,7 @@ private:
|
|||||||
eclWriter_->endRestart();
|
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
|
// 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
|
// this is used to recover some RESTART running with the defaulted single-precision format
|
||||||
@ -2561,6 +2563,13 @@ private:
|
|||||||
|
|
||||||
sumSaturation += elemFluidState.saturation(phaseIdx);
|
sumSaturation += elemFluidState.saturation(phaseIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (enableSolvent) {
|
||||||
|
if (solventSaturation < smallSaturationTolerance)
|
||||||
|
solventSaturation = 0.0;
|
||||||
|
|
||||||
|
sumSaturation += solventSaturation;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(sumSaturation > 0.0);
|
assert(sumSaturation > 0.0);
|
||||||
@ -2571,6 +2580,9 @@ private:
|
|||||||
elemFluidState.setSaturation(phaseIdx, saturation);
|
elemFluidState.setSaturation(phaseIdx, saturation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (enableSolvent) {
|
||||||
|
solventSaturation = solventSaturation / sumSaturation;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void readExplicitInitialCondition_()
|
void readExplicitInitialCondition_()
|
||||||
|
@ -157,6 +157,8 @@ class EclWriter
|
|||||||
typedef std::vector<Scalar> ScalarBuffer;
|
typedef std::vector<Scalar> ScalarBuffer;
|
||||||
|
|
||||||
enum { enableEnergy = GET_PROP_VALUE(TypeTag, EnableEnergy) };
|
enum { enableEnergy = GET_PROP_VALUE(TypeTag, EnableEnergy) };
|
||||||
|
enum { enableSolvent = GET_PROP_VALUE(TypeTag, EnableSolvent) };
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void registerParameters()
|
static void registerParameters()
|
||||||
@ -392,6 +394,7 @@ public:
|
|||||||
{"SWAT", Opm::UnitSystem::measure::identity, static_cast<bool>(FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx))},
|
{"SWAT", Opm::UnitSystem::measure::identity, static_cast<bool>(FluidSystem::phaseIsActive(FluidSystem::waterPhaseIdx))},
|
||||||
{"SGAS", Opm::UnitSystem::measure::identity, static_cast<bool>(FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx))},
|
{"SGAS", Opm::UnitSystem::measure::identity, static_cast<bool>(FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx))},
|
||||||
{"TEMP" , Opm::UnitSystem::measure::temperature, enableEnergy},
|
{"TEMP" , Opm::UnitSystem::measure::temperature, enableEnergy},
|
||||||
|
{"SSOLVENT" , Opm::UnitSystem::measure::identity, enableSolvent},
|
||||||
{"RS", Opm::UnitSystem::measure::gas_oil_ratio, FluidSystem::enableDissolvedGas()},
|
{"RS", Opm::UnitSystem::measure::gas_oil_ratio, FluidSystem::enableDissolvedGas()},
|
||||||
{"RV", Opm::UnitSystem::measure::oil_gas_ratio, FluidSystem::enableVaporizedOil()},
|
{"RV", Opm::UnitSystem::measure::oil_gas_ratio, FluidSystem::enableVaporizedOil()},
|
||||||
{"SOMAX", Opm::UnitSystem::measure::identity, simulator_.problem().vapparsActive()},
|
{"SOMAX", Opm::UnitSystem::measure::identity, simulator_.problem().vapparsActive()},
|
||||||
|
Loading…
Reference in New Issue
Block a user