resqpy 4.9.2__py3-none-any.whl → 4.9.5__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.
- 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
|