opm-common/opm/output/eclipse/VectorItems/group.hpp
Bård Skaflestad b4cebad6a9 Address Review Comments
In particular, add more unit testing and give names to a number of
index constants.

Thanks to [at]blattms for reviewing the initial version of this
patch.
2022-05-24 18:21:41 +02:00

204 lines
9.4 KiB
C++

/*
Copyright (c) 2018 Equinor ASA
This file is part of the Open Porous Media project (OPM).
OPM is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OPM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_GROUP_HPP
#define OPM_OUTPUT_ECLIPSE_VECTOR_GROUP_HPP
#include <vector>
namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems {
namespace SGroup {
enum index : std::vector<float>::size_type {
EfficiencyFactor = 92, // Group's efficiency factor (Item 2 of GEFAC)
};
enum prod_index : std::vector<float>::size_type {
GuideRate = 2, // Group's guide rate value
OilRateLimit = 6, // Group's oil production target/limit
WatRateLimit = 7, // Group's water production target/limit
GasRateLimit = 8, // Group's gas production target/limit
LiqRateLimit = 9, // Group's liquid production target/limit
GLOMaxSupply = 34, // Group's maximum supply of lift gas
GasRateLimit_2 = 39, // Copy of group's gas production target/limit
OilRateLimit_2 = 52, // Copy of group's oil production target/limit
WatRateLimit_2 = 53, // Copy of group's water production target/limit
LiqRateLimit_2 = 54, // Copy of group's liquid production target/limit
GLOMaxRate = 91, // Group's maximum lift gas rate
};
enum inj_index : std::vector<float>::size_type {
oilSurfRateLimit = 10, // Group's oil surface volume injection rate target/limit
oilResRateLimit = 11, // Group's oil reservoir volume injection rate target/limit
oilReinjectionLimit = 12, // Group's oil reinjection fraction target/limit
oilVoidageLimit = 13, // Group's oil voidage injection fraction target/limit
waterSurfRateLimit = 15, // Group's water surface volume injection rate target/limit
waterResRateLimit = 16, // Group's water reservoir volume injection rate target/limit
waterReinjectionLimit = 17, // Group's water reinjection fraction target/limit
waterVoidageLimit = 18, // Group's water voidage injection fraction target/limit
waterGuideRate = 19, // Group's water injection guide rate
gasSurfRateLimit = 20, // Group's gas surface volume injection rate target/limit
gasResRateLimit = 21, // Group's gas reservoir volume injection rate target/limit
gasReinjectionLimit = 22, // Group's gas reinjection fraction target/limit
gasVoidageLimit = 23, // Group's gas voidage injection fraction target/limit
gasGuideRate = 24, // Group's gas injection guide rate
oilSurfRateLimit_2 = 57, // Copy of group's oil surface volume injection rate target/limit
oilResRateLimit_2 = 58, // Copy of group's oil reservoir volume injection rate target/limit
oilReinjectionLimit_2 = 59, // Copy of group's oil reinjection fraction target/limit
oilVoidageLimit_2 = 60, // Copy of group's oil voidage injection fraction target/limit
waterSurfRateLimit_2 = 61, // Copy of group's water surface volume injection rate target/limit
waterResRateLimit_2 = 62, // Copy of group's water reservoir volume injection rate target/limit
waterReinjectionLimit_2 = 63, // Copy of group's water reinjection fraction target/limit
waterVoidageLimit_2 = 64, // Copy of group's water voidage injection fraction target/limit
gasSurfRateLimit_2 = 65, // Copy of group's gas surface volume injection rate target/limit
gasResRateLimit_2 = 66, // Copy of group's gas reservoir volume injection rate target/limit
gasReinjectionLimit_2 = 67, // Copy of group's gas reinjection fraction target/limit
gasVoidageLimit_2 = 68, // Copy of group's gas voidage injection fraction target/limit
};
namespace Value {
constexpr auto NoGLOLimit = -10.0f;
} // namespace Value
} // SGroup
namespace IGroup {
// Observe that these value should not be used as ordinary indices into
// the the IGRP vector, they should all be used as IGRP[NWGMAX + $index]
enum index : std::vector<int>::size_type {
NoOfChildGroupsWells = 0,
ProdActiveCMode = 1,
ProdHighLevCtrl = 5,
GuideRateDef = 6,
ExceedAction = 7,
GConProdCMode = 10,
WInjActiveCMode = 16,
WInjHighLevCtrl = 17,
GConInjeWInjCMode = 19,
GConInjeWaterGuideRateMode = 20,
GInjActiveCMode = 21,
GInjHighLevCtrl = 22,
GConInjeGInjCMode = 24,
GConInjeGasGuideRateMode = 25,
GroupType = 26,
GroupLevel = 27,
ParentGroup = 28,
FlowingWells = 33,
NodeNumber = 39
};
namespace Value {
enum GuideRateMode : int {
None = 0,
Oil = 1,
Water = 2,
Gas = 3,
Liquid = 4,
Resv = 6, // need to be verified!!!
Potn = 7,
Form = 8,
Comb = 9,
};
enum GroupType : int {
WellGroup = 0,
TreeGroup = 1,
};
}
}
namespace XGroup {
enum index : std::vector<double>::size_type {
OilPrRate = 0, // Group's oil production rate
WatPrRate = 1, // Group's water production rate
GasPrRate = 2, // Group's gas production rate
LiqPrRate = 3, // Group's liquid production rate
WatInjRate = 5, // Group's water injection rate
GasInjRate = 6, // Group's gas injection rate
WatCut = 8, // Group's producing water cut
GORatio = 9, // Group's producing gas/oil ratio
OilPrTotal = 10, // Group's total cumulative oil production
WatPrTotal = 11, // Group's total cumulative water production
GasPrTotal = 12, // Group's total cumulative gas production
VoidPrTotal = 13, // Group's total cumulative reservoir
// voidage production
WatInjTotal = 15, // Group's total cumulative water injection
GasInjTotal = 16, // Group's total cumulative gas injection
VoidInjTotal = 17, // Group's total cumulative reservoir volume injection
OilPrPot = 22, // Group's oil production potential
WatPrPot = 23, // Group's water production potential
OilPrTotalSolution = 73, // Group's total cumulative oil production in solution
GasPrTotalSolution = 74, // Group's total cumulative gas production in solution
OilPrGuideRate = 85, // Group's producer guide rate for oil.
WatPrGuideRate = 86, // Group's producer guide rate for water.
GasPrGuideRate = 87, // Group's producer guide rate for gas.
VoidPrGuideRate = 88, // Group's producer guide rate for reservoir voidage volume.
OilInjGuideRate = 89, // Group's injection guide rate for oil.
WatInjGuideRate = 91, // Group's injection guide rate for water.
WatInjGuideRate_2 = 92, // Second copy of group's injection guide rate for water.
// Not fully characterised.
GasInjGuideRate = 93, // Groups injection guide rate for gas.
OilPrGuideRate_2 = 127, // Second copy of group's producer guide rate for oil.
// Not fully characterised.
WatPrGuideRate_2 = 128, // Second copy of group's producer guide rate for water.
// Not fully characterised.
GasPrGuideRate_2 = 129, // Second copy of group's producer guide rate for gas.
// Not fully characterised.
VoidPrGuideRate_2 = 130, // Second copy of group's producer guide rate for
// reservoir voidage volume. Not fully characterised.
HistOilPrTotal = 135, // Group's total cumulative oil
// production (observed/historical rates)
HistWatPrTotal = 139, // Group's total cumulative water
// production (observed/historical rates)
HistWatInjTotal = 140, // Group's total cumulative water
// injection (observed/historical rates)
HistGasPrTotal = 143, // Group's total cumulative gas
// production (observed/historical rates)
HistGasInjTotal = 144, // Group's total cumulative gas injection
// (observed/historical rates)
TracerOffset = 180, // Tracer data starts here
};
} // XGroup
}}}} // Opm::RestartIO::Helpers::VectorItems
#endif // OPM_OUTPUT_ECLIPSE_VECTOR_GROUP_HPP