Skip to content

Commit 84b77d7

Browse files
committed
[WIP/ENH] Dealing with the RegularGrid transform during interpolation and output
1 parent 6949ded commit 84b77d7

File tree

5 files changed

+59
-39
lines changed

5 files changed

+59
-39
lines changed
File renamed without changes.

gempy/core/data/geo_model.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,16 @@ def solutions(self, value):
148148

149149
# * Set solutions per element
150150
for e, element in enumerate(self.structural_frame.structural_elements[:-1]): # * Ignore basement
151-
dc_mesh = self._solutions.dc_meshes[e] if self._solutions.dc_meshes is not None else None
152-
# TODO: These meshes are in the order of the scalar field
153-
element.vertices = (self.transform.apply_inverse(dc_mesh.vertices) if dc_mesh is not None else None)
151+
if self._solutions.dc_meshes is None:
152+
continue
153+
dc_mesh = self._solutions.dc_meshes[e]
154+
if dc_mesh is None:
155+
continue
156+
157+
# TODO: These meshes are in the order of the scalar field
158+
world_coord_vertices = self.transform.apply_inverse(dc_mesh.vertices)
159+
160+
element.vertices = world_coord_vertices
154161
element.edges = (dc_mesh.edges if dc_mesh is not None else None)
155162

156163
# * Reordering the elements according to the scalar field

gempy/core/data/grid.py

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import warnings
2+
13
import dataclasses
24
import enum
35
import numpy as np
@@ -11,13 +13,13 @@
1113
@dataclasses.dataclass
1214
class Grid:
1315
class GridTypes(enum.Flag):
14-
OCTREE = 2**0
15-
DENSE = 2**1
16-
CUSTOM = 2**2
17-
TOPOGRAPHY = 2**3
18-
SECTIONS = 2**4
19-
CENTERED = 2**5
20-
NONE = 2**10
16+
OCTREE = 2 ** 0
17+
DENSE = 2 ** 1
18+
CUSTOM = 2 ** 2
19+
TOPOGRAPHY = 2 ** 3
20+
SECTIONS = 2 ** 4
21+
CENTERED = 2 ** 5
22+
NONE = 2 ** 10
2123

2224
# ? What should we do with the extent?
2325
_extent: Optional[np.ndarray] # * Model extent should be cross grid
@@ -31,11 +33,11 @@ class GridTypes(enum.Flag):
3133

3234
values: np.ndarray = np.empty((0, 3))
3335
length: np.ndarray = np.empty(0)
34-
36+
3537
_active_grids = GridTypes.NONE
36-
38+
3739
_octree_levels: int = -1
38-
40+
3941
def __init__(self, extent=None, resolution=None):
4042
self.extent = extent
4143
# Init basic grid empty
@@ -62,11 +64,11 @@ def extent(self):
6264
raise AttributeError('Extent is not defined')
6365
else:
6466
return self._extent
65-
67+
6668
@extent.setter
6769
def extent(self, value):
6870
self._extent = value
69-
71+
7072
@property
7173
def bounding_box(self):
7274
extents = self.extent
@@ -80,81 +82,87 @@ def bounding_box(self):
8082
[extents[1], extents[3], extents[4]], # max x, max y, min z
8183
[extents[1], extents[3], extents[5]]]) # max x, max y, max z
8284
return bounding_box_points
83-
84-
85+
8586
@property
8687
def active_grids(self):
8788
return self._active_grids
88-
89+
8990
@active_grids.setter
9091
def active_grids(self, value):
9192
self._active_grids = value
9293
self._update_values()
9394

