def __init__(self, model_part, domain_size, periodic=False): self.model_part = model_part self.domain_size = domain_size # definition of the solvers try: from KratosMultiphysics.ExternalSolversApplication import SuperLUIterativeSolver self.linear_solver = SuperLUIterativeSolver() except: self.linear_solver = SkylineLUFactorizationSolver() # definition of the convergence criteria self.rel_vel_tol = 1e-5 self.abs_vel_tol = 1e-7 self.rel_pres_tol = 1e-5 self.abs_pres_tol = 1e-7 self.dynamic_tau = 0.0 self.max_iter = 5 # default settings self.echo_level = 0 self.compute_reactions = False self.ReformDofSetAtEachStep = False self.CalculateNormDxFlag = False self.MoveMeshFlag = False self.use_slip_conditions = False self.divergence_clearance_steps = 0 self.bdf_process = ComputeBDFCoefficientsProcess(model_part, 2) print("Construction monolithic solver finished")
def __init__(self, model_part, domain_size, periodic=False): self.model_part = model_part self.domain_size = domain_size self.alpha = -0.3 self.move_mesh_strategy = 0 self.periodic = periodic # definition of the solvers try: from KratosMultiphysics.ExternalSolversApplication import SuperLUIterativeSolver self.linear_solver = SuperLUIterativeSolver() except: self.linear_solver = SkylineLUFactorizationSolver() # self.linear_solver =SuperLUSolver() # self.linear_solver = MKLPardisoSolver() # pPrecond = DiagonalPreconditioner() # pPrecond = ILU0Preconditioner() # self.linear_solver = BICGSTABSolver(1e-6, 5000,pPrecond) # definition of the convergence criteria self.rel_vel_tol = 1e-5 self.abs_vel_tol = 1e-7 self.rel_pres_tol = 1e-5 self.abs_pres_tol = 1e-7 self.dynamic_tau = 0.0 self.oss_switch = 0 # non newtonian setting self.regularization_coef = 1000 self.max_iter = 30 # default settings self.echo_level = 0 self.compute_reactions = True self.ReformDofSetAtEachStep = True self.CalculateNormDxFlag = True self.MoveMeshFlag = False self.use_slip_conditions = False self.turbulence_model = None self.use_spalart_allmaras = False self.use_des = False self.Cdes = 1.0 self.wall_nodes = list() self.spalart_allmaras_linear_solver = None self.divergence_clearance_steps = 0 print("Construction monolithic solver finished")
def CreateCPluPlusStrategies(self, echo_level=1): from KratosMultiphysics.ExternalSolversApplication import SuperLUIterativeSolver #linear_solver = SuperLUIterativeSolver() from KratosMultiphysics.ExternalSolversApplication import SuperLUSolver scheme = ResidualBasedIncrementalUpdateStaticScheme() amgcl_smoother = AMGCLSmoother.ILU0 amgcl_krylov_type = AMGCLIterativeSolverType.BICGSTAB tolerance = 1e-8 max_iterations = 1000 verbosity = 0 #0->shows no information, 1->some information, 2->all the information gmres_size = 50 if self.use_lumped_mass_matrix: linear_solver = SuperLUIterativeSolver() else: linear_solver = AMGCLSolver(amgcl_smoother, amgcl_krylov_type, tolerance, max_iterations, verbosity, gmres_size) self.recovery_strategy = ResidualBasedDerivativeRecoveryStrategy( self.recovery_model_part, scheme, linear_solver, False, True, False, False) self.recovery_strategy.SetEchoLevel(echo_level)
def __init__(self, model_part, domain_size, eul_model_part, gamma, contact_angle): self.model_part = model_part self.domain_size = domain_size # eul_model_part can be 0 (meaning that the model part is lagrangian) or 1 (eulerian) self.eul_model_part = eul_model_part self.alpha = -0.3 if(eul_model_part == 0): self.move_mesh_strategy = 2 else: self.move_mesh_strategy = 0 # definition of the solvers try: from KratosMultiphysics.ExternalSolversApplication import SuperLUIterativeSolver self.linear_solver = SuperLUIterativeSolver() except: self.linear_solver = SkylineLUFactorizationSolver() # definition of the convergence criteria self.rel_vel_tol = 1e-3 self.abs_vel_tol = 1e-6 self.rel_pres_tol = 1e-3 self.abs_pres_tol = 1e-6 self.dynamic_tau = 0.0 self.oss_switch = 0 # non newtonian setting self.regularization_coef = 1000 self.max_iter = 30 self.contact_angle = contact_angle self.gamma = gamma # default settings self.echo_level = 0 self.compute_reactions = True self.ReformDofSetAtEachStep = True self.CalculateNormDxFlag = True self.MoveMeshFlag = True self.use_slip_conditions = False #self.time_scheme = None #self.builder_and_solver = None self.turbulence_model = None self.use_spalart_allmaras = False self.use_des = False self.Cdes = 1.0 self.wall_nodes = list() self.spalart_allmaras_linear_solver = None self.divergence_clearance_steps = 0 print("Construction monolithic solver finished") print("after reading all the model contains:") print(self.model_part) if(self.eul_model_part == 0): self.UlfUtils = UlfUtils() #self.PfemUtils = PfemUtils() self.mark_outer_nodes_process = MarkOuterNodesProcess(model_part); self.node_erase_process = NodeEraseProcess(model_part); self.add_nodes=True self.alpha_shape = 3.5; self.ulf_apply_bc_process = UlfApplyBCProcess(model_part); #self.mark_fluid_process = MarkFluidProcess(model_part); #saving the limits of the box (all the nodes external to this will be erased) bounding_box_corner1_x = -1.00000e+00 bounding_box_corner1_y = -1.00000e+00 bounding_box_corner1_z = -1.00000e+00 bounding_box_corner2_x = 1.01000e+10 bounding_box_corner2_y = 1.01000e+10 bounding_box_corner2_z = 1.01000e+10 box_corner1 = Vector(3); box_corner1[0]=bounding_box_corner1_x; box_corner1[1]=bounding_box_corner1_y; box_corner1[2]=bounding_box_corner1_z; box_corner2 = Vector(3); box_corner2[0]=bounding_box_corner2_x; box_corner2[1]=bounding_box_corner2_y; box_corner2[2]=bounding_box_corner2_z; self.box_corner1 = box_corner1 self.box_corner2 = box_corner2 if(domain_size == 2): self.Mesher = TriGenDropletModeler() self.fluid_neigh_finder = FindNodalNeighboursProcess(model_part,9,18) #this is needed if we want to also store the conditions a node belongs to self.condition_neigh_finder = FindConditionsNeighboursProcess(model_part,2, 10) (self.fluid_neigh_finder).Execute(); Hfinder = FindNodalHProcess(model_part); Hfinder.Execute();