def generate_fractures(config_dict): geom = config_dict["geometry"] dimensions = geom["box_dimensions"] well_z0, well_z1 = geom["well_openning"] well_length = well_z1 - well_z0 well_r = geom["well_effective_radius"] well_dist = geom["well_distance"] # generate fracture set fracture_box = [1.5 * well_dist, 1.5 * well_length, 1.5 * well_length] volume = np.product(fracture_box) pop = fracture.Population(volume) pop.initialize(geom["fracture_stats"]) pop.set_sample_range([1, well_dist], max_sample_size=geom["n_frac_limit"]) print("total mean size: ", pop.mean_size()) pos_gen = fracture.UniformBoxPosition(fracture_box) fractures = pop.sample(pos_distr=pos_gen, keep_nonempty=True) #fracture.fr_intersect(fractures) for fr in fractures: fr.region = "fr" used_families = set((f.region for f in fractures)) for model in ["hm_params", "th_params"]: model_dict = config_dict[model] model_dict["fracture_regions"] = list(used_families) model_dict["left_well_fracture_regions"] = [ ".{}_left_well".format(f) for f in used_families ] model_dict["right_well_fracture_regions"] = [ ".{}_right_well".format(f) for f in used_families ] return fractures
def generate_fractures(config_dict): geom = config_dict["geometry"] dimensions = geom["box_dimensions"] well_z0, well_z1 = geom["well_openning"] well_length = well_z1 - well_z0 well_r = geom["well_effective_radius"] well_dist = geom["well_distance"] # generate fracture set fracture_box = [1.5 * well_dist, 1.5 * well_length, 1.5 * well_length] volume = np.product(fracture_box) pop = fracture.Population(volume) pop.initialize(geom["fracture_stats"]) pop.set_sample_range([1, well_dist], max_sample_size=geom["n_frac_limit"]) print("total mean size: ", pop.mean_size()) connected_position = geom.get('connected_position_distr', False) if connected_position: eps = well_r / 2 left_well_box = [-well_dist/2-eps, -eps, well_z0, -well_dist/2+eps, +eps, well_z1] right_well_box = [well_dist/2-eps, -eps, well_z0, well_dist/2+eps, +eps, well_z1] pos_gen = fracture.ConnectedPosition( confining_box=fracture_box, init_boxes=[left_well_box, right_well_box]) else: pos_gen = fracture.UniformBoxPosition(fracture_box) fractures = pop.sample(pos_distr=pos_gen, keep_nonempty=True) #fracture.fr_intersect(fractures) for fr in fractures: fr.region = "fr" used_families = set((f.region for f in fractures)) config_fracture_regions(used_families) return fractures
def generate_fractures(self): geom = self.config_dict["geometry"] lx, ly = geom["fractures_box"] fr_size_range = geom["pow_law_size_range"] pow_law_exp_3d = geom["pow_law_size_exp"] pow_law_sample_range = geom["pow_law_sample_range"] n_frac_limit = geom["n_frac_limit"] p_32 = geom["p_32"] # generate fracture set fracture_box = [lx, ly, 0] area = lx * ly pop = fracture.Population(area, fracture.LineShape) pop.add_family( "all", fracture.FisherOrientation(0, 90, np.inf), fracture.VonMisesOrientation(0, 0), fracture.PowerLawSize.from_mean_area(pow_law_exp_3d - 1, fr_size_range, p_32, pow_law_exp_3d)) if pow_law_sample_range: pop.set_sample_range(pow_law_sample_range) elif n_frac_limit: pop.set_sample_range([None, max(lx, ly)], sample_size=n_frac_limit) print("total mean size: ", pop.mean_size()) print("size range:", pop.families[0].size.sample_range) pos_gen = fracture.UniformBoxPosition(fracture_box) fractures = pop.sample(pos_distr=pos_gen, keep_nonempty=True) fr_set = fracture.Fractures(fractures, fr_size_range[0] / 2) return fr_set