def test_beam_moi(self): dim = 3 nr_nodes = 100 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) # create elements for i in range(nr_elements): elem = mp.CreateNewElement("CrLinearBeamElement3D2N", i + 1, [i + 1, i + 2], mp.GetProperties()[0]) p1 = KratosMultiphysics.Point(0.6, 0.0, 0.0) p2 = KratosMultiphysics.Point(0.6, 2.0, 0.0) moi_process = StructuralMechanicsApplication.ComputeMassMomentOfInertiaProcess( mp, p1, p2) moi_process.Execute() moment_of_inertia = mp.ProcessInfo[ StructuralMechanicsApplication.MASS_MOMENT_OF_INERTIA] self.assertAlmostEqual(11.3028466, moment_of_inertia)
def test_solid_moi(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.0,0.0,0.0) mp.CreateNewNode(2,0.3,0.0,0.0) mp.CreateNewNode(3,0.3,0.2,0.0) mp.CreateNewNode(4,0.0,0.2,0.0) mp.CreateNewNode(5,0.8,0.0,0.0) mp.CreateNewNode(6,0.8,0.2,0.0) mp.CreateNewNode(7,0.8,0.5,0.0) mp.CreateNewNode(8,0.3,0.5,0.0) mp.CreateNewNode(9,0.0,0.5,0.0) # create elements mp.CreateNewElement("TotalLagrangianElement2D4N", 1, [1,2,3,4], mp.GetProperties()[1]) mp.CreateNewElement("TotalLagrangianElement2D4N", 2, [2,5,6,3], mp.GetProperties()[1]) mp.CreateNewElement("TotalLagrangianElement2D4N", 3, [3,6,7,8], mp.GetProperties()[1]) mp.CreateNewElement("TotalLagrangianElement2D4N", 4, [4,3,8,9], mp.GetProperties()[1]) p1 = KratosMultiphysics.Point(0.4, 0.25, 0.0) p2 = KratosMultiphysics.Point(0.4, 0.25, 1.0) moi_process = StructuralMechanicsApplication.ComputeMassMomentOfInertiaProcess(mp,p1,p2) moi_process.Execute() moment_of_inertia = mp.ProcessInfo[StructuralMechanicsApplication.MASS_MOMENT_OF_INERTIA] self.assertAlmostEqual(0.021, moment_of_inertia)
def test_nodal_moi(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) # create elements 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) p1 = KratosMultiphysics.Point(1.8, 0.0, 0.0) p2 = KratosMultiphysics.Point(1.8, 2.0, 0.0) moi_process = StructuralMechanicsApplication.ComputeMassMomentOfInertiaProcess(mp, p1, p2) moi_process.Execute() moment_of_inertia = mp.ProcessInfo[StructuralMechanicsApplication.MASS_MOMENT_OF_INERTIA] self.assertAlmostEqual(364.5648, moment_of_inertia)
def test_orthotropic_shell_moi(self): dim = 3 current_model = KratosMultiphysics.Model() mp = current_model.CreateModelPart("structural_part_orthotropic_shells") mp.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = dim mp.SetBufferSize(2) self._apply_orthotropic_shell_material_properties(mp) self._create_shell_nodes(mp) self._create_shell_elements(mp) p1 = KratosMultiphysics.Point(0.5, 0.25, 0.0) p2 = KratosMultiphysics.Point(0.5, 0.25, 1.0) moi_process = StructuralMechanicsApplication.ComputeMassMomentOfInertiaProcess(mp, p1, p2) moi_process.Execute() moment_of_inertia = mp.ProcessInfo[StructuralMechanicsApplication.MASS_MOMENT_OF_INERTIA] self.assertAlmostEqual(1.4762, moment_of_inertia)