def _create_mechanical_solution_strategy(self): solution_scheme = self.get_solution_scheme() eigen_solver = self.get_builder_and_solver_eigen( ) # The eigensolver is created here. builder_and_solver = self.get_builder_and_solver( ) # The linear solver is created here. convergence_criteria = self.get_convergence_criterion() computing_model_part = self.GetComputingModelPart() buckling_settings = self.settings["buckling_settings"] return StructuralMechanicsApplication.PrebucklingStrategy( computing_model_part, solution_scheme, eigen_solver, builder_and_solver, convergence_criteria, self.settings["max_iteration"].GetInt(), buckling_settings)
def _solve_prebuckling_problem(self, mp, NumOfNodes, iterations, echo=0): eigensolver_settings = KratosMultiphysics.Parameters(""" { "max_iteration" : 1000, "tolerance" : 1e-6, "number_of_eigenvalues" : 1, "echo_level" : 0, "normalize_eigenvectors": false } """) buckling_settings = KratosMultiphysics.Parameters(""" { "initial_load_increment" : 1.0, "small_load_increment" : 0.0005, "path_following_step" : 0.5, "convergence_ratio" : 0.005, "make_matrices_symmetric" : true } """) eigen_solver = EigenSolversApplication.EigensystemSolver( eigensolver_settings) eigen_solver_ = KratosMultiphysics.ResidualBasedEliminationBuilderAndSolver( eigen_solver) convergence_criterion = KratosMultiphysics.DisplacementCriteria( 1e-4, 1e-9) scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme( ) linear_solver = KratosMultiphysics.SkylineLUFactorizationSolver() builder_and_solver = KratosMultiphysics.ResidualBasedEliminationBuilderAndSolver( linear_solver) convergence_criterion.SetEchoLevel(echo) eig_strategy = StructuralMechanicsApplication.PrebucklingStrategy( mp, scheme, eigen_solver_, builder_and_solver, convergence_criterion, 10, buckling_settings) eig_strategy.SetEchoLevel(echo) LoadFactor = [] for i in range(iterations): eig_strategy.Solve() if (i % 2 == 1): LoadFactor.append(mp.ProcessInfo[ StructuralMechanicsApplication.EIGENVALUE_VECTOR][0]) self._updateConditions(mp, NumOfNodes) return LoadFactor