mirror of
https://github.com/OPM/opm-simulators.git
synced 2026-09-05 04:40:19 -05:00
Merge pull request #4535 from totto82/fix_co2_output
convert co2 output from volumes to moles
This commit is contained in:
@@ -1275,7 +1275,6 @@ fipUnitConvert_(std::unordered_map<Inplace::Phase, Scalar>& fip) const
|
|||||||
{
|
{
|
||||||
const UnitSystem& units = eclState_.getUnits();
|
const UnitSystem& units = eclState_.getUnits();
|
||||||
using M = UnitSystem::measure;
|
using M = UnitSystem::measure;
|
||||||
|
|
||||||
const auto unit_map = std::unordered_map<Inplace::Phase, M> {
|
const auto unit_map = std::unordered_map<Inplace::Phase, M> {
|
||||||
{Inplace::Phase::WATER, M::liquid_surface_volume},
|
{Inplace::Phase::WATER, M::liquid_surface_volume},
|
||||||
{Inplace::Phase::OIL, M::liquid_surface_volume},
|
{Inplace::Phase::OIL, M::liquid_surface_volume},
|
||||||
@@ -1290,9 +1289,9 @@ fipUnitConvert_(std::unordered_map<Inplace::Phase, Scalar>& fip) const
|
|||||||
{Inplace::Phase::OilResVolume, M::volume},
|
{Inplace::Phase::OilResVolume, M::volume},
|
||||||
{Inplace::Phase::GasResVolume, M::volume},
|
{Inplace::Phase::GasResVolume, M::volume},
|
||||||
{Inplace::Phase::SALT, M::mass},
|
{Inplace::Phase::SALT, M::mass},
|
||||||
{Inplace::Phase::CO2InWaterPhase, M::gas_surface_volume},
|
{Inplace::Phase::CO2InWaterPhase, M::moles},
|
||||||
{Inplace::Phase::CO2InGasPhaseInMob,M::gas_surface_volume},
|
{Inplace::Phase::CO2InGasPhaseInMob,M::moles},
|
||||||
{Inplace::Phase::CO2InGasPhaseMob, M::gas_surface_volume},
|
{Inplace::Phase::CO2InGasPhaseMob, M::moles},
|
||||||
{Inplace::Phase::WaterInWaterPhase, M::liquid_surface_volume},
|
{Inplace::Phase::WaterInWaterPhase, M::liquid_surface_volume},
|
||||||
{Inplace::Phase::WaterInGasPhase, M::liquid_surface_volume},
|
{Inplace::Phase::WaterInGasPhase, M::liquid_surface_volume},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1080,10 +1080,6 @@ private:
|
|||||||
if (!this->fip_[Inplace::Phase::OilInGasPhase].empty())
|
if (!this->fip_[Inplace::Phase::OilInGasPhase].empty())
|
||||||
this->fip_[Inplace::Phase::OilInGasPhase][globalDofIdx] = oilInPlaceGas;
|
this->fip_[Inplace::Phase::OilInGasPhase][globalDofIdx] = oilInPlaceGas;
|
||||||
|
|
||||||
// CO2STORE OIL + GAS
|
|
||||||
if (!this->fip_[Inplace::Phase::CO2InWaterPhase].empty())
|
|
||||||
this->fip_[Inplace::Phase::CO2InWaterPhase][globalDofIdx] = gasInPlaceLiquid;
|
|
||||||
|
|
||||||
// Add dissolved gas and vaporized oil to total Fip
|
// Add dissolved gas and vaporized oil to total Fip
|
||||||
if (!this->fip_[Inplace::Phase::OIL].empty())
|
if (!this->fip_[Inplace::Phase::OIL].empty())
|
||||||
this->fip_[Inplace::Phase::OIL][globalDofIdx] += oilInPlaceGas;
|
this->fip_[Inplace::Phase::OIL][globalDofIdx] += oilInPlaceGas;
|
||||||
@@ -1096,9 +1092,6 @@ private:
|
|||||||
Scalar gasInPlaceWater = getValue(fs.Rsw()) * fip[waterPhaseIdx];
|
Scalar gasInPlaceWater = getValue(fs.Rsw()) * fip[waterPhaseIdx];
|
||||||
Scalar waterInPlaceGas = getValue(fs.Rvw()) * fip[gasPhaseIdx];
|
Scalar waterInPlaceGas = getValue(fs.Rvw()) * fip[gasPhaseIdx];
|
||||||
|
|
||||||
if (!this->fip_[Inplace::Phase::CO2InWaterPhase].empty())
|
|
||||||
this->fip_[Inplace::Phase::CO2InWaterPhase][globalDofIdx] = gasInPlaceWater;
|
|
||||||
|
|
||||||
if (!this->fip_[Inplace::Phase::WaterInGasPhase].empty())
|
if (!this->fip_[Inplace::Phase::WaterInGasPhase].empty())
|
||||||
this->fip_[Inplace::Phase::WaterInGasPhase][globalDofIdx] = waterInPlaceGas;
|
this->fip_[Inplace::Phase::WaterInGasPhase][globalDofIdx] = waterInPlaceGas;
|
||||||
|
|
||||||
@@ -1115,16 +1108,41 @@ private:
|
|||||||
= simulator_.problem().materialLawManager()->oilWaterScaledEpsInfoDrainage(globalDofIdx);
|
= simulator_.problem().materialLawManager()->oilWaterScaledEpsInfoDrainage(globalDofIdx);
|
||||||
const Scalar& sgcr = scaledDrainageInfo.Sgcr;
|
const Scalar& sgcr = scaledDrainageInfo.Sgcr;
|
||||||
if (FluidSystem::phaseIsActive(gasPhaseIdx) && !this->fip_[Inplace::Phase::CO2InGasPhaseInMob].empty()) {
|
if (FluidSystem::phaseIsActive(gasPhaseIdx) && !this->fip_[Inplace::Phase::CO2InGasPhaseInMob].empty()) {
|
||||||
const double bg = getValue(fs.invB(gasPhaseIdx));
|
|
||||||
const double sg = getValue(fs.saturation(gasPhaseIdx));
|
const double sg = getValue(fs.saturation(gasPhaseIdx));
|
||||||
Scalar imMobileGas = pv * bg * std::min(sgcr , sg);
|
const double rhog = getValue(fs.density(gasPhaseIdx));
|
||||||
|
const double xgW = FluidSystem::phaseIsActive(waterPhaseIdx)?
|
||||||
|
FluidSystem::convertRvwToXgW(getValue(fs.Rvw()), fs.pvtRegionIndex()):
|
||||||
|
FluidSystem::convertRvToXgO(getValue(fs.Rv()), fs.pvtRegionIndex());
|
||||||
|
Scalar mM = FluidSystem::molarMass(gasCompIdx, fs.pvtRegionIndex());
|
||||||
|
Scalar imMobileGas = (1 - xgW) * pv * rhog * std::min(sgcr , sg) / mM;
|
||||||
this->fip_[Inplace::Phase::CO2InGasPhaseInMob][globalDofIdx] = imMobileGas;
|
this->fip_[Inplace::Phase::CO2InGasPhaseInMob][globalDofIdx] = imMobileGas;
|
||||||
}
|
}
|
||||||
if (FluidSystem::phaseIsActive(gasPhaseIdx) && !this->fip_[Inplace::Phase::CO2InGasPhaseMob].empty()) {
|
if (FluidSystem::phaseIsActive(gasPhaseIdx) && !this->fip_[Inplace::Phase::CO2InGasPhaseMob].empty()) {
|
||||||
const double bg = getValue(fs.invB(gasPhaseIdx));
|
const double rhog = getValue(fs.density(gasPhaseIdx));
|
||||||
const double sg = getValue(fs.saturation(gasPhaseIdx));
|
const double sg = getValue(fs.saturation(gasPhaseIdx));
|
||||||
Scalar mobileGas = pv * bg * std::max(0.0, sg - sgcr);
|
const double xgW = FluidSystem::phaseIsActive(waterPhaseIdx)?
|
||||||
this->fip_[Inplace::Phase::CO2InGasPhaseMob][globalDofIdx] = mobileGas;
|
FluidSystem::convertRvwToXgW(getValue(fs.Rvw()), fs.pvtRegionIndex()):
|
||||||
|
FluidSystem::convertRvToXgO(getValue(fs.Rv()), fs.pvtRegionIndex());
|
||||||
|
Scalar mM = FluidSystem::molarMass(gasCompIdx, fs.pvtRegionIndex());
|
||||||
|
Scalar mobileGas = (1 - xgW) * pv * rhog * std::max(0.0, sg - sgcr) / mM;
|
||||||
|
this->fip_[Inplace::Phase::CO2InGasPhaseMob][globalDofIdx] = mobileGas*mM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FluidSystem::phaseIsActive(waterPhaseIdx) && !this->fip_[Inplace::Phase::CO2InWaterPhase].empty()) {
|
||||||
|
const double rhow = getValue(fs.density(waterPhaseIdx));
|
||||||
|
const double sw = getValue(fs.saturation(waterPhaseIdx));
|
||||||
|
const double xwG = FluidSystem::convertRswToXwG(getValue(fs.Rsw()), fs.pvtRegionIndex());
|
||||||
|
Scalar mM = FluidSystem::molarMass(gasCompIdx, fs.pvtRegionIndex());
|
||||||
|
Scalar co2inWater = xwG * pv * rhow * sw / mM;
|
||||||
|
this->fip_[Inplace::Phase::CO2InWaterPhase][globalDofIdx] = co2inWater;
|
||||||
|
}
|
||||||
|
if (FluidSystem::phaseIsActive(oilPhaseIdx) && !this->fip_[Inplace::Phase::CO2InWaterPhase].empty()) {
|
||||||
|
const double rhoo = getValue(fs.density(oilPhaseIdx));
|
||||||
|
const double so = getValue(fs.saturation(oilPhaseIdx));
|
||||||
|
const double xoG = FluidSystem::convertRsToXoG(getValue(fs.Rs()), fs.pvtRegionIndex());
|
||||||
|
Scalar mM = FluidSystem::molarMass(gasCompIdx, fs.pvtRegionIndex());
|
||||||
|
Scalar co2inWater = xoG * pv * rhoo * so / mM;
|
||||||
|
this->fip_[Inplace::Phase::CO2InWaterPhase][globalDofIdx] = co2inWater;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user