Skip to content

Commit 5c47ef6

Browse files
author
Lachlan Grose
committed
fix: basal unconformities cropping lowest surface
1 parent 6ebdf84 commit 5c47ef6

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

LoopStructural/modelling/core/geological_model.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ def __init__(
115115
reuse_supports=False,
116116
logfile=None,
117117
loglevel="info",
118+
epsilon=0.04,
118119
):
119120
"""
120121
Parameters
@@ -125,7 +126,8 @@ def __init__(
125126
specifying the maximum extent of the model
126127
rescale : bool
127128
whether to rescale the model to between 0/1
128-
129+
epsion : float
130+
a fudge factor for isosurfacing, used to make sure surfaces appear
129131
Examples
130132
--------
131133
Demo data
@@ -184,6 +186,7 @@ def __init__(
184186
)
185187

186188
self.bounding_box /= self.scale_factor
189+
self.epsilon = epsilon * float(np.max(lengths)) / self.scale_factor
187190
self.support = {}
188191
self.reuse_supports = reuse_supports
189192
if self.reuse_supports:
@@ -1252,7 +1255,7 @@ def _add_unconformity_above(self, feature):
12521255

12531256
for f in reversed(self.features):
12541257
if f.type == FeatureType.UNCONFORMITY and f.name != feature.name:
1255-
feature.add_region(lambda pos: f.evaluate(pos))
1258+
feature.add_region(f)
12561259
break
12571260

12581261
def create_and_add_unconformity(self, unconformity_surface_data, **kwargs):
@@ -1327,7 +1330,7 @@ def add_unconformity(
13271330
logger.debug(f"Adding {uc_feature.name} as unconformity to {f.name}")
13281331
if f.type == FeatureType.FAULT:
13291332
continue
1330-
f.add_region(lambda pos: ~uc_feature.evaluate(pos))
1333+
f.add_region(uc_feature.inverse())
13311334
# now add the unconformity to the feature list
13321335
self._add_feature(uc_feature)
13331336
return uc_feature
@@ -1353,12 +1356,12 @@ def add_onlap_unconformity(
13531356
"""
13541357

13551358
uc_feature = UnconformityFeature(feature, value, True)
1356-
feature.add_region(lambda pos: ~uc_feature.evaluate(pos))
1359+
feature.add_region(uc_feature.inverse())
13571360
for f in reversed(self.features):
13581361
if f.type == FeatureType.UNCONFORMITY:
13591362
break
13601363
if f != feature:
1361-
f.add_region(lambda pos: uc_feature.evaluate(pos))
1364+
f.add_region(uc_feature)
13621365
self._add_feature(uc_feature)
13631366

13641367
return uc_feature
@@ -1593,7 +1596,7 @@ def create_and_add_fault(
15931596

15941597
for f in reversed(self.features):
15951598
if f.type == FeatureType.UNCONFORMITY:
1596-
fault.add_region(lambda pos: f.evaluate_value(pos) <= 0)
1599+
fault.add_region(f)
15971600
break
15981601
if displacement == 0:
15991602
fault.type = "fault_inactive"

LoopStructural/modelling/features/_unconformity_feature.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from LoopStructural.modelling.features import GeologicalFeature
22
from LoopStructural.modelling.features import FeatureType
33

4+
import numpy as np
5+
46

57
class UnconformityFeature(GeologicalFeature):
68
""" """
@@ -28,7 +30,12 @@ def __init__(self, feature: GeologicalFeature, value: float, sign=True):
2830
self.type = FeatureType.UNCONFORMITY
2931
self.sign = sign
3032

31-
def evaluate(self, pos):
33+
def inverse(self):
34+
uc = UnconformityFeature(self, self.value, sign=not self.sign)
35+
uc.name = self.name + "_inverse"
36+
return uc
37+
38+
def evaluate(self, pos: np.ndarray) -> np.ndarray:
3239
"""
3340
3441
Parameters
@@ -38,10 +45,13 @@ def evaluate(self, pos):
3845
3946
Returns
4047
-------
41-
boolean
48+
np.ndarray.dtype(bool)
4249
true if above the unconformity, false if below
4350
"""
4451
if self.sign:
45-
return self.evaluate_value(pos) < self.value
52+
return self.evaluate_value(pos) < self.value + self.model.epsilon
4653
if not self.sign:
47-
return self.evaluate_value(pos) > self.value
54+
return self.evaluate_value(pos) > self.value - self.model.epsilon
55+
56+
def __call__(self, pos) -> np.ndarray:
57+
return self.evaluate(pos)

0 commit comments

Comments
 (0)