completor 0.1.3__py3-none-any.whl → 1.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
completor/constants.py CHANGED
@@ -4,65 +4,94 @@ from __future__ import annotations
4
4
 
5
5
  from dataclasses import dataclass
6
6
  from enum import Enum, auto
7
+ from typing import TypeAlias
7
8
 
9
+ import pandas as pd
8
10
 
9
- class Headers:
11
+ WellData: TypeAlias = dict[str, pd.DataFrame | tuple[pd.DataFrame, pd.DataFrame]]
12
+ ScheduleData: TypeAlias = dict[str, WellData]
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class _Headers:
10
17
  """Headers for DataFrames."""
11
18
 
12
- WATER_CUT = "WCT"
13
- OPEN = "OPEN"
14
- RHO = "RHO"
15
- VISCOSITY = "VIS"
16
- DEVICE = "DEVICE"
17
- SF = "SF" # Saturation functions?
18
- THERM = "THERM"
19
- PERFDEPTH = "PERFDEPTH" # Perforation depth?
20
- ENDGRID = "ENDGRID"
21
- VSEG = "VSEG" # Vertical Segments?
22
- TUBING_INNER_DIAMETER = "TUBINGID"
23
- MPMODEL = "MPMODEL"
24
- PDROPCOMP = "PDROPCOMP" # Pressure drop completion?
25
- WBVOLUME = "WBVOLUME" # Well bore volume?
26
- ITEM_8 = "ITEM8"
27
- ITEM_9 = "ITEM9"
28
- ITEM_10 = "ITEM10"
29
- ITEM_11 = "ITEM11"
30
- ITEM_12 = "ITEM12"
31
- ITEM_13 = "ITEM13"
32
- ITEM_14 = "ITEM14"
33
- ITEM_15 = "ITEM15"
34
- ITEM_16 = "ITEM16"
35
- ITEM_17 = "ITEM17"
36
- REGION = "REGION"
37
- DENSCAL = "DENSCAL" # Calculated density / Density calculated?
38
- PRESSURE_TABLE = "PRESSURETABLE"
39
- CROSS = "CROSS"
40
- SHUT = "SHUT"
41
- DR = "DR"
42
- PHASE = "PHASE"
43
- BHP_DEPTH = "BHP_DEPTH" # Bottom hole pressure depth?
44
- GROUP = "GROUP"
45
- MARKER = "MARKER"
46
- SCALING_FACTOR = "SCALINGFACTOR"
47
- LENGTH = "LENGTH"
48
- ADDITIONAL_SEGMENT = "AdditionalSegment"
49
- ORIGINAL_SEGMENT = "OriginalSegment"
50
- TUBING_SEGMENT_2 = "TUBINGSEGMENT2"
51
- INFO_TYPE = "INFOTYPE"
19
+ # Well Segments Record 1 (WELSEGS)
20
+ WELL = "WELL"
21
+ TRUE_VERTICAL_DEPTH = "TRUE_VERTICAL_DEPTH"
22
+ # MEASURED_DEPTH = "SEGMENTMD"
23
+ WELLBORE_VOLUME = "WBVOLUME" # Effective wellbore volume of the top segment.
24
+ # This quantity is used to calculate wellbore storage effects in the top segment.
25
+ INFO_TYPE = "INFOTYPE" # Either 'INC' for incremental values (not supported in completor) or 'ABS' absolute values.
26
+ PRESSURE_DROP_COMPLETION = "PDROPCOMP" # Components of the pressure drop to be included in the calculation for
27
+ # each of the well’s segments, defaults to 'HFA' Hydrostatic + friction + acceleration.
28
+ MULTIPHASE_FLOW_MODEL = "MPMODEL"
29
+ # How to handle these, they are just placeholders for real things, but are entirely unused?
30
+ X_COORDINATE_TOP_SEGMENT = (
31
+ "DEFAULT_1" # X coordinate of the top nodal point, relative to the grid origin. Default 0.0.
32
+ )
33
+ Y_COORDINATE_TOP_SEGMENT = (
34
+ "DEFAULT_2" # Y coordinate of the top nodal point, relative to the grid origin. Default 0.0.
35
+ )
36
+ THERMAL_CONDUCTIVITY_CROSS_SECTIONAL_AREA = "DEFAULT_3" # Cross-sectional area of the pipe wall used in thermal
37
+ # conductivity calculation. Default 0.0.
38
+ VOLUMETRIC_HEAT_CAPACITY_PIPE_WALL = "DEFAULT_4" # Volumetric heat capacity of the pipe wall. Default 0.0.
39
+ THERMAL_CONDUCTIVITY_PIPE_WALL = "DEFAULT_5" # Thermal conductivity of the pipe wall. Default 0.0.
40
+
41
+ # Well Segments Record 2 (WELSEGS)
42
+ TUBING_SEGMENT = "TUBINGSEGMENT" # Segment number at the start of the range (nearest the top segment).
43
+ TUBING_SEGMENT_2 = "TUBINGSEGMENT2" # Segment number at the far end of the range.
44
+ TUBING_BRANCH = "TUBINGBRANCH" # Branch number.
52
45
  TUBING_OUTLET = "TUBINGOUTLET"
