@@ -77,10 +77,10 @@ def __init__(
7777
7878 self .marginal_faults = self ._feature .intrusion_frame .builder .marginal_faults
7979
80- if self .marginal_faults is not None :
81- for fault_i in self .marginal_faults .keys ():
82- marginal_fault = self .marginal_faults [fault_i ].get ('structure' )
83- self .intrusion_frame [2 ] = marginal_fault [0 ]
80+ # if self.marginal_faults is not None:
81+ # for fault_i in self.marginal_faults.keys():
82+ # marginal_fault = self.marginal_faults[fault_i].get('structure')
83+ # self.intrusion_frame[2] = marginal_fault[0]
8484
8585
8686 # self.growth_simulated_thresholds_grid = None
@@ -426,49 +426,35 @@ def set_data_for_lateral_thresholds(self):
426426
427427 if self .width_data [0 ] == False : # i.e., no lateral data for side L<0
428428 print (
429- "Not enought lateral data for simulation of side L<0, Using roof/floor data to condition the conceptual model "
429+ "Not enought lateral data to constrain side L<0. Conceptual model will be used to constrain lateral extent "
430430 )
431431
432- # -- try using vertical data to set some points and run interpolation
433- # -- only use points outside the conceptual model
434- vertical_data = pd .concat (
435- [self .vertical_contact_data [0 ], self .vertical_contact_data [1 ]]
436- )
437- vertical_data .loc [
438- :, ["conceptual_maxside" , "conceptual_minside" ]
439- ] = self .lateral_extent_model (
440- lateral_contact_data = vertical_data ,
441- minP = minP ,
442- maxP = maxP ,
443- minS = minL ,
444- maxS = maxL ,
445- )
446-
447- data_minL_temp = vertical_data [vertical_data ["coord2" ] < 0 ].copy ()
448-
449- data_for_min_L = data_minL_temp [data_minL_temp ['coord2' ] <= data_minL_temp ['conceptual_minside' ]].loc [
450- :,['X' ,'Y' ,'Z' ,'coord0' ,'coord1' ,'coord2' ,'conceptual_minside' ]].copy ()
451- data_for_min_L .loc [:,'l_residual' ] = data_for_min_L .loc [
452- :,'conceptual_minside' ] - data_for_min_L .loc [:,'coord2' ]
453- data_for_min_L .rename (columns = {'conceptual_minside' : 'l_conceptual' }, inplace = True )
454- data_for_min_L .reset_index (inplace = True )
455- data_for_min_L .drop_duplicates (
456- subset = ['X' ,'Y' ,'Z' ,'coord0' ,'coord1' ,'coord2' ,'l_conceptual' ,'l_residual' ],
457- inplace = True )
458-
459- if len (data_for_min_L ) < 3 :
460- # create random points along coordinate 1, and evaluate them in conceptual model. Residual = 0. Add points to dataframe containing input for sgs
461- print (
462- "Simulation of lateral side L<0: No enought roof/floor data to condition the conceptual model, lateral contact equivalent to conceptual"
463- )
432+ random_p = pd .DataFrame (np .random .uniform (minP , maxP , 10 ), columns = ['coord1' ])
433+ conceptual_l = self .lateral_extent_model (lateral_contact_data = random_p , minP = minP , maxP = maxP , minS = minL , maxS = maxL )
434+ data_for_min_L = pd .DataFrame (np .vstack ([conceptual_l [:,1 ],random_p .loc [:,'coord1' ].to_numpy ()]).T , columns = ['l_conceptual' ,'coord1' ])
435+ data_for_min_L .loc [:,'l_residual' ] = 0
436+
464437
465- random_p = pd .DataFrame (np .random .uniform (minP , maxP , 10 ), columns = ['coord1' ])
466- conceptual_l = self .lateral_extent_model (lateral_contact_data = random_p , minP = minP , maxP = maxP , minS = minL , maxS = maxL )
467- data_for_min_L_ = pd .DataFrame (np .vstack ([conceptual_l [:,1 ],random_p .loc [:,'coord1' ].to_numpy ()]).T , columns = ['l_conceptual' ,'coord1' ])
468- data_for_min_L_ .loc [:,'l_residual' ] = 0
438+ if len (self .lateral_contact_data [1 ]) > 0 :
439+ data_minL = self .lateral_contact_data [1 ]
440+ data_conceptual_minL = self .lateral_extent_model (
441+ lateral_contact_data = data_minL ,
442+ minP = minP ,
443+ maxP = maxP ,
444+ minS = minL ,
445+ maxS = maxL ,
446+ )
447+ data_residual_minL = (data_conceptual_minL [:, 1 ] - data_minL .loc [:, "coord2" ]).to_numpy ()
448+ data_for_min_L_ = data_minL .loc [:, ["X" , "Y" , "Z" , "coord0" , "coord1" , "coord2" ]].copy ()
449+ data_for_min_L_ .loc [:, "l_residual" ] = data_residual_minL
450+ data_for_min_L_ .loc [:, "l_conceptual" ] = data_conceptual_minL [:, 1 ]
451+ data_for_min_L_ .reset_index (inplace = True )
469452 data_for_min_L = pd .concat ([data_for_min_L , data_for_min_L_ ])
470453
471- data_for_min_L .loc [:, "ref_coord" ] = 0
454+
455+ data_for_min_L ['l_residual' ] = data_for_min_L ['l_residual' ].astype (float )
456+ data_for_min_L ['coord1' ] = data_for_min_L ['coord1' ].astype (float )
457+
472458
473459 else :
474460 # -- Side of intrusion with coord2<0 (l<0)
@@ -480,59 +466,42 @@ def set_data_for_lateral_thresholds(self):
480466 minS = minL ,
481467 maxS = maxL ,
482468 )
483- data_residual_minL = (
484- data_conceptual_minL [:, 1 ] - data_minL .loc [:, "coord2" ]
485- ).to_numpy ()
486- data_for_min_L = data_minL .loc [
487- :, ["X" , "Y" , "Z" , "coord0" , "coord1" , "coord2" ]
488- ].copy ()
469+ data_residual_minL = (data_conceptual_minL [:, 1 ] - data_minL .loc [:, "coord2" ]).to_numpy ()
470+ data_for_min_L = data_minL .loc [:, ["X" , "Y" , "Z" , "coord0" , "coord1" , "coord2" ]].copy ()
489471 data_for_min_L .loc [:, "l_residual" ] = data_residual_minL
490472 data_for_min_L .loc [:, "l_conceptual" ] = data_conceptual_minL [:, 1 ]
491-
492473 data_for_min_L .reset_index (inplace = True )
493- data_for_min_L .loc [:, "ref_coord" ] = 0
474+ # data_for_min_L.loc[:, "ref_coord"] = 0
494475
495476 if self .width_data [1 ] == False : # i.e., no lateral data for side L>0
496477 print (
497- "Not enought lateral data for simulation of side L>=0, Using roof/floor data to condition the conceptual model"
498- )
499-
500- # -- try using vertical data to set some points and run SGS
501- vertical_data = pd .concat (
502- [self .vertical_contact_data [0 ], self .vertical_contact_data [1 ]]
503- )
504- vertical_data .loc [
505- :, ["conceptual_maxside" , "conceptual_minside" ]
506- ] = self .lateral_extent_model (
507- lateral_contact_data = vertical_data ,
508- minP = minP ,
509- maxP = maxP ,
510- minS = minL ,
511- maxS = maxL ,
478+ "Not enought lateral data to constrain side L>0. Conceptual model will be used to constrain lateral extent"
512479 )
513480
514- data_maxL_temp = vertical_data [ vertical_data [ "coord2" ] >= 0 ]. copy ( )
515-
516- data_for_max_L = data_maxL_temp [ data_maxL_temp [ 'coord2' ] >= data_maxL_temp [ 'conceptual_maxside' ]]. loc [:,[ 'X ' ,'Y' , 'Z' , 'coord0' , ' coord1', 'coord2' , 'conceptual_maxside' ]]. copy ( )
517- data_for_max_L .loc [:,'l_residual' ] = data_for_max_L . loc [:, 'conceptual_maxside' ] - data_for_max_L . loc [:, 'coord2' ]
518- data_for_max_L . rename ( columns = { 'conceptual_maxside' : 'l_conceptual' }, inplace = True )
519- data_for_max_L . reset_index ( inplace = True )
520- data_for_max_L . drop_duplicates (
521- subset = [ 'X' , 'Y' , 'Z' , 'coord0' , 'coord1' , 'coord2' , 'l_conceptual' , 'l_residual' ],
522- inplace = True )
523-
524- if len ( data_for_max_L ) < 3 :
525- print (
526- "Simulation of lateral side L>=0: No enought roof/floor data to condition the conceptual model, lateral contact equivalent to conceptual"
481+ random_p = pd . DataFrame ( np . random . uniform ( minP , maxP , 10 ), columns = [ 'coord1' ] )
482+ conceptual_l = self . lateral_extent_model ( lateral_contact_data = random_p , minP = minP , maxP = maxP , minS = minL , maxS = maxL )
483+ data_for_max_L = pd . DataFrame ( np . vstack ([ conceptual_l [:, 0 ], random_p . loc [:, 'coord1' ]. to_numpy ()]). T , columns = [ 'l_conceptual ' ,'coord1' ] )
484+ data_for_max_L .loc [:,'l_residual' ] = 0
485+
486+ if len ( self . lateral_contact_data [ 2 ]) > 0 :
487+ data_maxL = self . lateral_contact_data [ 2 ]
488+ data_conceptual_maxL = self . lateral_extent_model (
489+ lateral_contact_data = data_maxL ,
490+ minP = minP ,
491+ maxP = maxP ,
492+ minS = minL ,
493+ maxS = maxL ,
527494 )
528- # create random points along coordinate 1, and evaluate them conceptual model. Residual = 0. Add points to dataframe containing input for sgs
529- random_p = pd . DataFrame ( np . random . uniform ( minP , maxP , 10 ), columns = [ ' coord1' ] )
530- conceptual_l = self . lateral_extent_model ( lateral_contact_data = random_p , minP = minP , maxP = maxP , minS = minL , maxS = maxL )
531- data_for_max_L_ = pd . DataFrame ( np . vstack ([ conceptual_l [:, 0 ], random_p . loc [:,'coord1' ]. to_numpy ()]). T , columns = [ 'l_conceptual' , 'coord1' ])
532- data_for_max_L_ .loc [:, 'l_residual' ] = 0
495+ data_residual_maxL = ( data_conceptual_maxL [:, 0 ] - data_maxL . loc [:, "coord2" ]). to_numpy ()
496+ data_for_max_L_ = data_maxL . loc [:, [ "X" , "Y" , "Z" , "coord0" , " coord1" , "coord2" ]]. copy ( )
497+ data_for_max_L_ . loc [:, "l_residual" ] = data_residual_maxL
498+ data_for_max_L_ . loc [:, "l_conceptual" ] = data_conceptual_maxL [:, 0 ]
499+ data_for_max_L_ .reset_index ( inplace = True )
533500 data_for_max_L = pd .concat ([data_for_max_L , data_for_max_L_ ])
501+
534502
535- data_for_max_L .loc [:, "ref_coord" ] = 0
503+ data_for_max_L ['l_residual' ] = data_for_max_L ['l_residual' ].astype (float )
504+ data_for_max_L ['coord1' ] = data_for_max_L ['coord1' ].astype (float )
536505
537506 else :
538507 data_maxL = self .lateral_contact_data [2 ]
@@ -543,17 +512,54 @@ def set_data_for_lateral_thresholds(self):
543512 minS = minL ,
544513 maxS = maxL ,
545514 )
546- data_residual_maxL = (
547- data_conceptual_maxL [:, 0 ] - data_maxL .loc [:, "coord2" ]
548- ).to_numpy ()
549- data_for_max_L = data_maxL .loc [
550- :, ["X" , "Y" , "Z" , "coord0" , "coord1" , "coord2" ]
551- ].copy ()
515+ data_residual_maxL = (data_conceptual_maxL [:, 0 ] - data_maxL .loc [:, "coord2" ]).to_numpy ()
516+ data_for_max_L = data_maxL .loc [:, ["X" , "Y" , "Z" , "coord0" , "coord1" , "coord2" ]].copy ()
552517 data_for_max_L .loc [:, "l_residual" ] = data_residual_maxL
553518 data_for_max_L .loc [:, "l_conceptual" ] = data_conceptual_maxL [:, 0 ]
554-
555519 data_for_max_L .reset_index (inplace = True )
556- data_for_max_L .loc [:, "ref_coord" ] = 0
520+ # data_for_max_L.loc[:, "ref_coord"] = 0
521+
522+
523+ # check if roof or floor data outside of conceptual model.
524+ # if so, add as constraints to conceptual model.
525+ vertical_data = pd .concat ([self .vertical_contact_data [0 ], self .vertical_contact_data [1 ]])
526+ vertical_data .loc [:, ["conceptual_maxside" , "conceptual_minside" ]] = self .lateral_extent_model (
527+ lateral_contact_data = vertical_data ,
528+ minP = minP ,
529+ maxP = maxP ,
530+ minS = minL ,
531+ maxS = maxL ,
532+ )
533+
534+ data_minL_temp = vertical_data [vertical_data ["coord2" ] < 0 ].copy ()
535+ data_for_min_L_ = data_minL_temp [data_minL_temp ['coord2' ] < data_minL_temp ['conceptual_minside' ]].loc [:,['X' ,'Y' ,'Z' ,'coord0' ,'coord1' ,'coord2' ,'conceptual_minside' ]].copy ()
536+ data_for_min_L_ .loc [:,'l_residual' ] = data_for_min_L_ .loc [:,'conceptual_minside' ] - data_for_min_L_ .loc [:,'coord2' ]
537+ data_for_min_L_ .rename (columns = {'conceptual_minside' : 'l_conceptual' }, inplace = True )
538+ data_for_min_L_ .reset_index (inplace = True )
539+ data_for_min_L_ .drop_duplicates (subset = ['X' ,'Y' ,'Z' ,'coord0' ,'coord1' ,'coord2' ,'l_conceptual' ,'l_residual' ], inplace = True )
540+
541+ if len (data_for_min_L_ ) > 0 :
542+ print ('adding data from roof/floor to constrain L<0' )
543+ data_for_min_L = pd .concat ([data_for_min_L , data_for_min_L_ ])
544+
545+ data_maxL_temp = vertical_data [vertical_data ["coord2" ] >= 0 ].copy ()
546+ data_for_max_L_ = data_maxL_temp [data_maxL_temp ['coord2' ] > data_maxL_temp ['conceptual_maxside' ]].loc [:,['X' ,'Y' ,'Z' ,'coord0' ,'coord1' ,'coord2' ,'conceptual_maxside' ]].copy ()
547+ data_for_max_L_ .loc [:,'l_residual' ] = data_for_max_L_ .loc [:,'conceptual_maxside' ] - data_for_max_L_ .loc [:,'coord2' ]
548+ data_for_max_L_ .rename (columns = {'conceptual_maxside' : 'l_conceptual' }, inplace = True )
549+ data_for_max_L_ .reset_index (inplace = True )
550+ data_for_max_L_ .drop_duplicates (
551+ subset = ['X' ,'Y' ,'Z' ,'coord0' ,'coord1' ,'coord2' ,'l_conceptual' ,'l_residual' ],
552+ inplace = True )
553+
554+ if len (data_for_max_L_ ) > 0 :
555+ print ('adding data from roof/floor to constrain L>0' )
556+ data_for_max_L = pd .concat ([data_for_max_L , data_for_max_L_ ])
557+
558+
559+ data_for_min_L ['l_residual' ] = data_for_min_L ['l_residual' ].astype (float )
560+ data_for_min_L ['coord1' ] = data_for_min_L ['coord1' ].astype (float )
561+ data_for_max_L ['l_residual' ] = data_for_max_L ['l_residual' ].astype (float )
562+ data_for_max_L ['coord1' ] = data_for_max_L ['coord1' ].astype (float )
557563
558564 self .data_for_lateral_extent_calculation = [data_for_min_L , data_for_max_L ]
559565
@@ -625,14 +631,18 @@ def set_data_for_vertical_thresholds(self):
625631 inputsimdata_maxG_ .loc [:, "g_conceptual" ] = data_conceptual_G_ [:, 1 ]
626632 inputsimdata_maxG_ .loc [:, "g_residual" ] = 0
627633
628- inputsimdata_maxG = pd .concat (inputsimdata_maxG , inputsimdata_maxG_ )
634+ inputsimdata_maxG_complete = pd .concat ([inputsimdata_maxG , inputsimdata_maxG_ ])
635+
636+ else :
637+ inputsimdata_maxG_complete = inputsimdata_maxG
638+
629639
630640 # --- growth simulation input data for intrusion network conditioning
631641 inputsimdata_inetG = inet_data .loc [
632642 :, ["X" , "Y" , "Z" , "coord0" , "coord1" , "coord2" ]
633643 ].copy ()
634644
635- self .data_for_vertical_extent_calculation = [inputsimdata_maxG , inputsimdata_inetG ]
645+ self .data_for_vertical_extent_calculation = [inputsimdata_maxG_complete , inputsimdata_inetG ]
636646
637647 def build (
638648 self ,
0 commit comments