def run_radial_simul(self, my_front_reconstruction, my_front_advancement, my_vertex_or_path, my_param): # setting up the verbosity level of the log at console # setup_logging_to_console(verbosity_level='error') outputfolder = "./Temp_Data/" + my_vertex_or_path + "_radial_" + my_front_advancement + "_" + my_front_reconstruction self.remove(outputfolder) # creating mesh Mesh = CartesianMesh(my_param['Lx'], my_param['Ly'], my_param['Nx'], my_param['Ny']) # solid properties nu = my_param['nu'] # Poisson's ratio youngs_mod = my_param['youngs_mod'] # Young's modulus Eprime = youngs_mod / (1 - nu**2) # plain strain modulus K_Ic = my_param['K_Ic'] # fracture toughness Cl = my_param['Cl'] # Carter's leak off coefficient # material properties Solid = MaterialProperties(Mesh, Eprime, K_Ic, Carters_coef=Cl) # injection parameters Q0 = my_param['Q0'] # injection rate Injection = InjectionProperties(Q0, Mesh) # fluid properties Fluid = FluidProperties(viscosity=my_param['viscosity']) # simulation properties simulProp = SimulationProperties() simulProp.finalTime = my_param[ 'finalTime'] # the time at which the simulation stops simulProp.set_tipAsymptote( my_vertex_or_path ) # tip asymptote is evaluated with the viscosity dominated assumption simulProp.frontAdvancing = my_front_advancement # to set explicit front tracking simulProp.plotFigure = False simulProp.set_solTimeSeries(np.asarray([2, 200, 5000, 30000, 100000])) simulProp.saveTSJump, simulProp.plotTSJump = 5, 5 # save and plot after every five time steps simulProp.set_outputFolder(outputfolder) simulProp.projMethod = my_front_reconstruction simulProp.log2file = False # initialization parameters Fr_geometry = Geometry('radial', radius=my_param['initialR']) init_param = InitializationParameters(Fr_geometry, regime=my_vertex_or_path) # creating fracture object Fr = Fracture(Mesh, init_param, Solid, Fluid, Injection, simulProp) # create a Controller controller = Controller(Fr, Solid, Fluid, Injection, simulProp) # run the simulation exitcode = controller.run() return exitcode, outputfolder
from fracture_initialization import Geometry, InitializationParameters from utility import setup_logging_to_console # setting up the verbosity level of the log at console setup_logging_to_console(verbosity_level='info') # creating mesh Mesh = CartesianMesh(6, 6, 41, 41) # solid properties nu = 0.4 # Poisson's ratio youngs_mod = 3.3e10 # Young's modulus Eprime = youngs_mod / (1 - nu**2) # plain strain modulus K_Ic = 1e7 # fracture toughness Solid = MaterialProperties(Mesh, Eprime, K_Ic, minimum_width=1e-9) # injection parameters Q0 = 0.001 # injection rate Injection = InjectionProperties(Q0, Mesh) # fluid properties viscosity = 1.1e-3 Fluid = FluidProperties(viscosity=viscosity) # simulation properties simulProp = SimulationProperties() simulProp.finalTime = 50 # the time at which the simulation stops simulProp.set_outputFolder("./Data/star") # the address of the output folder simulProp.plotTSJump = 4
# setting up the verbosity level of the log at console setup_logging_to_console(verbosity_level='info') # creating mesh Mesh = CartesianMesh(0.2, 0.2, 41, 41) # solid properties nu = 0.4 # Poisson's ratio youngs_mod = 3.3e10 # Young's modulus Eprime = youngs_mod / (1 - nu**2) # plain strain modulus K1c = 5e5 / (32 / np.pi)**0.5 # K' = 5e5 Cl = 0.5e-6 # Carter's leak off coefficient # material properties Solid = MaterialProperties(Mesh, Eprime, K1c, Carters_coef=Cl) # injection parameters Q0 = 0.01 # injection rate Injection = InjectionProperties(Q0, Mesh) # fluid properties Fluid = FluidProperties(rheology='PLF', n=0.6, k=0.001 / 12) # simulation properties simulProp = SimulationProperties() simulProp.finalTime = 1e7 # the time at which the simulation stops simulProp.set_outputFolder("./Data/MtoK_leakoff") # the disk address where the files are saved simulProp.set_simulation_name('PLF_MtoKtilde_n0.6') simulProp.tolFractFront = 0.003 # increase the tolerance for faster run
setup_logging_to_console(verbosity_level='info') # creating mesh Mesh = CartesianMesh(.75, .75, 41, 41) # solid properties nu = 0.15 # Poisson's ratio youngs_mod = 3e10 # Young's modulus Eprime = youngs_mod / (1 - nu**2) # plain strain modulus K_Ic = 2e6 # fracture toughness sigma0 = 15e6 # confining stress # material properties Solid = MaterialProperties(Mesh, Eprime, K_Ic, Carters_coef=1e-6, confining_stress=sigma0, minimum_width=1e-5) def sink_location(x, y): """ This function is used to evaluate if a point is a sink.""" return abs(y) >= .6 and abs(y) <= 1. and abs(x) < 0.01 def sink_vel(x, y): """ This function gives the sink velocity of point.""" return 6e-4 def source_location(x, y):
youngs_mod = 3.3e10 # Young's modulus Eprime = youngs_mod / (1 - nu**2) # plain strain modulus K_Ic = 0.5 # fracture toughness def sigmaO_func(x, y): """ This function provides the confining stress over the domain""" # only dependant on the depth density = 2000 return -(y - 400) * density * 9.8 # material properties Solid = MaterialProperties(Mesh, Eprime, K_Ic, confining_stress_func=sigmaO_func) def source_location(x, y): """ This function is used to evaluate if a point is included in source, i.e. the fluid is injected at the given point. """ tolerance = 2. # the condition return abs(x) < 75 and (y >= -75. - tolerance and y <= -75. + tolerance) # injection parameters Q0 = 0.001 # injection rate Injection = InjectionProperties(Q0, Mesh, source_loc_func=source_location)
youngs_mod = 3.3e10 # Young's modulus Eprime = youngs_mod / (1 - nu**2) # plain strain modulus # the function below will make the fracture propagate in the form of an ellipse (see Zia and Lecampion 2018) def K1c_func(alpha): K1c_1 = 1.e6 # fracture toughness along x-axis K1c_2 = 1.414e6 # fracture toughness along y-axis beta = np.arctan((K1c_1 / K1c_2)**2 * np.tan(alpha)) return 4 * (2 / np.pi)**0.5 * K1c_2 * ( np.sin(beta)**2 + (K1c_1 / K1c_2)**4 * np.cos(beta)**2)**0.25 Solid = MaterialProperties(Mesh, Eprime, anisotropic_K1c=True, K1c_func=K1c_func) # injection parameters Q0 = 0.001 # injection rate Injection = InjectionProperties(Q0, Mesh) # fluid properties Fluid = FluidProperties(viscosity=1.1e-5) # simulation properties simulProp = SimulationProperties() simulProp.finalTime = 500 # the time at which the simulation stops simulProp.set_volumeControl( True) # to set up the solver in volume control mode (inviscid fluid) simulProp.tolFractFront = 4e-3 # increase tolerance for the anisotropic case
from properties import MaterialProperties, FluidProperties, InjectionProperties, SimulationProperties from fracture import Fracture from controller import Controller from fracture_initialization import Geometry, InitializationParameters # creating mesh Mesh = CartesianMesh(0.3, 0.3, 41, 41) # solid properties nu = 0.4 # Poisson's ratio youngs_mod = 3.3e10 # Young's modulus Eprime = youngs_mod / (1 - nu**2) # plain strain modulus K_Ic = 0.5 # fracture toughness # material properties Solid = MaterialProperties(Mesh, Eprime, K_Ic) # injection parameters Q0 = 0.001 # injection rate Injection = InjectionProperties(Q0, Mesh) # fluid properties Fluid = FluidProperties(viscosity=1.1e-3) # simulation properties simulProp = SimulationProperties() simulProp.finalTime = 1e5 # the time at which the simulation stops simulProp.frontAdvancing = 'explicit' # to set explicit front tracking simulProp.saveTSJump, simulProp.plotTSJump = 5, 5 # save and plot after every five time steps simulProp.set_outputFolder( "./Data/M_radial_explicit") # the disk address where the files are saved
setup_logging_to_console(verbosity_level='info') # creating mesh Mesh = CartesianMesh(50, 50, 41, 41) # solid properties nu = 0.4 # Poisson's ratio youngs_mod = 3.3e10 # Young's modulus Eprime = youngs_mod / (1 - nu**2) # plain strain modulus K1c = 0 # zero toughness case Cl = 0.5e-6 # Carter's leak off coefficient # material properties Solid = MaterialProperties(Mesh, Eprime, K1c, Carters_coef=Cl, minimum_width=1e-12) # injection parameters Q0 = 0.01 # injection rate Injection = InjectionProperties(Q0, Mesh) # fluid properties viscosity = 0.001 / 12 # mu' =0.001 Fluid = FluidProperties(viscosity=viscosity) # simulation properties simulProp = SimulationProperties() simulProp.finalTime = 3e7 # the time at which the simulation stops simulProp.saveTSJump, simulProp.plotTSJump = 3, 5 # save and plot after every 5 time steps
nu = 0.4 # Poisson's ratio youngs_mod = 3.3e10 # Young's modulus Eprime = youngs_mod / (1 - nu**2) # plain strain modulus K_Ic1 = 5.6e6 # fracture toughness def My_KIc_func(x, y): """ The function providing the fracture toughness""" if x < 0.2: return K_Ic1 else: return K_Ic1 * 3.6 Solid = MaterialProperties(Mesh, Eprime, K1c_func=My_KIc_func, minimum_width=1e-8) # injection parameters Q0 = 0.05 # injection rate Injection = InjectionProperties(Q0, Mesh, source_coordinates=[0.1, 0.]) # fluid properties Fluid = FluidProperties(viscosity=1.1e-3) # simulation properties simulProp = SimulationProperties() simulProp.finalTime = 0.0003 # the time at which the simulation stops myfolder = "./Data/toughness_jump_3p6" simulProp.set_outputFolder( myfolder) # the disk address where the files are saved
""" This function provides the confining stress over the domain""" density_high = 2700 density_low = 2300 layer = 2900 Ly = 3400 if y > layer: return (Ly - y) * density_low * 9.8 return (Ly - y) * density_high * 9.8 - (Ly - layer) * (density_high - density_low) * 9.8 # material properties Solid = MaterialProperties(Mesh, Eprime, toughness=6.5e6, confining_stress_func=sigmaO_func, minimum_width=1e-5) # injection parameters Q0 = np.asarray([[0.0, 500], [2000, 0]]) # injection rate Injection = InjectionProperties(Q0, Mesh) # fluid properties Fluid = FluidProperties(viscosity=30, density=2400) # simulation properties simulProp = SimulationProperties() simulProp.finalTime = 560000 # the time at which the simulation stops simulProp.set_outputFolder( "./Data/neutral_buoyancy") # the disk address where the files are saved
def sigmaO_func(x, y): """ This function provides the confining stress over the domain""" if 0 < y < 7: return 5.25e6 elif y < -50: return 5.25e6 else: return 5.e6 # material properties Solid = MaterialProperties(Mesh, Eprime, toughness=K_Ic, confining_stress_func=sigmaO_func, Carters_coef=1e-6) # injection parameters Q0 = np.asarray([[0, 6000], [0.001, 0]]) Injection = InjectionProperties(Q0, Mesh, source_coordinates=[0, -20]) # fluid properties Fluid = FluidProperties(viscosity=1e-3) # simulation properties simulProp = SimulationProperties() simulProp.finalTime = 1.6e4 # the time at which the simulation stops simulProp.set_outputFolder( "./Data/fracture_closure") # the disk address where the files are saved
""" The function providing the confining stress""" R=0.05 x1=0. y1=0.2 if (abs(x)-x1)**2+(abs(y)-y1)**2 < R**2: return 60.0e6 if (abs(x)-y1)**2+(abs(y)-x1)**2 < R**2: return 60.0e6 else: return 5.0e6 Solid = MaterialProperties(Mesh, Eprime, K1c_func=My_KIc_func, confining_stress_func=sigmaO_func, minimum_width=1e-8) # injection parameters Q0 = 0.001 # injection rate Injection = InjectionProperties(Q0, Mesh) # fluid properties Fluid = FluidProperties(viscosity=1.1e-3) # simulation properties simulProp = SimulationProperties() simulProp.bckColor = 'sigma0' simulProp.finalTime = 0.28 # the time at which the simulation stops
Eprime_ratio = TI_plain_strain_modulus( alpha, Cij) / TI_plain_strain_modulus(np.pi / 2, Cij) Eprime_ratio13 = TI_plain_strain_modulus(0, Cij) / TI_plain_strain_modulus( np.pi / 2, Cij) gamma = (Eprime_ratio13 * K1c_3 / K1c_1)**2 # aspect ratio beta = np.arctan(np.tan(alpha) / gamma) return K1c_3 * Eprime_ratio * ((np.sin(beta))**2 + (np.cos(beta) / gamma)**2)**0.25 # materila properties Solid = MaterialProperties(Mesh, Eprime, anisotropic_K1c=True, toughness=K1c_func(np.pi / 2), K1c_func=K1c_func, TI_elasticity=True, Cij=Cij) # injection parameters Q0 = 0.001 # injection rate Injection = InjectionProperties(Q0, Mesh) # fluid properties Fluid = FluidProperties(viscosity=1.1e-4) # aspect ratio of the elliptical fracture gamma = ( K1c_func(np.pi / 2) / K1c_func(0) * TI_plain_strain_modulus( # gamma = (Kc3/Kc1*E1/E3)**2