def GetSolutionSchemeImplicit(self, scheme_type, component_wise,
                                  compute_contact_forces):
        # creating the implicit solution scheme:
        if (scheme_type == "Newmark"):
            damp_factor_m = 0.0
            dynamic_factor = 1

            self.main_model_part.ProcessInfo[
                SolidMechanicsApplication.RAYLEIGH_ALPHA] = 0.0
            self.main_model_part.ProcessInfo[
                SolidMechanicsApplication.RAYLEIGH_BETA] = 0.0

            if (component_wise):
                mechanical_scheme = SolidMechanicsApplication.ComponentWiseBossakScheme(
                    damp_factor_m, dynamic_factor)
            else:
                if (compute_contact_forces):
                    mechanical_scheme = SolidMechanicsApplication.ResidualBasedContactBossakScheme(
                        damp_factor_m, dynamic_factor)
                else:
                    mechanical_scheme = SolidMechanicsApplication.ResidualBasedBossakScheme(
                        damp_factor_m, dynamic_factor)
        elif (scheme_type == "Bossak"):
            damp_factor_m = -0.01
            dynamic_factor = 1

            self.main_model_part.ProcessInfo[
                SolidMechanicsApplication.RAYLEIGH_ALPHA] = 0.0
            self.main_model_part.ProcessInfo[
                SolidMechanicsApplication.RAYLEIGH_BETA] = 0.0

            if (component_wise):
                mechanical_scheme = SolidMechanicsApplication.ComponentWiseBossakScheme(
                    damp_factor_m, dynamic_factor)
            else:
                if (compute_contact_forces):
                    mechanical_scheme = SolidMechanicsApplication.ResidualBasedContactBossakScheme(
                        damp_factor_m, dynamic_factor)
                else:
                    mechanical_scheme = SolidMechanicsApplication.ResidualBasedBossakScheme(
                        damp_factor_m, dynamic_factor)
        elif (scheme_type == "Relaxation"):
            #~ self.main_model_part.GetSubModelPart(self.settings["volume_model_part_name"].GetString()).AddNodalSolutionStepVariable(KratosMultiphysics.DISPLACEMENT)

            import KratosMultiphysics.StructuralMechanicsApplication as StructMechApp
            damp_factor_f = -0.3
            damp_factor_m = 10.0
            mechanical_scheme = StructMechApp.ResidualBasedRelaxationScheme(
                damp_factor_f, damp_factor_m)

        return mechanical_scheme
    def _create_solution_scheme(self):
        scheme_type = self.settings["scheme_type"].GetString()
        if (scheme_type == "Linear"):
            mechanical_scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme(
            )
        elif (scheme_type == "Non-Linear"):
            if (self.settings["component_wise"].GetBool() == True):
                dynamic_factor = 0.0
                damp_factor_m = 0.0
                mechanical_scheme = KratosSolid.ComponentWiseBossakScheme(
                    damp_factor_m, dynamic_factor)
            else:
                mechanical_scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme(
                )
        elif (scheme_type == "RotationStatic"):
            dynamic_factor = 0.0
            damp_factor_m = 0.0
            mechanical_scheme = KratosSolid.ResidualBasedRotationNewmarkScheme(
                dynamic_factor, damp_factor_m)
        elif (scheme_type == "RotationEMC"):
            dynamic_factor = 0.0
            mechanical_scheme = KratosSolid.ResidualBasedRotationEMCScheme(
                dynamic_factor)
        else:
            raise Exception("Unsupported scheme_type: " + scheme_type)

        return mechanical_scheme
    def _GetSolutionScheme(self, scheme_type, component_wise,
                           compute_contact_forces):

        if (scheme_type == "Newmark"):
            self.settings.AddEmptyValue("damp_factor_m")
            self.settings.AddEmptyValue("dynamic_factor")
            self.settings["damp_factor_m"].SetDouble(0.0)
            self.settings["dynamic_factor"].SetDouble(1.0)

        elif (scheme_type == "Bossak"):
            self.settings.AddEmptyValue("damp_factor_m")
            self.settings.AddEmptyValue("dynamic_factor")
            self.settings["damp_factor_m"].SetDouble(-0.01)
            self.settings["dynamic_factor"].SetDouble(1.0)

        # Creating the implicit solution scheme:
        if (scheme_type == "Newmark" or scheme_type == "Bossak"):
            #~ self.main_model_part.ProcessInfo[KratosSolid.RAYLEIGH_ALPHA] = 0.0
            #~ self.main_model_part.ProcessInfo[KratosSolid.RAYLEIGH_BETA ] = 0.0

            if (component_wise):
                mechanical_scheme = KratosSolid.ComponentWiseBossakScheme(
                    self.settings["damp_factor_m"].GetDouble(),
                    self.settings["dynamic_factor"].GetDouble())
            else:
                mechanical_scheme = KratosMultiphysics.ResidualBasedBossakDisplacementScheme(
                    self.settings["damp_factor_m"].GetDouble())

        return mechanical_scheme
    def _create_solution_scheme(self):

        integration_method = self.time_integration_settings[
            "integration_method"].GetString()

        if (integration_method == "Linear"):
            mechanical_scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme(
            )
        elif (integration_method == "Non-Linear"):
            if (self.solving_strategy_settings["builder_type"].GetString() ==
                    "component_wise"):
                dynamic_factor = 0.0
                damp_factor_m = 0.0
                mechanical_scheme = KratosSolid.ComponentWiseBossakScheme(
                    damp_factor_m, dynamic_factor)
            else:
                mechanical_scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme(
                )
        elif (integration_method == "RotationStatic"):
            dynamic_factor = 0.0
            damp_factor_m = 0.0
            mechanical_scheme = KratosSolid.ResidualBasedRotationNewmarkScheme(
                dynamic_factor, damp_factor_m)
        elif (integration_method == "RotationEMC"):
            dynamic_factor = 0.0
            mechanical_scheme = KratosSolid.ResidualBasedRotationEMCScheme(
                dynamic_factor)
        else:
            raise Exception("Unsupported integration_method: " +
                            integration_method)

        return mechanical_scheme
