Merge pull request #3449 from totto82/output_moles

add moles unit to unitsystem
This commit is contained in:
Bård Skaflestad
2023-03-16 12:33:16 +01:00
committed by GitHub
6 changed files with 45 additions and 3 deletions

View File

@@ -82,6 +82,7 @@ namespace Opm {
polymer_density, polymer_density,
salinity, salinity,
gas_oil_ratio_rate, gas_oil_ratio_rate,
moles,
_count // New entries must be added *before* this _count // New entries must be added *before* this
}; };

View File

@@ -139,6 +139,7 @@ namespace Opm {
constexpr const double gravity = 9.80665 * meter/square(second); constexpr const double gravity = 9.80665 * meter/square(second);
/// @} /// @}
constexpr const double mol = 1;
// -------------------------------------------------------------- // --------------------------------------------------------------
// Derived units and conversions // Derived units and conversions
// -------------------------------------------------------------- // --------------------------------------------------------------
@@ -279,6 +280,7 @@ namespace Opm {
constexpr const double Timestep = day; constexpr const double Timestep = day;
constexpr const double SurfaceTension = dyne/(centi*meter); constexpr const double SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = kilo*joule; constexpr const double Energy = kilo*joule;
constexpr const double Moles = kilo*mol;
} }
@@ -310,6 +312,8 @@ namespace Opm {
constexpr const double Timestep = day; constexpr const double Timestep = day;
constexpr const double SurfaceTension = dyne/(centi*meter); constexpr const double SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = btu; constexpr const double Energy = btu;
constexpr const double Moles = kilo*pound*mol;
} }
@@ -341,6 +345,8 @@ namespace Opm {
constexpr const double Timestep = hour; constexpr const double Timestep = hour;
constexpr const double SurfaceTension = dyne/(centi*meter); constexpr const double SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = joule; constexpr const double Energy = joule;
constexpr const double Moles = mol;
} }
@@ -372,6 +378,7 @@ namespace Opm {
constexpr const double Timestep = day; constexpr const double Timestep = day;
constexpr const double SurfaceTension = dyne/(centi*meter); constexpr const double SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = kilo*joule; constexpr const double Energy = kilo*joule;
constexpr const double Moles = kilo*mol;
} }
} }

View File

