Unit System: Recognize Units for Effective Kh Product

While here, also add check for all (current) unit conversion
constants for METRIC, FIELD, and LAB unit conventions and extend the
existing PVT-M checks to cover effective Kh too.
This commit is contained in:
Bård Skaflestad
2018-07-11 22:07:38 +02:00
parent 48047f8c7a
commit 687f108285
3 changed files with 244 additions and 2 deletions

View File

@@ -58,6 +58,7 @@ namespace Opm {
gas_surface_rate,
rate,
transmissibility,
effective_Kh,
mass,
mass_rate,
gas_oil_ratio,

View File

@@ -38,6 +38,10 @@ namespace {
* metric and field arrays. C++ does not support designated initializers, so
* this cannot be done in a declaration-order independent matter.
*/
// =================================================================
// METRIC Unit Conventions
static const double from_metric_offset[] = {
0.0,
0.0,
@@ -66,6 +70,7 @@ namespace {
0.0,
0.0,
0.0,
0.0,
0.0
};
@@ -86,6 +91,7 @@ namespace {
1 / ( Metric::GasSurfaceVolume / Metric::Time ),
1 / ( Metric::ReservoirVolume / Metric::Time ),
1 / Metric::Transmissibility,
1 / (Metric::Permeability * Metric::Length),
1 / Metric::Mass,
1 / ( Metric::Mass / Metric::Time ),
1, /* gas-oil ratio */
@@ -117,6 +123,7 @@ namespace {
Metric::GasSurfaceVolume / Metric::Time,
Metric::ReservoirVolume / Metric::Time,
Metric::Transmissibility,
Metric::Permeability * Metric::Length,
Metric::Mass,
Metric::Mass / Metric::Time,
1, /* gas-oil ratio */
@@ -148,6 +155,7 @@ namespace {
"SM3/DAY",
"RM3/DAY",
"CPR3/DAY/BARS",
"MDM",
"KG",
"KG/DAY",
"SM3/SM3",
@@ -162,6 +170,9 @@ namespace {
"KJ", /* energy */
};
// =================================================================
// FIELD Unit Conventions
static const double from_field_offset[] = {
0.0,
0.0,
@@ -190,6 +201,7 @@ namespace {
0.0,
0.0,
0.0,
0.0,
0.0
};
@@ -210,6 +222,7 @@ namespace {
1 / ( Field::GasSurfaceVolume / Field::Time ),
1 / ( Field::ReservoirVolume / Field::Time ),
1 / Field::Transmissibility,
1 / (Field::Permeability * Field::Length),
1 / Field::Mass,
1 / ( Field::Mass / Field::Time ),
1 / ( Field::GasSurfaceVolume / Field::LiquidSurfaceVolume ), /* gas-oil ratio */
@@ -241,6 +254,7 @@ namespace {
Field::GasSurfaceVolume / Field::Time,
Field::ReservoirVolume / Field::Time,
Field::Transmissibility,
Field::Permeability * Field::Length,
Field::Mass,
Field::Mass / Field::Time,
Field::GasSurfaceVolume / Field::LiquidSurfaceVolume, /* gas-oil ratio */
@@ -272,6 +286,7 @@ namespace {
"MSCF/DAY",
"RB/DAY",
"CPRB/DAY/PSI",
"MDFT",
"LB",
"LB/DAY"
"MSCF/STB",
@@ -286,6 +301,9 @@ namespace {
"BTU", /* energy */
};
// =================================================================
// LAB Unit Conventions
static const double from_lab_offset[] = {
0.0,
0.0,
@@ -314,6 +332,7 @@ namespace {
0.0,
0.0,
0.0,
0.0,
0.0
};
@@ -334,6 +353,7 @@ namespace {
1 / ( Lab::GasSurfaceVolume / Lab::Time ),
1 / ( Lab::ReservoirVolume / Lab::Time ),
1 / Lab::Transmissibility,
1 / (Lab::Permeability * Lab::Length),
1 / Lab::Mass,
1 / ( Lab::Mass / Lab::Time ),
1 / Lab::GasDissolutionFactor, /* gas-oil ratio */
@@ -365,6 +385,7 @@ namespace {
Lab::GasSurfaceVolume / Lab::Time,
Lab::ReservoirVolume / Lab::Time,
Lab::Transmissibility,
Lab::Permeability * Lab::Length,
Lab::Mass,
Lab::Mass / Lab::Time,
Lab::GasDissolutionFactor, /* gas-oil ratio */
@@ -396,6 +417,7 @@ namespace {
"SCC/HR",
"RCC/HR",
"CPRCC/HR/ATM",
"MDCC",
"G",
"G/HR",
"SCC/SCC",
@@ -410,6 +432,9 @@ namespace {
"J", /* energy */
};
// =================================================================
// PVT-M Unit Conventions
static const double from_pvt_m_offset[] = {
0.0,
0.0,
@@ -438,6 +463,7 @@ namespace {
0.0,
0.0,
0.0,
0.0,
0.0
};
@@ -458,6 +484,7 @@ namespace {
1 / ( PVT_M::GasSurfaceVolume / PVT_M::Time ),
1 / ( PVT_M::ReservoirVolume / PVT_M::Time ),
1 / PVT_M::Transmissibility,
1 / (PVT_M::Permeability * PVT_M::Length),
1 / PVT_M::Mass,
1 / ( PVT_M::Mass / PVT_M::Time ),
1 / (PVT_M::GasSurfaceVolume / PVT_M::LiquidSurfaceVolume), // Rs
@@ -489,6 +516,7 @@ namespace {
PVT_M::GasSurfaceVolume / PVT_M::Time,
PVT_M::ReservoirVolume / PVT_M::Time,
PVT_M::Transmissibility,
PVT_M::Permeability * PVT_M::Length,
PVT_M::Mass,
PVT_M::Mass / PVT_M::Time,
PVT_M::GasSurfaceVolume / PVT_M::LiquidSurfaceVolume, // Rs
@@ -520,6 +548,7 @@ namespace {
"SM3/DAY",
"RM3/DAY",
"CPR3/DAY/ATM",
"MDM",
"KG",
"KG/DAY",
"SM3/SM3",
@@ -534,6 +563,8 @@ namespace {
"KJ" /* energy */
};
// =================================================================
// INPUT Unit Conventions
static const double from_input_offset[] = {
0.0,
@@ -659,8 +690,7 @@ namespace {
"KJ", /* energy */
};
}
} // namespace Anonymous
UnitSystem::UnitSystem(const UnitType unit) :
m_unittype( unit )

View File

@@ -300,6 +300,215 @@ BOOST_AUTO_TEST_CASE ( UnitConstants ) {
BOOST_REQUIRE_CLOSE (flux_m3py, 1e4, 0.01);
}
BOOST_AUTO_TEST_CASE(METRIC_UNITS)
{
using Meas = UnitSystem::measure;
auto metric = UnitSystem::newMETRIC();
BOOST_CHECK( metric.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC );
BOOST_CHECK( metric.getEclType() == ECL_METRIC_UNITS );
// ----------------------------------------------------------------
// METRIC -> SI
BOOST_CHECK_CLOSE( metric.to_si( Meas::length , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::time , 1.0 ) , 86.400e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::density , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::pressure , 1.0 ) , 100.0e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::temperature , 1.0 ) , 274.15 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::viscosity , 1.0 ) , 1.0e-3 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::permeability , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::liquid_surface_volume , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_surface_volume , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::volume , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::liquid_surface_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_surface_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::transmissibility , 1.0 ) , 1.157407407407407e-13 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::effective_Kh , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::mass , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
// ----------------------------------------------------------------
// SI -> METRIC
BOOST_CHECK_CLOSE( metric.from_si( Meas::length , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::time , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::density , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::pressure , 1.0 ) , 1.0e-5 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::temperature , 274.15 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::viscosity , 1.0 ) , 1.0e+3 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::permeability , 1.0 ) , 1.01325e+15 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::liquid_surface_volume , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_surface_volume , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::volume , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::liquid_surface_rate , 1.0 ) , 86.400e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_surface_rate , 1.0 ) , 86.400e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::rate , 1.0 ) , 86.400e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::transmissibility , 1.0 ) , 8.64e+12 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::effective_Kh , 1.0 ) , 1.01325e+15 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::mass , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
}
BOOST_AUTO_TEST_CASE(FIELD_UNITS)
{
using Meas = UnitSystem::measure;
auto field = UnitSystem::newFIELD();
BOOST_CHECK( field.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD );
BOOST_CHECK( field.getEclType() == ECL_FIELD_UNITS );
// ----------------------------------------------------------------
// FIELD -> SI
BOOST_CHECK_CLOSE( field.to_si( Meas::length , 1.0 ) , 0.3048 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::time , 1.0 ) , 86.400e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::density , 1.0 ) , 1.601846337396014e+01, 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::pressure , 1.0 ) , 6.894757293168360e+03 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::temperature_absolute , 1.0 ) , 5.0/9.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::temperature , 1.0 ) , 255.9277777777778 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::viscosity , 1.0 ) , 1.0e-3 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::permeability , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::liquid_surface_volume , 1.0 ) , 0.1589872949280001 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::gas_surface_volume , 1.0 ) , 28.31684659200000 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::volume , 1.0 ) , 0.1589872949280001 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::liquid_surface_rate , 1.0 ) , 1.840130728333334e-06 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::gas_surface_rate , 1.0 ) , 3.277412800000001e-04 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::rate , 1.0 ) , 1.840130728333334e-06 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::transmissibility , 1.0 ) , 2.668883979653090e-13 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::effective_Kh , 1.0 ) , 3.008142116950407e-16 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::mass , 1.0 ) , 0.45359237 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::gas_oil_ratio , 1.0 ) , 178.1076066790352 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::oil_gas_ratio , 1.0 ) , 5.614583333333335e-03 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::gas_formation_volume_factor , 1.0 ) , 5.614583333333335e-03 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 178.1076066790352 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
// ----------------------------------------------------------------
// SI -> FIELD
BOOST_CHECK_CLOSE( field.from_si( Meas::length , 1.0 ) , 3.280839895013123e+00 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::time , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::density , 1.0 ) , 6.242796057614462e-02 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::pressure , 1.0 ) , 1.450377377302092e-04 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::temperature_absolute , 1.0 ) , 1.8 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::temperature , 255.9277777777778 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::viscosity , 1.0 ) , 1.0e+3 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::permeability , 1.0 ) , 1.01325e+15 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::liquid_surface_volume , 1.0 ) , 6.289810770432102e+00 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::gas_surface_volume , 1.0 ) , 3.531466672148859e-02 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::volume , 1.0 ) , 6.289810770432102e+00 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::liquid_surface_rate , 1.0 ) , 5.434396505653337e+05 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::gas_surface_rate , 1.0 ) , 3.051187204736614e+03 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::rate , 1.0 ) , 5.434396505653337e+05 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::transmissibility , 1.0 ) , 3.746884494132199e+12 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::effective_Kh , 1.0 ) , 3.324311023622047e+15 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::mass , 1.0 ) , 2.204622621848776e+00 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::gas_oil_ratio , 1.0 ) , 5.614583333333335e-03 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::oil_gas_ratio , 1.0 ) , 178.1076066790352 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::gas_formation_volume_factor , 1.0 ) , 178.1076066790352 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 5.614583333333335e-03 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
}
BOOST_AUTO_TEST_CASE(LAB_UNITS)
{
using Meas = UnitSystem::measure;
auto lab = UnitSystem::newLAB();
BOOST_CHECK( lab.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_LAB );
BOOST_CHECK( lab.getEclType() == ECL_LAB_UNITS );
// ----------------------------------------------------------------
// LAB -> SI
BOOST_CHECK_CLOSE( lab.to_si( Meas::length , 1.0 ) , 0.01 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::time , 1.0 ) , 3600.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::density , 1.0 ) , 1.0e3, 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::pressure , 1.0 ) , 101325.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::temperature , 1.0 ) , 274.15 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::viscosity , 1.0 ) , 1.0e-3 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::permeability , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::liquid_surface_volume , 1.0 ) , 1.0e-6 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_surface_volume , 1.0 ) , 1.0e-6 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::volume , 1.0 ) , 1.0e-6 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::liquid_surface_rate , 1.0 ) , 2.777777777777778e-10 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_surface_rate , 1.0 ) , 2.777777777777778e-10 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::rate , 1.0 ) , 2.777777777777778e-10 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::transmissibility , 1.0 ) , 2.741453518655592e-18 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::effective_Kh , 1.0 ) , 9.869232667160130e-18 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::mass , 1.0 ) , 1.0e-3 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
// ----------------------------------------------------------------
// SI -> LAB
BOOST_CHECK_CLOSE( lab.from_si( Meas::length , 1.0 ) , 100.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::time , 1.0 ) , 2.777777777777778e-04 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::density , 1.0 ) , 1.0e-3 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::pressure , 1.0 ) , 9.869232667160129e-06 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::temperature , 274.15 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::viscosity , 1.0 ) , 1.0e+3 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::permeability , 1.0 ) , 1.01325e+15 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::liquid_surface_volume , 1.0 ) , 1.0e6 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_surface_volume , 1.0 ) , 1.0e6 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::volume , 1.0 ) , 1.0e6 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::liquid_surface_rate , 1.0 ) , 3.6e9 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_surface_rate , 1.0 ) , 3.6e9 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::rate , 1.0 ) , 3.6e9 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::transmissibility , 1.0 ) , 3.647699999999999e+17 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::effective_Kh , 1.0 ) , 1.01325e+17 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::mass , 1.0 ) , 1.0e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 );
}
BOOST_AUTO_TEST_CASE(PVT_M_UNITS)
{
@@ -328,6 +537,7 @@ BOOST_AUTO_TEST_CASE(PVT_M_UNITS)
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_surface_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::transmissibility , 1.0 ) , 1.142272299439830e-13 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::effective_Kh , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::mass , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 );
@@ -357,6 +567,7 @@ BOOST_AUTO_TEST_CASE(PVT_M_UNITS)
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_surface_rate , 1.0 ) , 86.400e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::rate , 1.0 ) , 86.400e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::transmissibility , 1.0 ) , 8.75448e+12 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::effective_Kh , 1.0 ) , 1.01325e+15 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::mass , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 );