def test_solid_cog(self): dim = 2 current_model = KratosMultiphysics.Model() mp = current_model.CreateModelPart("structural_part_solids") mp.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = dim mp.SetBufferSize(2) self._apply_solid_material_properties(mp) #create nodes mp.CreateNewNode(1, 0.5, 0.5, 0.0) mp.CreateNewNode(2, 0.7, 0.2, 0.0) mp.CreateNewNode(3, 0.9, 0.8, 0.0) mp.CreateNewNode(4, 0.3, 0.7, 0.0) mp.CreateNewNode(5, 0.6, 0.6, 0.0) #create Element mp.CreateNewElement("TotalLagrangianElement2D3N", 1, [1, 2, 5], mp.GetProperties()[1]) mp.CreateNewElement("TotalLagrangianElement2D3N", 2, [2, 3, 5], mp.GetProperties()[1]) mp.CreateNewElement("TotalLagrangianElement2D3N", 3, [3, 4, 5], mp.GetProperties()[1]) mp.CreateNewElement("TotalLagrangianElement2D3N", 4, [4, 1, 5], mp.GetProperties()[1]) cog_process = StructuralMechanicsApplication.ComputeCenterOfGravityProcess( mp) cog_process.Execute() center_of_gravity = mp.ProcessInfo[ StructuralMechanicsApplication.CENTER_OF_GRAVITY] self.assertAlmostEqual(0.6416666667, center_of_gravity[0]) self.assertAlmostEqual(0.5729166667, center_of_gravity[1]) self.assertAlmostEqual(0.0, center_of_gravity[2])
def test_beam_cog(self): dim = 3 nr_nodes = 11 nr_elements = nr_nodes - 1 current_model = KratosMultiphysics.Model() mp = current_model.CreateModelPart("structural_part_beams") mp.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = dim self._apply_beam_material_properties(mp, dim) #create nodes dx = 1.20 / nr_elements for i in range(nr_nodes): mp.CreateNewNode(i + 1, i * dx, 0.00, 0.00) #add dofs #create Element for i in range(nr_elements): elem = mp.CreateNewElement("CrLinearBeamElement3D2N", i + 1, [i + 1, i + 2], mp.GetProperties()[0]) cog_process = StructuralMechanicsApplication.ComputeCenterOfGravityProcess( mp) cog_process.Execute() center_of_gravity = mp.ProcessInfo[ StructuralMechanicsApplication.CENTER_OF_GRAVITY] self.assertAlmostEqual(0.6, center_of_gravity[0]) self.assertAlmostEqual(0.0, center_of_gravity[1]) self.assertAlmostEqual(0.0, center_of_gravity[2])
def test_shell_cog(self): dim = 3 current_model = KratosMultiphysics.Model() mp = current_model.CreateModelPart("structural_part_shells") mp.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = dim mp.SetBufferSize(2) self._apply_shell_material_properties(mp) self._create_shell_nodes(mp) self._create_shell_elements(mp) cog_process = StructuralMechanicsApplication.ComputeCenterOfGravityProcess( mp) cog_process.Execute() center_of_gravity = mp.ProcessInfo[ StructuralMechanicsApplication.CENTER_OF_GRAVITY] self.assertAlmostEqual(0.0723057, center_of_gravity[0]) self.assertAlmostEqual(0.0517395, center_of_gravity[1]) self.assertAlmostEqual(0.0269436, center_of_gravity[2])
def test_nodal_cog(self): dim = 3 nr_nodes = 4 current_model = KratosMultiphysics.Model() mp = current_model.CreateModelPart("structural_part_nodal_masses") mp.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = dim #create nodes dx = 1.2 for i in range(nr_nodes): mp.CreateNewNode(i + 1, i * dx, 0.00, 0.00) #add dofs #create Element elem1 = mp.CreateNewElement("NodalConcentratedElement2D1N", 1, [1], mp.GetProperties()[0]) elem2 = mp.CreateNewElement("NodalConcentratedElement2D1N", 2, [2], mp.GetProperties()[0]) elem3 = mp.CreateNewElement("NodalConcentratedElement3D1N", 3, [3], mp.GetProperties()[0]) elem4 = mp.CreateNewElement("NodalConcentratedElement3D1N", 4, [4], mp.GetProperties()[0]) elem1.SetValue(KratosMultiphysics.NODAL_MASS, 21.234) elem2.SetValue(KratosMultiphysics.NODAL_MASS, 5.234) elem3.SetValue(KratosMultiphysics.NODAL_MASS, 112.234) elem4.SetValue(KratosMultiphysics.NODAL_MASS, 78.234) cog_process = StructuralMechanicsApplication.ComputeCenterOfGravityProcess( mp) cog_process.Execute() center_of_gravity = mp.ProcessInfo[ StructuralMechanicsApplication.CENTER_OF_GRAVITY] self.assertAlmostEqual(2.5688903639, center_of_gravity[0]) self.assertAlmostEqual(0.0, center_of_gravity[1]) self.assertAlmostEqual(0.0, center_of_gravity[2])