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,
salinity,
gas_oil_ratio_rate,
moles,
_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 mol = 1;
// --------------------------------------------------------------
// Derived units and conversions
// --------------------------------------------------------------
@@ -279,6 +280,7 @@ namespace Opm {
constexpr const double Timestep = day;
constexpr const double SurfaceTension = dyne/(centi*meter);
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 SurfaceTension = dyne/(centi*meter);
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 SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = joule;
constexpr const double Moles = mol;
}
@@ -372,6 +378,7 @@ namespace Opm {
constexpr const double Timestep = day;
constexpr const double SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = kilo*joule;
constexpr const double Moles = kilo*mol;
}
}

View File

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

View File

@@ -91,6 +91,7 @@ namespace {
0.0,
0.0,
0.0,
0.0,
};
static const double to_metric[] = {
@@ -135,6 +136,7 @@ namespace {
1 / Metric::PolymerDensity,
1 / Metric::Salinity,
1 / (1 / Metric::Time),
1 / Metric::Moles,
};
static const double from_metric[] = {
@@ -179,6 +181,7 @@ namespace {
Metric::PolymerDensity,
Metric::Salinity,
1 / Metric::Time,
Metric::Moles,
};
static constexpr const char* metric_names[static_cast<int>(UnitSystem::measure::_count)] = {
@@ -223,6 +226,7 @@ namespace {
"KG / SM3", /*polymer density */
"KG / SM3", /*salinity */
"SM3/SM3/DAY",
"KG-M",
};
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,
};
static const double to_field[] = {
@@ -331,6 +336,7 @@ namespace {
1 / Field::PolymerDensity,
1 / Field::Salinity,
1 / (Field::GasSurfaceVolume / Field::LiquidSurfaceVolume / Field::Time),
1 / Field::Moles,
};
static const double from_field[] = {
@@ -375,6 +381,7 @@ namespace {
Field::PolymerDensity,
Field::Salinity,
Field::GasSurfaceVolume / Field::LiquidSurfaceVolume / Field::Time,
Field::Moles,
};
static constexpr const char* field_names[static_cast<int>(UnitSystem::measure::_count)] = {
@@ -419,6 +426,7 @@ namespace {
"LB/STB", /*polymer density */
"LB/STB", /*salinity */
"MSCF/STB/DAY",
"LB-M",
};
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,
};
static const double to_lab[] = {
@@ -527,6 +536,7 @@ namespace {
1 / Lab::PolymerDensity,
1 / Lab::Salinity,
1 / (Lab::GasDissolutionFactor / Lab::Time),
1 / Lab::Moles,
};
static const double from_lab[] = {
@@ -571,6 +581,7 @@ namespace {
Lab::PolymerDensity,
Lab::Salinity,
Lab::GasDissolutionFactor / Lab::Time,
Lab::Moles,
};
static constexpr const char* lab_names[static_cast<int>(UnitSystem::measure::_count)] = {
@@ -615,6 +626,7 @@ namespace {
"G/SCC", /*polymer density */
"G/SCC", /*salinity */
"SCC/SCC/HR",
"g-M",
};
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,
};
static const double to_pvt_m[] = {
@@ -723,6 +736,7 @@ namespace {
1 / PVT_M::PolymerDensity,
1 / PVT_M::Salinity,
1 / (PVT_M::GasSurfaceVolume / PVT_M::LiquidSurfaceVolume /PVT_M::Time),
1 / PVT_M::Moles,
};
static const double from_pvt_m[] = {
@@ -767,6 +781,7 @@ namespace {
PVT_M::PolymerDensity,
PVT_M::Salinity,
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)] = {
@@ -811,6 +826,7 @@ namespace {
"KG/SM3", /*polymer density */
"KG/SM3", /*salinity */
"SM3/SM3/DAY",
"KG-M",
};
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,
};
static const double to_input[] = {
@@ -919,6 +936,7 @@ namespace {
1,
1,
1,
1,
};
static const double from_input[] = {
@@ -963,6 +981,7 @@ namespace {
1,
1,
1,
1,
};
static constexpr const char* input_names[static_cast<int>(UnitSystem::measure::_count)] = {
@@ -1007,6 +1026,7 @@ namespace {
"KG/SM3", /*polymer density */
"KG/SM3", /*salinity */
"SM3/SM3/DAY",
"g-M"
};
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 },
{"FGIPG" , Opm::UnitSystem::measure::gas_surface_volume },
{"FPR" , Opm::UnitSystem::measure::pressure },
{"FGCDI" , Opm::UnitSystem::measure::gas_surface_volume },
{"FGCDM" , Opm::UnitSystem::measure::gas_surface_volume },
{"FWCD" , Opm::UnitSystem::measure::gas_surface_volume },
{"FGCDI" , Opm::UnitSystem::measure::moles },
{"FGCDM" , Opm::UnitSystem::measure::moles },
{"FWCD" , Opm::UnitSystem::measure::moles },
{"FWIPG" , 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::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::moles, 1.0), 1000, 1.0e-10 );
// ----------------------------------------------------------------
// 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::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::moles, 1), 0.001, 1.0e-10 );
}
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::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::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::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::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::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::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::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::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::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::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::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::moles, 1), 0.001, 1.0e-10 );
}