resqpy 4.9.2__py3-none-any.whl → 4.9.5__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- resqpy/__init__.py +1 -1
- resqpy/grid_surface/_find_faces.py +16 -4
- resqpy/multi_processing/wrappers/grid_surface_mp.py +6 -2
- resqpy/olio/wellspec_keywords.py +1 -1
- resqpy/well/_blocked_well.py +1 -1
- {resqpy-4.9.2.dist-info → resqpy-4.9.5.dist-info}/METADATA +2 -4
- {resqpy-4.9.2.dist-info → resqpy-4.9.5.dist-info}/RECORD +9 -9
- {resqpy-4.9.2.dist-info → resqpy-4.9.5.dist-info}/LICENSE +0 -0
- {resqpy-4.9.2.dist-info → resqpy-4.9.5.dist-info}/WHEEL +0 -0
resqpy/__init__.py
CHANGED
@@ -182,6 +182,7 @@ def find_faces_to_represent_surface_regular(
|
|
182
182
|
title = None,
|
183
183
|
centres = None,
|
184
184
|
agitate = False,
|
185
|
+
random_agitation = False,
|
185
186
|
feature_type = "fault",
|
186
187
|
progress_fn = None,
|
187
188
|
consistent_side = False,
|
@@ -196,9 +197,11 @@ def find_faces_to_represent_surface_regular(
|
|
196
197
|
title (str, optional): the citation title to use for the grid connection set; defaults to name
|
197
198
|
centres (numpy float array of shape (nk, nj, ni, 3), optional): precomputed cell centre points in
|
198
199
|
local grid space, to avoid possible crs issues; required if grid's crs includes an origin (offset)?
|
199
|
-
agitate (bool, default False): if True, the points of the surface are perturbed by a small
|
200
|
+
agitate (bool, default False): if True, the points of the surface are perturbed by a small
|
200
201
|
offset, which can help if the surface has been built from a regular mesh with a periodic resonance
|
201
202
|
with the grid
|
203
|
+
random_agitation (bool, default False): if True, the agitation is by a small random distance; if False,
|
204
|
+
a constant positive shift of 5.0e-6 is applied to x, y & z values; ignored if agitate is False
|
202
205
|
feature_type (str, default 'fault'): 'fault', 'horizon' or 'geobody boundary'
|
203
206
|
progress_fn (f(x: float), optional): a callback function to be called at intervals by this function;
|
204
207
|
the argument will progress from 0.0 to 1.0 in unspecified and uneven increments
|
@@ -261,7 +264,10 @@ def find_faces_to_represent_surface_regular(
|
|
261
264
|
t, p = surface.triangles_and_points()
|
262
265
|
assert t is not None and p is not None, f"surface {surface.title} is empty"
|
263
266
|
if agitate:
|
264
|
-
|
267
|
+
if random_agitation:
|
268
|
+
p += 1.0e-5 * (np.random.random(p.shape) - 0.5)
|
269
|
+
else:
|
270
|
+
p += 5.0e-6
|
265
271
|
log.debug(f"surface: {surface.title}; p0: {p[0]}; crs uuid: {surface.crs_uuid}")
|
266
272
|
log.debug(f"surface min xyz: {np.min(p, axis = 0)}")
|
267
273
|
log.debug(f"surface max xyz: {np.max(p, axis = 0)}")
|
@@ -495,6 +501,7 @@ def find_faces_to_represent_surface_regular_optimised(
|
|
495
501
|
name,
|
496
502
|
title = None,
|
497
503
|
agitate = False,
|
504
|
+
random_agitation = False,
|
498
505
|
feature_type = "fault",
|
499
506
|
is_curtain = False,
|
500
507
|
progress_fn = None,
|
@@ -509,9 +516,11 @@ def find_faces_to_represent_surface_regular_optimised(
|
|
509
516
|
surface (Surface): the surface to be intersected with the grid
|
510
517
|
name (str): the feature name to use in the grid connection set
|
511
518
|
title (str, optional): the citation title to use for the grid connection set; defaults to name
|
512
|
-
agitate (bool, default False): if True, the points of the surface are perturbed by a small
|
519
|
+
agitate (bool, default False): if True, the points of the surface are perturbed by a small
|
513
520
|
offset, which can help if the surface has been built from a regular mesh with a periodic resonance
|
514
521
|
with the grid
|
522
|
+
random_agitation (bool, default False): if True, the agitation is by a small random distance; if False,
|
523
|
+
a constant positive shift of 5.0e-6 is applied to x, y & z values; ignored if agitate is False
|
515
524
|
feature_type (str, default 'fault'): 'fault', 'horizon' or 'geobody boundary'
|
516
525
|
is_curtain (bool, default False): if True, only the top layer of the grid is processed and the bisector
|
517
526
|
property, if requested, is generated with indexable element columns
|
@@ -591,7 +600,10 @@ def find_faces_to_represent_surface_regular_optimised(
|
|
591
600
|
triangles, points = surface.triangles_and_points()
|
592
601
|
assert (triangles is not None and points is not None), f"surface {surface.title} is empty"
|
593
602
|
if agitate:
|
594
|
-
|
603
|
+
if random_agitation:
|
604
|
+
points += 1.0e-5 * (np.random.random(points.shape) - 0.5)
|
605
|
+
else:
|
606
|
+
points += 5.0e-6
|
595
607
|
# log.debug(f'surface: {surface.title}; p0: {points[0]}; crs uuid: {surface.crs_uuid}')
|
596
608
|
# log.debug(f'surface min xyz: {np.min(points, axis = 0)}')
|
597
609
|
# log.debug(f'surface max xyz: {np.max(points, axis = 0)}')
|
@@ -29,6 +29,7 @@ def find_faces_to_represent_surface_regular_wrapper(
|
|
29
29
|
name: str,
|
30
30
|
title: Optional[str] = None,
|
31
31
|
agitate: bool = False,
|
32
|
+
random_agitation: bool = False,
|
32
33
|
feature_type: str = 'fault',
|
33
34
|
trimmed: bool = False,
|
34
35
|
is_curtain = False,
|
@@ -55,9 +56,11 @@ def find_faces_to_represent_surface_regular_wrapper(
|
|
55
56
|
surface_uuid (UUID or str): UUID (universally unique identifier) of the surface (or point set) object.
|
56
57
|
name (str): the feature name to use in the grid connection set.
|
57
58
|
title (str): the citation title to use for the grid connection set; defaults to name
|
58
|
-
agitate (bool): if True, the points of the surface are perturbed by a small
|
59
|
-
|
59
|
+
agitate (bool): if True, the points of the surface are perturbed by a small offset,
|
60
|
+
which can help if the surface has been built from a regular mesh with a periodic resonance
|
60
61
|
with the grid
|
62
|
+
random_agitation (bool, default False): if True, the agitation is by a small random distance; if False,
|
63
|
+
a constant positive shift of 5.0e-6 is applied to x, y & z values; ignored if agitate is False
|
61
64
|
feature_type (str, default 'fault'): one of 'fault', 'horizon', or 'geobody boundary'
|
62
65
|
trimmed (bool, default True): if True the surface has already been trimmed
|
63
66
|
is_curtain (bool, default False): if True, only the top layer is intersected with the surface and bisector
|
@@ -221,6 +224,7 @@ def find_faces_to_represent_surface_regular_wrapper(
|
|
221
224
|
name,
|
222
225
|
title,
|
223
226
|
agitate,
|
227
|
+
random_agitation,
|
224
228
|
feature_type,
|
225
229
|
is_curtain,
|
226
230
|
progress_fn,
|
resqpy/olio/wellspec_keywords.py
CHANGED
@@ -469,7 +469,7 @@ def get_well_data(
|
|
469
469
|
while True:
|
470
470
|
kf.skip_comments(file)
|
471
471
|
if (kf.specific_keyword_next(file, "WELLSPEC") or kf.specific_keyword_next(file, "WELLMOD") or
|
472
|
-
kf.specific_keyword_next(file, "TIME")):
|
472
|
+
kf.specific_keyword_next(file, "TIME") or kf.specific_keyword_next(file, "INCLUDE")):
|
473
473
|
break
|
474
474
|
line = kf.strip_trailing_comment(file.readline())
|
475
475
|
words = line.split()
|
resqpy/well/_blocked_well.py
CHANGED
@@ -3485,7 +3485,7 @@ class BlockedWell(BaseResqpy):
|
|
3485
3485
|
facet = gridpc.facet_for_part(part),
|
3486
3486
|
realization = gridpc.realization_for_part(part),
|
3487
3487
|
indexable_element = 'cells')
|
3488
|
-
bwpc.write_hdf5_for_imported_list()
|
3488
|
+
bwpc.write_hdf5_for_imported_list(use_int32 = False)
|
3489
3489
|
bwpc.create_xml_for_imported_list_and_add_parts_to_model(time_series_uuid = time_uuid,
|
3490
3490
|
string_lookup_uuid = sl_uuid)
|
3491
3491
|
else:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: resqpy
|
3
|
-
Version: 4.9.
|
3
|
+
Version: 4.9.5
|
4
4
|
Summary: Python API for working with RESQML models
|
5
5
|
Home-page: https://github.com/bp/resqpy
|
6
6
|
License: MIT
|
@@ -48,7 +48,7 @@ you the ability to work with reservoir models programmatically, without having
|
|
48
48
|
to know the details of the RESQML standard.
|
49
49
|
|
50
50
|
The package is written and maintained by bp, and is made available under the MIT
|
51
|
-
license as a contribution to the open
|
51
|
+
license as a contribution to the open source community.
|
52
52
|
|
53
53
|
**resqpy** was created by Andy Beer. For enquires about resqpy, please contact
|
54
54
|
Emma Nesbit (Emma.Nesbit@uk.bp.com)
|
@@ -73,8 +73,6 @@ for, although the RESQML standard does allow for such grids.
|
|
73
73
|
It is envisaged that the code base will be expanded to include other classes of
|
74
74
|
object and more fully cover the options permitted by the RESQML standard.
|
75
75
|
|
76
|
-
Modification functionality at the moment focuses on changes to grid geometry.
|
77
|
-
|
78
76
|
## Installation
|
79
77
|
|
80
78
|
Resqpy can be installed with pip:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
resqpy/__init__.py,sha256=
|
1
|
+
resqpy/__init__.py,sha256=Behlemi-nhF8AnlLq_npRt_o7-vrB10KGOmSXk-YCDg,555
|
2
2
|
resqpy/crs.py,sha256=iq0lO3aXzttmJBfuhUjS9IHlv8OV1wuByhFk0b4fvmI,24782
|
3
3
|
resqpy/derived_model/__init__.py,sha256=NFvMSOKI3cxmH7lAbddV43JjoUj-r2G7ExEfOqinD1I,1982
|
4
4
|
resqpy/derived_model/_add_edges_per_column_property_array.py,sha256=cpW3gwp6MSYIrtvFmCjoJXcyUsgGuCDbgmwlJCJebUs,6410
|
@@ -48,7 +48,7 @@ resqpy/grid/_write_nexus_corp.py,sha256=yEVfiObsedEAXX6UG6ZTf56kZnQVkd3lLqE2NpL-
|
|
48
48
|
resqpy/grid/_xyz.py,sha256=RLQWOdM_DRoCj4JypwB5gUJ78HTdk5JnZHSeAzuU634,13087
|
49
49
|
resqpy/grid_surface/__init__.py,sha256=iyK3_Vlg9mXffc_1gjvRdKwQE0zicbNXya0tryHkr04,2593
|
50
50
|
resqpy/grid_surface/_blocked_well_populate.py,sha256=oP1TW5hf1no6WYMZrCgJFV2tJCXHAvap3if3WHMULac,35739
|
51
|
-
resqpy/grid_surface/_find_faces.py,sha256=
|
51
|
+
resqpy/grid_surface/_find_faces.py,sha256=WRoc5g-kLtR0JkuT0nueVF8ZgG09YfR3K_aRp2Rc2K8,64645
|
52
52
|
resqpy/grid_surface/_grid_skin.py,sha256=D0cjHkcuT5KCKb-8EZfXgh0GgJj3kzOBS2wVNXg4bfY,26056
|
53
53
|
resqpy/grid_surface/_grid_surface.py,sha256=l2NJo7Kiucolbb_TlLPC7NGdksg_JahkihfsrJVq99w,14379
|
54
54
|
resqpy/grid_surface/_trajectory_intersects.py,sha256=Och9cZYU9Y7ofovhPzsLyIblRUl2xj9_5nHH3fMZp-A,22498
|
@@ -69,7 +69,7 @@ resqpy/multi_processing/__init__.py,sha256=ZRudHfN9aaZjxvat7t8BZr6mwMi9baiCNjczw
|
|
69
69
|
resqpy/multi_processing/_multiprocessing.py,sha256=bnCKfSC1tWwvZmZ7BZqCyje0C93m6q7HZPxNpx8xoxA,7301
|
70
70
|
resqpy/multi_processing/wrappers/__init__.py,sha256=7vjuTWdHnp3rN9Ud8ljpDnt1NbBAyhA08lv-sQ9Kf3o,72
|
71
71
|
resqpy/multi_processing/wrappers/blocked_well_mp.py,sha256=_2fEsSmJVQCnbQIjTHqmnNEugfhN1KvX-o4ZbvtChdI,5952
|
72
|
-
resqpy/multi_processing/wrappers/grid_surface_mp.py,sha256=
|
72
|
+
resqpy/multi_processing/wrappers/grid_surface_mp.py,sha256=PzmVOrW_7FCWM_jFz62Q3VQ259HlmyVFIraMHeVpFl8,21494
|
73
73
|
resqpy/multi_processing/wrappers/mesh_mp.py,sha256=0VYoqtgBFfrlyYB6kkjbdrRQ5FKe6t5pHJO3wD9b8Fc,5793
|
74
74
|
resqpy/olio/__init__.py,sha256=j2breqKYVufhw5k8qS2uZwB3tUKT7FhdZ23ninS75YA,84
|
75
75
|
resqpy/olio/ab_toolbox.py,sha256=bZlAhOJVS0HvIYBW0Lg68re17N8eltoQhIUh0xuUyVc,2147
|
@@ -100,7 +100,7 @@ resqpy/olio/uuid.py,sha256=JRMi-RZNeGm8tGNloIwTATzNtdj29lBQDV9OILboPRI,7324
|
|
100
100
|
resqpy/olio/vdb.py,sha256=lQYuK1kr1Wnucq2EoKgT6lrR7vloCemnCKZktzBcLUc,45231
|
101
101
|
resqpy/olio/vector_utilities.py,sha256=Oe5NGOnV_wNExlcevBnLdP30XbvTM-4YnLmbgM4bDDk,46253
|
102
102
|
resqpy/olio/volume.py,sha256=F1pMnDoJ4ricy4dfdLuLuK1xkVgJckL9V06tUeyK6Wc,6185
|
103
|
-
resqpy/olio/wellspec_keywords.py,sha256=
|
103
|
+
resqpy/olio/wellspec_keywords.py,sha256=MqrXRSzVfXAKUhiJkop3EwoVdKEjgZRwHYBJjx2IW8Q,26265
|
104
104
|
resqpy/olio/write_data.py,sha256=bIX7ilMkXWCMz_zQh-Gqk56sNzng4W5l4BahW2EV7Kw,5142
|
105
105
|
resqpy/olio/write_hdf5.py,sha256=KXB2L6Qz3TFb9yDjT-Ty0CXgjyq0nhVp3GADlekWhMQ,19055
|
106
106
|
resqpy/olio/xml_et.py,sha256=pRKxUwqlEk9zJjAEb3AGSktE1OfdfPWP23A6Ihjb2AQ,24925
|
@@ -182,7 +182,7 @@ resqpy/weights_and_measures/__init__.py,sha256=Kp1pPZFH4rS5_PkCERZBEzGoat6n_dSS0
|
|
182
182
|
resqpy/weights_and_measures/nexus_units.py,sha256=y78sk6zb43LnwzGWQFV3g_Bwg5seUbgE1YROSOgu6UU,5434
|
183
183
|
resqpy/weights_and_measures/weights_and_measures.py,sha256=i3Fv7hZczQmvTtPwzWvQb-XAxCG6Uta_vd4DV7XDwOU,16186
|
184
184
|
resqpy/well/__init__.py,sha256=v5_gd7sSPRM9q2KsLiLWaw3jbnXFZkou38qeB7_HSN4,990
|
185
|
-
resqpy/well/_blocked_well.py,sha256=
|
185
|
+
resqpy/well/_blocked_well.py,sha256=yCW9V1uAQG916eOlW5Qs_vRy9HdLA6NG9noQMbYitiE,188839
|
186
186
|
resqpy/well/_deviation_survey.py,sha256=y9Cj8Y81puJvUrIeZEUX3QR2iWg2tuUY6QS-_Hu8zEU,22138
|
187
187
|
resqpy/well/_md_datum.py,sha256=rRrDQckTJwZtIEh28dlgXj32kcBSu-ZvHFYZOiQsyqg,7154
|
188
188
|
resqpy/well/_trajectory.py,sha256=ebKjv9IwhrxJRRH4iSQYmd09zSdTC_Z6u-1-h6vnfqA,50015
|
@@ -192,7 +192,7 @@ resqpy/well/_wellbore_marker_frame.py,sha256=xvYH2_2Ie3a18LReFymbUrZboOx7Rhv5DOD
|
|
192
192
|
resqpy/well/blocked_well_frame.py,sha256=Lg7TgynfPv9WkklXTLt9VN6uBXWUqX1LI-Xmv_FBqYk,22555
|
193
193
|
resqpy/well/well_object_funcs.py,sha256=LYTcC07ezlBxClfrug_B4iXXZUkXDPgsVufNzp361Wo,24703
|
194
194
|
resqpy/well/well_utils.py,sha256=zwpYjT85nXAwWBhYB1Pygu2SgouZ-44k6hEOnpoMfBI,5969
|
195
|
-
resqpy-4.9.
|
196
|
-
resqpy-4.9.
|
197
|
-
resqpy-4.9.
|
198
|
-
resqpy-4.9.
|
195
|
+
resqpy-4.9.5.dist-info/LICENSE,sha256=2duHPIkKQyESMdQ4hKjL8CYEsYRHXaYxt0YQkzsUYE4,1059
|
196
|
+
resqpy-4.9.5.dist-info/METADATA,sha256=Y1P5_zdsK0_XEo0zXiSkEdeQEPZP1a-j2qOpIuPNMBM,4027
|
197
|
+
resqpy-4.9.5.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
198
|
+
resqpy-4.9.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|