def CreateMechanicalSolver(self, mechanical_scheme,
                            mechanical_convergence_criterion,
                            builder_and_solver, max_iters,
                            compute_reactions, reform_step_dofs,
                            move_mesh_flag, component_wise, line_search,
                            time_integration_method):
     if (time_integration_method == "Implicit"):
         if (component_wise):
             self.mechanical_solver = SolidMechanicsApplication.ComponentWiseNewtonRaphsonStrategy(
                 self.main_model_part, mechanical_scheme,
                 self.linear_solver, mechanical_convergence_criterion,
                 builder_and_solver, max_iters, compute_reactions,
                 reform_step_dofs, move_mesh_flag)
         else:
             if (line_search):
                 self.mechanical_solver = SolidMechanicsApplication.ResidualBasedNewtonRaphsonLineSearchStrategy(
                     self.main_model_part, mechanical_scheme,
                     self.linear_solver, mechanical_convergence_criterion,
                     builder_and_solver, max_iters, compute_reactions,
                     reform_step_dofs, move_mesh_flag)
             else:
                 self.mechanical_solver = KratosMultiphysics.ResidualBasedNewtonRaphsonStrategy(
                     self.main_model_part, mechanical_scheme,
                     self.linear_solver, mechanical_convergence_criterion,
                     builder_and_solver, max_iters, compute_reactions,
                     reform_step_dofs, move_mesh_flag)
     elif (time_integration_method == "Explicit"):
         self.mechanical_solver = SolidMechanicsApplication.ExplicitStrategy(
             self.main_model_part, mechanical_scheme, self.linear_solver,
             compute_reactions, reform_step_dofs, move_mesh_flag)
         self.mechanical_solver.SetRebuildLevel(
             0)  # 1 to recompute the mass matrix in each explicit step
    def _CreateMechanicalSolver(self, mechanical_scheme,
                                mechanical_convergence_criterion,
                                builder_and_solver, max_iters,
                                compute_reactions, reform_step_dofs,
                                move_mesh_flag, component_wise, line_search,
                                implex):
        if (component_wise):
            self.mechanical_solver = KratosSolid.ComponentWiseNewtonRaphsonStrategy(
                self.computing_model_part, mechanical_scheme,
                self.linear_solver, mechanical_convergence_criterion,
                builder_and_solver, max_iters, compute_reactions,
                reform_step_dofs, move_mesh_flag)
        else:
            if (line_search):
                if (implex):
                    self.mechanical_solver = KratosSolid.ResidualBasedNewtonRaphsonLineSearchImplexStrategy(
                        self.computing_model_part, mechanical_scheme,
                        self.linear_solver, mechanical_convergence_criterion,
                        builder_and_solver, max_iters, compute_reactions,
                        reform_step_dofs, move_mesh_flag)
                else:
                    self.mechanical_solver = KratosSolid.ResidualBasedNewtonRaphsonLineSearchStrategy(
                        self.computing_model_part, mechanical_scheme,
                        self.linear_solver, mechanical_convergence_criterion,
                        builder_and_solver, max_iters, compute_reactions,
                        reform_step_dofs, move_mesh_flag)

            else:
                self.mechanical_solver = KratosMultiphysics.ResidualBasedNewtonRaphsonStrategy(
                    self.computing_model_part, mechanical_scheme,
                    self.linear_solver, mechanical_convergence_criterion,
                    builder_and_solver, max_iters, compute_reactions,
                    reform_step_dofs, move_mesh_flag)
 def _create_component_wise_strategy(self):
     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()
     return KratosSolid.ComponentWiseNewtonRaphsonStrategy(
         self.model_part, mechanical_scheme, linear_solver,
         mechanical_convergence_criterion, builder_and_solver,
         self.solving_strategy_settings["max_iteration"].GetInt(),
         self.solving_strategy_settings["compute_reactions"].GetBool(),
         self.solving_strategy_settings["reform_dofs_at_each_step"].GetBool(
         ), self.solving_strategy_settings["move_mesh_flag"].GetBool())