def _create_solution_scheme(self):
        scheme_type = self.settings["scheme_type"].GetString()

        # Setting the Rayleigh damping parameters
        process_info = self.main_model_part.ProcessInfo
        process_info[
            StructuralMechanicsApplication.
            RAYLEIGH_ALPHA] = self.settings["rayleigh_alpha"].GetDouble()
        process_info[
            StructuralMechanicsApplication.
            RAYLEIGH_BETA] = self.settings["rayleigh_beta"].GetDouble()

        # Setting the time integration schemes
        if (scheme_type == "central_differences"):
            mechanical_scheme = StructuralMechanicsApplication.ExplicitCentralDifferencesScheme(
                self.settings["max_delta_time"].GetDouble(),
                self.settings["fraction_delta_time"].GetDouble(),
                self.settings["time_step_prediction_level"].GetDouble())
        elif (scheme_type == "multi_stage"):
            mechanical_scheme = StructuralMechanicsApplication.ExplicitMultiStageKimScheme(
                self.settings["fraction_delta_time"].GetDouble())

        else:
            err_msg = "The requested scheme type \"" + scheme_type + "\" is not available!\n"
            err_msg += "Available options are: \"central_differences\", \"multi_stage\""
            raise Exception(err_msg)
        return mechanical_scheme
コード例 #2
0
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
コード例 #3
0
ファイル: test_nodal_damping.py プロジェクト: wacyyang/Kratos
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