Exemple #1
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
Exemple #2
0
def _create_dynamic_explicit_strategy(mp):
    scheme = StructuralMechanicsApplication.ExplicitCentralDifferencesScheme(
        0.00, 0.00, 0.00)

    strategy = StructuralMechanicsApplication.MechanicalExplicitStrategy(
        mp, scheme, 0, 0, 1)
    strategy.SetEchoLevel(0)
    return strategy
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
Exemple #4
0
    def _create_explicit_strategy(self):
        computing_model_part = self.GetComputingModelPart()
        mechanical_scheme = self._get_solution_scheme()

        return StructuralMechanicsApplication.MechanicalExplicitStrategy(
            computing_model_part, mechanical_scheme,
            self.settings["compute_reactions"].GetBool(),
            self.settings["reform_dofs_at_each_step"].GetBool(),
            self.settings["move_mesh_flag"].GetBool())