opm-common
Loading...
Searching...
No Matches
group.hpp
1/*
2 Copyright (c) 2018 Equinor ASA
3
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_GROUP_HPP
21#define OPM_OUTPUT_ECLIPSE_VECTOR_GROUP_HPP
22
23#include <vector>
24
25namespace Opm::RestartIO::Helpers::VectorItems {
26
27 namespace IGroup {
28 // Observe that these value should not be used as ordinary indices
29 // into the the IGRP vector. Instead, they should all be treated as
30 // offsets from the "child group" portion of IGRP. In other words,
31 // the actual index into IGRP should be formed as
32 //
33 // IGRP[NWGMAX + index]
34 //
35 enum index : std::vector<int>::size_type {
36 NoOfChildGroupsWells = 0,
37 ProdActiveCMode = 1,
38 ProdHighLevCtrl = 5,
39 GuideRateDef = 6,
40 ExceedAction = 7,
41 GConProdCMode = 10,
42 WInjActiveCMode = 16,
43 WInjHighLevCtrl = 17,
44 GConInjeWInjCMode = 19,
45 GConInjeWaterGuideRateMode = 20,
46 GInjActiveCMode = 21,
47 GInjHighLevCtrl = 22,
48 GConInjeGInjCMode = 24,
49 GConInjeGasGuideRateMode = 25,
50 GroupType = 26,
51 GroupLevel = 27,
52 ParentGroup = 28,
53 FlowingWells = 33,
54 NodeNumber = 39,
55
56 // Whether or not lift gas from node's corresponding group's
57 // subordinate groups should be added to the produced gas
58 // entering the network at this node in the extended network
59 // model (NODEPROP(4)).
60 AddGLiftGasAsProducedGas = 53,
61 // The following indices get a default value 2 for LGR IGRP groups with no LGR well.
62 VoidageGroupIndex = 89,
63 };
64
65 namespace Value {
66 enum GuideRateMode : int {
67 None = 0,
68 Oil = 1,
69 Water = 2,
70 Gas = 3,
71 Liquid = 4,
72 Resv = 6, // need to be verified!!!
73 Potn = 7,
74 Form = 8,
75 Comb = 9,
76 };
77
78 enum GroupType : int {
79 WellGroup = 0, // Group is a well group (children are wells)
80 NodeGroup = 1, // Group is a node group (children are other groups)
81 SatelliteGroup = 2, // Group is a satellite (GSAT* keywords, no children)
82 SlaveGroup = 3, // Group is a slave in a reservoir coupling run
83 };
84
85 enum GLiftGas : int {
86 No = 0,
87 Yes = 1,
88 };
89 } // namespace Value
90 } // namespace IGroup
91
92 namespace SGroup {
93 enum index : std::vector<float>::size_type {
94
95 GasConsumptionRate = 25, // Group's gas consumption rate (NOT including sub-group rates)
96 GasImportRate = 36, // Group's gas import rate (NOT including sub-group rates)
97
98 EfficiencyFactor = 92, // Group's efficiency factor (Item 2 of GEFAC)
99 };
100
101 enum prod_index : std::vector<float>::size_type {
102 GuideRate = 2, // Group's guide rate value
103 OilRateLimit = 6, // Group's oil production target/limit
104 WatRateLimit = 7, // Group's water production target/limit
105 GasRateLimit = 8, // Group's gas production target/limit
106 LiqRateLimit = 9, // Group's liquid production target/limit
107
108 GLOMaxSupply = 34, // Group's maximum supply of lift gas
109 ResvRateLimit = 35, // Group's maximum reservoir volume production rate target/limit
110
111 GasRateLimit_2 = 39, // Copy of group's gas production target/limit
112 OilRateLimit_2 = 52, // Copy of group's oil production target/limit
113 WatRateLimit_2 = 53, // Copy of group's water production target/limit
114 LiqRateLimit_2 = 54, // Copy of group's liquid production target/limit
115 ResvRateLimit_2 = 55, // Copy of group's maximum reservoir volume production rate target/limit
116
117 MeanCaloricValue = 79, // Mean calorific value of produced gas (GSATPROD keyword)
118
119 GLOMaxRate = 91, // Group's maximum lift gas rate
120 };
121
122 enum inj_index : std::vector<float>::size_type {
123 oilSurfRateLimit = 10, // Group's oil surface volume injection rate target/limit
124 oilResRateLimit = 11, // Group's oil reservoir volume injection rate target/limit
125 oilReinjectionLimit = 12, // Group's oil reinjection fraction target/limit
126 oilVoidageLimit = 13, // Group's oil voidage injection fraction target/limit
127
128 waterSurfRateLimit = 15, // Group's water surface volume injection rate target/limit
129 waterResRateLimit = 16, // Group's water reservoir volume injection rate target/limit
130 waterReinjectionLimit = 17, // Group's water reinjection fraction target/limit
131 waterVoidageLimit = 18, // Group's water voidage injection fraction target/limit
132 waterGuideRate = 19, // Group's water injection guide rate
133
134 gasSurfRateLimit = 20, // Group's gas surface volume injection rate target/limit
135 gasResRateLimit = 21, // Group's gas reservoir volume injection rate target/limit
136 gasReinjectionLimit = 22, // Group's gas reinjection fraction target/limit
137 gasVoidageLimit = 23, // Group's gas voidage injection fraction target/limit
138 gasGuideRate = 24, // Group's gas injection guide rate
139
140 oilSurfRateLimit_2 = 57, // Copy of group's oil surface volume injection rate target/limit
141 oilResRateLimit_2 = 58, // Copy of group's oil reservoir volume injection rate target/limit
142 oilReinjectionLimit_2 = 59, // Copy of group's oil reinjection fraction target/limit
143 oilVoidageLimit_2 = 60, // Copy of group's oil voidage injection fraction target/limit
144
145 waterSurfRateLimit_2 = 61, // Copy of group's water surface volume injection rate target/limit
146 waterResRateLimit_2 = 62, // Copy of group's water reservoir volume injection rate target/limit
147 waterReinjectionLimit_2 = 63, // Copy of group's water reinjection fraction target/limit
148 waterVoidageLimit_2 = 64, // Copy of group's water voidage injection fraction target/limit
149
150 gasSurfRateLimit_2 = 65, // Copy of group's gas surface volume injection rate target/limit
151 gasResRateLimit_2 = 66, // Copy of group's gas reservoir volume injection rate target/limit
152 gasReinjectionLimit_2 = 67, // Copy of group's gas reinjection fraction target/limit
153 gasVoidageLimit_2 = 68, // Copy of group's gas voidage injection fraction target/limit
154
155 gasMeanCalorificValue = 83, // Mean calorific value of injected gas (GSATINJE keyword)
156 };
157
158 namespace Value {
159 constexpr auto NoGLOLimit = -10.0f;
160 } // namespace Value
161 } // SGroup
162
163 namespace XGroup {
164 enum index : std::vector<double>::size_type {
165 OilPrRate = 0, // Group's oil production rate
166 WatPrRate = 1, // Group's water production rate
167 GasPrRate = 2, // Group's gas production rate
168 LiqPrRate = 3, // Group's liquid production rate
169
170 WatInjRate = 5, // Group's water injection rate
171 GasInjRate = 6, // Group's gas injection rate
172
173 WatCut = 8, // Group's producing water cut
174 GORatio = 9, // Group's producing gas/oil ratio
175
176 OilPrTotal = 10, // Group's total cumulative oil production
177 WatPrTotal = 11, // Group's total cumulative water production
178 GasPrTotal = 12, // Group's total cumulative gas production
179 VoidPrTotal = 13, // Group's total cumulative reservoir
180 // voidage production
181
182 WatInjTotal = 15, // Group's total cumulative water injection
183 GasInjTotal = 16, // Group's total cumulative gas injection
184 VoidInjTotal = 17, // Group's total cumulative reservoir volume injection
185
186 GasConsumptionRate = 19, // Group's gas consumption rate (including sub-group rates)
187 GasConsumptionTotal = 21, // Group's total cumulative gas consumption
188
189 OilPrPot = 22, // Group's oil production potential
190 WatPrPot = 23, // Group's water production potential
191
192 GasImportRate = 51, // Group's gas import rate (including sub-group rates)
193 GasImportTotal = 52, // Group's total cumulative gas import
194
195 OilPrTotalSolution = 73, // Group's total cumulative oil production in solution
196 GasPrTotalSolution = 74, // Group's total cumulative gas production in solution
197
198 OilPrGuideRate = 85, // Group's producer guide rate for oil.
199 WatPrGuideRate = 86, // Group's producer guide rate for water.
200 GasPrGuideRate = 87, // Group's producer guide rate for gas.
201 VoidPrGuideRate = 88, // Group's producer guide rate for reservoir voidage volume.
202
203 OilInjGuideRate = 89, // Group's injection guide rate for oil.
204 WatInjGuideRate = 91, // Group's injection guide rate for water.
205 WatInjGuideRate_2 = 92, // Second copy of group's injection guide rate for water.
206 // Not fully characterised.
207 GasInjGuideRate = 93, // Groups injection guide rate for gas.
208
209 OilPrGuideRate_2 = 127, // Second copy of group's producer guide rate for oil.
210 // Not fully characterised.
211 WatPrGuideRate_2 = 128, // Second copy of group's producer guide rate for water.
212 // Not fully characterised.
213 GasPrGuideRate_2 = 129, // Second copy of group's producer guide rate for gas.
214 // Not fully characterised.
215 VoidPrGuideRate_2 = 130, // Second copy of group's producer guide rate for
216 // reservoir voidage volume. Not fully characterised.
217
218 HistOilPrTotal = 135, // Group's total cumulative oil
219 // production (observed/historical rates)
220 HistWatPrTotal = 139, // Group's total cumulative water
221 // production (observed/historical rates)
222 HistWatInjTotal = 140, // Group's total cumulative water
223 // injection (observed/historical rates)
224 HistGasPrTotal = 143, // Group's total cumulative gas
225 // production (observed/historical rates)
226 HistGasInjTotal = 144, // Group's total cumulative gas injection
227 // (observed/historical rates)
228
229 TracerOffset = 180, // Tracer data starts here
230 };
231 } // XGroup
232
233} // Opm::RestartIO::Helpers::VectorItems
234
235#endif // OPM_OUTPUT_ECLIPSE_VECTOR_GROUP_HPP