Exemple #1
0
    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)
Exemple #2
0
    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