Working on proper units.
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user