53
- SAT = "SAT" # Saturation?
54
- FLAG = "FLAG" # This is actually a header, but OPEN, SHUT, and AUTO are its possible values, see manual on COMPDAT.
55
- DEF = "DEF"
56
- DIRECTION = "DIR"
57
- SEG = "SEG" # Duplicate, ish
58
- SEG2 = "SEG2"
59
- OUT = "OUT"
60
- COMPSEGS_DIRECTION = "COMPSEGS_DIRECTION"
61
- LATERAL = "LATERAL"
62
- NUMBER_OF_DEVICES = "NDEVICES"
46
+ TUBING_MEASURED_DEPTH = "TUBING_MEASURED_DEPTH"
47
+ # TUBING_TRUE_VERTICAL_DEPTH = "TUBINGTVD"
48
+ TUBING_INNER_DIAMETER = "TUBINGID"
49
+ TUBING_ROUGHNESS = "TUBINGROUGHNESS"
50
+ FLOW_CROSS_SECTIONAL_AREA = "CROSS" # Cross-sectional area for fluid flow.
51
+ SEGMENT_VOLUME = "VSEG"
52
+ X_COORDINATE_LAST_SEGMENT = "DEFAULT_6" # X coordinate of the last nodal point in the range.
53
+ Y_COORDINATE_LAST_SEGMENT = "DEFAULT_7" # Y coordinate of the last nodal point in the range.
54
+
55
+ # Completion segments (COMPSEGS)
63
56
  I = "I" # noqa: E741
64
57
  J = "J"
65
58
  K = "K"
59
+ BRANCH = "BRANCH"
60
+ START_MEASURED_DEPTH = "START_MEASURED_DEPTH"
61
+ END_MEASURED_DEPTH = "END_MEASURED_DEPTH"
62
+ COMPSEGS_DIRECTION = "COMPSEGS_DIRECTION" # Direction of penetration through the grid block or the range.
63
+ # X or I for horizontal penetration in the x-direction, Y or J for horizontal penetration in the y-direction,
64
+ # Z or K for vertical penetration.
65
+ ENDGRID = "ENDGRID"
66
+ PERFORATION_DEPTH = "PERFDEPTH" # Depth of the well connections within the range,
67
+ # that is the depth of the center of the perforations within each grid block in the range.
68
+ THERMAL_CONTACT_LENGTH = "THERM" # Thermal contact length, that is, the length of the well in the completion cell.
69
+ SEGMENT = "SEGMENT"
70
+
71
+ # Well specifications (WELL_SPECIFICATION)
72
+ # WELL = "WELL"
73
+ GROUP = "GROUP"
74
+ # I = "I" # noqa: E741
75
+ # J = "J"
76
+ BHP_DEPTH = "BHP_DEPTH" # Bottom hole pressure depth?
77
+ PHASE = "PHASE"
78
+ DR = "DR"
79
+ FLAG = "FLAG" # This is actually a header, but OPEN, SHUT, and AUTO are its possible values, see manual on COMPLETION_DATA.
80
+ SHUT = "SHUT"
81
+ # CROSS = "CROSS"
82
+ PRESSURE_TABLE = "PRESSURETABLE"
83
+ DENSITY_CALCULATION_TYPE = "DENSCAL" # Type of density calculation for the wellbore hydrostatic head.
84
+ REGION = "REGION"
85
+ RESERVED_HEADER_1 = "RESERVED_1"
86
+ RESERVED_HEADER_2 = "RESERVED_2"
87
+ WELL_MODEL_TYPE = "WELL_MODEL_TYPE"
88
+ POLYMER_MIXING_TABLE_NUMBER = "POLYMER_MIXING_TABLE_NUMBER"
89
+
90
+ # Completion Data (COMPDAT)
91
+ # WELL NAME
92
+ # I
93
+ # J
94
+ # K
66
95
  K2 = "K2"
