Group Block Level Summary Vectors by Phase

Mostly to aid future maintenance.  While here, also re-indent the
other unit tables and add a type alias (UnitTable) to avoid spelling
out the 'unordered_map<>' type repeatedly.
This commit is contained in:
Bård Skaflestad
2023-07-04 18:54:41 +02:00
parent c2cc368f42
commit 5f3e6f9084

View File

@@ -1729,9 +1729,10 @@ template< typename F, typename G >
auto sub( F f, G g ) -> bin_op< F, G, std::minus< quantity > >
{ return { f, g }; }
using ofun = std::function< quantity( const fn_args& ) >;
using ofun = std::function<quantity(const fn_args&)>;
using UnitTable = std::unordered_map<std::string, Opm::UnitSystem::measure>;
static const std::unordered_map< std::string, ofun > funs = {
static const auto funs = std::unordered_map<std::string, ofun> {
{ "WWIR", rate< rt::wat, injector > },
{ "WWIRT", wwirt },
{ "WOIR", rate< rt::oil, injector > },
@@ -2264,66 +2265,64 @@ static const std::unordered_map< std::string, ofun > funs = {
{"WEFFG", well_efficiency_factor_grouptree},
};
static const std::unordered_map< std::string, Opm::UnitSystem::measure> single_values_units = {
{"TCPU" , Opm::UnitSystem::measure::runtime },
{"ELAPSED" , Opm::UnitSystem::measure::identity },
{"NEWTON" , Opm::UnitSystem::measure::identity },
{"NLINERS" , Opm::UnitSystem::measure::identity },
{"NLINSMIN" , Opm::UnitSystem::measure::identity },
{"NLINSMAX" , Opm::UnitSystem::measure::identity },
{"MLINEARS" , Opm::UnitSystem::measure::identity },
{"NLINEARS" , Opm::UnitSystem::measure::identity },
{"MSUMLINS" , Opm::UnitSystem::measure::identity },
{"MSUMNEWT" , Opm::UnitSystem::measure::identity },
{"TCPUTS" , Opm::UnitSystem::measure::identity },
{"TIMESTEP" , Opm::UnitSystem::measure::time },
{"TCPUDAY" , Opm::UnitSystem::measure::time },
{"STEPTYPE" , Opm::UnitSystem::measure::identity },
{"TELAPLIN" , Opm::UnitSystem::measure::time },
{"FRPV" , Opm::UnitSystem::measure::volume },
{"FWIP" , Opm::UnitSystem::measure::liquid_surface_volume },
{"FWIPR" , Opm::UnitSystem::measure::volume },
{"FOIP" , Opm::UnitSystem::measure::liquid_surface_volume },
{"FOIPR" , Opm::UnitSystem::measure::volume },
{"FOE" , Opm::UnitSystem::measure::identity },
{"FGIP" , Opm::UnitSystem::measure::gas_surface_volume },
{"FGIPR" , Opm::UnitSystem::measure::volume },
{"FSIP" , Opm::UnitSystem::measure::mass },
{"FOIPL" , Opm::UnitSystem::measure::liquid_surface_volume },
{"FOIPG" , Opm::UnitSystem::measure::liquid_surface_volume },
{"FGIPL" , Opm::UnitSystem::measure::gas_surface_volume },
{"FGIPG" , Opm::UnitSystem::measure::gas_surface_volume },
{"FPR" , Opm::UnitSystem::measure::pressure },
{"FPRP" , Opm::UnitSystem::measure::pressure },
{"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 },
static const auto single_values_units = UnitTable {
{"TCPU" , Opm::UnitSystem::measure::runtime },
{"ELAPSED" , Opm::UnitSystem::measure::identity },
{"NEWTON" , Opm::UnitSystem::measure::identity },
{"NLINERS" , Opm::UnitSystem::measure::identity },
{"NLINSMIN" , Opm::UnitSystem::measure::identity },
{"NLINSMAX" , Opm::UnitSystem::measure::identity },
{"MLINEARS" , Opm::UnitSystem::measure::identity },
{"NLINEARS" , Opm::UnitSystem::measure::identity },
{"MSUMLINS" , Opm::UnitSystem::measure::identity },
{"MSUMNEWT" , Opm::UnitSystem::measure::identity },
{"TCPUTS" , Opm::UnitSystem::measure::identity },
{"TIMESTEP" , Opm::UnitSystem::measure::time },
{"TCPUDAY" , Opm::UnitSystem::measure::time },
{"STEPTYPE" , Opm::UnitSystem::measure::identity },
{"TELAPLIN" , Opm::UnitSystem::measure::time },
{"FRPV" , Opm::UnitSystem::measure::volume },
{"FWIP" , Opm::UnitSystem::measure::liquid_surface_volume },
{"FWIPR" , Opm::UnitSystem::measure::volume },
{"FOIP" , Opm::UnitSystem::measure::liquid_surface_volume },
{"FOIPR" , Opm::UnitSystem::measure::volume },
{"FOE" , Opm::UnitSystem::measure::identity },
{"FGIP" , Opm::UnitSystem::measure::gas_surface_volume },
{"FGIPR" , Opm::UnitSystem::measure::volume },
{"FSIP" , Opm::UnitSystem::measure::mass },
{"FOIPL" , Opm::UnitSystem::measure::liquid_surface_volume },
{"FOIPG" , Opm::UnitSystem::measure::liquid_surface_volume },
{"FGIPL" , Opm::UnitSystem::measure::gas_surface_volume },
{"FGIPG" , Opm::UnitSystem::measure::gas_surface_volume },
{"FPR" , Opm::UnitSystem::measure::pressure },
{"FPRP" , Opm::UnitSystem::measure::pressure },
{"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 },
};
static const std::unordered_map< std::string, Opm::UnitSystem::measure> region_units = {
{"RPR" , Opm::UnitSystem::measure::pressure},
{"RPRP" , Opm::UnitSystem::measure::pressure},
{"RRPV" , Opm::UnitSystem::measure::volume },
{"ROIP" , Opm::UnitSystem::measure::liquid_surface_volume },
{"ROIPL" , Opm::UnitSystem::measure::liquid_surface_volume },
{"ROIPG" , Opm::UnitSystem::measure::liquid_surface_volume },
{"RGIP" , Opm::UnitSystem::measure::gas_surface_volume },
{"RGIPL" , Opm::UnitSystem::measure::gas_surface_volume },
{"RGIPG" , Opm::UnitSystem::measure::gas_surface_volume },
{"RWIP" , Opm::UnitSystem::measure::liquid_surface_volume },
{"RRPV" , Opm::UnitSystem::measure::geometric_volume },
{"RGCDI" , Opm::UnitSystem::measure::gas_surface_volume },
{"RGCDM" , Opm::UnitSystem::measure::gas_surface_volume },
{"RWCD" , Opm::UnitSystem::measure::gas_surface_volume },
{"RWIPG" , Opm::UnitSystem::measure::liquid_surface_volume },
{"RWIPL" , Opm::UnitSystem::measure::liquid_surface_volume },
static const auto region_units = UnitTable {
{"RPR" , Opm::UnitSystem::measure::pressure},
{"RPRP" , Opm::UnitSystem::measure::pressure},
{"RRPV" , Opm::UnitSystem::measure::volume },
{"ROIP" , Opm::UnitSystem::measure::liquid_surface_volume },
{"ROIPL" , Opm::UnitSystem::measure::liquid_surface_volume },
{"ROIPG" , Opm::UnitSystem::measure::liquid_surface_volume },
{"RGIP" , Opm::UnitSystem::measure::gas_surface_volume },
{"RGIPL" , Opm::UnitSystem::measure::gas_surface_volume },
{"RGIPG" , Opm::UnitSystem::measure::gas_surface_volume },
{"RWIP" , Opm::UnitSystem::measure::liquid_surface_volume },
{"RRPV" , Opm::UnitSystem::measure::geometric_volume },
{"RGCDI" , Opm::UnitSystem::measure::gas_surface_volume },
{"RGCDM" , Opm::UnitSystem::measure::gas_surface_volume },
{"RWCD" , Opm::UnitSystem::measure::gas_surface_volume },
{"RWIPG" , Opm::UnitSystem::measure::liquid_surface_volume },
{"RWIPL" , Opm::UnitSystem::measure::liquid_surface_volume },
};
static const auto interregion_units =
std::unordered_map<std::string, Opm::UnitSystem::measure>
{
static const auto interregion_units = UnitTable {
// Flow rates (surface volume)
{ "ROFR" , Opm::UnitSystem::measure::liquid_surface_rate },
{ "ROFR+" , Opm::UnitSystem::measure::liquid_surface_rate },
@@ -2351,52 +2350,64 @@ static const auto interregion_units =
{ "RWFT-" , Opm::UnitSystem::measure::liquid_surface_volume },
};
static const std::unordered_map< std::string, Opm::UnitSystem::measure> block_units = {
{"BPR" , Opm::UnitSystem::measure::pressure},
{"BRPV" , Opm::UnitSystem::measure::volume },
{"BOPV" , Opm::UnitSystem::measure::volume },
{"BGPV" , Opm::UnitSystem::measure::volume },
{"BWPV" , Opm::UnitSystem::measure::volume },
{"BPRESSUR" , Opm::UnitSystem::measure::pressure},
{"BTCNFHEA" , Opm::UnitSystem::measure::temperature},
{"BTEMP" , Opm::UnitSystem::measure::temperature},
{"BSWAT" , Opm::UnitSystem::measure::identity},
{"BWSAT" , Opm::UnitSystem::measure::identity},
{"BSGAS" , Opm::UnitSystem::measure::identity},
{"BGSAT" , Opm::UnitSystem::measure::identity},
{"BSOIL" , Opm::UnitSystem::measure::identity},
{"BOSAT" , Opm::UnitSystem::measure::identity},
{"BNSAT" , Opm::UnitSystem::measure::identity},
{"BOIP" , Opm::UnitSystem::measure::liquid_surface_volume},
{"BOIPG" , Opm::UnitSystem::measure::liquid_surface_volume},
{"BOIPL" , Opm::UnitSystem::measure::liquid_surface_volume},
{"BGIP" , Opm::UnitSystem::measure::gas_surface_volume},
{"BGIPG" , Opm::UnitSystem::measure::gas_surface_volume},
{"BGIPL" , Opm::UnitSystem::measure::gas_surface_volume},
{"BWIP" , Opm::UnitSystem::measure::liquid_surface_volume},
{"BRS" , Opm::UnitSystem::measure::gas_oil_ratio},
{"BRV" , Opm::UnitSystem::measure::oil_gas_ratio},
{"BWKR" , Opm::UnitSystem::measure::identity},
{"BOKR" , Opm::UnitSystem::measure::identity},
{"BKRO" , Opm::UnitSystem::measure::identity},
{"BKROG" , Opm::UnitSystem::measure::identity},
{"BKROW" , Opm::UnitSystem::measure::identity},
{"BGKR" , Opm::UnitSystem::measure::identity},
{"BKRG" , Opm::UnitSystem::measure::identity},
{"BKRW" , Opm::UnitSystem::measure::identity},
{"BWPC" , Opm::UnitSystem::measure::pressure},
{"BWPR" , Opm::UnitSystem::measure::pressure},
{"BGPC" , Opm::UnitSystem::measure::pressure},
{"BGPR" , Opm::UnitSystem::measure::pressure},
{"BVWAT" , Opm::UnitSystem::measure::viscosity},
{"BWVIS" , Opm::UnitSystem::measure::viscosity},
{"BVGAS" , Opm::UnitSystem::measure::viscosity},
{"BGVIS" , Opm::UnitSystem::measure::viscosity},
{"BVOIL" , Opm::UnitSystem::measure::viscosity},
{"BOVIS" , Opm::UnitSystem::measure::viscosity},
static const auto block_units = UnitTable {
// Gas quantities
{"BGIP" , Opm::UnitSystem::measure::gas_surface_volume},
{"BGIPG" , Opm::UnitSystem::measure::gas_surface_volume},
{"BGIPL" , Opm::UnitSystem::measure::gas_surface_volume},
{"BGKR" , Opm::UnitSystem::measure::identity},
{"BKRG" , Opm::UnitSystem::measure::identity},
{"BGPC" , Opm::UnitSystem::measure::pressure},
{"BGPR" , Opm::UnitSystem::measure::pressure},
{"BGPV" , Opm::UnitSystem::measure::volume},
{"BGSAT" , Opm::UnitSystem::measure::identity},
{"BSGAS" , Opm::UnitSystem::measure::identity},
{"BGVIS" , Opm::UnitSystem::measure::viscosity},
{"BVGAS" , Opm::UnitSystem::measure::viscosity},
// Oil quantities
{"BOKR" , Opm::UnitSystem::measure::identity},
{"BKRO" , Opm::UnitSystem::measure::identity},
{"BKROG" , Opm::UnitSystem::measure::identity},
{"BKROW" , Opm::UnitSystem::measure::identity},
{"BOIP" , Opm::UnitSystem::measure::liquid_surface_volume},
{"BOIPG" , Opm::UnitSystem::measure::liquid_surface_volume},
{"BOIPL" , Opm::UnitSystem::measure::liquid_surface_volume},
{"BOPV" , Opm::UnitSystem::measure::volume},
{"BOSAT" , Opm::UnitSystem::measure::identity},
{"BSOIL" , Opm::UnitSystem::measure::identity},
{"BOVIS" , Opm::UnitSystem::measure::viscosity},
{"BVOIL" , Opm::UnitSystem::measure::viscosity},
// Water quantities
{"BWIP" , Opm::UnitSystem::measure::liquid_surface_volume},
{"BWKR" , Opm::UnitSystem::measure::identity},
{"BKRW" , Opm::UnitSystem::measure::identity},
{"BWPC" , Opm::UnitSystem::measure::pressure},
{"BWPR" , Opm::UnitSystem::measure::pressure},
{"BWPV" , Opm::UnitSystem::measure::volume},
{"BWSAT" , Opm::UnitSystem::measure::identity},
{"BSWAT" , Opm::UnitSystem::measure::identity},
{"BWVIS" , Opm::UnitSystem::measure::viscosity},
{"BVWAT" , Opm::UnitSystem::measure::viscosity},
// Pressure quantities
{"BPR" , Opm::UnitSystem::measure::pressure},
{"BPRESSUR" , Opm::UnitSystem::measure::pressure},
// Volumes and ratios
{"BRPV" , Opm::UnitSystem::measure::volume},
{"BRS" , Opm::UnitSystem::measure::gas_oil_ratio},
{"BRV" , Opm::UnitSystem::measure::oil_gas_ratio},
{"BNSAT" , Opm::UnitSystem::measure::identity},
// Temperature/energy
{"BTCNFHEA" , Opm::UnitSystem::measure::temperature},
{"BTEMP" , Opm::UnitSystem::measure::temperature},
};
static const std::unordered_map< std::string, Opm::UnitSystem::measure> aquifer_units = {
static const auto aquifer_units = UnitTable {
{"AAQT", Opm::UnitSystem::measure::liquid_surface_volume},
{"AAQR", Opm::UnitSystem::measure::liquid_surface_rate},
{"AAQP", Opm::UnitSystem::measure::pressure},