Fixed missing unit conversion for total fluid in place

This commit is contained in:
babrodtk 2016-12-16 13:15:22 +01:00
parent 67374531e3
commit ccec17f81b
2 changed files with 31 additions and 18 deletions

View File

@ -158,6 +158,9 @@ namespace Opm
const BlackoilState& x, const BlackoilState& x,
WellState& xw); WellState& xw);
void
FIPUnitConvert(const UnitSystem& units, V& fip);
void void
FIPUnitConvert(const UnitSystem& units, FIPUnitConvert(const UnitSystem& units,
std::vector<V>& fip); std::vector<V>& fip);

View File

@ -277,10 +277,14 @@ namespace Opm
// Compute current FIP. // Compute current FIP.
std::vector<V> COIP; std::vector<V> COIP;
COIP = solver->computeFluidInPlace(state, fipnum); COIP = solver->computeFluidInPlace(state, fipnum);
FIPUnitConvert(eclipse_state_->getUnits(), COIP);
V OOIP_totals = FIPTotals(OOIP, state); V OOIP_totals = FIPTotals(OOIP, state);
V COIP_totals = FIPTotals(COIP, state); V COIP_totals = FIPTotals(COIP, state);
//Convert to correct units
FIPUnitConvert(eclipse_state_->getUnits(), COIP);
FIPUnitConvert(eclipse_state_->getUnits(), OOIP_totals);
FIPUnitConvert(eclipse_state_->getUnits(), COIP_totals);
if ( terminal_output_ ) if ( terminal_output_ )
{ {
outputFluidInPlace(OOIP_totals, COIP_totals,eclipse_state_->getUnits(), 0); outputFluidInPlace(OOIP_totals, COIP_totals,eclipse_state_->getUnits(), 0);
@ -667,21 +671,27 @@ namespace Opm
SimulatorBase<Implementation>::FIPUnitConvert(const UnitSystem& units, SimulatorBase<Implementation>::FIPUnitConvert(const UnitSystem& units,
std::vector<V>& fip) std::vector<V>& fip)
{ {
if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_FIELD) { for (size_t i = 0; i < fip.size(); ++i) {
for (size_t i = 0; i < fip.size(); ++i) { FIPUnitConvert(units, fip[i]);
fip[i][0] = unit::convert::to(fip[i][0], unit::stb);
fip[i][1] = unit::convert::to(fip[i][1], unit::stb);
fip[i][2] = unit::convert::to(fip[i][2], 1000*unit::cubic(unit::feet));
fip[i][3] = unit::convert::to(fip[i][3], 1000*unit::cubic(unit::feet));
fip[i][4] = unit::convert::to(fip[i][4], unit::stb);
fip[i][5] = unit::convert::to(fip[i][5], unit::stb);
fip[i][6] = unit::convert::to(fip[i][6], unit::psia);
}
} }
if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_METRIC) { }
for (size_t i = 0; i < fip.size(); ++i) {
fip[i][6] = unit::convert::to(fip[i][6], unit::barsa);
} template <class Implementation>
void
SimulatorBase<Implementation>::FIPUnitConvert(const UnitSystem& units, V& fip)
{
if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_FIELD) {
fip[0] = unit::convert::to(fip[0], unit::stb);
fip[1] = unit::convert::to(fip[1], unit::stb);
fip[2] = unit::convert::to(fip[2], 1000*unit::cubic(unit::feet));
fip[3] = unit::convert::to(fip[3], 1000*unit::cubic(unit::feet));
fip[4] = unit::convert::to(fip[4], unit::stb);
fip[5] = unit::convert::to(fip[5], unit::stb);
fip[6] = unit::convert::to(fip[6], unit::psia);
}
else if (units.getType() == UnitSystem::UnitType::UNIT_TYPE_METRIC) {
fip[6] = unit::convert::to(fip[6], unit::barsa);
} }
} }
@ -707,7 +717,7 @@ namespace Opm
if ( ! is_parallel_run_ ) if ( ! is_parallel_run_ )
{ {
totals[5] = geo_.poreVolume().sum(); totals[5] = geo_.poreVolume().sum();
totals[6] = unit::convert::to((p * geo_.poreVolume() * hydrocarbon).sum() / ((geo_.poreVolume() * hydrocarbon).sum()), unit::barsa); totals[6] = (p * geo_.poreVolume() * hydrocarbon).sum() / ((geo_.poreVolume() * hydrocarbon).sum());
} }
else else
{ {
@ -728,8 +738,8 @@ namespace Opm
pinfo.computeReduction(inputs, operators, results); pinfo.computeReduction(inputs, operators, results);
using std::get; using std::get;
totals[5] = get<0>(results); totals[5] = get<0>(results);
totals[6] = unit::convert::to(get<1>(results)/get<2>(results), totals[6] = get<1>(results)/get<2>(results);
unit::barsa);
#else #else
// This should never happen! // This should never happen!
OPM_THROW(std::logic_error, "HAVE_MPI should be defined if we are running in parallel"); OPM_THROW(std::logic_error, "HAVE_MPI should be defined if we are running in parallel");