67
96
  STATUS = "STATUS"
68
97
  SATURATION_FUNCTION_REGION_NUMBERS = "SATNUM"
@@ -70,34 +99,99 @@ class Headers:
70
99
  # the connection transmissibility factor is calculated using the remaining items of data in this record. See "The
71
100
  # connection transmissibility factor" in the ECLIPSE Technical Description for an account of the methods used in
72
101
  # Cartesian and radial geometries. The well bore diameter must be set in item 9.
73
-
74
- DIAMETER = "DIAM"
75
- FORAMTION_PERMEABILITY_THICKNESS = "KH" # The product of formation permeability, k, and producing formation
102
+ WELL_BORE_DIAMETER = "DIAM"
103
+ FORMATION_PERMEABILITY_THICKNESS = "KH" # The product of formation permeability, k, and producing formation
76
104
  # thickness, h, in a producing well, referred to as kh.
77
105
  SKIN = "SKIN" # A dimensionless factor calculated to determine the production efficiency of a well by comparing
78
106
  # actual conditions with theoretical or ideal conditions. A positive skin value indicates some damage or
79
107
  # influences that are impairing well productivity. A negative skin value indicates enhanced productivity,
80
108
  # typically resulting from stimulation.
81
- DFACT = "DFACT"
109
+ D_FACTOR = "DFACT" # Non-darcy flow of free gas.
82
110
  COMPDAT_DIRECTION = "COMPDAT_DIRECTION"
83
- RO = "RO"
84
-
85
- TUB_TVD = "TUB_TVD" # Same as TUBINGTVD
86
- TVD = "TVD"
87
- TUBINGMD = "TUBINGMD"
88
- TUBINGTVD = "TUBINGTVD"
89
- SEGMENTTVD = "SEGMENTTVD"
90
- SEGMENTMD = "SEGMENTMD"
91
- SEGMENT_DESC = "SEGMENT_DESC"
92
- SEGMENT = "SEGMENT"
93
- VISCAL_ICD = "VISCAL_ICD"
94
- RHOCAL_ICD = "RHOCAL_ICD"
111
+ RO = "RO" # Pressure equivalent radius, R_o.
112
+
113
+ # Inflow Control Device Well Segments (WSEGSICD) and Autonomous (WSEGAICD)
114
+ # Well name
115
+ DEVICE_NUMBER = "DEVICENUMBER"
116
+ START_SEGMENT_NUMBER = "START_SEGMENT_NUMBER" # Duplicate, ish
117
+ END_SEGMENT_NUMBER = "END_SEGMENT_NUMBER"
95
118
  STRENGTH = "STRENGTH"
119
+ SCALE_FACTOR = "SCALE_FACTOR"
120
+ CALIBRATION_FLUID_DENSITY = "CALIBRATION_FLUID_DENSITY"
121
+ CALIBRATION_FLUID_VISCOSITY = "CALIBRATION_FLUID_VISCOSITY"
122
+ DEF = "DEF" # The critical value of the local water in liquid fraction
123
+ # used to select between a water-in-oil or oil-in-water equation for the emulsion viscosity;
124
+ # this is described in Emulsion viscosity.
125
+
126
+ # This stops making sense from here on out?
127
+ X = "X"
128
+ Y = "Y"
129
+ # FLAG
130
+ A = "A"
131
+ B = "B"
132
+ C = "C"
133
+ D = "D"
134
+ E = "E"
135
+ F = "F"
136
+ EMPTY = ""
96
137
 
