From 56056a491da43e20f07c1d923da9995f6ded3ef0 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Sun, 3 Mar 2019 21:05:43 +0100 Subject: [PATCH] FEM: unit tests, add tests for von mises and prinzipal stress calculation --- src/Mod/Fem/femtest/testresult.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/Mod/Fem/femtest/testresult.py b/src/Mod/Fem/femtest/testresult.py index 54c072f987..fb7a7b09d8 100644 --- a/src/Mod/Fem/femtest/testresult.py +++ b/src/Mod/Fem/femtest/testresult.py @@ -222,6 +222,36 @@ class TestResult(unittest.TestCase): self.assertEqual(read_mflow, expected_mflow, "Values of read mflow result data are unexpected") self.assertEqual(read_npressure, expected_npressure, "Values of read npressure result data are unexpected") + def get_stress_values(self): + # node 5 von calculix cantilver 3D example + # doc = FreeCAD.open(FreeCAD.ConfigGet("AppHomePath") + 'data/examples/FemCalculixCantilever3D.FCStd') + # doc.Box_Mesh.FemMesh.Nodes[5] + # Vector (0.0, 1000.0, 0.0) + stress = ( + -4.52840E+02, # S11 + -1.94075E+02, # S22 + -1.94075E+02, # S33 + 6.11223E+01, # S12 + 6.92759E-05, # S23 + -2.60754E+01 # S31 + ) # run an analysis and copy the values from frd result file + return stress + + def test_stress_von_mises(self): + expected_mises = 283.2082 + from feminout.importToolsFem import calculate_von_mises as vm + mises = vm(self.get_stress_values()) + # fcc_print(round(mises, 4)) + self.assertEqual(round(mises, 4), expected_mises, "Calculated von Mises stress is not the expected value.") + + def test_stress_principal(self): + expected_principal = (-178.0076, -194.0749, -468.9075, 145.4499) + from feminout.importToolsFem import calculate_principal_stress as pr + prin = pr(self.get_stress_values()) + rounded_prin = (round(prin[0], 4), round(prin[1], 4), round(prin[2], 4), round(prin[3], 4)) + # fcc_print(rounded_prin) + self.assertEqual(rounded_prin, expected_principal, "Calculated principal stresses are not the expected values.") + def tearDown(self): FreeCAD.closeDocument(self.doc_name) pass