9495
@property
95-
def dense_grid(self):
96+
def dense_grid(self) -> RegularGrid:
9697
return self._dense_grid
97-
98+
9899
@dense_grid.setter
99100
def dense_grid(self, value):
100101
self._dense_grid = value
101102
self.active_grids |= self.GridTypes.DENSE
102103
self._update_values()
103-
104+
104105
@property
105106
def octree_grid(self):
106107
return self._octree_grid
107-
108+
108109
@octree_grid.setter
109110
def octree_grid(self, value):
110111
self._octree_grid = value
111112
self.active_grids |= self.GridTypes.OCTREE
112113
self._update_values()
113-
114+
114115
@property
115116
def custom_grid(self):
116117
return self._custom_grid
117-
118+
118119
@custom_grid.setter
119120
def custom_grid(self, value):
120121
self._custom_grid = value
121122
self.active_grids |= self.GridTypes.CUSTOM
122123
self._update_values()
123-
124+
124125
@property
125126
def topography(self):
126127
return self._topography
127-
128+
128129
@topography.setter
129130
def topography(self, value):
130131
self._topography = value
131132
self.active_grids |= self.GridTypes.TOPOGRAPHY
132133
self._update_values()
133-
134+
134135
@property
135136
def sections(self):
136137
return self._sections
137-
138+
138139
@sections.setter
139140
def sections(self, value):
140141
self._sections = value
141142
self.active_grids |= self.GridTypes.SECTIONS
142143
self._update_values()
143-
144+
144145
@property
145146
def centered_grid(self):
146147
return self._centered_grid
147-
148+
148149
@centered_grid.setter
149150
def centered_grid(self, value):
150151
self._centered_grid = value
151152
self.active_grids |= self.GridTypes.CENTERED
152153
self._update_values()
153-
154-
154+
155155
@property
156156
def regular_grid(self):
157-
raise AttributeError('This property is deprecated. Use the dense_grid or octree_grid instead')
157+
warnings.warn('This property is deprecated. Use the dense_grid or octree_grid instead', DeprecationWarning)
158+
if self.dense_grid is not None and self.octree_grid is not None:
159+
raise AttributeError('Both dense_grid and octree_grid are active. This is not possible.')
160+
elif self.dense_grid is not None:
161+
return self.dense_grid
162+
elif self.octree_grid is not None:
163+
return self.octree_grid
164+
else:
165+
return None
158166

159167
@regular_grid.setter
160168
def regular_grid(self, value):
@@ -164,6 +172,10 @@ def regular_grid(self, value):
164172
def octree_levels(self):
165173
return self._octree_levels
166174

175+
@property
176+
def octree_levels(self):
177+
return self._octree_levels
178+
167179
@octree_levels.setter
168180
def octree_levels(self, value):
169181
self._octree_levels = value
@@ -175,7 +187,7 @@ def octree_levels(self, value):
175187

176188
def _update_values(self):
177189
values = []
178-
190+
179191
if self.GridTypes.OCTREE in self.active_grids:
180192
values.append(self.octree_grid.values)
181193
if self.GridTypes.DENSE in self.active_grids:
@@ -188,12 +200,11 @@ def _update_values(self):
188200
values.append(self.sections.values)
189201
if self.GridTypes.CENTERED in self.active_grids:
190202
values.append(self.centered_grid.values)
191-
203+
192204
self.values = np.concatenate(values)
193205

194206
return self.values
195207

196-
197208
def get_section_args(self, section_name: str):
198209
# TODO: This method should be part of the sections
199210
# assert type(section_name) is str, 'Only one section type can be retrieved'

gempy/core/data/grid_modules/grid_types.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class RegularGrid:
1717
1818
"""
1919
resolution: np.ndarray
20-
extent: np.ndarray #: this is the orthogonal extent. If the grid is rotated, the extent will be different
20+
extent: np.ndarray #: this is the ORTHOGONAL extent. If the grid is rotated, the extent will be different
2121
values: np.ndarray
2222
mask_topo: np.ndarray
2323
x: Optional[np.ndarray]

gempy/modules/data_manipulation/engine_factory.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ def interpolation_input_from_structural_frame(structural_frame: StructuralFrame,
4949
if grid.GridTypes.DENSE in grid.active_grids:
5050
regular_grid = engine_grid.RegularGrid(
5151
extent=new_extents,
52-
regular_grid_shape=grid.dense_grid.resolution
52+
regular_grid_shape=grid.dense_grid.resolution,
53+
transform=grid.dense_grid.transform
5354
)
5455

5556
if grid.GridTypes.CUSTOM in grid.active_grids and grid.custom_grid is not None:
@@ -70,7 +71,8 @@ def interpolation_input_from_structural_frame(structural_frame: StructuralFrame,
7071

7172
octree_grid = engine_grid.RegularGrid(
7273
extent=new_extents,
73-
regular_grid_shape=np.array([2, 2, 2])
74+
regular_grid_shape=np.array([2, 2, 2]),
75+
transform=grid.dense_grid.transform # ! That here we need to grab the dense grid smells
7476
)
7577

7678
grid: engine_grid.EngineGrid = engine_grid.EngineGrid( # * Here we convert the GemPy grid to the

0 commit comments

Comments
 (0)