97
- WCT_AICV = "WCT_AICV"
98
- GHF_AICV = "GHF_AICV"
99
- RHOCAL_AICV = "RHOCAL_AICV"
100
- VISCAL_AICV = "VISCAL_AICV"
138
+ # Sub critical valve well segment (WSEGVALV)
139
+ # 1. WELL_NAME
140
+ # 2. START_SEGMENT_NUMBER
141
+ FLOW_COEFFICIENT = "FLOW_COEFFICIENT" # The dimensionless flow coefficient for the valve, Cv.
142
+ # FLOW_CROSS_SECTIONAL_AREA # Cross-section area for flow in the constriction, Ac.
143
+ ADDITIONAL_PIPE_LENGTH_FRICTION_PRESSURE_DROP = (
144
+ "ADDITIONAL_PIPE_LENGTH" # Additional length of pipe for the friction pressure drop, L.
145
+ )
146
+ PIPE_DIAMETER = "PIPE_DIAMETER" # The pipe diameter, D, for the frictional pressure drop calculation.
147
+ ABSOLUTE_PIPE_ROUGHNESS = "ABSOLUTE_PIPE_ROUGHNESS" # The absolute roughness of the pipe wall.
148
+ PIPE_CROSS_SECTION_AREA = "PIPE_CROSS_SECTION_AREA" # The pipe cross-section area, Ap.
149
+ # FLAG # Flag to indicate whether the device is open or shut.
150
+ MAX_FLOW_CROSS_SECTIONAL_AREA = (
151
+ "MAX_FLOW_CROSS_SECTIONAL_AREA" # The maximum cross-sectional area for flow in the constriction, Amax.
152
+ )
153
+ # 11. The length of the valve, lVAL (Scale factor).
154
+ # 12. An integer which determines how the flow scaling factor is calculated.
155
+
156
+ # Density Activated Recovery Well Segments (WSEGDAR)
157
+ # DEVICE_NUMBER
158
+ # FLOW_COEFFICIENT / Cv
159
+ # FLOW_CROSS_SECTIONAL_AREA
160
+ OIL_FLOW_CROSS_SECTIONAL_AREA = "OIL_FLOW_CROSS_SECTIONAL_AREA"
161
+ GAS_FLOW_CROSS_SECTIONAL_AREA = "GAS_FLOW_CROSS_SECTIONAL_AREA"
162
+ WATER_FLOW_CROSS_SECTIONAL_AREA = "WATER_FLOW_CROSS_SECTIONAL_AREA"
163
+ WATER_HOLDUP_FRACTION_LOW_CUTOFF = "WATER_HOLDUP_FRACTION_LOW_CUTOFF"
164
+ WATER_HOLDUP_FRACTION_HIGH_CUTOFF = "WATER_HOLDUP_FRACTION_HIGH_CUTOFF"
165
+ GAS_HOLDUP_FRACTION_LOW_CUTOFF = "GAS_HOLDUP_FRACTION_LOW_CUTOFF"
166
+ GAS_HOLDUP_FRACTION_HIGH_CUTOFF = "GAS_HOLDUP_FRACTION_HIGH_CUTOFF"
167
+
168
+ # Miscellaneous
169
+ DEFAULTS = "DEFAULTS"
170
+ MEASURED_DEPTH = "MEASURED_DEPTH"
171
+ ANNULUS = "ANNULUS"
172
+ ANNULUS_ZONE = "ANNULUS_ZONE"
173
+ VALVES_PER_JOINT = "VALVES_PER_JOINT"
174
+ INNER_DIAMETER = "INNER_DIAMETER"
175
+ OUTER_DIAMETER = "OUTER_DIAMETER"
176
+ ROUGHNESS = "ROUGHNESS"
177
+ DEVICE_TYPE = "DEVICETYPE"
178
+ WATER_CUT = "WATER_CUT"
179
+ OPEN = "OPEN"
180
+ DEVICE = "DEVICE"
181
+ MARKER = "MARKER"
182
+ LENGTH = "LENGTH"
183
+ ADDITIONAL_SEGMENT = "AdditionalSegment"
184
+ ORIGINAL_SEGMENT = "OriginalSegment"
185
+ OUT = "OUT"
186
+ LATERAL = "LATERAL"
187
+ NUMBER_OF_DEVICES = "NUMBER_OF_DEVICES"
188
+ SEGMENT_DESC = "SEGMENT_DESC"
189
+ AICV_WATER_CUT = "AICV_WATER_CUT"
190
+ AICV_GAS_HOLDUP_FRACTION = "AICV_GAS_HOLDUP_FRACTION"
191
+ AICV_CALIBRATION_FLUID_DENSITY = "AICV_CALIBRATION_FLUID_DENSITY"
192
+ AICV_FLUID_VISCOSITY = "AICV_FLUID_VISCOSITY"
193
+ AICD_CALIBRATION_FLUID_DENSITY = "AICD_CALIBRATION_FLUID_DENSITY"
194
+ AICD_FLUID_VISCOSITY = "AICD_FLUID_VISCOSITY"
101
195
  ALPHA_MAIN = "ALPHA_MAIN"