示例#5
0
    def _create_solution_scheme(self):

        scheme_type = self.settings["scheme_type"].GetString()

        if (self.dynamic_settings["rayleigh_damping"].GetBool() == True):
            self.main_model_part.ProcessInfo[
                KratosSolid.RAYLEIGH_ALPHA] = self.dynamic_settings[
                    "rayleigh_alpha"].GetDouble()
            self.main_model_part.ProcessInfo[
                KratosSolid.RAYLEIGH_BETA] = self.dynamic_settings[
                    "rayleigh_beta"].GetDouble()
        else:
            self.main_model_part.ProcessInfo[KratosSolid.RAYLEIGH_ALPHA] = 0.0
            self.main_model_part.ProcessInfo[KratosSolid.RAYLEIGH_BETA] = 0.0

        if (self.settings["component_wise"].GetBool() == True):
            dynamic_factor = self.dynamic_settings["dynamic_factor"].GetDouble(
            )
            damp_factor_m = self.dynamic_settings["damp_factor_m"].GetDouble()
            mechanical_scheme = KratosSolid.ComponentWiseBossakScheme(
                damp_factor_m, dynamic_factor)
        elif (scheme_type == "Newmark"):
            damp_factor_m = 0.0
            mechanical_scheme = KratosMultiphysics.ResidualBasedBossakDisplacementScheme(
                damp_factor_m)
        elif (scheme_type == "Bossak"):
            damp_factor_m = self.dynamic_settings["damp_factor_m"].GetDouble()
            mechanical_scheme = KratosMultiphysics.ResidualBasedBossakDisplacementScheme(
                damp_factor_m)
        elif (scheme_type == "RotationNewmark"):
            dynamic_factor = self.dynamic_settings["dynamic_factor"].GetDouble(
            )  # 0,1
            damp_factor_m = self.dynamic_settings["damp_factor_m"].GetDouble()
            mechanical_scheme = KratosSolid.ResidualBasedRotationNewmarkScheme(
                dynamic_factor, damp_factor_m)
        elif (scheme_type == "RotationSimo"):
            dynamic_factor = self.dynamic_settings["dynamic_factor"].GetDouble(
            )  # 0,1
            damp_factor_m = self.dynamic_settings["damp_factor_m"].GetDouble()
            mechanical_scheme = KratosSolid.ResidualBasedRotationSimoScheme(
                dynamic_factor, damp_factor_m)
        elif (scheme_type == "RotationEMC"):
            dynamic_factor = self.dynamic_settings["dynamic_factor"].GetDouble(
            )  # 0,1
            mechanical_scheme = KratosSolid.ResidualBasedRotationEMCScheme(
                dynamic_factor)
        else:
            raise Exception("Unsupported scheme_type: " + scheme_type)

        return mechanical_scheme
