def _setup_formfinding(self, mp): linear_solver = KratosMultiphysics.SkylineLUFactorizationSolver() builder_and_solver = KratosMultiphysics.ResidualBasedBlockBuilderAndSolver( linear_solver) scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme( ) convergence_criterion = KratosMultiphysics.ResidualCriteria( 1e-12, 1e-12) convergence_criterion.SetEchoLevel(0) max_iters = 1000 compute_reactions = True reform_step_dofs = True move_mesh_flag = True proj_settings = KratosMultiphysics.Parameters("""{ "model_part_name" : "Structure", "echo_level" : 0, "projection_type" : "planar", "global_direction" : [1,0,0], "variable_name" : "LOCAL_MATERIAL_AXIS_1", "visualize_in_vtk" : false, "method_specific_settings" : { }, "check_local_space_dimension" : false }""") strategy = StructuralMechanicsApplication.FormfindingStrategy( mp, scheme, convergence_criterion, builder_and_solver, mp, False, "none", proj_settings, max_iters, compute_reactions, reform_step_dofs, move_mesh_flag) strategy.SetEchoLevel(0) strategy.Initialize() return strategy
def _create_mechanical_solution_strategy(self): computing_model_part = self.GetComputingModelPart() mechanical_scheme = self.get_solution_scheme() linear_solver = self.get_linear_solver() mechanical_convergence_criterion = self.get_convergence_criterion() builder_and_solver = self.get_builder_and_solver() # in some cases not all elements need to be reset by the formfinding strategy formfinding_model_part = self.GetComputingModelPart() if len(self.settings["formfinding_model_part_name"].GetString())>0: formfinding_model_part = computing_model_part.GetSubModelPart(self.settings["formfinding_model_part_name"].GetString()) return StructuralMechanicsApplication.FormfindingStrategy( computing_model_part, mechanical_scheme, linear_solver, mechanical_convergence_criterion, builder_and_solver, formfinding_model_part, self.settings["write_formfound_geometry_file"].GetBool(), self.settings["printing_format"].GetString(), self.settings["projection_settings"], self.settings["max_iteration"].GetInt(), self.settings["compute_reactions"].GetBool(), self.settings["reform_dofs_at_each_step"].GetBool(), self.settings["move_mesh_flag"].GetBool())