resqpy 4.14.2__py3-none-any.whl → 5.1.6__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/fault/_gcs_functions.py +10 -10
- resqpy/fault/_grid_connection_set.py +277 -113
- resqpy/grid/__init__.py +2 -3
- resqpy/grid/_defined_geometry.py +3 -3
- resqpy/grid/_extract_functions.py +8 -2
- resqpy/grid/_grid.py +95 -12
- resqpy/grid/_grid_types.py +22 -7
- resqpy/grid/_points_functions.py +1 -1
- resqpy/grid/_regular_grid.py +6 -2
- resqpy/grid_surface/__init__.py +17 -38
- resqpy/grid_surface/_blocked_well_populate.py +5 -5
- resqpy/grid_surface/_find_faces.py +1413 -253
- resqpy/lines/_polyline.py +24 -33
- resqpy/model/_catalogue.py +9 -0
- resqpy/model/_forestry.py +18 -14
- resqpy/model/_hdf5.py +11 -3
- resqpy/model/_model.py +85 -10
- resqpy/model/_xml.py +38 -13
- resqpy/multi_processing/wrappers/grid_surface_mp.py +92 -37
- resqpy/olio/read_nexus_fault.py +8 -2
- resqpy/olio/relperm.py +1 -1
- resqpy/olio/transmission.py +8 -8
- resqpy/olio/triangulation.py +36 -30
- resqpy/olio/vector_utilities.py +340 -6
- resqpy/olio/volume.py +0 -20
- resqpy/olio/wellspec_keywords.py +19 -13
- resqpy/olio/write_hdf5.py +1 -1
- resqpy/olio/xml_et.py +12 -0
- resqpy/property/__init__.py +6 -4
- resqpy/property/_collection_add_part.py +4 -3
- resqpy/property/_collection_create_xml.py +4 -2
- resqpy/property/_collection_get_attributes.py +4 -0
- resqpy/property/attribute_property_set.py +311 -0
- resqpy/property/grid_property_collection.py +11 -11
- resqpy/property/property_collection.py +79 -31
- resqpy/property/property_common.py +3 -8
- resqpy/rq_import/_add_surfaces.py +34 -14
- resqpy/rq_import/_grid_from_cp.py +2 -2
- resqpy/rq_import/_import_nexus.py +75 -48
- resqpy/rq_import/_import_vdb_all_grids.py +64 -52
- resqpy/rq_import/_import_vdb_ensemble.py +12 -13
- resqpy/surface/_mesh.py +4 -0
- resqpy/surface/_surface.py +593 -118
- resqpy/surface/_tri_mesh.py +13 -10
- resqpy/surface/_tri_mesh_stencil.py +4 -4
- resqpy/surface/_triangulated_patch.py +71 -51
- resqpy/time_series/_any_time_series.py +7 -4
- resqpy/time_series/_geologic_time_series.py +1 -1
- resqpy/unstructured/_hexa_grid.py +6 -2
- resqpy/unstructured/_prism_grid.py +13 -5
- resqpy/unstructured/_pyramid_grid.py +6 -2
- resqpy/unstructured/_tetra_grid.py +6 -2
- resqpy/unstructured/_unstructured_grid.py +6 -2
- resqpy/well/_blocked_well.py +1986 -1946
- resqpy/well/_deviation_survey.py +3 -3
- resqpy/well/_md_datum.py +11 -21
- resqpy/well/_trajectory.py +10 -5
- resqpy/well/_wellbore_frame.py +10 -2
- resqpy/well/blocked_well_frame.py +3 -3
- resqpy/well/well_object_funcs.py +7 -9
- resqpy/well/well_utils.py +33 -0
- {resqpy-4.14.2.dist-info → resqpy-5.1.6.dist-info}/METADATA +8 -9
- {resqpy-4.14.2.dist-info → resqpy-5.1.6.dist-info}/RECORD +66 -66
- {resqpy-4.14.2.dist-info → resqpy-5.1.6.dist-info}/WHEEL +1 -1
- resqpy/grid/_moved_functions.py +0 -15
- {resqpy-4.14.2.dist-info → resqpy-5.1.6.dist-info}/LICENSE +0 -0
resqpy/grid/__init__.py
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
"""The Grid Module."""
|
2
2
|
|
3
3
|
__all__ = [
|
4
|
-
'Grid', 'RegularGrid', 'extract_grid_parent', '
|
5
|
-
'
|
4
|
+
'Grid', 'RegularGrid', 'extract_grid_parent', 'find_cell_for_x_sect_xz', 'grid_flavour', 'is_regular_grid',
|
5
|
+
'any_grid'
|
6
6
|
]
|
7
7
|
|
8
8
|
from ._grid import Grid
|
9
9
|
from ._regular_grid import RegularGrid
|
10
10
|
from ._grid_types import grid_flavour, is_regular_grid, any_grid
|
11
|
-
from ._moved_functions import establish_zone_property_kind
|
12
11
|
from ._extract_functions import extract_grid_parent, extent_kji_from_root
|
13
12
|
from ._points_functions import find_cell_for_x_sect_xz
|
14
13
|
|
resqpy/grid/_defined_geometry.py
CHANGED
@@ -293,7 +293,7 @@ def set_geometry_is_defined(grid,
|
|
293
293
|
|
294
294
|
assert not np.all(nan_mask), 'grid does not have any geometry defined'
|
295
295
|
|
296
|
-
points[np.where(np.repeat(np.expand_dims(nan_mask, axis = nan_mask.ndim), 3, axis = -1))] = np.
|
296
|
+
points[np.where(np.repeat(np.expand_dims(nan_mask, axis = nan_mask.ndim), 3, axis = -1))] = np.nan
|
297
297
|
|
298
298
|
surround_z = grid.xyz_box(lazy = False)[1 if grid.z_inc_down() else 0, 2]
|
299
299
|
|
@@ -335,7 +335,7 @@ def set_geometry_is_defined(grid,
|
|
335
335
|
if nullify_partial_pillars:
|
336
336
|
partial_pillar_mask = np.logical_and(pillar_defined_mask, np.any(nan_mask, axis = 0).flatten())
|
337
337
|
if np.any(partial_pillar_mask):
|
338
|
-
points.reshape((grid.nk_plus_k_gaps + 1, -1, 3))[:, partial_pillar_mask, :] = np.
|
338
|
+
points.reshape((grid.nk_plus_k_gaps + 1, -1, 3))[:, partial_pillar_mask, :] = np.nan
|
339
339
|
grid.geometry_defined_for_all_pillars_cached = False
|
340
340
|
cells_update_needed = True
|
341
341
|
elif complete_partial_pillars:
|
@@ -416,7 +416,7 @@ def __handle_areal_dots(areal_dots, grid, nan_mask):
|
|
416
416
|
primaries = (grid.nj + 1) * (grid.ni + 1)
|
417
417
|
nan_mask[:, :primaries] = np.logical_or(nan_mask[:, :primaries], dot_mask.reshape((-1, primaries)))
|
418
418
|
else:
|
419
|
-
nan_mask = np.where(dot_mask, np.
|
419
|
+
nan_mask = np.where(dot_mask, np.nan, nan_mask)
|
420
420
|
return nan_mask
|
421
421
|
|
422
422
|
|
@@ -445,7 +445,12 @@ def extract_stratigraphy(grid):
|
|
445
445
|
object = grid,
|
446
446
|
array_attribute = 'stratigraphic_units',
|
447
447
|
dtype = 'int')
|
448
|
-
|
448
|
+
if (len(grid.stratigraphic_units) != grid.nk_plus_k_gaps):
|
449
|
+
log.error("Unable to load Stratigraphy," +
|
450
|
+
f" the number of stratigraphic units {len(grid.stratigraphic_units)}" +
|
451
|
+
f" does not equal the number of layers plus gaps {grid.nk_plus_k_gaps}")
|
452
|
+
grid.stratigraphic_column_rank_uuid = None
|
453
|
+
grid.stratigraphic_units = None
|
449
454
|
|
450
455
|
|
451
456
|
def extract_children(grid):
|
@@ -501,7 +506,7 @@ def extract_inactive_mask(grid, check_pinchout = False):
|
|
501
506
|
geom_defined = grr_dg.cell_geometry_is_defined_ref(grid)
|
502
507
|
if grid.inactive is None:
|
503
508
|
if geom_defined is None or geom_defined is True:
|
504
|
-
grid.inactive = np.zeros(tuple(grid.extent_kji)) # ie. all active
|
509
|
+
grid.inactive = np.zeros(tuple(grid.extent_kji), dtype = bool) # ie. all active
|
505
510
|
else:
|
506
511
|
grid.inactive = np.logical_not(grr_dg.cell_geometry_is_defined_ref(grid))
|
507
512
|
if check_pinchout:
|
@@ -524,6 +529,7 @@ def extract_inactive_mask(grid, check_pinchout = False):
|
|
524
529
|
active_gpc = rprop.selective_version_of_collection(active_gpc,
|
525
530
|
time_index = grid.time_index,
|
526
531
|
time_series_uuid = grid.time_series_uuid)
|
532
|
+
active_parts = active_gpc.parts()
|
527
533
|
else:
|
528
534
|
active_parts = []
|
529
535
|
for part in active_gpc.parts():
|
resqpy/grid/_grid.py
CHANGED
@@ -15,6 +15,7 @@ import resqpy.grid as grr
|
|
15
15
|
import resqpy.grid_surface as rqgs
|
16
16
|
import resqpy.fault as rqf
|
17
17
|
import resqpy.property as rqp
|
18
|
+
import resqpy.lines as rql
|
18
19
|
import resqpy.olio.grid_functions as gf
|
19
20
|
import resqpy.olio.uuid as bu
|
20
21
|
import resqpy.olio.write_hdf5 as rwh5
|
@@ -75,7 +76,8 @@ class Grid(BaseResqpy):
|
|
75
76
|
geometry_required = True,
|
76
77
|
title = None,
|
77
78
|
originator = None,
|
78
|
-
extra_metadata = {}
|
79
|
+
extra_metadata = {},
|
80
|
+
load_inactive = True):
|
79
81
|
"""Create a Grid object and optionally populate from xml tree.
|
80
82
|
|
81
83
|
arguments:
|
@@ -91,6 +93,8 @@ class Grid(BaseResqpy):
|
|
91
93
|
ignored if loading from xml
|
92
94
|
extra_metadata (dict, optional): dictionary of extra metadata items to add to the grid;
|
93
95
|
ignored if loading from xml
|
96
|
+
load_inactive (bool, default True): if True and uuid is provided, the inactive attribubte is
|
97
|
+
populated if a property of kind 'active' is found for the grid
|
94
98
|
|
95
99
|
returns:
|
96
100
|
a newly created Grid object
|
@@ -147,6 +151,8 @@ class Grid(BaseResqpy):
|
|
147
151
|
self.title = 'ROOT'
|
148
152
|
|
149
153
|
if uuid is not None:
|
154
|
+
if load_inactive:
|
155
|
+
self.extract_inactive_mask()
|
150
156
|
if geometry_required:
|
151
157
|
assert self.geometry_root is not None, 'grid geometry not present in xml'
|
152
158
|
if find_properties:
|
@@ -185,7 +191,6 @@ class Grid(BaseResqpy):
|
|
185
191
|
self.extract_parent()
|
186
192
|
self.extract_children()
|
187
193
|
# self.create_column_pillar_mapping() # mapping now created on demand in other methods
|
188
|
-
self.extract_inactive_mask()
|
189
194
|
self.extract_stratigraphy()
|
190
195
|
self.get_represented_interpretation()
|
191
196
|
|
@@ -265,6 +270,10 @@ class Grid(BaseResqpy):
|
|
265
270
|
return np.count_nonzero(self.array_cell_geometry_is_defined)
|
266
271
|
return None
|
267
272
|
|
273
|
+
def is_big(self):
|
274
|
+
"""Returns True if number of cells exceeds 2^31 - 1, otherwise False."""
|
275
|
+
return (np.prod(self.extent_kji) >= 2_147_483_648)
|
276
|
+
|
268
277
|
def natural_cell_index(self, cell_kji0):
|
269
278
|
"""Returns a single integer for the cell, being the index into a flattened array."""
|
270
279
|
|
@@ -671,13 +680,7 @@ class Grid(BaseResqpy):
|
|
671
680
|
return _create_grid_xml(self, ijk, ext_uuid, add_as_part, add_relationships, write_active, write_geometry,
|
672
681
|
use_lattice, use_parametric_lines)
|
673
682
|
|
674
|
-
|
675
|
-
"""Deprecated: please use `unsplit_x_section_points` instead."""
|
676
|
-
warnings.warn('Deprecated: please use `unsplit_x_section_points` instead.', DeprecationWarning)
|
677
|
-
|
678
|
-
return unsplit_x_section_points(self, axis, ref_slice0 = ref_slice0, plus_face = plus_face, masked = masked)
|
679
|
-
|
680
|
-
# The implementations of the below functions have been moved to separate modules.
|
683
|
+
# the implementations of the functions below have been moved to separate modules
|
681
684
|
|
682
685
|
def cell_geometry_is_defined(self, cell_kji0 = None, cell_geometry_is_defined_root = None, cache_array = True):
|
683
686
|
"""Returns True if the geometry of the specified cell is defined.
|
@@ -1489,6 +1492,86 @@ class Grid(BaseResqpy):
|
|
1489
1492
|
"""
|
1490
1493
|
return z_corner_point_depths(self, order = order)
|
1491
1494
|
|
1495
|
+
def frontier(self, set_z_zero = True, title = None, add_as_part = True, mode = 'mean'):
|
1496
|
+
"""Returns a frontier polygon (closed polyline) based on midpoints of edge coordinate lines, with z set to zero.
|
1497
|
+
|
1498
|
+
arguments:
|
1499
|
+
- set_z_zero (bool, default True): if True, the z values of the returned polyline are all set to zero; if False,
|
1500
|
+
they are left at the midpoint z values from the edge coordinate lines
|
1501
|
+
- title (str, optional): the citation title for the polyline; if None, one is generated using the grid title
|
1502
|
+
- add_as_part (bool default True): if True, the xml is created for the polyline and it is added as a part to
|
1503
|
+
the model; if False, the create_xml() method is not called fot the polyline
|
1504
|
+
- mode (str, default 'mean'): one of 'mean', 'top', 'base', 'inner', 'outer' determining how a non-vertical
|
1505
|
+
edge coordinate line is converted to a point to include in the frontier
|
1506
|
+
|
1507
|
+
returns:
|
1508
|
+
- closed Polyline representing the frontier of the grid in plan view
|
1509
|
+
"""
|
1510
|
+
|
1511
|
+
def get_point(clep, mode, centrum):
|
1512
|
+
if mode == 'mean':
|
1513
|
+
return np.nanmean(clep, axis = 0)
|
1514
|
+
if mode == 'top':
|
1515
|
+
return clep[0]
|
1516
|
+
if mode == 'base':
|
1517
|
+
return clep[-1]
|
1518
|
+
assert mode in ['inner', 'outer'], f'unrecognised frontier mode: {mode}'
|
1519
|
+
vp = clep - np.expand_dims(centrum, axis = 0)
|
1520
|
+
dp = np.sum(vp * vp, axis = -1)
|
1521
|
+
if (dp[0] < dp[1] and mode == 'inner') or (dp[0] > dp[1] and mode == 'outer'):
|
1522
|
+
return clep[0]
|
1523
|
+
return clep[-1]
|
1524
|
+
|
1525
|
+
assert mode in ['mean', 'top', 'base', 'inner', 'outer']
|
1526
|
+
coords = self.coordinate_line_end_points()
|
1527
|
+
centrum = None
|
1528
|
+
if mode in ['inner', 'outer']:
|
1529
|
+
centrum = np.nanmean(np.concatenate((coords[0, 0], coords[0, -1], coords[-1, 0], coords[-1, -1]), axis = 0),
|
1530
|
+
axis = 0)
|
1531
|
+
assert not np.any(
|
1532
|
+
np.isnan(centrum)), f'trying to make frontier polygon in mode {mode} when corners of grid not defined'
|
1533
|
+
nj = self.nj
|
1534
|
+
ni = self.ni
|
1535
|
+
frontier = np.zeros((2 * (nj + ni), 3), dtype = float)
|
1536
|
+
f_i = 0
|
1537
|
+
for i in range(self.ni):
|
1538
|
+
c = get_point(coords[0, i], mode, centrum)
|
1539
|
+
if np.any(np.isnan(c)):
|
1540
|
+
continue
|
1541
|
+
frontier[f_i] = c
|
1542
|
+
f_i += 1
|
1543
|
+
for j in range(self.nj):
|
1544
|
+
c = get_point(coords[j, ni], mode, centrum)
|
1545
|
+
if np.any(np.isnan(c)):
|
1546
|
+
continue
|
1547
|
+
frontier[f_i] = c
|
1548
|
+
f_i += 1
|
1549
|
+
for i in range(self.ni, 0, -1):
|
1550
|
+
c = get_point(coords[nj, i], mode, centrum)
|
1551
|
+
if np.any(np.isnan(c)):
|
1552
|
+
continue
|
1553
|
+
frontier[f_i] = c
|
1554
|
+
f_i += 1
|
1555
|
+
for j in range(self.nj, 0, -1):
|
1556
|
+
c = get_point(coords[j, 0], mode, centrum)
|
1557
|
+
if np.any(np.isnan(c)):
|
1558
|
+
continue
|
1559
|
+
frontier[f_i] = c
|
1560
|
+
f_i += 1
|
1561
|
+
assert 4 <= f_i <= 2 * (nj + ni), 'failed to define frontier polygon (NaNs in grid geometry?)'
|
1562
|
+
if set_z_zero:
|
1563
|
+
frontier[:, 2] = 0.0
|
1564
|
+
if not title:
|
1565
|
+
title = f'frontier of {self.title}'
|
1566
|
+
pl = rql.Polyline(self.model,
|
1567
|
+
set_coord = frontier[:f_i],
|
1568
|
+
set_crs = self.crs_uuid,
|
1569
|
+
is_closed = True,
|
1570
|
+
title = title)
|
1571
|
+
if add_as_part:
|
1572
|
+
pl.create_xml()
|
1573
|
+
return pl
|
1574
|
+
|
1492
1575
|
def corner_points(self, cell_kji0 = None, points_root = None, cache_resqml_array = True, cache_cp_array = False):
|
1493
1576
|
"""Returns a numpy array of corner points for a single cell or the whole grid.
|
1494
1577
|
|
@@ -2255,9 +2338,9 @@ class Grid(BaseResqpy):
|
|
2255
2338
|
pc = self.extract_property_collection()
|
2256
2339
|
|
2257
2340
|
if baffle_triplet is not None:
|
2258
|
-
trm_k[1:-1]
|
2259
|
-
trm_j[:, 1:-1]
|
2260
|
-
trm_i[:, :, 1:-1]
|
2341
|
+
trm_k[1:-1][baffle_triplet[0]] = 0.0
|
2342
|
+
trm_j[:, 1:-1][baffle_triplet[1]] = 0.0
|
2343
|
+
trm_i[:, :, 1:-1][baffle_triplet[2]] = 0.0
|
2261
2344
|
|
2262
2345
|
if composite_property:
|
2263
2346
|
tr_composite = np.concatenate((trm_k.flat, trm_j.flat, trm_i.flat))
|
resqpy/grid/_grid_types.py
CHANGED
@@ -51,13 +51,15 @@ def is_regular_grid(grid_root):
|
|
51
51
|
return grid_flavour(grid_root) == 'IjkBlockGrid'
|
52
52
|
|
53
53
|
|
54
|
-
def any_grid(parent_model, uuid = None, find_properties = True):
|
54
|
+
def any_grid(parent_model, uuid = None, find_properties = True, load_inactive = True):
|
55
55
|
"""Returns a Grid or RegularGrid or UnstructuredGrid object depending on the extra metadata in the xml.
|
56
56
|
|
57
57
|
arguments:
|
58
58
|
parent_model (Model): the model within which the grid exists
|
59
59
|
uuid (UUID): the uuid of the grid object to be instantiated
|
60
60
|
find_properties (bool, default True): passed onward to the instantiation method
|
61
|
+
load_inactive (bool, default True): if True and uuid is provided, the inactive attribubte is
|
62
|
+
populated if a property of kind 'active' is found for the grid
|
61
63
|
|
62
64
|
note:
|
63
65
|
full list of resqpy grid class objects which could be returned:
|
@@ -70,17 +72,30 @@ def any_grid(parent_model, uuid = None, find_properties = True):
|
|
70
72
|
if flavour is None:
|
71
73
|
return None
|
72
74
|
if flavour == 'IjkGrid':
|
73
|
-
return grr.Grid(parent_model, uuid = uuid, find_properties = find_properties)
|
75
|
+
return grr.Grid(parent_model, uuid = uuid, find_properties = find_properties, load_inactive = load_inactive)
|
74
76
|
if flavour == 'IjkBlockGrid':
|
75
|
-
return grr.RegularGrid(parent_model,
|
77
|
+
return grr.RegularGrid(parent_model,
|
78
|
+
extent_kji = None,
|
79
|
+
uuid = uuid,
|
80
|
+
find_properties = find_properties,
|
81
|
+
load_inactive = load_inactive)
|
76
82
|
if flavour == 'UnstructuredGrid':
|
77
|
-
return rug.UnstructuredGrid(parent_model,
|
83
|
+
return rug.UnstructuredGrid(parent_model,
|
84
|
+
uuid = uuid,
|
85
|
+
find_properties = find_properties,
|
86
|
+
load_inactive = load_inactive)
|
78
87
|
if flavour == 'TetraGrid':
|
79
|
-
return rug.TetraGrid(parent_model,
|
88
|
+
return rug.TetraGrid(parent_model,
|
89
|
+
uuid = uuid,
|
90
|
+
find_properties = find_properties,
|
91
|
+
load_inactive = load_inactive)
|
80
92
|
if flavour == 'HexaGrid':
|
81
|
-
return rug.HexaGrid(parent_model, uuid = uuid, find_properties = find_properties)
|
93
|
+
return rug.HexaGrid(parent_model, uuid = uuid, find_properties = find_properties, load_inactive = load_inactive)
|
82
94
|
if flavour == 'PyramidGrid':
|
83
95
|
return rug.PyramidGrid(parent_model, uuid = uuid, find_properties = find_properties)
|
84
96
|
if flavour == 'PrismGrid':
|
85
|
-
return rug.PrismGrid(parent_model,
|
97
|
+
return rug.PrismGrid(parent_model,
|
98
|
+
uuid = uuid,
|
99
|
+
find_properties = find_properties,
|
100
|
+
load_inactive = load_inactive)
|
86
101
|
return None
|
resqpy/grid/_points_functions.py
CHANGED
@@ -790,7 +790,7 @@ def corner_points(grid, cell_kji0 = None, points_root = None, cache_resqml_array
|
|
790
790
|
# note: this function returns a derived object rather than a native resqml object
|
791
791
|
|
792
792
|
def one_cell_cp(grid, cell_kji0, points_root, cache_array):
|
793
|
-
cp = np.full((2, 2, 2, 3), np.
|
793
|
+
cp = np.full((2, 2, 2, 3), np.nan)
|
794
794
|
if not grr_dg.geometry_defined_for_all_cells(grid):
|
795
795
|
if not grr_dg.cell_geometry_is_defined(grid, cell_kji0 = cell_kji0, cache_array = cache_array):
|
796
796
|
return cp
|
resqpy/grid/_regular_grid.py
CHANGED
@@ -46,7 +46,8 @@ class RegularGrid(grr_g.Grid):
|
|
46
46
|
find_properties = True,
|
47
47
|
title = None,
|
48
48
|
originator = None,
|
49
|
-
extra_metadata = {}
|
49
|
+
extra_metadata = {},
|
50
|
+
load_inactive = True):
|
50
51
|
"""Creates a regular grid object based on dxyz, or derived from a Mesh object.
|
51
52
|
|
52
53
|
arguments:
|
@@ -82,6 +83,8 @@ class RegularGrid(grr_g.Grid):
|
|
82
83
|
ignored if loading from xml
|
83
84
|
extra_metadata (dict, optional): dictionary of extra metadata items to add to the grid;
|
84
85
|
ignored if loading from xml
|
86
|
+
load_inactive (bool, default True): if True and uuid is provided, the inactive attribubte is
|
87
|
+
populated if a property of kind 'active' is found for the grid
|
85
88
|
|
86
89
|
returns:
|
87
90
|
a newly created RegularGrid object with inheritance from the Grid class
|
@@ -184,7 +187,8 @@ class RegularGrid(grr_g.Grid):
|
|
184
187
|
geometry_required = False,
|
185
188
|
title = title,
|
186
189
|
originator = originator,
|
187
|
-
extra_metadata = extra_metadata
|
190
|
+
extra_metadata = extra_metadata,
|
191
|
+
load_inactive = load_inactive)
|
188
192
|
|
189
193
|
self.geometry_defined_for_all_cells_cached = True
|
190
194
|
self.geometry_defined_for_all_pillars_cached = True
|
resqpy/grid_surface/__init__.py
CHANGED
@@ -1,33 +1,19 @@
|
|
1
1
|
"""Classes for RESQML objects related to surfaces."""
|
2
2
|
|
3
3
|
__all__ = [
|
4
|
-
"GridSkin",
|
5
|
-
"
|
6
|
-
"
|
7
|
-
"
|
8
|
-
"generate_untorn_surface_for_x_section",
|
9
|
-
"point_is_within_cell",
|
10
|
-
"create_column_face_mesh_and_surface",
|
11
|
-
"find_intersections_of_trajectory_with_surface",
|
12
|
-
"find_intersections_of_trajectory_with_layer_interface",
|
13
|
-
"find_first_intersection_of_trajectory_with_surface",
|
4
|
+
"GridSkin", "generate_untorn_surface_for_layer_interface", "generate_torn_surface_for_layer_interface",
|
5
|
+
"generate_torn_surface_for_x_section", "generate_untorn_surface_for_x_section", "point_is_within_cell",
|
6
|
+
"create_column_face_mesh_and_surface", "find_intersections_of_trajectory_with_surface",
|
7
|
+
"find_intersections_of_trajectory_with_layer_interface", "find_first_intersection_of_trajectory_with_surface",
|
14
8
|
"find_first_intersection_of_trajectory_with_layer_interface",
|
15
9
|
"find_first_intersection_of_trajectory_with_cell_surface",
|
16
|
-
"find_intersection_of_trajectory_interval_with_column_face",
|
17
|
-
"
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"
|
21
|
-
"
|
22
|
-
"
|
23
|
-
"find_faces_to_represent_surface",
|
24
|
-
"bisector_from_faces",
|
25
|
-
"column_bisector_from_faces",
|
26
|
-
"shadow_from_faces",
|
27
|
-
"get_boundary",
|
28
|
-
"_where_true",
|
29
|
-
"_first_true",
|
30
|
-
"intersect_numba",
|
10
|
+
"find_intersection_of_trajectory_interval_with_column_face", "trajectory_grid_overlap",
|
11
|
+
"populate_blocked_well_from_trajectory", "generate_surface_for_blocked_well_cells",
|
12
|
+
"find_faces_to_represent_surface_staffa", "find_faces_to_represent_surface_regular",
|
13
|
+
"find_faces_to_represent_surface_regular_optimised", "find_faces_to_represent_surface_regular_dense_optimised",
|
14
|
+
"find_faces_to_represent_surface", "bisector_from_faces", "bisector_from_face_indices",
|
15
|
+
"packed_bisector_from_face_indices", "column_bisector_from_faces", "shadow_from_faces", "get_boundary",
|
16
|
+
"get_boundary_dict", "_where_true", "_first_true", "intersect_numba", "get_box"
|
31
17
|
]
|
32
18
|
|
33
19
|
from ._grid_skin import GridSkin
|
@@ -52,19 +38,12 @@ from ._blocked_well_populate import (
|
|
52
38
|
populate_blocked_well_from_trajectory,
|
53
39
|
generate_surface_for_blocked_well_cells,
|
54
40
|
)
|
55
|
-
from ._find_faces import (
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
column_bisector_from_faces,
|
62
|
-
shadow_from_faces,
|
63
|
-
get_boundary,
|
64
|
-
_where_true,
|
65
|
-
_first_true,
|
66
|
-
intersect_numba,
|
67
|
-
)
|
41
|
+
from ._find_faces import (find_faces_to_represent_surface_staffa, find_faces_to_represent_surface_regular,
|
42
|
+
find_faces_to_represent_surface_regular_optimised,
|
43
|
+
find_faces_to_represent_surface_regular_dense_optimised, find_faces_to_represent_surface,
|
44
|
+
bisector_from_faces, bisector_from_face_indices, packed_bisector_from_face_indices,
|
45
|
+
column_bisector_from_faces, shadow_from_faces, get_boundary, get_boundary_dict, _where_true,
|
46
|
+
_first_true, intersect_numba, get_box)
|
68
47
|
|
69
48
|
# Set "module" attribute of all public objects to this path.
|
70
49
|
for _name in __all__:
|
@@ -118,7 +118,7 @@ def populate_blocked_well_from_trajectory(blocked_well,
|
|
118
118
|
if xyz is None:
|
119
119
|
log.error('failed to lazily find intersection of trajectory with top surface of grid')
|
120
120
|
return None
|
121
|
-
cell_kji0 = np.array((0, col_ji0[0], col_ji0[1]), dtype =
|
121
|
+
cell_kji0 = np.array((0, col_ji0[0], col_ji0[1]), dtype = np.int32)
|
122
122
|
axis = 0
|
123
123
|
polarity = 0
|
124
124
|
|
@@ -133,7 +133,7 @@ def populate_blocked_well_from_trajectory(blocked_well,
|
|
133
133
|
else:
|
134
134
|
log.debug(f"skin intersection x,y,z: {xyz}; knot: {entry_knot}; cell kji0: {cell_kji0}; face: "
|
135
135
|
f"{'KJI'[axis]}{'-+'[polarity]}")
|
136
|
-
cell_kji0 = np.array(cell_kji0, dtype =
|
136
|
+
cell_kji0 = np.array(cell_kji0, dtype = np.int32)
|
137
137
|
|
138
138
|
previous_kji0 = cell_kji0.copy()
|
139
139
|
previous_kji0[axis] += polarity * 2 - 1 # note: previous may legitimately be 'beyond' edge of grid
|
@@ -244,9 +244,9 @@ def populate_blocked_well_from_trajectory(blocked_well,
|
|
244
244
|
|
245
245
|
blocked_well.node_mds = np.array(node_mds_list, dtype = float)
|
246
246
|
blocked_well.node_count = node_count
|
247
|
-
blocked_well.grid_indices = np.array(grid_indices_list, dtype =
|
248
|
-
blocked_well.cell_indices = np.array(cell_indices_list, dtype =
|
249
|
-
blocked_well.face_pair_indices = np.array(face_pairs_list, dtype =
|
247
|
+
blocked_well.grid_indices = np.array(grid_indices_list, dtype = np.int32)
|
248
|
+
blocked_well.cell_indices = np.array(cell_indices_list, dtype = np.int64)
|
249
|
+
blocked_well.face_pair_indices = np.array(face_pairs_list, dtype = np.int8)
|
250
250
|
blocked_well.cell_count = cell_count
|
251
251
|
blocked_well.grid_list = [grid]
|
252
252
|
|