@@ -152,6 +152,11 @@ struct SummaryConfigContext {
{"GIPG" , {"RGIPG", "FGIPG"}}, {"GIPG" , {"RGIPG", "FGIPG"}},
{"WIP" , {"RWIP" , "FWIP"}}, {"WIP" , {"RWIP" , "FWIP"}},
{"WIPR" , {"FWIPR"}}, {"WIPR" , {"FWIPR"}},
{"WIPL" , {"RWIPL" , "FWIPL"}},
{"WIPG" , {"RWIPG", "FWIPG"}},
{"WCD" , {"RWCD", "FWCD"}},
{"GCDI" , {"RGCDI", "FGCDI"}},
{"GCDM" , {"RGCDM", "FGCDM"}},
{"SWAT" , {"BSWAT"}}, {"SWAT" , {"BSWAT"}},
{"SGAS" , {"BSGAS"}}, {"SGAS" , {"BSGAS"}},
{"SALT" , {"FSIP"}}, {"SALT" , {"FSIP"}},

View File

@@ -91,6 +91,7 @@ namespace {
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0,
}; };
static const double to_metric[] = { static const double to_metric[] = {
@@ -135,6 +136,7 @@ namespace {
1 / Metric::PolymerDensity, 1 / Metric::PolymerDensity,
1 / Metric::Salinity, 1 / Metric::Salinity,
1 / (1 / Metric::Time), 1 / (1 / Metric::Time),
1 / Metric::Moles,
}; };
static const double from_metric[] = { static const double from_metric[] = {
@@ -179,6 +181,7 @@ namespace {
Metric::PolymerDensity, Metric::PolymerDensity,
Metric::Salinity, Metric::Salinity,
1 / Metric::Time, 1 / Metric::Time,
Metric::Moles,
}; };
static constexpr const char* metric_names[static_cast<int>(UnitSystem::measure::_count)] = { static constexpr const char* metric_names[static_cast<int>(UnitSystem::measure::_count)] = {
@@ -223,6 +226,7 @@ namespace {
"KG / SM3", /*polymer density */ "KG / SM3", /*polymer density */
"KG / SM3", /*salinity */ "KG / SM3", /*salinity */
"SM3/SM3/DAY", "SM3/SM3/DAY",
"KG-M",
}; };
static_assert(numElems(from_metric_offset) == static_cast<std::size_t>(UnitSystem::measure::_count), static_assert(numElems(from_metric_offset) == static_cast<std::size_t>(UnitSystem::measure::_count),
@@ -287,6 +291,7 @@ namespace {
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0,
}; };
static const double to_field[] = { static const double to_field[] = {
@@ -331,6 +336,7 @@ namespace {
1 / Field::PolymerDensity, 1 / Field::PolymerDensity,
1 / Field::Salinity, 1 / Field::Salinity,
1 / (Field::GasSurfaceVolume / Field::LiquidSurfaceVolume / Field::Time), 1 / (Field::GasSurfaceVolume / Field::LiquidSurfaceVolume / Field::Time),
1 / Field::Moles,
}; };
static const double from_field[] = { static const double from_field[] = {
@@ -375,6 +381,7 @@ namespace {
Field::PolymerDensity, Field::PolymerDensity,
Field::Salinity, Field::Salinity,
Field::GasSurfaceVolume / Field::LiquidSurfaceVolume / Field::Time, Field::GasSurfaceVolume / Field::LiquidSurfaceVolume / Field::Time,
Field::Moles,
}; };
static constexpr const char* field_names[static_cast<int>(UnitSystem::measure::_count)] = { static constexpr const char* field_names[static_cast<int>(UnitSystem::measure::_count)] = {
@@ -419,6 +426,7 @@ namespace {
"LB/STB", /*polymer density */ "LB/STB", /*polymer density */
"LB/STB", /*salinity */ "LB/STB", /*salinity */
"MSCF/STB/DAY", "MSCF/STB/DAY",
"LB-M",
}; };
static_assert(numElems(from_field_offset) == static_cast<std::size_t>(UnitSystem::measure::_count), static_assert(numElems(from_field_offset) == static_cast<std::size_t>(UnitSystem::measure::_count),
@@ -483,6 +491,7 @@ namespace {
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0,
}; };
static const double to_lab[] = { static const double to_lab[] = {
@@ -527,6 +536,7 @@ namespace {
1 / Lab::PolymerDensity, 1 / Lab::PolymerDensity,
1 / Lab::Salinity, 1 / Lab::Salinity,
1 / (Lab::GasDissolutionFactor / Lab::Time), 1 / (Lab::GasDissolutionFactor / Lab::Time),
1 / Lab::Moles,
}; };
static const double from_lab[] = { static const double from_lab[] = {
@@ -571,6 +581,7 @@ namespace {
Lab::PolymerDensity, Lab::PolymerDensity,
Lab::Salinity, Lab::Salinity,
Lab::GasDissolutionFactor / Lab::Time, Lab::GasDissolutionFactor / Lab::Time,
Lab::Moles,
}; };
static constexpr const char* lab_names[static_cast<int>(UnitSystem::measure::_count)] = { static constexpr const char* lab_names[static_cast<int>(UnitSystem::measure::_count)] = {
@@ -615,6 +626,7 @@ namespace {
"G/SCC", /*polymer density */ "G/SCC", /*polymer density */
"G/SCC", /*salinity */ "G/SCC", /*salinity */
"SCC/SCC/HR", "SCC/SCC/HR",
"g-M",
}; };
static_assert(numElems(from_lab_offset) == static_cast<std::size_t>(UnitSystem::measure::_count), static_assert(numElems(from_lab_offset) == static_cast<std::size_t>(UnitSystem::measure::_count),
@@ -679,6 +691,7 @@ namespace {
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0,
}; };
static const double to_pvt_m[] = { static const double to_pvt_m[] = {
@@ -723,6 +736,7 @@ namespace {
1 / PVT_M::PolymerDensity, 1 / PVT_M::PolymerDensity,
1 / PVT_M::Salinity, 1 / PVT_M::Salinity,
1 / (PVT_M::GasSurfaceVolume / PVT_M::LiquidSurfaceVolume /PVT_M::Time), 1 / (PVT_M::GasSurfaceVolume / PVT_M::LiquidSurfaceVolume /PVT_M::Time),
1 / PVT_M::Moles,
}; };
static const double from_pvt_m[] = { static const double from_pvt_m[] = {
@@ -767,6 +781,7 @@ namespace {
PVT_M::PolymerDensity, PVT_M::PolymerDensity,
PVT_M::Salinity, PVT_M::Salinity,
PVT_M::GasSurfaceVolume / PVT_M::LiquidSurfaceVolume /PVT_M::Time, PVT_M::GasSurfaceVolume / PVT_M::LiquidSurfaceVolume /PVT_M::Time,
PVT_M::Moles,
}; };
static constexpr const char* pvt_m_names[static_cast<int>(UnitSystem::measure::_count)] = { static constexpr const char* pvt_m_names[static_cast<int>(UnitSystem::measure::_count)] = {
@@ -811,6 +826,7 @@ namespace {
"KG/SM3", /*polymer density */ "KG/SM3", /*polymer density */
"KG/SM3", /*salinity */ "KG/SM3", /*salinity */
"SM3/SM3/DAY", "SM3/SM3/DAY",
"KG-M",
}; };
static_assert(numElems(from_pvt_m_offset) == static_cast<std::size_t>(UnitSystem::measure::_count), static_assert(numElems(from_pvt_m_offset) == static_cast<std::size_t>(UnitSystem::measure::_count),
@@ -875,6 +891,7 @@ namespace {
0.0, 0.0,
0.0, 0.0,
0.0, 0.0,
0.0,
}; };
static const double to_input[] = { static const double to_input[] = {
@@ -919,6 +936,7 @@ namespace {
1, 1,
1, 1,
1, 1,
1,
}; };
static const double from_input[] = { static const double from_input[] = {
@@ -963,6 +981,7 @@ namespace {
1, 1,
1, 1,
1, 1,
1,
}; };
static constexpr const char* input_names[static_cast<int>(UnitSystem::measure::_count)] = { static constexpr const char* input_names[static_cast<int>(UnitSystem::measure::_count)] = {
@@ -1007,6 +1026,7 @@ namespace {
"KG/SM3", /*polymer density */ "KG/SM3", /*polymer density */
"KG/SM3", /*salinity */ "KG/SM3", /*salinity */
"SM3/SM3/DAY", "SM3/SM3/DAY",
"g-M"
}; };
static_assert(numElems(from_input_offset) == static_cast<std::size_t>(UnitSystem::measure::_count), static_assert(numElems(from_input_offset) == static_cast<std::size_t>(UnitSystem::measure::_count),

View File

@@ -2231,9 +2231,9 @@ static const std::unordered_map< std::string, Opm::UnitSystem::measure> single_v
{"FGIPL" , Opm::UnitSystem::measure::gas_surface_volume }, {"FGIPL" , Opm::UnitSystem::measure::gas_surface_volume },
{"FGIPG" , Opm::UnitSystem::measure::gas_surface_volume }, {"FGIPG" , Opm::UnitSystem::measure::gas_surface_volume },
{"FPR" , Opm::UnitSystem::measure::pressure }, {"FPR" , Opm::UnitSystem::measure::pressure },
{"FGCDI" , Opm::UnitSystem::measure::gas_surface_volume }, {"FGCDI" , Opm::UnitSystem::measure::moles },
{"FGCDM" , Opm::UnitSystem::measure::gas_surface_volume }, {"FGCDM" , Opm::UnitSystem::measure::moles },
{"FWCD" , Opm::UnitSystem::measure::gas_surface_volume }, {"FWCD" , Opm::UnitSystem::measure::moles },
{"FWIPG" , Opm::UnitSystem::measure::liquid_surface_volume }, {"FWIPG" , Opm::UnitSystem::measure::liquid_surface_volume },
{"FWIPL" , Opm::UnitSystem::measure::liquid_surface_volume }, {"FWIPL" , Opm::UnitSystem::measure::liquid_surface_volume },
}; };

View File

@@ -307,6 +307,7 @@ BOOST_AUTO_TEST_CASE(METRIC_UNITS)
BOOST_CHECK_CLOSE( metric.to_si( Meas::energy, 1.0), 1000, 1e-10); BOOST_CHECK_CLOSE( metric.to_si( Meas::energy, 1.0), 1000, 1e-10);
BOOST_CHECK_CLOSE( metric.to_si( Meas::icd_strength, 1.0), 7.46496e+14, 1e-10); BOOST_CHECK_CLOSE( metric.to_si( Meas::icd_strength, 1.0), 7.46496e+14, 1e-10);
BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_oil_ratio_rate, 1.0), 1.1574074074074073e-05, 1.0e-10 ); BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_oil_ratio_rate, 1.0), 1.1574074074074073e-05, 1.0e-10 );
BOOST_CHECK_CLOSE( metric.to_si( Meas::moles, 1.0), 1000, 1.0e-10 );
// ---------------------------------------------------------------- // ----------------------------------------------------------------
// SI -> METRIC // SI -> METRIC
@@ -346,6 +347,8 @@ BOOST_AUTO_TEST_CASE(METRIC_UNITS)
BOOST_CHECK_CLOSE( metric.from_si( Meas::energy, 1000.0), 1, 1e-10); BOOST_CHECK_CLOSE( metric.from_si( Meas::energy, 1000.0), 1, 1e-10);
BOOST_CHECK_CLOSE( metric.from_si( Meas::icd_strength, 7.46496e+14), 1.0, 1e-10); BOOST_CHECK_CLOSE( metric.from_si( Meas::icd_strength, 7.46496e+14), 1.0, 1e-10);
BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_oil_ratio_rate, 1.0), 86.400e3, 1.0e-10 ); BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_oil_ratio_rate, 1.0), 86.400e3, 1.0e-10 );
BOOST_CHECK_CLOSE( metric.from_si( Meas::moles, 1), 0.001, 1.0e-10 );
} }
BOOST_AUTO_TEST_CASE(FIELD_UNITS) BOOST_AUTO_TEST_CASE(FIELD_UNITS)
@@ -394,6 +397,7 @@ BOOST_AUTO_TEST_CASE(FIELD_UNITS)
BOOST_CHECK_CLOSE( field.to_si( Meas::energy , 1.0 ) , 1054.3503 , 1.0e-10 ); BOOST_CHECK_CLOSE( field.to_si( Meas::energy , 1.0 ) , 1054.3503 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::icd_strength , 1.0 ) , 6.418842091749854e+16 , 1.0e-10 ); BOOST_CHECK_CLOSE( field.to_si( Meas::icd_strength , 1.0 ) , 6.418842091749854e+16 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::gas_oil_ratio_rate, 1.0), 1.1574074074074073e-05*178.1076066790352, 1.0e-10 ); BOOST_CHECK_CLOSE( field.to_si( Meas::gas_oil_ratio_rate, 1.0), 1.1574074074074073e-05*178.1076066790352, 1.0e-10 );
BOOST_CHECK_CLOSE( field.to_si( Meas::moles, 1.0), 453.59237, 1.0e-5 );
// ---------------------------------------------------------------- // ----------------------------------------------------------------
@@ -433,6 +437,7 @@ BOOST_AUTO_TEST_CASE(FIELD_UNITS)
BOOST_CHECK_CLOSE( field.from_si( Meas::energy , 1054.3503 ) , 1.0 , 1.0e-10 ); BOOST_CHECK_CLOSE( field.from_si( Meas::energy , 1054.3503 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::icd_strength , 6.418842091749854e+16 ) , 1.0 , 1.0e-10 ); BOOST_CHECK_CLOSE( field.from_si( Meas::icd_strength , 6.418842091749854e+16 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::gas_oil_ratio_rate, 1.0), 86.400e3*5.614583333333335e-03, 1.0e-10 ); BOOST_CHECK_CLOSE( field.from_si( Meas::gas_oil_ratio_rate, 1.0), 86.400e3*5.614583333333335e-03, 1.0e-10 );
BOOST_CHECK_CLOSE( field.from_si( Meas::moles, 1.0), 0.0022046226, 1.0e-5 );
} }
@@ -482,6 +487,7 @@ BOOST_AUTO_TEST_CASE(LAB_UNITS)
BOOST_CHECK_CLOSE( lab.to_si( Meas::energy , 1.0 ) , 1.0 , 1.0e-10 ); BOOST_CHECK_CLOSE( lab.to_si( Meas::energy , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::icd_strength , 1.0 ) , 1.313172e+24 , 1.0e-10 ); BOOST_CHECK_CLOSE( lab.to_si( Meas::icd_strength , 1.0 ) , 1.313172e+24 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_oil_ratio_rate, 1.0), 2.777777777777778e-4, 1.0e-10 ); BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_oil_ratio_rate, 1.0), 2.777777777777778e-4, 1.0e-10 );
BOOST_CHECK_CLOSE( lab.to_si( Meas::moles, 1), 1, 1.0e-10 );
// ---------------------------------------------------------------- // ----------------------------------------------------------------
@@ -522,6 +528,7 @@ BOOST_AUTO_TEST_CASE(LAB_UNITS)
BOOST_CHECK_CLOSE( lab.from_si( Meas::energy , 1.0 ) , 1.0 , 1.0e-10 ); BOOST_CHECK_CLOSE( lab.from_si( Meas::energy , 1.0 ) , 1.0 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::icd_strength , 1.0 ) , 7.615148662932201e-25 , 1.0e-10 ); BOOST_CHECK_CLOSE( lab.from_si( Meas::icd_strength , 1.0 ) , 7.615148662932201e-25 , 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_oil_ratio_rate, 1.0), 3.6e3, 1.0e-10 ); BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_oil_ratio_rate, 1.0), 3.6e3, 1.0e-10 );
BOOST_CHECK_CLOSE( lab.from_si( Meas::moles, 1), 1, 1.0e-10 );
} }
@@ -571,6 +578,7 @@ BOOST_AUTO_TEST_CASE(PVT_M_UNITS)
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::energy , 1.0 ) , 1.0e3 , 1.0e-10 ); BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::energy , 1.0 ) , 1.0e3 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::icd_strength , 1.0 ) , 7.56387072e+14 , 1.0e-10 ); BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::icd_strength , 1.0 ) , 7.56387072e+14 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_oil_ratio_rate, 1.0), 1.1574074074074073e-05, 1.0e-10 ); BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_oil_ratio_rate, 1.0), 1.1574074074074073e-05, 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::moles, 1), 1000, 1.0e-10 );
// ---------------------------------------------------------------- // ----------------------------------------------------------------
@@ -611,6 +619,7 @@ BOOST_AUTO_TEST_CASE(PVT_M_UNITS)
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::energy , 1.0 ) , 1.0e-3 , 1.0e-10 ); BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::energy , 1.0 ) , 1.0e-3 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::icd_strength , 1.0 ) , 1.322074420647951e-15 , 1.0e-10 ); BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::icd_strength , 1.0 ) , 1.322074420647951e-15 , 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_oil_ratio_rate, 1.0), 86.400e3, 1.0e-10 ); BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_oil_ratio_rate, 1.0), 86.400e3, 1.0e-10 );
BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::moles, 1), 0.001, 1.0e-10 );
} }