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
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
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
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