Skip to content

Commit f55e21f

Browse files
committed
[ENH/WIP] Towards splitting regular_grid into dense and octree
1 parent e8c15f7 commit f55e21f

File tree

3 files changed

+57
-12
lines changed

3 files changed

+57
-12
lines changed

gempy/API/initialization_API.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,8 @@ def create_geomodel(
4242
"""
4343
# init resolutions well
4444
if resolution is None:
45-
grid: Grid = Grid(
46-
extent=extent,
47-
resolution=np.array([2 ** refinement] * 3),
48-
)
45+
grid: Grid = Grid(extent=extent)
46+
grid.octree_levels = refinement
4947
grid.set_inactive("regular")
5048
else:
5149
grid = Grid(

gempy/core/data/grid.py

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import dataclasses
2+
13
import enum
24
import warnings
35
from typing import Union, Optional
@@ -6,6 +8,7 @@
68

79
from gempy.core.data.grid_modules import topography, grid_types
810
from gempy.core.data.grid_modules.topography import Topography
11+
from gempy_engine.core.data.centered_grid import CenteredGrid
912

1013

1114
class GridTypes(enum.Enum):
@@ -16,7 +19,7 @@ class GridTypes(enum.Enum):
1619
CENTERED = 4
1720

1821

19-
22+
@dataclasses.dataclass
2023
class Grid(object):
2124
""" Class to generate grids.
2225
@@ -51,17 +54,27 @@ class Grid(object):
5154
gravity_grid (:class:`gempy.core.grid_modules.grid_types.Gravity`)
5255
"""
5356

57+
dense_grid: Optional[grid_types.RegularGrid]
58+
octree_grid: Optional[grid_types.RegularGrid]
59+
custom_grid: Optional[grid_types.CustomGrid]
60+
topography: Optional[Topography]
61+
sections: Optional[grid_types.Sections]
62+
centered_grid: Optional[CenteredGrid]
63+
64+
extent: Optional[np.ndarray] # * Model extent should be cross grid
65+
5466
def __init__(self, extent=None, resolution=None):
5567
self.values = np.empty((0, 3))
5668
self.values_r = np.empty((0, 3))
5769
self.length = np.empty(0)
5870
self._octree_levels = -1
59-
self.grid_types = np.array(['regular', 'custom', 'topography', 'sections', 'centered', 'octree']) # TODO: Make a enumerator!
71+
self.grid_types = np.array(['regular', 'custom', 'topography', 'sections', 'centered', 'octree']) # TODO: Make a enumerator!
6072
self.active_grids_bool = np.zeros(6, dtype=bool)
6173
# All grid types must have values
6274

6375
# Init optional grids
64-
self.regular_grid = None
76+
self.dense_grid = None
77+
self.octree_grid = None
6578
self.custom_grid = None
6679
self.custom_grid_grid_active = False
6780
self.topography: Optional[Topography] = None
@@ -70,6 +83,8 @@ def __init__(self, extent=None, resolution=None):
7083
self.centered_grid = None
7184
self.centered_grid_active = False
7285

86+
self.extent = extent
87+
7388
# Init basic grid empty
7489
if extent is not None and resolution is not None:
7590
self.regular_grid = grid_types.RegularGrid(extent, resolution)
@@ -80,6 +95,38 @@ def __init__(self, extent=None, resolution=None):
8095

8196
self.update_grid_values()
8297

98+
# ? Do we need a active_regular grid property for backwards compatibility?
99+
@property
100+
def regular_grid(self):
101+
warnings.warn('This property is deprecated. Use the dense_grid or octree_grid instead', DeprecationWarning)
102+
if self.dense_grid is not None and self.octree_grid is not None:
103+
raise AttributeError('Both dense_grid and octree_grid are active. This is not possible.')
104+
elif self.dense_grid is not None:
105+
return self.dense_grid
106+
elif self.octree_grid is not None:
107+
return self.octree_grid
108+
else:
109+
return None
110+
111+
@regular_grid.setter
112+
def regular_grid(self, value):
113+
warnings.warn('This property is deprecated. Use the dense_grid property instead', DeprecationWarning)
114+
self.dense_grid = value
115+
116+
@property
117+
def octree_levels(self):
118+
return self._octree_levels
119+
120+
@octree_levels.setter
121+
def octree_levels(self, value):
122+
self._octree_levels = value
123+
self.octree_grid = grid_types.RegularGrid(
124+
extent=self.extent,
125+
resolution=np.array([2 ** value] * 3),
126+
)
127+
self.active_grids_bool[5] = True
128+
self.update_grid_values()
129+
83130
def __str__(self):
84131
grid_summary = [f"{g_type} (active: {getattr(self, g_type + '_grid_active')}): {len(getattr(self, g_type + '_grid').values)} points"
85132
for g_type in self.grid_types]
@@ -89,7 +136,7 @@ def __str__(self):
89136
@property
90137
def active_grids(self) -> np.ndarray:
91138
return self.grid_types[self.active_grids_bool]
92-
139+
93140
def create_regular_grid(self, extent=None, resolution=None, set_active=True, *args, **kwargs):
94141
"""
95142
Set a new regular grid and activate it.
@@ -177,7 +224,7 @@ def create_section_grid(self, section_dict):
177224
# ? DEP?
178225
def create_centered_grid(self, centers, radius, resolution=None):
179226
"""Initialize gravity grid. Deactivate the rest of the grids"""
180-
self.centered_grid = grid_types.CenteredGrid(centers, radius, resolution)
227+
self.centered_grid = CenteredGrid(centers, radius, resolution)
181228
# self.active_grids = np.zeros(4, dtype=bool)
182229
self.set_active('centered')
183230

@@ -198,7 +245,7 @@ def set_active(self, grid_name: Union[str, np.ndarray]):
198245
199246
"""
200247
warnings.warn('This function is deprecated. Use gempy.set_active_grid instead', DeprecationWarning)
201-
248+
202249
where = self.grid_types == grid_name
203250
self.active_grids_bool[where] = True
204251
self.update_grid_values()
@@ -223,7 +270,7 @@ def update_grid_values(self):
223270
lengths = [0]
224271
all_grids = [self.regular_grid, self.custom_grid, self.topography, self.sections, self.centered_grid]
225272
try:
226-
for e, grid_types in enumerate( all_grids):
273+
for e, grid_types in enumerate(all_grids):
227274
if self.active_grids_bool[e]:
228275
self.values = np.vstack((self.values, grid_types.values))
229276
lengths.append(grid_types.values.shape[0])

test/test_modules/test_grids/test_grids_sections.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_section_grids():
1414
example_model=ExampleModel.ANTICLINE,
1515
compute_model=False
1616
)
17-
17+
geo_model.grid.octree_levels = 2
1818
geo_model.interpolation_options.number_octree_levels = 2
1919

2020
gp.set_section_grid(

0 commit comments

Comments
 (0)