Skip to content

Commit 3de9bd1

Browse files
committed
(BUGFIX) supports for discrete interpolation
were being reused, which may have caused unexpected behavior...
1 parent 91d0db0 commit 3de9bd1

File tree

2 files changed

+31
-10
lines changed

2 files changed

+31
-10
lines changed

LoopStructural/modelling/core/geological_model.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ def __init__(self, origin, maximum, rescale=True, nsteps=(40, 40, 40),
158158
self.bounding_box /= self.scale_factor
159159
self.support = {}
160160
self.reuse_supports = reuse_supports
161+
if reuse_supports:
162+
logger.warning("Supports are shared between geological features \n"
163+
"this may cause unexpected behaviour and should only\n"
164+
"be use by advanced users")
161165
logger.info('Reusing interpolation supports: {}'.format(self.reuse_supports))
162166
self.stratigraphic_column = None
163167
self.parameters = {'features': [], 'model': {'bounding_box': self.origin.tolist() + self.maximum.tolist(),
@@ -480,18 +484,22 @@ def get_interpolator(self, interpolatortype='PLI', nelements=1e5,
480484
# number of steps is the length of the box / step vector
481485
nsteps = np.ceil((bb[1, :] - bb[0, :]) / step_vector).astype(int)
482486
# create a structured grid using the origin and number of steps
483-
mesh_id = 'mesh_{}'.format(nelements)
484-
mesh = self.support.get(mesh_id,
485-
TetMesh(origin=bb[0, :], nsteps=nsteps,
486-
step_vector=step_vector))
487-
if mesh_id not in self.support:
488-
self.support[mesh_id] = mesh
487+
if reuse_supports:
488+
mesh_id = 'mesh_{}'.format(nelements)
489+
mesh = self.support.get(mesh_id,
490+
TetMesh(origin=bb[0, :], nsteps=nsteps,
491+
step_vector=step_vector))
492+
if mesh_id not in self.support:
493+
self.support[mesh_id] = mesh
494+
else:
495+
mesh = TetMesh(origin=bb[0, :], nsteps=nsteps, step_vector=step_vector)
489496
logger.info("Creating regular tetrahedron mesh with %i elements \n"
490497
"for modelling using PLI" % (mesh.ntetra))
491498

492499
return PLI(mesh)
493500

494501
if interpolatortype == 'FDI':
502+
495503
# find the volume of one element
496504
if element_volume is None:
497505
element_volume = box_vol / nelements
@@ -504,12 +512,15 @@ def get_interpolator(self, interpolatortype='PLI', nelements=1e5,
504512
logger.error("Cannot create interpolator: number of steps is too small")
505513
return None
506514
# create a structured grid using the origin and number of steps
507-
grid_id = 'grid_{}'.format(nelements)
508-
grid = self.support.get(grid_id, StructuredGrid(origin=bb[0, :],
515+
if self.reuse_supports:
516+
grid_id = 'grid_{}'.format(nelements)
517+
grid = self.support.get(grid_id, StructuredGrid(origin=bb[0, :],
509518
nsteps=nsteps,
510519
step_vector=step_vector))
511-
if grid_id not in self.support:
512-
self.support[grid_id] = grid
520+
if grid_id not in self.support:
521+
self.support[grid_id] = grid
522+
else:
523+
grid = StructuredGrid(origin=bb[0, :], nsteps=nsteps,step_vector=step_vector)
513524
logger.info("Creating regular grid with %i elements \n"
514525
"for modelling using FDI" % grid.n_elements)
515526
return FDI(grid)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# class BoundingBox:
2+
# def __init__(self,origin,maximum):
3+
# self.origin = origin
4+
# self.maximum = maximum
5+
# self.name_map = {'xmin':(0,0),'ymin':(0,1),'zmin':(0,2),'xmax':(1,0),'ymax':(1,1),'zmax':(1,2)
6+
# 'lower':(0,2),'upper':(1,2),
7+
# 'minx':(0,0),'miny':(0,1),'minz':(0,2),'maxx':(1,0),'maxy':(1,1),'maxz':(1,2)}
8+
# def get_value(self,name):
9+
# ix,iy = self.name_map.get(name,(-1,-1))
10+

0 commit comments

Comments
 (0)