示例#6
0
    def _GetSolutionScheme(self, analysis_type, component_wise,
                           compute_contact_forces):

        if (analysis_type == "Linear"):
            mechanical_scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme(
            )

        elif (analysis_type == "Non-Linear"):
            self.settings.AddEmptyValue("damp_factor_m")
            self.settings.AddEmptyValue("dynamic_factor")
            self.settings["damp_factor_m"].SetDouble(0.0)
            self.settings["dynamic_factor"].SetDouble(
                0.0)  # Quasi-static scheme

            if component_wise:
                mechanical_scheme = KratosSolid.ComponentWiseBossakScheme(
                    self.settings["damp_factor_m"].GetDouble()
                )  #static scheme needed for component_wise
            else:
                mechanical_scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme(
                )

        return mechanical_scheme
    def _create_solution_scheme(self):

        integration_method = self.time_integration_settings[
            "integration_method"].GetString()

        if (self.implicit_solver_settings["rayleigh_damping"].GetBool() == True
            ):
            self.process_info[
                KratosSolid.RAYLEIGH_ALPHA] = self.implicit_solver_settings[
                    "rayleigh_alpha"].GetDouble()
            self.process_info[
                KratosSolid.RAYLEIGH_BETA] = self.implicit_solver_settings[
                    "rayleigh_beta"].GetDouble()
        else:
            self.process_info[KratosSolid.RAYLEIGH_ALPHA] = 0.0
            self.process_info[KratosSolid.RAYLEIGH_BETA] = 0.0

        # compute mass lumped matrix
        if (self.implicit_solver_settings["lumped_mass_matrix"].GetBool() ==
                True):
            self.process_info[
                KratosMultiphysics.COMPUTE_LUMPED_MASS_MATRIX] = True
        else:
            # compute consistent dynamic tangent/mass matrix
            if (self.implicit_solver_settings["consistent_mass_matrix"].
                    GetBool() == True):
                self.process_info[
                    KratosMultiphysics.COMPUTE_DYNAMIC_TANGENT] = True

        if (self.solving_strategy_settings["builder_type"].GetString() ==
                "component_wise"):
            dynamic_factor = self.implicit_solver_settings[
                "dynamic_factor"].GetDouble()
            damp_factor_m = self.implicit_solver_settings[
                "bossak_factor"].GetDouble()
            mechanical_scheme = KratosSolid.ComponentWiseBossakScheme(
                damp_factor_m, dynamic_factor)
        elif (integration_method == "Newmark"):
            # integration method for the integration of the imposed variable components
            time_integration_method = KratosSolid.NewmarkMethod()
            time_integration_method.AddToProcessInfo(
                KratosSolid.TIME_INTEGRATION_METHOD, time_integration_method,
                self.process_info)
            #damp_factor_m = 0.0
            #mechanical_scheme = KratosMultiphysics.ResidualBasedBossakDisplacementScheme(damp_factor_m)
            mechanical_scheme = KratosSolid.ResidualBasedDisplacementNewmarkScheme(
            )
        elif (integration_method == "Bossak"):
            bossak_factor = self.implicit_solver_settings[
                "bossak_factor"].GetDouble()
            self.process_info[KratosMultiphysics.BOSSAK_ALPHA] = bossak_factor
            # integration method for the integration of the imposed variable components
            time_integration_method = KratosSolid.BossakMethod()
            time_integration_method.AddToProcessInfo(
                KratosSolid.TIME_INTEGRATION_METHOD, time_integration_method,
                self.process_info)
            #mechanical_scheme = KratosMultiphysics.ResidualBasedBossakDisplacementScheme(bossak_factor)
            mechanical_scheme = KratosSolid.ResidualBasedDisplacementBossakScheme(
            )
        elif (integration_method == "RotationNewmark"):
            dynamic_factor = self.implicit_solver_settings[
                "dynamic_factor"].GetDouble()  # 0,1
            damp_factor_m = self.implicit_solver_settings[
                "bossak_factor"].GetDouble()
            mechanical_scheme = KratosSolid.ResidualBasedRotationNewmarkScheme(
                dynamic_factor, damp_factor_m)
        elif (integration_method == "RotationSimo"):
            dynamic_factor = self.implicit_solver_settings[
                "dynamic_factor"].GetDouble()  # 0,1
            damp_factor_m = self.implicit_solver_settings[
                "bossak_factor"].GetDouble()
            mechanical_scheme = KratosSolid.ResidualBasedRotationSimoScheme(
                dynamic_factor, damp_factor_m)
        elif (integration_method == "RotationEMC"):
            dynamic_factor = self.implicit_solver_settings[
                "dynamic_factor"].GetDouble()  # 0,1
            mechanical_scheme = KratosSolid.ResidualBasedRotationEMCScheme(
                dynamic_factor)
        else:
            raise Exception("Unsupported integration_method: " +
                            integration_method)

        return mechanical_scheme
