def create_solver(mp, scheme_name): # Define a minimal newton raphson dynamic solver linear_solver = KratosMultiphysics.SkylineLUFactorizationSolver() builder_and_solver = KratosMultiphysics.ResidualBasedBlockBuilderAndSolver( linear_solver) if scheme_name == "newmark": scheme = KratosMultiphysics.ResidualBasedNewmarkDisplacementScheme() elif scheme_name == "pseudo_static": scheme = KratosMultiphysics.ResidualBasedPseudoStaticDisplacementScheme( StructuralMechanicsApplication.RAYLEIGH_BETA) elif scheme_name == "backward_euler": scheme = KratosMultiphysics.ResidualBasedBDFDisplacementScheme(1) elif scheme_name == "bdf2": scheme = KratosMultiphysics.ResidualBasedBDFDisplacementScheme(2) elif scheme_name == "explicit": dynamic_settings = KratosMultiphysics.Parameters(""" { "time_step_prediction_level" : 0, "max_delta_time" : 1.0e-5, "fraction_delta_time" : 0.9 } """) scheme = StructuralMechanicsApplication.ExplicitCentralDifferencesScheme( dynamic_settings) elif scheme_name == "explicit_multi_stage": dynamic_settings = KratosMultiphysics.Parameters(""" { "fraction_delta_time" : 0.333333333333333333333333333333333333 } """) scheme = StructuralMechanicsApplication.ExplicitMultiStageKimScheme( dynamic_settings) else: damp_factor_m = 0.0 scheme = KratosMultiphysics.ResidualBasedBossakDisplacementScheme( damp_factor_m) # Creating solver compute_reactions = False reform_step_dofs = True move_mesh_flag = True # Explicit solver if "explicit" in scheme_name: strategy = StructuralMechanicsApplication.MechanicalExplicitStrategy( mp, scheme, compute_reactions, reform_step_dofs, move_mesh_flag) else: # Implicit solver otherwise max_iters = 10 # Convergence_criterion = KratosMultiphysics.ResidualCriteria(1e-14,1e-20) convergence_criterion = KratosMultiphysics.ResidualCriteria(1e-4, 1e-9) convergence_criterion.SetEchoLevel(0) strategy = KratosMultiphysics.ResidualBasedNewtonRaphsonStrategy( mp, scheme, linear_solver, convergence_criterion, builder_and_solver, max_iters, compute_reactions, reform_step_dofs, move_mesh_flag) strategy.SetEchoLevel(0) strategy.Check() return strategy
def _create_dynamic_explicit_strategy(mp): scheme = StructuralMechanicsApplication.ExplicitCentralDifferencesScheme( 0.00, 0.00, 0.00) strategy = StructuralMechanicsApplication.MechanicalExplicitStrategy( mp, scheme, 0, 0, 1) strategy.SetEchoLevel(0) return strategy
def _create_dynamic_explicit_strategy(mp,scheme_name): if (scheme_name=='central_differences'): scheme = StructuralMechanicsApplication.ExplicitCentralDifferencesScheme(0.00,0.00,0.00) elif scheme_name=='multi_stage': scheme = StructuralMechanicsApplication.ExplicitMultiStageKimScheme(0.33333333333333333) strategy = StructuralMechanicsApplication.MechanicalExplicitStrategy(mp,scheme,0,0,1) strategy.SetEchoLevel(0) return strategy
def _create_explicit_strategy(self): computing_model_part = self.GetComputingModelPart() mechanical_scheme = self._get_solution_scheme() return StructuralMechanicsApplication.MechanicalExplicitStrategy( computing_model_part, mechanical_scheme, self.settings["compute_reactions"].GetBool(), self.settings["reform_dofs_at_each_step"].GetBool(), self.settings["move_mesh_flag"].GetBool())