diff --git a/src/opm/output/eclipse/Summary.cpp b/src/opm/output/eclipse/Summary.cpp index 3adbce5d9..5a1e33244 100644 --- a/src/opm/output/eclipse/Summary.cpp +++ b/src/opm/output/eclipse/Summary.cpp @@ -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; +using UnitTable = std::unordered_map; -static const std::unordered_map< std::string, ofun > funs = { +static const auto funs = std::unordered_map { { "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 -{ +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},