Skip to content

Commit ab95a9c

Browse files
committed
[ENH] Integrate DUAL_CONTOURING_VERTEX_OVERLAP config flag and refactor vertex generation functions
1 parent 0501f5b commit ab95a9c

File tree

4 files changed

+12
-21
lines changed

4 files changed

+12
-21
lines changed

gempy_engine/API/dual_contouring/multi_scalar_dual_contouring.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
import numpy as np
55

66
from gempy_engine.modules.dual_contouring._dual_contouring import compute_dual_contouring
7+
8+
from ...modules.dual_contouring._dual_contouring_v2 import compute_dual_contouring_v2
79
from ._experimental_water_tight_DC_1 import _experimental_water_tight
810
from ._mask_buffer import MaskBuffer
911
from ..interp_single.interp_features import interpolate_all_fields_no_octree
12+
from ...config import DUAL_CONTOURING_VERTEX_OVERLAP
1013
from ...core.backend_tensor import BackendTensor
1114
from ...core.data import InterpolationOptions
1215
from ...core.data.dual_contouring_data import DualContouringData
@@ -134,18 +137,15 @@ def dual_contouring_multi_scalar(
134137
dc_data_per_surface_all.append(dc_data_per_surface)
135138
left_right_per_mesh.append(all_left_right_codes[0][dc_data_per_surface.valid_voxels])
136139

137-
from gempy_engine.modules.dual_contouring._dual_contouring_v2 import compute_dual_contouring_v2
138140
all_meshes = compute_dual_contouring_v2(
139141
dc_data_list=dc_data_per_surface_all,
140142
)
141143
# endregion
142-
if (options.debug or len(all_left_right_codes) > 1) and True:
144+
if (len(all_left_right_codes) > 1) and DUAL_CONTOURING_VERTEX_OVERLAP:
143145
apply_faults_vertex_overlap(all_meshes, data_descriptor.stack_structure, left_right_per_mesh)
144146

145147
return all_meshes
146148

147-
# ... existing code ...
148-
149149

150150
def _compute_meshes_legacy(all_left_right_codes: list[Any], all_mask_arrays: np.ndarray,
151151
all_meshes: list[DualContouringMesh], all_stack_intersection: list[Any],

gempy_engine/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class AvailableBackends(Flag):
3232
LINE_PROFILER_ENABLED = os.getenv('LINE_PROFILER_ENABLED', 'False') == 'True'
3333
SET_RAW_ARRAYS_IN_SOLUTION = os.getenv('SET_RAW_ARRAYS_IN_SOLUTION', 'True') == 'True'
3434
NOT_MAKE_INPUT_DEEP_COPY = os.getenv('NOT_MAKE_INPUT_DEEP_COPY', 'False') == 'True'
35+
DUAL_CONTOURING_VERTEX_OVERLAP = os.getenv('NOT_MAKE_INPUT_DEEP_COPY', 'False') == 'True'
3536

3637
is_numpy_installed = find_spec("numpy") is not None
3738
is_tensorflow_installed = find_spec("tensorflow") is not None

gempy_engine/modules/dual_contouring/_dual_contouring_v2.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22
from typing import List
33

4-
from ._gen_vertices import _generate_vertices
4+
from ._gen_vertices import generate_dual_contouring_vertices
55
from ._parallel_triangulation import _should_use_parallel_processing, _init_worker
66
from ._sequential_triangulation import _compute_triangulation
77
from ... import optional_dependencies
@@ -130,8 +130,7 @@ def _process_surface_batch_v2(surface_indices, dc_data_dicts, left_right_codes):
130130

131131
return results
132132
def _process_one_surface(dc_data: DualContouringData, left_right_codes) -> DualContouringMesh:
133-
vertices = _generate_vertices(dc_data, False, None)
134-
133+
vertices = generate_dual_contouring_vertices(dc_data, slice_surface=None, debug=False)
135134
# * Average gradient for the edges
136135
valid_edges = dc_data.valid_edges
137136
edges_normals = BackendTensor.t.zeros((valid_edges.shape[0], 12, 3), dtype=BackendTensor.dtype_obj)

gempy_engine/modules/dual_contouring/_gen_vertices.py

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def _compute_vertices(dc_data_per_stack: DualContouringData,
1414
valid_edges_per_surface) -> tuple[DualContouringData, Any]:
1515
"""Compute vertices for a specific surface."""
1616
valid_edges: np.ndarray = valid_edges_per_surface[surface_i]
17-
17+
1818
slice_object = _surface_slicer(surface_i, valid_edges_per_surface)
1919

2020
dc_data_per_surface = DualContouringData(
@@ -27,19 +27,10 @@ def _compute_vertices(dc_data_per_stack: DualContouringData,
2727
tree_depth=dc_data_per_stack.tree_depth
2828
)
2929

30-
vertices_numpy = _generate_vertices(dc_data_per_surface, debug, slice_object)
30+
vertices_numpy = generate_dual_contouring_vertices(dc_data_per_surface, slice_object, debug)
3131
return dc_data_per_surface, vertices_numpy
3232

3333

34-
def _generate_vertices(dc_data_per_surface: DualContouringData, debug: bool, slice_object: slice) -> Any:
35-
vertices: np.ndarray = generate_dual_contouring_vertices(
36-
dc_data_per_stack=dc_data_per_surface,
37-
slice_surface=slice_object,
38-
debug=debug
39-
)
40-
return vertices
41-
42-
4334
def generate_dual_contouring_vertices(dc_data_per_stack: DualContouringData, slice_surface: Optional[slice] = None, debug: bool = False):
4435
# @off
4536
n_edges = dc_data_per_stack.n_valid_edges
@@ -48,10 +39,10 @@ def generate_dual_contouring_vertices(dc_data_per_stack: DualContouringData, sli
4839
if slice_surface is not None:
4940
xyz_on_edge = dc_data_per_stack.xyz_on_edge[slice_surface]
5041
gradients = dc_data_per_stack.gradients[slice_surface]
51-
else:
42+
else:
5243
xyz_on_edge = dc_data_per_stack.xyz_on_edge
53-
gradients = dc_data_per_stack.gradients
54-
# @on
44+
gradients = dc_data_per_stack.gradients
45+
# @on
5546

5647
# * Coordinates for all posible edges (12) and 3 dummy edges_normals in the center
5748
edges_xyz = BackendTensor.tfnp.zeros((n_edges, 15, 3), dtype=BackendTensor.dtype_obj)

0 commit comments

Comments
 (0)