Skip to content

Commit

Permalink
fix: unit tests for intrusions
Browse files Browse the repository at this point in the history
  • Loading branch information
Fer071989 committed Mar 9, 2022
1 parent 26ca7b3 commit 85b9b4b
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ def add_faults_anisotropies(self, fault_list=None):
"""
if fault_list == None:
self.anisotropies_fault_list = None
self.anisotropies_fault_list = []
else:
self.anisotropies_fault_list = fault_list
faults_parameters = {}
Expand Down
156 changes: 82 additions & 74 deletions tests/unit_tests/modelling/test_intrusions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,107 +2,115 @@

# Loop library
from LoopStructural import GeologicalModel
from LoopStructural.modelling.intrusions import IntrusionNetwork
from LoopStructural.modelling.intrusions import IntrusionFrameBuilder
from LoopStructural.modelling.intrusions import IntrusionBuilder
from LoopStructural.modelling.intrusions import IntrusionBody
from LoopStructural.modelling.intrusions import IntrusionFeature
from LoopStructural.modelling.features import StructuralFrame
from LoopStructural.modelling.intrusions import rectangle_function, parallelepiped_function

from LoopStructural.datasets import load_tabular_intrusion
data, boundary_points = load_tabular_intrusion()

def test_intrusion_network():
def test_intrusion_freame_builder():
model = GeologicalModel(boundary_points[0, :], boundary_points[1, :])
model.data = data
model.nsteps = [10,10,10]

intrusion_data = data[data['feature_name'] == 'tabular_intrusion']
frame_data = model.data[model.data["feature_name"] == 'tabular_intrusion_frame'].copy()

conformable_feature = model.create_and_add_foliation('stratigraphy')

INet = IntrusionNetwork(feature_data=intrusion_data,
intrusion_network_contact='roof',
intrusion_network_type='shortest path',
model=model,
)
delta_c = 2
INet.set_data()
INet.set_contact_anisotropies([conformable_feature])
INet.set_sequence_of_exploited_anisotropies([conformable_feature])
INet.set_velocity_parameters()
INet.set_sections_axis('X')
intrusion_network_points = INet.build(delta_c=[delta_c])[:,:3]

#test if points lie in the contact of interest

mean = INet.anisotropies_series_parameters['stratigraphy_0'][1]
# mean = -10
stdv = INet.anisotropies_series_parameters['stratigraphy_0'][2]
evaluated_inet_points = conformable_feature['feature'].evaluate_value(model.scale(intrusion_network_points))
intrusion_network_parameters = {'type': 'shortest path',
'contact' :'roof',
'delta_c':[2],
'contact_anisotropies' : [conformable_feature],
'shortest_path_sequence':[conformable_feature],
'shortest_path_axis':'X'}
delta_c = intrusion_network_parameters.get('delta_c')[0]
# -- get variables for intrusion frame interpolation
interpolatortype = "FDI"
nelements = 1e2
weights = [0,0,0]
interpolator = model.get_interpolator(interpolatortype=interpolatortype)

intrusion_frame_builder = IntrusionFrameBuilder(
interpolator, name='tabular_intrusion_frame', model=model)

# -- create intrusion network

intrusion_frame_builder.set_intrusion_network_parameters(intrusion_data, intrusion_network_parameters)
intrusion_network_geometry = intrusion_frame_builder.create_intrusion_network()

keys = list(intrusion_frame_builder.anisotropies_series_parameters.keys())
# #test if points lie in the contact of interest
mean = intrusion_frame_builder.anisotropies_series_parameters[keys[0]][1]
# mean = -10
stdv = intrusion_frame_builder.anisotropies_series_parameters[keys[0]][2]
evaluated_inet_points = conformable_feature['feature'].evaluate_value(model.scale(intrusion_network_geometry[:,:3]))

assert np.all(np.logical_and((mean - stdv*delta_c)<= evaluated_inet_points,(mean + stdv*delta_c)>= evaluated_inet_points))

# -- create intrusion frame using intrusion network points and flow/inflation measurements
intrusion_frame_builder.set_intrusion_frame_data(frame_data, intrusion_network_geometry)

## -- create intrusion frame
intrusion_frame_builder.setup(
nelements=nelements,
w2=weights[0],
w1=weights[1],
gxygz=weights[2],
)

intrusion_frame = intrusion_frame_builder.frame

assert isinstance(intrusion_frame, StructuralFrame)


def test_intrusion_builder():

def test_intrusion_body(lateral_conceptual_model, vertical_conceptual_model):
model = GeologicalModel(boundary_points[0, :], boundary_points[1, :])
model.data = data
model.nsteps = [10,10,10]

intrusion_data = data[data['feature_name'] == 'tabular_intrusion']
frame_data = model.data[model.data["feature_name"] == 'tabular_intrusion_frame'].copy()

conformable_feature = model.create_and_add_foliation('stratigraphy')

# create intrusion network
INet = IntrusionNetwork(feature_data=intrusion_data,
intrusion_network_contact='roof',
intrusion_network_type='interpolated',
model=model,
)

INet.set_data()
intrusion_network_points = INet.build(delta_c=[1e15])[:,:3]
intrusion_network_parameters = {'type': 'interpolated',
'contact' :'roof'}

weights = [0,0,0]
frame_data = model.data[model.data["feature_name"] == 'tabular_intrusion_frame'].copy()
interpolator = model.get_interpolator(interpolatortype='FDI')
IFrame_builder = IntrusionBuilder(interpolator,
model=model,
feature_name='tabular_intrusion_frame')

IFrame_builder.set_data(frame_data, INet.intrusion_network_outcome)
IFrame_builder.setup(
nelements = 1e2,
w2=weights[0],
w1=weights[1],
w3=weights[2],
)
intrusion_frame_builder = IntrusionFrameBuilder(
interpolator, name='tabular_intrusion_frame', model=model)

# -- create intrusion network

intrusion_frame_builder.set_intrusion_network_parameters(intrusion_data, intrusion_network_parameters)
intrusion_network_geometry = intrusion_frame_builder.create_intrusion_network()

IFrame = IFrame_builder.frame

assert isinstance(IFrame, StructuralFrame)

IBody = IntrusionBody(
intrusion_data,
name='tabular_intrusion',
intrusion_network=INet,
intrusion_frame=IFrame,
model=model,
# -- create intrusion frame using intrusion network points and flow/inflation measurements
intrusion_frame_builder.set_intrusion_frame_data(frame_data, intrusion_network_geometry)

## -- create intrusion frame
intrusion_frame_builder.setup()
intrusion_frame = intrusion_frame_builder.frame

# -- create intrusion builder to simulate distance thresholds along frame coordinates
intrusion_builder = IntrusionBuilder(
intrusion_frame, model=model, name="tabular intrusion"
)
intrusion_builder.lateral_extent_model = rectangle_function #intrusion_lateral_extent_model
intrusion_builder.vertical_extent_model = parallelepiped_function #intrusion_vertical_extent_model

intrusion_builder.set_data_for_extent_simulation(intrusion_data)
intrusion_builder.build_arguments = {
"lateral_extent_sgs_parameters": {},
"vertical_extent_sgs_parameters": {}}

intrusion_feature = intrusion_builder.feature
intrusion_builder.update()

IBody.set_data_for_s_simulation()
IBody.set_lateral_extent_conceptual_model(lateral_conceptual_model)
IBody.set_s_simulation_GSLIBparameters({})
IBody.make_s_simulation_variogram({})
IBody.create_grid_for_simulation()
IBody.simulate_s_thresholds()

assert len(IBody.simulated_s_thresholds) > 0

IBody.set_data_for_g_simulation()
IBody.set_vertical_extent_conceptual_model(vertical_conceptual_model)
IBody.set_g_simulation_GSLIBparameters({})
IBody.make_g_simulation_variogram({})
IBody.simulate_g_thresholds()

assert len(IBody.simulated_g_thresholds) > 0
assert len(intrusion_feature._lateral_simulated_thresholds) > 0
assert len(intrusion_feature._growth_simulated_thresholds) > 0

0 comments on commit 85b9b4b

Please sign in to comment.