Working on proper units.

This commit is contained in:
Atgeirr Flø Rasmussen
2010-11-15 12:41:21 +01:00
parent 532c6c5652
commit 01424b12bf
8 changed files with 44 additions and 27 deletions

View File

@@ -61,18 +61,18 @@ namespace Opm
// Oil PVT
if (parser.hasField("PVDO")) {
oil_props_.reset(new MiscibilityDead(parser.getPVDO().pvdo_));
oil_props_.reset(new MiscibilityDead(parser.getPVDO().pvdo_, parser.units()));
} else if (parser.hasField("PVTO")) {
oil_props_.reset(new MiscibilityLiveOil(parser.getPVTO().pvto_));
oil_props_.reset(new MiscibilityLiveOil(parser.getPVTO().pvto_, parser.units()));
} else {
THROW("Input is missing PVDO and PVTO\n");
}
// Gas PVT
if (parser.hasField("PVDG")) {
gas_props_.reset(new MiscibilityDead(parser.getPVDG().pvdg_));
gas_props_.reset(new MiscibilityDead(parser.getPVDG().pvdg_, parser.units()));
} else if (parser.hasField("PVTG")) {
gas_props_.reset(new MiscibilityLiveGas(parser.getPVTG().pvtg_));
gas_props_.reset(new MiscibilityLiveGas(parser.getPVTG().pvtg_, parser.units()));
} else {
THROW("Input is missing PVDG and PVTG\n");
}

View File

@@ -32,6 +32,7 @@
#include "MiscibilityDead.hpp"
#include <dune/common/ErrorMacros.hpp>
#include <dune/common/linInt.hpp>
#include <dune/common/Units.hpp>
using namespace std;
using namespace Dune;
@@ -44,7 +45,7 @@ namespace Opm
//-------------------------------------------------------------------------
/// Constructor
MiscibilityDead::MiscibilityDead(const table_t& pvd_table)
MiscibilityDead::MiscibilityDead(const table_t& pvd_table, const Dune::EclipseUnits& units)
: pvdx_(pvd_table)
{
const int region_number = 0;
@@ -52,12 +53,11 @@ namespace Opm
THROW("More than one PVT-region");
}
// Convert units
const double bar = 1e5;
const double VISCOSITY_UNIT = 1e-3;
const int sz = pvdx_[region_number][0].size();
using namespace Dune::unit;
for (int i=0; i<sz; ++i) {
pvdx_[region_number][0][i] *= bar; // Pressure
pvdx_[region_number][2][i] *= VISCOSITY_UNIT;
pvdx_[region_number][0][i] = convert::from(pvdx_[region_number][0][i], units.pressure);
pvdx_[region_number][2][i] = convert::from(pvdx_[region_number][2][i], units.viscosity);
}
// Interpolate 1/B

View File