102
196
  X_MAIN = "X_MAIN"
103
197
  Y_MAIN = "Y_MAIN"
@@ -117,66 +211,8 @@ class Headers:
117
211
  E_PILOT = "E_PILOT"
118
212
  F_PILOT = "F_PILOT"
119
213
 
120
- CV_DAR = "CV_DAR"
121
- AC_OIL = "AC_OIL"
122
- AC_GAS = "AC_GAS"
123
- AC_WATER = "AC_WATER"
124
- WHF_LCF_DAR = "WHF_LCF_DAR"
125
- WHF_HCF_DAR = "WHF_HCF_DAR"
126
- GHF_LCF_DAR = "GHF_LCF_DAR"
127
- GHF_HCF_DAR = "GHF_HCF_DAR"
128
-
129
- ALPHA = "ALPHA"
130
- X = "X"
131
- Y = "Y"
132
- A = "A"
133
- B = "B"
134
- C = "C"
135
- D = "D"
136
- E = "E"
137
- F = "F"
138
- RHOCAL_AICD = "RHOCAL_AICD"
139
- VISCAL_AICD = "VISCAL_AICD"
140
214
 
141
- DEFAULTS = "DEFAULTS"
142
- AC_MAX = "AC_MAX"
143
-
144
- CV = "CV"
145
- AC = "AC"
146
- L = "L"
147
-
148
- BRANCH = "BRANCH"
149
-
150
- TUBINGBRANCH = "TUBINGBRANCH"
151
- MD = "MD"
152
-
153
- # from `test_completion.py`
154
- TUB_MD = "TUB_MD"
155
-
156
- # Completion
157
- START_MEASURED_DEPTH = "STARTMD"
158
- END_MEASURED_DEPTH = "ENDMD"
159
- ANNULUS = "ANNULUS"
160
- ANNULUS_ZONE = "ANNULUS_ZONE"
161
- VALVES_PER_JOINT = "NVALVEPERJOINT"
162
- INNER_DIAMETER = "INNER_DIAMETER"
163
- OUTER_DIAMETER = "OUTER_DIAMETER"
164
- ROUGHNESS = "ROUGHNESS"
165
- DEVICE_TYPE = "DEVICETYPE"
166
- DEVICE_NUMBER = "DEVICENUMBER"
167
- WELL = "WELL"
168
-
169
- # Well segments
170
- TUBING_MD = "TUBINGMD"
171
- TUBING_TVD = "TUBINGTVD"
172
- SEGMENT_MD = "SEGMENTMD"
173
- SEGMENT_TVD = "SEGMENTTVD"
174
- TUBING_SEGMENT = "TUBINGSEGMENT"
175
- TUBING_SEGMENT2 = "TUBINGSEGMENT2"
176
- TUBING_BRANCH = "TUBINGBRANCH"
177
- TUBING_ROUGHNESS = "TUBINGROUGHNESS"
178
-
179
- EMPTY = ""
215
+ Headers = _Headers()
180
216
 
181
217
 
182
218
  @dataclass(frozen=True)
@@ -192,31 +228,38 @@ class _Keywords:
192
228
  segments: Set of keywords that are used in a segment.