示例#8
0
    def _create_solution_scheme(self):

        integration_method = self.time_integration_settings[
            "integration_method"].GetString()

        if (integration_method == "Linear"):
            #mechanical_scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme()
            time_integration_method = KratosSolid.StaticMethod()
            time_integration_method.AddToProcessInfo(
                KratosSolid.TIME_INTEGRATION_METHOD, time_integration_method,
                self.process_info)
            time_integration_method.SetParameters(self.process_info)
            angular_time_integration_method = KratosSolid.StaticMethod(
            )  #shells
            angular_time_integration_method.AddToProcessInfo(
                KratosSolid.ANGULAR_TIME_INTEGRATION_METHOD,
                angular_time_integration_method, self.process_info)
            angular_time_integration_method.SetParameters(self.process_info)
            mechanical_scheme = KratosSolid.ResidualBasedDisplacementStaticScheme(
            )
        elif (integration_method == "Non-Linear"):
            if (self.solving_strategy_settings["builder_type"].GetString() ==
                    "component_wise"):
                dynamic_factor = 0.0
                damp_factor_m = 0.0
                mechanical_scheme = KratosSolid.ComponentWiseBossakScheme(
                    damp_factor_m, dynamic_factor)
            else:
                mechanical_scheme = KratosMultiphysics.ResidualBasedIncrementalUpdateStaticScheme(
                )
                time_integration_method = KratosSolid.StaticMethod()
                time_integration_method.AddToProcessInfo(
                    KratosSolid.TIME_INTEGRATION_METHOD,
                    time_integration_method, self.process_info)
                time_integration_method.SetParameters(self.process_info)
                angular_time_integration_method = KratosSolid.StaticMethod(
                )  #shells
                angular_time_integration_method.AddToProcessInfo(
                    KratosSolid.ANGULAR_TIME_INTEGRATION_METHOD,
                    angular_time_integration_method, self.process_info)
                angular_time_integration_method.SetParameters(
                    self.process_info)
                #mechanical_scheme = KratosSolid.ResidualBasedDisplacementStaticScheme()

        elif (integration_method == "RotationStatic"):
            #dynamic_factor = 0.0
            #damp_factor_m  = 0.0
            #mechanical_scheme = KratosSolid.ResidualBasedRotationNewmarkScheme(dynamic_factor, damp_factor_m)
            time_integration_method = KratosSolid.StaticStepMethod()
            time_integration_method.AddToProcessInfo(
                KratosSolid.TIME_INTEGRATION_METHOD, time_integration_method,
                self.process_info)
            time_integration_method.SetParameters(self.process_info)
            angular_time_integration_method = KratosSolid.StaticStepRotationMethod(
            )
            angular_time_integration_method.AddToProcessInfo(
                KratosSolid.ANGULAR_TIME_INTEGRATION_METHOD,
                angular_time_integration_method, self.process_info)
            angular_time_integration_method.SetParameters(self.process_info)
            mechanical_scheme = KratosSolid.ResidualBasedDisplacementRotationStaticScheme(
            )
        else:
            raise Exception("Unsupported integration_method: " +
                            integration_method)

        return mechanical_scheme