completor 0.1.3__py3-none-any.whl → 1.0.0__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/completion.py +152 -542
- completor/constants.py +223 -150
- completor/create_output.py +559 -431
- completor/exceptions/exceptions.py +6 -6
- completor/get_version.py +8 -0
- completor/hook_implementations/jobs.py +2 -3
- completor/input_validation.py +53 -41
- completor/launch_args_parser.py +7 -12
- completor/logger.py +3 -3
- completor/main.py +102 -360
- completor/parse.py +104 -93
- completor/prepare_outputs.py +593 -457
- completor/read_casefile.py +248 -197
- completor/read_schedule.py +317 -14
- completor/utils.py +256 -25
- completor/visualization.py +1 -14
- completor/visualize_well.py +29 -27
- completor/wells.py +273 -0
- {completor-0.1.3.dist-info → completor-1.0.0.dist-info}/METADATA +10 -11
- completor-1.0.0.dist-info/RECORD +27 -0
- completor/create_wells.py +0 -314
- completor/pvt_model.py +0 -14
- completor-0.1.3.dist-info/RECORD +0 -27
- {completor-0.1.3.dist-info → completor-1.0.0.dist-info}/LICENSE +0 -0
- {completor-0.1.3.dist-info → completor-1.0.0.dist-info}/WHEEL +0 -0
- {completor-0.1.3.dist-info → completor-1.0.0.dist-info}/entry_points.txt +0 -0
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
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
109
|
+
D_FACTOR = "DFACT" # Non-darcy flow of free gas.
|
|
82
110
|
COMPDAT_DIRECTION = "COMPDAT_DIRECTION"
|
|
83
|
-
RO = "RO"
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
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
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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 = {
|
|
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
|
|