Skip to content

Commit

Permalink
fix: 🐛 small fixes for making sure model update is called when params…
Browse files Browse the repository at this point in the history
… are changed
  • Loading branch information
lachlangrose committed Mar 7, 2022
1 parent 6c7eeeb commit a22ed61
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 21 deletions.
1 change: 0 additions & 1 deletion LoopStructural/interpolators/_discrete_interpolator.py
Original file line number Diff line number Diff line change
Expand Up @@ -705,7 +705,6 @@ def _solve(self, solver="cg", **kwargs):
self.c[self.region] = self._solve_chol(A, B)
if solver == "lu":
logger.info("Solving using scipy LU")
print(self.region)
self.c[self.region] = self._solve_lu(A, B)
if solver == "pyamg":
try:
Expand Down
10 changes: 6 additions & 4 deletions LoopStructural/modelling/core/geological_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -1202,10 +1202,12 @@ def create_and_add_intrusion(

# logger.info("setting data for thresholds simulation")
intrusion_builder.set_data_for_extent_simulation(intrusion_data)
intrusion_builder.vertical_extent_sgs_parameters = vertical_extent_sgs_parameters
intrusion_builder.lateral_extent_sgs_parameters = lateral_extent_sgs_parameters
intrusion_builder.set_l_sgs_GSLIBparameters(lateral_extent_sgs_parameters)
intrusion_builder.set_g_sgs_GSLIBparameters(vertical_extent_sgs_parameters)
intrusion_builder.build_arguments = {'lateral_extent_sgs_parameters':lateral_extent_sgs_parameters,
'vertical_extent_sgs_parameters':vertical_extent_sgs_parameters}
# intrusion_builder.vertical_extent_sgs_parameters = vertical_extent_sgs_parameters
# intrusion_builder.lateral_extent_sgs_parameters = lateral_extent_sgs_parameters
# intrusion_builder.set_l_sgs_GSLIBparameters(lateral_extent_sgs_parameters)
# intrusion_builder.set_g_sgs_GSLIBparameters(vertical_extent_sgs_parameters)
intrusion_feature = intrusion_builder.feature
self._add_feature(intrusion_feature)

Expand Down
62 changes: 46 additions & 16 deletions LoopStructural/modelling/intrusions/intrusion_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,31 @@ def __init__(self, frame, model = None, name='intrusion'):
self.data = None
self.data_prepared = False
self.model = model
self._build_arguments = {}

@property
def feature(self):
return self._feature

@property
def build_arguments(self):
return self._build_arguments

@build_arguments.setter
def build_arguments(self, arguments):
"""Set the build arguments and flag that
up to date is False
Parameters
----------
arguments : dictionary
dictionary containing keys for variogram arguments
"""
if type(arguments) == dict:
self._up_to_date = False
self._build_arguments = arguments
else:
logger.error(f"Cannot update build arguments with {type(arguments)}, must be a dictionary")

def create_grid_for_simulation(self, spacing=None):
"""
Expand Down Expand Up @@ -162,7 +187,7 @@ def set_l_sgs_GSLIBparameters(self, lateral_simulation_parameters):
Returns
------------
"""

self._up_to_date = False
tmin = lateral_simulation_parameters.get("tmin", -9999)
tmax = lateral_simulation_parameters.get("tmax", 9999)
itrans = lateral_simulation_parameters.get("itrans", 1)
Expand Down Expand Up @@ -232,7 +257,7 @@ def set_g_sgs_GSLIBparameters(self, vertical_simulation_parameters):
Returns
----
"""

self._up_to_date = False
tmin = vertical_simulation_parameters.get("tmin", -9999)
tmax = vertical_simulation_parameters.get("tmax", 9999)
itrans = vertical_simulation_parameters.get("itrans", 1)
Expand Down Expand Up @@ -295,16 +320,15 @@ def make_l_sgs_variogram(self, lateral_simulation_parameters):
Returns
----
"""

nugget = lateral_simulation_parameters.get("nugget", 0)
nst = lateral_simulation_parameters.get("nst", 1)
it1 = lateral_simulation_parameters.get("it1", 1)
cc1 = lateral_simulation_parameters.get("cc1", 1)
azi1 = lateral_simulation_parameters.get("azi1", 90)
hmaj1 = lateral_simulation_parameters.get("hmaj1", 999999)
hmin1 = lateral_simulation_parameters.get("hmin1", 999999)

variogram = GSLIB.make_variogram(nugget, nst, it1, cc1, azi1, hmaj1, hmin1)
self.lateral_sgs_variogram = variogram
self.lateral_sgs_variogram = GSLIB.make_variogram(nugget, nst, it1, cc1, azi1, hmaj1, hmin1)

def make_g_sgs_variogram(self, vertical_simulation_parameters):
"""
Expand All @@ -331,8 +355,7 @@ def make_g_sgs_variogram(self, vertical_simulation_parameters):
hmaj1 = vertical_simulation_parameters.get("hmaj1", 999999)
hmin1 = vertical_simulation_parameters.get("hmin1", 999999)

variogram = GSLIB.make_variogram(nugget, nst, it1, cc1, azi1, hmaj1, hmin1)
self.vertical_sgs_variogram = variogram
self.vertical_sgs_variogram = GSLIB.make_variogram(nugget, nst, it1, cc1, azi1, hmaj1, hmin1)

def simulate_lateral_thresholds(self):
"""
Expand Down Expand Up @@ -824,24 +847,31 @@ def simulate_growth_thresholds(self):
simulation_g_threshold.loc[:, "g_maximum"] = g_maximum

self.growth_simulated_thresholds = simulation_g_threshold
@property
def feature(self):
return self._feature

def build(self):
def build(self,vertical_extent_sgs_parameters={},lateral_extent_sgs_parameters={},**kwargs ):
"""Main building function for intrusion. Calculates variogram and thresholds
Parameters
----------
vertical_extent_sgs_parameters : dict, optional
parameters for the vertical sequential gaussian simulation, by default {}
lateral_extent_sgs_parameters : dict, optional
parameters for the vertical sequential gaussian simulation, by default {}
"""
self.prepare_data()
# self.set_data_for_extent_simulation(intrusion_data)
self.create_grid_for_simulation()
# self.set_l_sgs_GSLIBparameters(self.lateral_extent_sgs_parameters)
# self.set_g_sgs_GSLIBparameters(self.vertical_extent_sgs_parameters)
self.make_l_sgs_variogram(self.lateral_extent_sgs_parameters)
self.make_g_sgs_variogram(self.vertical_extent_sgs_parameters)
self.set_l_sgs_GSLIBparameters(lateral_extent_sgs_parameters)
self.set_g_sgs_GSLIBparameters(vertical_extent_sgs_parameters)
self.make_l_sgs_variogram(lateral_extent_sgs_parameters)
self.make_g_sgs_variogram(vertical_extent_sgs_parameters)
self.simulate_lateral_thresholds()
self.simulate_growth_thresholds()
self.feature.growth_simulated_threshold = self.growth_simulated_thresholds
self.feature.lateral_simulated_thresholds = self.lateral_simulated_thresholds

def update(self):
self.build()
self.build(**self.build_arguments)
self._up_to_date = True

def up_to_date(self, callback=None):
Expand Down
6 changes: 6 additions & 0 deletions LoopStructural/modelling/intrusions/intrusion_feature.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ def __init__(self, frame, builder, name = 'UnnamedIntrusion',model=None):

@property
def lateral_simulated_thresholds(self):
self.builder.up_to_date()

return self._lateral_simulated_thresholds

@lateral_simulated_thresholds.setter
Expand All @@ -52,6 +54,7 @@ def lateral_simulated_thresholds(self, lateral_simulated_thresholds):

@property
def growth_simulated_threshold(self):
self.builder.up_to_date()
return self._growth_simulated_thresholds

@growth_simulated_threshold.setter
Expand All @@ -61,12 +64,15 @@ def growth_simulated_threshold(self, growth_simulated_threshold):

@property
def lateral_sgs_input_data(self):
self.builder.up_to_date()
return self.builder.lateral_sgs_input_data
@property
def growth_simulated_thresholds(self):
self.builder.up_to_date()
return self.builder.growth_simulated_thresholds
@property
def vertical_sgs_input_data(self):
self.builder.up_to_date()
return self.builder.vertical_sgs_input_data


Expand Down

0 comments on commit a22ed61

Please sign in to comment.