def _apply_material_properties(self, mp): #define properties mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 1000.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.20) mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 0.001) mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 700.0) mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.RAYLEIGH_ALPHA, 0.03) mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.RAYLEIGH_BETA, 0.02) mp.GetProperties()[1].SetValue( KratosMultiphysics.COMPUTE_LUMPED_MASS_MATRIX, True) constitutive_law = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw( ) mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, constitutive_law) prestress = KratosMultiphysics.Vector(3) prestress[0] = 1e4 #1e4 prestress[1] = 0.0 prestress[2] = 0.0 mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.PRESTRESS_VECTOR, prestress)
def _apply_material_properties(self, mp, dim, small_strain=True): #define properties mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 210e9) mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.3) mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 1.0) g = [0, 0, 0] mp.GetProperties()[1].SetValue(KratosMultiphysics.VOLUME_ACCELERATION, g) if (dim == 2): if (small_strain == True): cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw( ) else: self.skipTestIfApplicationsNotAvailable( "ConstitutiveLawsApplication") cl = ConstitutiveLawsApplication.HyperElasticPlaneStrain2DLaw() else: if (small_strain == True): cl = StructuralMechanicsApplication.LinearElastic3DLaw() else: self.skipTestIfApplicationsNotAvailable( "ConstitutiveLawsApplication") cl = ConstitutiveLawsApplication.HyperElastic3DLaw() mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
def _apply_material_properties(self, mp): cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw() mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl) mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 2000) mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 10000) mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.CROSS_AREA, 1.0)
def _apply_material_properties(self, mp): # Define properties mp.GetProperties()[0].SetValue(KratosMultiphysics.YOUNG_MODULUS, 1e8) mp.GetProperties()[0].SetValue(KratosMultiphysics.POISSON_RATIO, 0.3) mp.GetProperties()[0].SetValue(KratosMultiphysics.THICKNESS, 0.01) mp.GetProperties()[0].SetValue(KratosMultiphysics.DENSITY, 1.0) cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw() mp.GetProperties()[0].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
def apply_material_properties(mp,dim): #define properties mp.GetProperties()[0].SetValue(KratosMultiphysics.YOUNG_MODULUS,1000) mp.GetProperties()[0].SetValue(KratosMultiphysics.POISSON_RATIO,0.3) mp.GetProperties()[0].SetValue(KratosMultiphysics.THICKNESS,1.0) mp.GetProperties()[0].SetValue(KratosMultiphysics.DENSITY,1.0) g = [0,0,0] mp.GetProperties()[0].SetValue(KratosMultiphysics.VOLUME_ACCELERATION,g) cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw() mp.GetProperties()[0].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW,cl)
def _apply_material_properties(self, mp, dim): #define properties mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 210e9) mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.3) mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 1.0) g = [0, 0, 0] mp.GetProperties()[1].SetValue(KratosMultiphysics.VOLUME_ACCELERATION, g) if (dim == 2): cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw() else: cl = StructuralMechanicsApplication.LinearElastic3DLaw() mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
def _apply_material_properties(self, mp): #define properties mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 0.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 1.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 1.0) prestress = KratosMultiphysics.Matrix(1, 3) prestress[0, 0] = 2.0 prestress[0, 1] = 1.0 prestress[0, 2] = 0.0 mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.MEMBRANE_PRESTRESS, prestress) cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw() mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
def _apply_material_properties(self,mp): #define properties mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS,0.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO,0.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS,1.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY,1.0) prestress = KratosMultiphysics.Vector(3) prestress[0]=2.0 prestress[1]=1.0 prestress[2]=0.0 mp.GetProperties()[1].SetValue(StructuralMechanicsApplication.PRESTRESS_VECTOR,prestress) cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw() mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW,cl) mp.GetProperties()[1].SetValue(StructuralMechanicsApplication.PROJECTION_TYPE_COMBO,"planar")
def _apply_material_properties(self, mp): #define properties mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 1000.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.20) mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 0.001) mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 700.0) mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.RAYLEIGH_ALPHA, 0.03) mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.RAYLEIGH_BETA, 0.02) constitutive_law = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw( ) local_axis_1 = KratosMultiphysics.Vector(3) local_axis_1[0] = 1.0 local_axis_1[1] = 0.0 local_axis_1[2] = 0.0 local_axis_2 = KratosMultiphysics.Vector(3) local_axis_2[0] = 0.0 local_axis_2[1] = 0.0 local_axis_2[2] = 1.0 mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, constitutive_law) mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.PROJECTION_TYPE_COMBO, "planar") mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.PRESTRESS_AXIS_1_GLOBAL, local_axis_1) mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.PRESTRESS_AXIS_2_GLOBAL, local_axis_2) prestress = KratosMultiphysics.Vector(3) prestress[0] = 1e4 #1e4 prestress[1] = 0.0 prestress[2] = 0.0 mp.GetProperties()[1].SetValue( StructuralMechanicsApplication.PRESTRESS_VECTOR, prestress)
def _apply_material_properties(self, mp): cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw() mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
def test_membrane_wrinkling_law(self): self.skipTestIfApplicationsNotAvailable("ConstitutiveLawsApplication") current_model = KratosMultiphysics.Model() mp = current_model.CreateModelPart("Structure") mp.SetBufferSize(2) mp.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = 3 self._add_variables(mp) # add properties and subproperties mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 206900000000.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.30) mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 0.0001) mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 7850.0) constitutive_law = ConstitutiveLawsApplication.WrinklingLinear2DLaw() mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, constitutive_law) sub_constitutive_law = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw( ) mp.GetProperties()[2].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, sub_constitutive_law) mp.GetProperties()[1].AddSubProperties(mp.GetProperties()[2]) # create nodes mp.CreateNewNode(1, 0.0000000000, 1.0000000000, 0.0000000000) mp.CreateNewNode(2, 0.0000000000, 0.0000000000, 0.0000000000) mp.CreateNewNode(3, 1.0000000000, 1.0000000000, 0.0000000000) mp.CreateNewNode(4, 1.0000000000, 0.0000000000, 0.0000000000) # add dofs self._add_dofs(mp) # create element element_name = "MembraneElement3D4N" mp.CreateNewElement(element_name, 1, [4, 3, 1, 2], mp.GetProperties()[1]) # create & apply dirichlet bcs bcs_dirichlet_all = mp.CreateSubModelPart( "BoundaryCondtionsDirichletAll") bcs_dirichlet_all.AddNodes([2, 4]) bcs_dirichlet_mv = mp.CreateSubModelPart( "BoundaryCondtionsDirichletMove") bcs_dirichlet_mv.AddNodes([1, 3]) self._apply_dirichlet_BCs(bcs_dirichlet_all) self._apply_dirichlet_BCs(bcs_dirichlet_mv, fix_type='YZ') # create & apply neumann bcs mp.CreateNewCondition("PointLoadCondition3D1N", 1, [1], mp.GetProperties()[1]) mp.CreateNewCondition("PointLoadCondition3D1N", 2, [3], mp.GetProperties()[1]) bcs_neumann = mp.CreateSubModelPart("BoundaryCondtionsNeumann") bcs_neumann.AddNodes([1, 3]) bcs_neumann.AddConditions([1, 2]) KratosMultiphysics.VariableUtils().SetScalarVar( StructuralMechanicsApplication.POINT_LOAD_X, 1000000.0, bcs_neumann.Nodes) # solve self._solve_static(mp) # check results self.assertAlmostEqual( mp.Nodes[1].GetSolutionStepValue( KratosMultiphysics.DISPLACEMENT_X), 0.58054148514004470, 4) self.assertAlmostEqual( mp.Nodes[3].GetSolutionStepValue( KratosMultiphysics.DISPLACEMENT_X), 0.15072065295319598, 4)
def create_constitutive_Law(): return StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()
def test_membrane_cauchy_stress_and_local_axis(self): current_model = KratosMultiphysics.Model() mp = current_model.CreateModelPart("Structure") mp.SetBufferSize(2) mp.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = 3 self._add_variables(mp) # add properties and subproperties thickness = 1.3 height = 1.2 length = 10.0 mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 500.0) mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.00) mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, thickness) mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 7850.0) mp.GetProperties()[1].SetValue( KratosMultiphysics.CONSTITUTIVE_LAW, StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()) # create nodes mp.CreateNewNode(1, -0.668004, 0.9192533, 0.3856725) mp.CreateNewNode(2, 0.0, 0.0, 0.0) mp.CreateNewNode(3, 5.966131, 7.3471293, -3.4445475) mp.CreateNewNode(4, 6.634135, 6.427876, -3.83022) # add dofs self._add_dofs(mp) # create element element_name = "MembraneElement3D4N" mp.CreateNewElement(element_name, 1, [4, 3, 1, 2], mp.GetProperties()[1]) # create & apply dirichlet bcs bcs_dirichlet_all = mp.CreateSubModelPart( "BoundaryCondtionsDirichletAll") bcs_dirichlet_all.AddNodes([1, 2]) self._apply_dirichlet_BCs(bcs_dirichlet_all) # create & apply neumann bcs mp.CreateNewCondition("PointLoadCondition3D1N", 1, [3], mp.GetProperties()[1]) mp.CreateNewCondition("PointLoadCondition3D1N", 2, [4], mp.GetProperties()[1]) bcs_neumann = mp.CreateSubModelPart("BoundaryCondtionsNeumann") bcs_neumann.AddNodes([3, 4]) bcs_neumann.AddConditions([1, 2]) point_load = 5.0 KratosMultiphysics.VariableUtils().SetScalarVar( StructuralMechanicsApplication.POINT_LOAD_X, point_load * 0.6634135, bcs_neumann.Nodes) KratosMultiphysics.VariableUtils().SetScalarVar( StructuralMechanicsApplication.POINT_LOAD_Y, point_load * 0.6427876, bcs_neumann.Nodes) KratosMultiphysics.VariableUtils().SetScalarVar( StructuralMechanicsApplication.POINT_LOAD_Z, point_load * (-0.383022), bcs_neumann.Nodes) ## 1.) with local axis calculated from element (dependent on node numbering) cauchy_stress_analytical = point_load * len( bcs_neumann.Nodes) / (thickness * height) # solve self._solve_static(mp) disp_x_i = mp.Nodes[4].GetSolutionStepValue( KratosMultiphysics.DISPLACEMENT_X) disp_y_i = mp.Nodes[4].GetSolutionStepValue( KratosMultiphysics.DISPLACEMENT_Y) disp_z_i = mp.Nodes[4].GetSolutionStepValue( KratosMultiphysics.DISPLACEMENT_Z) disp_i = (disp_x_i**2 + disp_y_i**2 + disp_z_i**2)**0.5 det_F_inv = length / (length + disp_i) for element_i in mp.Elements: pk2 = element_i.CalculateOnIntegrationPoints( KratosMultiphysics.PK2_STRESS_VECTOR, mp.ProcessInfo) cauchy = element_i.CalculateOnIntegrationPoints( KratosMultiphysics.CAUCHY_STRESS_VECTOR, mp.ProcessInfo) # check results for i in range(4): self.assertAlmostEqual(cauchy[i][0], 0.0, 5) self.assertAlmostEqual(cauchy[i][1], cauchy_stress_analytical, 5) self.assertAlmostEqual(cauchy[i][2], 0.0, 5) self.assertAlmostEqual(pk2[i][0], 0.0, 5) self.assertAlmostEqual(pk2[i][1], cauchy_stress_analytical * det_F_inv, 5) self.assertAlmostEqual(pk2[i][2], 0.0, 5) ## 2.) with local mat_axis = 0.6634135,0.6427876,-0.383022 : along forces projection_settings = KratosMultiphysics.Parameters(""" { "model_part_name" : "Structure", "projection_type" : "planar", "global_direction" : [0.6634135,0.6427876,-0.383022], "variable_name" : "LOCAL_MATERIAL_AXIS_1" } """) StructuralMechanicsApplication.ProjectVectorOnSurfaceUtility.Execute( mp, projection_settings) # solve self._solve_static(mp) disp_x_i = mp.Nodes[4].GetSolutionStepValue( KratosMultiphysics.DISPLACEMENT_X) disp_y_i = mp.Nodes[4].GetSolutionStepValue( KratosMultiphysics.DISPLACEMENT_Y) disp_z_i = mp.Nodes[4].GetSolutionStepValue( KratosMultiphysics.DISPLACEMENT_Z) disp_i = (disp_x_i**2 + disp_y_i**2 + disp_z_i**2)**0.5 det_F_inv = length / (length + disp_i) for element_i in mp.Elements: pk2 = element_i.CalculateOnIntegrationPoints( KratosMultiphysics.PK2_STRESS_VECTOR, mp.ProcessInfo) cauchy = element_i.CalculateOnIntegrationPoints( KratosMultiphysics.CAUCHY_STRESS_VECTOR, mp.ProcessInfo) # check results for i in range(4): self.assertAlmostEqual(cauchy[i][0], cauchy_stress_analytical, 5) self.assertAlmostEqual(cauchy[i][1], 0.0, 5) self.assertAlmostEqual(cauchy[i][2], 0.0, 5) self.assertAlmostEqual(pk2[i][0], cauchy_stress_analytical * det_F_inv, 5) self.assertAlmostEqual(pk2[i][1], 0.0, 5) self.assertAlmostEqual(pk2[i][2], 0.0, 5) ## 3.) with local mat_axis = 0.07537005, 0.9961943, -0.0437662 -> rotate stress state by 45° cauchy_stress_analytical /= 2.0 projection_settings = KratosMultiphysics.Parameters(""" { "model_part_name" : "Structure", "projection_type" : "planar", "global_direction" : [0.07537005, 0.9961943, -0.0437662], "variable_name" : "LOCAL_MATERIAL_AXIS_1" } """) StructuralMechanicsApplication.ProjectVectorOnSurfaceUtility.Execute( mp, projection_settings) # solve self._solve_static(mp) disp_x_i = mp.Nodes[4].GetSolutionStepValue( KratosMultiphysics.DISPLACEMENT_X) det_F_inv = length / (length + disp_x_i) for element_i in mp.Elements: cauchy = element_i.CalculateOnIntegrationPoints( KratosMultiphysics.CAUCHY_STRESS_VECTOR, mp.ProcessInfo) # check results for i in range(4): self.assertAlmostEqual(cauchy[i][0], cauchy_stress_analytical, 5) self.assertAlmostEqual(cauchy[i][1], cauchy_stress_analytical, 5) self.assertAlmostEqual(abs(cauchy[i][2]), cauchy_stress_analytical, 5)
def test_specifications_utilities_elements_dependencies(self): current_model = KratosMultiphysics.Model() model_part = current_model.CreateModelPart("Main") node1 = model_part.CreateNewNode(1, 0.0, 0.0, 0.0) node2 = model_part.CreateNewNode(2, 1.0, 0.0, 0.0) node3 = model_part.CreateNewNode(3, 1.0, 1.0, 0.0) prop1 = KratosMultiphysics.Properties(1) model_part.AddProperties(prop1) prop1.SetValue( KratosMultiphysics.CONSTITUTIVE_LAW, StructuralMechanicsApplication.LinearElasticPlaneStrain2DLaw()) elem1 = model_part.CreateNewElement("SmallDisplacementElement2D3N", 1, [1, 2, 3], model_part.GetProperties()[1]) elem1.Initialize(model_part.ProcessInfo) self.assertEqual(model_part.GetNodalSolutionStepDataSize(), 0) KratosMultiphysics.SpecificationsUtilities.AddMissingVariables( model_part) self.assertEqual(model_part.GetNodalSolutionStepDataSize(), 3) self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_X), False) self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_Y), False) self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_Z), False) KratosMultiphysics.SpecificationsUtilities.AddMissingDofs(model_part) self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_X), True) self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_Y), True) self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_Z), True) self.assertEqual( KratosMultiphysics.SpecificationsUtilities. DetermineTimeIntegration(model_part).sort(), ['explicit', 'static', 'implicit'].sort()) self.assertEqual( KratosMultiphysics.SpecificationsUtilities.DetermineFramework( model_part), "lagrangian") self.assertEqual( KratosMultiphysics.SpecificationsUtilities.DetermineSymmetricLHS( model_part), True) self.assertEqual( KratosMultiphysics.SpecificationsUtilities. DeterminePositiveDefiniteLHS(model_part), True) self.assertEqual( KratosMultiphysics.SpecificationsUtilities. DetermineIfCompatibleGeometries(model_part), True) self.assertEqual( KratosMultiphysics.SpecificationsUtilities. DetermineIfRequiresTimeIntegration(model_part), True) self.assertEqual( KratosMultiphysics.SpecificationsUtilities. CheckCompatibleConstitutiveLaws(model_part), True) self.assertEqual( KratosMultiphysics.SpecificationsUtilities. CheckGeometricalPolynomialDegree(model_part), -1) docu = KratosMultiphysics.Parameters( """{"SmallDisplacementElement2D3N" : "This is a pure displacement element"}""" ) self.assertEqual( KratosMultiphysics.SpecificationsUtilities.GetDocumention( model_part).IsEquivalentTo(docu), True) # Changing the law to get a False check prop1.SetValue( KratosMultiphysics.CONSTITUTIVE_LAW, StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()) elem1.Initialize(model_part.ProcessInfo) self.assertEqual( KratosMultiphysics.SpecificationsUtilities. CheckCompatibleConstitutiveLaws(model_part), False)