@@ -36,6 +36,8 @@
*/
#include "MiscibilityProps.hpp"
#include <dune/common/EclipseUnits.hpp>
namespace Opm
{
@@ -44,7 +46,7 @@ namespace Opm
public:
typedef std::vector<std::vector<std::vector<double> > > table_t;
MiscibilityDead(const table_t& pvd_table);
MiscibilityDead(const table_t& pvd_table, const Dune::EclipseUnits& units);
virtual ~MiscibilityDead();
virtual double getViscosity(int region, double press, const surfvol_t& surfvol) const;

View File

@@ -33,6 +33,7 @@
#include "MiscibilityLiveGas.hpp"
#include <dune/common/ErrorMacros.hpp>
#include <dune/common/linInt.hpp>
#include <dune/common/Units.hpp>
using namespace std;
using namespace Dune;
@@ -45,11 +46,9 @@ namespace Opm
//-------------------------------------------------------------------------
/// Constructor
MiscibilityLiveGas::MiscibilityLiveGas(const table_t& pvtg)
MiscibilityLiveGas::MiscibilityLiveGas(const table_t& pvtg, const EclipseUnits& units)
{
// GAS, PVTG
const double bar = 1e5;
const double VISCOSITY_UNIT = 1e-3;
const int region_number = 0;
if (pvtg.size() != 1) {
THROW("More than one PVD-region");
@@ -59,11 +58,14 @@ namespace Opm
for (int k=0; k<4; ++k) {
saturated_gas_table_[k].resize(sz);
}
using namespace Dune::unit;
const double bunit = units.gasvol_r/units.gasvol_s;
const double runit = units.liqvol_s/units.gasvol_s;
for (int i=0; i<sz; ++i) {
saturated_gas_table_[0][i] = pvtg[region_number][i][0]*bar; // p
saturated_gas_table_[1][i] = pvtg[region_number][i][2]; // Bg
saturated_gas_table_[2][i] = pvtg[region_number][i][3]*VISCOSITY_UNIT; // mu_g
saturated_gas_table_[3][i] = pvtg[region_number][i][1]; // Rv
saturated_gas_table_[0][i] = convert::from(pvtg[region_number][i][0], units.pressure); // p
saturated_gas_table_[1][i] = convert::from(pvtg[region_number][i][2], bunit); // Bg
saturated_gas_table_[2][i] = convert::from(pvtg[region_number][i][3], units.viscosity); // mu_g
saturated_gas_table_[3][i] = convert::from(pvtg[region_number][i][1], runit); // Rv
}
undersat_gas_tables_.resize(sz);
@@ -74,9 +76,9 @@ namespace Opm
undersat_gas_tables_[i][1].resize(tsize);
undersat_gas_tables_[i][2].resize(tsize);
for (int j=0, k=0; j<tsize; ++j) {
undersat_gas_tables_[i][0][j] = pvtg[region_number][i][++k]; // Rv
undersat_gas_tables_[i][1][j] = pvtg[region_number][i][++k]; // Bg
undersat_gas_tables_[i][2][j] = pvtg[region_number][i][++k]*VISCOSITY_UNIT; // mu_g
undersat_gas_tables_[i][0][j] = convert::from(pvtg[region_number][i][++k], runit); // Rv
undersat_gas_tables_[i][1][j] = convert::from(pvtg[region_number][i][++k], bunit); // Bg
undersat_gas_tables_[i][2][j] = convert::from(pvtg[region_number][i][++k], units.viscosity); // mu_g
}
}
}

View File

@@ -36,6 +36,7 @@
*/
#include "MiscibilityProps.hpp"
#include <dune/common/EclipseUnits.hpp>
namespace Opm
{
@@ -44,7 +45,7 @@ namespace Opm
public:
typedef std::vector<std::vector<std::vector<double> > > table_t;
MiscibilityLiveGas(const table_t& pvto);
MiscibilityLiveGas(const table_t& pvto, const Dune::EclipseUnits& units);
virtual ~MiscibilityLiveGas();
virtual double getViscosity(int region, double press, const surfvol_t& surfvol) const;

View File

@@ -45,7 +45,7 @@ namespace Opm
//-------------------------------------------------------------------------
/// Constructor
MiscibilityLiveOil::MiscibilityLiveOil(const table_t& pvto)
MiscibilityLiveOil::MiscibilityLiveOil(const table_t& pvto, const EclipseUnits& units)
{
// OIL, PVTO
const double bar = 1e5;

View File

@@ -36,6 +36,7 @@
*/
#include "MiscibilityProps.hpp"
#include <dune/common/EclipseUnits.hpp>
namespace Opm
{
@@ -44,7 +45,7 @@ namespace Opm
public:
typedef std::vector<std::vector<std::vector<double> > > table_t;
MiscibilityLiveOil(const table_t& pvto);
MiscibilityLiveOil(const table_t& pvto, const Dune::EclipseUnits& units);
virtual ~MiscibilityLiveOil();
virtual double getViscosity(int region, double press, const surfvol_t& surfvol) const;

View File

@@ -37,6 +37,7 @@
#include "MiscibilityProps.hpp"
#include <dune/common/ErrorMacros.hpp>
#include <dune/common/Units.hpp>
#include <dune/common/EclipseUnits.hpp>
// Forward declaration.
class PVTW;
@@ -77,13 +78,23 @@ namespace Opm
{
return viscosity_;
}
virtual double B(int /*region*/, double /*press*/, const surfvol_t& /*surfvol*/) const
virtual double B(int /*region*/, double press, const surfvol_t& /*surfvol*/) const
{
return 1.0;
if (comp_) {
// Computing a polynomial approximation to the exponential.
double x = comp_*(press - ref_press_);
return ref_B_/(1.0 + x + 0.5*x*x);
} else {
return ref_B_;
}
}
virtual double dBdp(int /*region*/, double /*press*/, const surfvol_t& /*surfvol*/) const
virtual double dBdp(int region, double press, const surfvol_t& surfvol) const
{
return 0.0;
if (comp_) {
return comp_*B(region, press, surfvol);
} else {
return 0.0;
}
}
virtual double R(int /*region*/, double /*press*/, const surfvol_t& /*surfvol*/) const
{