193
229
  """
194
230
 
195
- WELSPECS = "WELSPECS"
196
- COMPDAT = "COMPDAT"
197
- WELSEGS = "WELSEGS"
198
- COMPSEGS = "COMPSEGS"
231
+ WELL_SPECIFICATION = "WELSPECS"
232
+ COMPLETION_DATA = "COMPDAT"
233
+ WELL_SEGMENTS = "WELSEGS"
234
+ COMPLETION_SEGMENTS = "COMPSEGS"
199
235
 
200
236
  COMPLETION = "COMPLETION"
201
237
 
202
- WELSEGS_H = "WELSEGS_H"
203
- WSEGLINK = "WSEGLINK"
204
- WSEGVALV = "WSEGVALV"
205
- WSEGAICD = "WSEGAICD"
206
- WSEGAICV = "WSEGAICV"
207
- WSEGICV = "WSEGICV"
208
- WSEGSICD = "WSEGSICD"
209
- WSEGDAR = "WSEGDAR"
210
-
211
- SCHFILE = "SCHFILE"
212
- OUTFILE = "OUTFILE"
213
-
214
- main_keywords = [WELSPECS, COMPDAT, WELSEGS, COMPSEGS]
215
-
216
- _items = [WELSPECS, COMPDAT, WELSEGS, COMPSEGS]
238
+ WELL_SEGMENTS_HEADER = "WELSEGS_H"
239
+ WELL_SEGMENTS_LINK = "WSEGLINK"
240
+ WELL_SEGMENTS_VALVE = "WSEGVALV"
241
+ AUTONOMOUS_INFLOW_CONTROL_DEVICE = "WSEGAICD"
242
+ AUTONOMOUS_INFLOW_CONTROL_VALVE = "WSEGAICV"
243
+ INFLOW_CONTROL_VALVE = "WSEGICV"
244
+ INFLOW_CONTROL_DEVICE = "WSEGSICD"
245
+ DENSITY_ACTIVATED_RECOVERY = "WSEGDAR"
246
+ LATERAL_TO_DEVICE = "LATERAL_TO_DEVICE"
247
+ JOINT_LENGTH = "JOINTLENGTH"
248
+ SEGMENT_LENGTH = "SEGMENTLENGTH"
249
+ USE_STRICT = "USE_STRICT"
250
+ GRAVEL_PACKED_PERFORATED_DEVICELAYER = "GP_PERF_DEVICELAYER" # suggestion: GRAVEL_PACKED_PERFORATION_DEVICE_LAYER
251
+ MINIMUM_SEGMENT_LENGTH = "MINIMUM_SEGMENT_LENGTH"
252
+ MAP_FILE = "MAPFILE"
253
+ SCHEDULE_FILE = "SCHFILE"
254
+ OUT_FILE = "OUTFILE"
255
+
256
+ # Note: Alphabetically sorted, which matters for check vs. missing keys in input data.
257
+ main_keywords = [COMPLETION_DATA, COMPLETION_SEGMENTS, WELL_SEGMENTS, WELL_SPECIFICATION]
258
+
259
+ _items = [WELL_SPECIFICATION, COMPLETION_DATA, WELL_SEGMENTS, COMPLETION_SEGMENTS]
217
260
  _members = set(_items)
218
261
 
219
- segments = {WELSEGS, COMPSEGS}
262
+ segments = {WELL_SEGMENTS, COMPLETION_SEGMENTS}
220
263
 
221
264
  def __iter__(self):
222
265
  return self._items.__iter__()
@@ -228,6 +271,36 @@ class _Keywords:
228
271
  Keywords = _Keywords()
229
272
 
230
273
 
274
+ @dataclass(frozen=True)
275
+ class _Content:
276
+ """ """
277
+
278
+ PACKER = "PA"
279
+ GRAVEL_PACKED = "GP"
280
+ OPEN_ANNULUS = "OA"
281
+ ANNULUS_TYPES = [GRAVEL_PACKED, OPEN_ANNULUS, PACKER]
282
+
283
+ PERFORATED = "PERF"
284
+ INFLOW_CONTROL_VALVE = "ICV"
285
+ AUTONOMOUS_INFLOW_CONTROL_VALVE = "AICV"
286
+ INFLOW_CONTROL_DEVICE = "ICD"
287
+ AUTONOMOUS_INFLOW_CONTROL_DEVICE = "AICD"
288
+ DENSITY_ACTIVATED_RECOVERY = "DAR"
289
+ VALVE = "VALVE"
290
+ DEVICE_TYPES = [
291
+ AUTONOMOUS_INFLOW_CONTROL_DEVICE,
292
+ AUTONOMOUS_INFLOW_CONTROL_VALVE,
293
+ DENSITY_ACTIVATED_RECOVERY,
294
+ INFLOW_CONTROL_DEVICE,
295
+ VALVE,
296
+ INFLOW_CONTROL_VALVE,
297
+ PERFORATED,
298
+ ]
299
+
300
+
301
+ Content = _Content()
302
+
303
+
231
304
  class Method(Enum):
232
305
  """An enumeration of legal methods to create wells."""
233
306