diff --git a/src/Mod/Fem/CMakeLists.txt b/src/Mod/Fem/CMakeLists.txt index 06f01e160a..149a7c3f4e 100755 --- a/src/Mod/Fem/CMakeLists.txt +++ b/src/Mod/Fem/CMakeLists.txt @@ -170,6 +170,7 @@ SET(FemTestsFiles_SRCS SET(FemTestsCcx_SRCS femtest/data/ccx/__init__.py + femtest/data/ccx/canti_ccx_faceload_hexa20.inp femtest/data/ccx/constraint_contact_shell_shell.FCStd femtest/data/ccx/constraint_contact_shell_shell.inp femtest/data/ccx/constraint_contact_solid_solid.FCStd diff --git a/src/Mod/Fem/TestFem.py b/src/Mod/Fem/TestFem.py index 8553afd415..b518c8ca36 100644 --- a/src/Mod/Fem/TestFem.py +++ b/src/Mod/Fem/TestFem.py @@ -125,6 +125,7 @@ gf() ./bin/FreeCADCmd --run-test "femtest.app.test_femimport.TestObjectExistance.test_objects_existance" ./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_freq_analysis" ./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_static_analysis" +./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_static_constraint_force_faceload_hexa20" ./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_static_constraint_contact_shell_shell" ./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_static_constraint_contact_solid_solid" ./bin/FreeCADCmd --run-test "femtest.app.test_ccxtools.TestCcxTools.test_static_constraint_tie" @@ -173,6 +174,9 @@ unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName("femtest.a import unittest unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName("femtest.app.test_ccxtools.TestCcxTools.test_static_analysis")) +import unittest +unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName("femtest.app.test_ccxtools.TestCcxTools.test_static_constraint_force_faceload_hexa20")) + import unittest unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName("femtest.app.test_ccxtools.TestCcxTools.test_static_constraint_contact_shell_shell")) diff --git a/src/Mod/Fem/femtest/app/test_ccxtools.py b/src/Mod/Fem/femtest/app/test_ccxtools.py index e340538c1f..fc93ad9cd9 100644 --- a/src/Mod/Fem/femtest/app/test_ccxtools.py +++ b/src/Mod/Fem/femtest/app/test_ccxtools.py @@ -132,6 +132,27 @@ class TestCcxTools(unittest.TestCase): res_obj_name=res_obj_name, ) + # ******************************************************************************************** + def test_static_constraint_force_faceload_hexa20( + self + ): + # set up + from femexamples.ccx_cantilever_std import setup_cantileverhexa20faceload as setup + setup(self.active_doc, "ccxtools") + test_name = "canti ccx faceload hexa20" + base_name = "canti_ccx_faceload_hexa20" + analysis_dir = testtools.get_unit_test_tmp_dir( + self.temp_dir, + ("FEM_" + base_name), + ) + fcc_print(self.active_doc.Objects) + # test input file writing + self.input_file_writing_test( + test_name=test_name, + base_name=base_name, + analysis_dir=analysis_dir, + ) + # ******************************************************************************************** def test_static_constraint_contact_shell_shell( self diff --git a/src/Mod/Fem/femtest/data/ccx/canti_ccx_faceload_hexa20.inp b/src/Mod/Fem/femtest/data/ccx/canti_ccx_faceload_hexa20.inp new file mode 100644 index 0000000000..bbc16785e6 --- /dev/null +++ b/src/Mod/Fem/femtest/data/ccx/canti_ccx_faceload_hexa20.inp @@ -0,0 +1,469 @@ +** written by FreeCAD inp file writer for CalculiX,Abaqus meshes +** highest dimension mesh elements only. + +** Nodes +*Node, NSET=Nall +1, -2.22e-13, 0, 1000 +2, 4.460492503132e-17, 0, 0 +3, 4.460492503132e-17, 1000, 0 +4, -2.22e-13, 1000, 1000 +5, 8000, 0, 1000 +6, 8000, 0, 1.818989403546e-12 +7, 8000, 1000, 1.818989403546e-12 +8, 8000, 1000, 1000 +9, -1.664888487687e-13, 0, 750 +10, -1.109776975375e-13, 0, 500 +11, -5.546654630623e-14, 0, 250 +12, 4.460492503132e-17, 250, 0 +13, 4.460492503132e-17, 500, 0 +14, 4.460492503132e-17, 750, 0 +15, -5.546654630623e-14, 1000, 250 +16, -1.109776975375e-13, 1000, 500 +17, -1.664888487687e-13, 1000, 750 +18, -2.22e-13, 750, 1000 +19, -2.22e-13, 500, 1000 +20, -2.22e-13, 250, 1000 +21, 8000, 0, 750 +22, 8000, 0, 500 +23, 8000, 0, 250 +24, 8000, 250, 1.818989403546e-12 +25, 8000, 500, 1.818989403546e-12 +26, 8000, 750, 1.818989403546e-12 +27, 8000, 1000, 250 +28, 8000, 1000, 500 +29, 8000, 1000, 750 +30, 8000, 750, 1000 +31, 8000, 500, 1000 +32, 8000, 250, 1000 +33, 500, 0, 1.136868377216e-13 +34, 1000, 0, 2.273736754432e-13 +35, 1500, 0, 3.410605131648e-13 +36, 2000, 0, 4.547473508865e-13 +37, 2500, 0, 5.684341886081e-13 +38, 3000, 0, 6.821210263297e-13 +39, 3500, 0, 7.958078640513e-13 +40, 4000, 0, 9.094947017729e-13 +41, 4500, 0, 1.023181539495e-12 +42, 5000, 0, 1.136868377216e-12 +43, 5500, 0, 1.250555214938e-12 +44, 6000, 0, 1.364242052659e-12 +45, 6500, 0, 1.477928890381e-12 +46, 7000, 0, 1.591615728103e-12 +47, 7500, 0, 1.705302565824e-12 +48, 7500, 0, 1000 +49, 7000, 0, 1000 +50, 6500, 0, 1000 +51, 6000, 0, 1000 +52, 5500, 0, 1000 +53, 5000, 0, 1000 +54, 4500, 0, 1000 +55, 4000, 0, 1000 +56, 3500, 0, 1000 +57, 3000, 0, 1000 +58, 2500, 0, 1000 +59, 2000, 0, 1000 +60, 1500, 0, 1000 +61, 1000, 0, 1000 +62, 500, 0, 1000 +63, 500, 1000, 1.136868377216e-13 +64, 1000, 1000, 2.273736754432e-13 +65, 1500, 1000, 3.410605131648e-13 +66, 2000, 1000, 4.547473508865e-13 +67, 2500, 1000, 5.684341886081e-13 +68, 3000, 1000, 6.821210263297e-13 +69, 3500, 1000, 7.958078640513e-13 +70, 4000, 1000, 9.094947017729e-13 +71, 4500, 1000, 1.023181539495e-12 +72, 5000, 1000, 1.136868377216e-12 +73, 5500, 1000, 1.250555214938e-12 +74, 6000, 1000, 1.364242052659e-12 +75, 6500, 1000, 1.477928890381e-12 +76, 7000, 1000, 1.591615728103e-12 +77, 7500, 1000, 1.705302565824e-12 +78, 500, 1000, 1000 +79, 1000, 1000, 1000 +80, 1500, 1000, 1000 +81, 2000, 1000, 1000 +82, 2500, 1000, 1000 +83, 3000, 1000, 1000 +84, 3500, 1000, 1000 +85, 4000, 1000, 1000 +86, 4500, 1000, 1000 +87, 5000, 1000, 1000 +88, 5500, 1000, 1000 +89, 6000, 1000, 1000 +90, 6500, 1000, 1000 +91, 7000, 1000, 1000 +92, 7500, 1000, 1000 +93, -1.109776975375e-13, 250, 500 +94, -1.664888487687e-13, 500, 750 +95, -1.109776975375e-13, 500, 500 +96, -5.546654630623e-14, 500, 250 +97, -1.109776975375e-13, 750, 500 +98, 8000, 250, 500 +99, 8000, 500, 750 +100, 8000, 500, 500 +101, 8000, 500, 250 +102, 8000, 750, 500 +103, 500, 0, 500 +104, 1000, 0, 750 +105, 1000, 0, 500 +106, 1000, 0, 250 +107, 1500, 0, 500 +108, 2000, 0, 750 +109, 2000, 0, 500 +110, 2000, 0, 250 +111, 2500, 0, 500 +112, 3000, 0, 750 +113, 3000, 0, 500 +114, 3000, 0, 250 +115, 3500, 0, 500 +116, 4000, 0, 750 +117, 4000, 0, 500 +118, 4000, 0, 250 +119, 4500, 0, 500 +120, 5000, 0, 750 +121, 5000, 0, 500 +122, 5000, 0, 250 +123, 5500, 0, 500 +124, 6000, 0, 750 +125, 6000, 0, 500 +126, 6000, 0, 250 +127, 6500, 0, 500 +128, 7000, 0, 750 +129, 7000, 0, 500 +130, 7000, 0, 250 +131, 7500, 0, 500 +132, 500, 500, 1.136868377216e-13 +133, 1000, 250, 2.273736754432e-13 +134, 1000, 500, 2.273736754432e-13 +135, 1000, 750, 2.273736754432e-13 +136, 1500, 500, 3.410605131648e-13 +137, 2000, 250, 4.547473508865e-13 +138, 2000, 500, 4.547473508865e-13 +139, 2000, 750, 4.547473508865e-13 +140, 2500, 500, 5.684341886081e-13 +141, 3000, 250, 6.821210263297e-13 +142, 3000, 500, 6.821210263297e-13 +143, 3000, 750, 6.821210263297e-13 +144, 3500, 500, 7.958078640513e-13 +145, 4000, 250, 9.094947017729e-13 +146, 4000, 500, 9.094947017729e-13 +147, 4000, 750, 9.094947017729e-13 +148, 4500, 500, 1.023181539495e-12 +149, 5000, 250, 1.136868377216e-12 +150, 5000, 500, 1.136868377216e-12 +151, 5000, 750, 1.136868377216e-12 +152, 5500, 500, 1.250555214938e-12 +153, 6000, 250, 1.364242052659e-12 +154, 6000, 500, 1.364242052659e-12 +155, 6000, 750, 1.364242052659e-12 +156, 6500, 500, 1.477928890381e-12 +157, 7000, 250, 1.591615728103e-12 +158, 7000, 500, 1.591615728103e-12 +159, 7000, 750, 1.591615728103e-12 +160, 7500, 500, 1.705302565824e-12 +161, 500, 1000, 500 +162, 1000, 1000, 250 +163, 1000, 1000, 500 +164, 1000, 1000, 750 +165, 1500, 1000, 500 +166, 2000, 1000, 250 +167, 2000, 1000, 500 +168, 2000, 1000, 750 +169, 2500, 1000, 500 +170, 3000, 1000, 250 +171, 3000, 1000, 500 +172, 3000, 1000, 750 +173, 3500, 1000, 500 +174, 4000, 1000, 250 +175, 4000, 1000, 500 +176, 4000, 1000, 750 +177, 4500, 1000, 500 +178, 5000, 1000, 250 +179, 5000, 1000, 500 +180, 5000, 1000, 750 +181, 5500, 1000, 500 +182, 6000, 1000, 250 +183, 6000, 1000, 500 +184, 6000, 1000, 750 +185, 6500, 1000, 500 +186, 7000, 1000, 250 +187, 7000, 1000, 500 +188, 7000, 1000, 750 +189, 7500, 1000, 500 +190, 500, 500, 1000 +191, 1000, 750, 1000 +192, 1000, 500, 1000 +193, 1000, 250, 1000 +194, 1500, 500, 1000 +195, 2000, 750, 1000 +196, 2000, 500, 1000 +197, 2000, 250, 1000 +198, 2500, 500, 1000 +199, 3000, 750, 1000 +200, 3000, 500, 1000 +201, 3000, 250, 1000 +202, 3500, 500, 1000 +203, 4000, 750, 1000 +204, 4000, 500, 1000 +205, 4000, 250, 1000 +206, 4500, 500, 1000 +207, 5000, 750, 1000 +208, 5000, 500, 1000 +209, 5000, 250, 1000 +210, 5500, 500, 1000 +211, 6000, 750, 1000 +212, 6000, 500, 1000 +213, 6000, 250, 1000 +214, 6500, 500, 1000 +215, 7000, 750, 1000 +216, 7000, 500, 1000 +217, 7000, 250, 1000 +218, 7500, 500, 1000 +219, 500, 500, 500 +220, 1000, 250, 500 +221, 1000, 500, 750 +222, 1000, 500, 500 +223, 1000, 500, 250 +224, 1000, 750, 500 +225, 1500, 500, 500 +226, 2000, 250, 500 +227, 2000, 500, 750 +228, 2000, 500, 500 +229, 2000, 500, 250 +230, 2000, 750, 500 +231, 2500, 500, 500 +232, 3000, 250, 500 +233, 3000, 500, 750 +234, 3000, 500, 500 +235, 3000, 500, 250 +236, 3000, 750, 500 +237, 3500, 500, 500 +238, 4000, 250, 500 +239, 4000, 500, 750 +240, 4000, 500, 500 +241, 4000, 500, 250 +242, 4000, 750, 500 +243, 4500, 500, 500 +244, 5000, 250, 500 +245, 5000, 500, 750 +246, 5000, 500, 500 +247, 5000, 500, 250 +248, 5000, 750, 500 +249, 5500, 500, 500 +250, 6000, 250, 500 +251, 6000, 500, 750 +252, 6000, 500, 500 +253, 6000, 500, 250 +254, 6000, 750, 500 +255, 6500, 500, 500 +256, 7000, 250, 500 +257, 7000, 500, 750 +258, 7000, 500, 500 +259, 7000, 500, 250 +260, 7000, 750, 500 +261, 7500, 500, 500 + + +** Volume elements +*Element, TYPE=C3D20, ELSET=Evolumes +1, 1, 10, 95, 19, 61, 105, 222, 192, 9, 93, 94, 20, 104, 220, 221, +193, 62, 103, 219, 190, +2, 10, 2, 13, 95, 105, 34, 134, 222, 11, 12, 96, 93, 106, 133, 223, +220, 103, 33, 132, 219, +3, 19, 95, 16, 4, 192, 222, 163, 79, 94, 97, 17, 18, 221, 224, 164, +191, 190, 219, 161, 78, +4, 95, 13, 3, 16, 222, 134, 64, 163, 96, 14, 15, 97, 223, 135, 162, +224, 219, 132, 63, 161, +5, 61, 105, 222, 192, 59, 109, 228, 196, 104, 220, 221, 193, 108, 226, 227, +197, 60, 107, 225, 194, +6, 105, 34, 134, 222, 109, 36, 138, 228, 106, 133, 223, 220, 110, 137, 229, +226, 107, 35, 136, 225, +7, 192, 222, 163, 79, 196, 228, 167, 81, 221, 224, 164, 191, 227, 230, 168, +195, 194, 225, 165, 80, +8, 222, 134, 64, 163, 228, 138, 66, 167, 223, 135, 162, 224, 229, 139, 166, +230, 225, 136, 65, 165, +9, 59, 109, 228, 196, 57, 113, 234, 200, 108, 226, 227, 197, 112, 232, 233, +201, 58, 111, 231, 198, +10, 109, 36, 138, 228, 113, 38, 142, 234, 110, 137, 229, 226, 114, 141, 235, +232, 111, 37, 140, 231, +11, 196, 228, 167, 81, 200, 234, 171, 83, 227, 230, 168, 195, 233, 236, 172, +199, 198, 231, 169, 82, +12, 228, 138, 66, 167, 234, 142, 68, 171, 229, 139, 166, 230, 235, 143, 170, +236, 231, 140, 67, 169, +13, 57, 113, 234, 200, 55, 117, 240, 204, 112, 232, 233, 201, 116, 238, 239, +205, 56, 115, 237, 202, +14, 113, 38, 142, 234, 117, 40, 146, 240, 114, 141, 235, 232, 118, 145, 241, +238, 115, 39, 144, 237, +15, 200, 234, 171, 83, 204, 240, 175, 85, 233, 236, 172, 199, 239, 242, 176, +203, 202, 237, 173, 84, +16, 234, 142, 68, 171, 240, 146, 70, 175, 235, 143, 170, 236, 241, 147, 174, +242, 237, 144, 69, 173, +17, 55, 117, 240, 204, 53, 121, 246, 208, 116, 238, 239, 205, 120, 244, 245, +209, 54, 119, 243, 206, +18, 117, 40, 146, 240, 121, 42, 150, 246, 118, 145, 241, 238, 122, 149, 247, +244, 119, 41, 148, 243, +19, 204, 240, 175, 85, 208, 246, 179, 87, 239, 242, 176, 203, 245, 248, 180, +207, 206, 243, 177, 86, +20, 240, 146, 70, 175, 246, 150, 72, 179, 241, 147, 174, 242, 247, 151, 178, +248, 243, 148, 71, 177, +21, 53, 121, 246, 208, 51, 125, 252, 212, 120, 244, 245, 209, 124, 250, 251, +213, 52, 123, 249, 210, +22, 121, 42, 150, 246, 125, 44, 154, 252, 122, 149, 247, 244, 126, 153, 253, +250, 123, 43, 152, 249, +23, 208, 246, 179, 87, 212, 252, 183, 89, 245, 248, 180, 207, 251, 254, 184, +211, 210, 249, 181, 88, +24, 246, 150, 72, 179, 252, 154, 74, 183, 247, 151, 178, 248, 253, 155, 182, +254, 249, 152, 73, 181, +25, 51, 125, 252, 212, 49, 129, 258, 216, 124, 250, 251, 213, 128, 256, 257, +217, 50, 127, 255, 214, +26, 125, 44, 154, 252, 129, 46, 158, 258, 126, 153, 253, 250, 130, 157, 259, +256, 127, 45, 156, 255, +27, 212, 252, 183, 89, 216, 258, 187, 91, 251, 254, 184, 211, 257, 260, 188, +215, 214, 255, 185, 90, +28, 252, 154, 74, 183, 258, 158, 76, 187, 253, 155, 182, 254, 259, 159, 186, +260, 255, 156, 75, 185, +29, 49, 129, 258, 216, 5, 22, 100, 31, 128, 256, 257, 217, 21, 98, 99, +32, 48, 131, 261, 218, +30, 129, 46, 158, 258, 22, 6, 25, 100, 130, 157, 259, 256, 23, 24, 101, +98, 131, 47, 160, 261, +31, 216, 258, 187, 91, 31, 100, 28, 8, 257, 260, 188, 215, 99, 102, 29, +30, 218, 261, 189, 92, +32, 258, 158, 76, 187, 100, 25, 7, 28, 259, 159, 186, 260, 101, 26, 27, +102, 261, 160, 77, 189, + +** Define element set Eall +*ELSET, ELSET=Eall +Evolumes + + + +*********************************************************** +** Element sets for materials and FEM element type (solid, shell, beam, fluid) +** written by write_element_sets_material_and_femelement_type function +*ELSET,ELSET=FemMaterialSolid +Evolumes + +*********************************************************** +** Node sets for fixed constraint +** written by write_node_sets_constraints_fixed function +** ConstraintFixed +*NSET,NSET=ConstraintFixed +1, +2, +3, +4, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +93, +94, +95, +96, +97, + +*********************************************************** +** Materials +** written by write_materials function +** Young's modulus unit is MPa = N/mm2 +** FreeCAD material name: CalculiX-Steel +** FemMaterial +*MATERIAL, NAME=FemMaterial +*ELASTIC +210000, 0.300 + +*********************************************************** +** Sections +** written by write_femelementsets function +*SOLID SECTION, ELSET=FemMaterialSolid, MATERIAL=FemMaterial + +*********************************************************** +** At least one step is needed to run an CalculiX analysis of FreeCAD +** written by write_step_begin function +*STEP +*STATIC + + +*********************************************************** +** Fixed Constraints +** written by write_constraints_fixed function +** ConstraintFixed +*BOUNDARY +ConstraintFixed,1 +ConstraintFixed,2 +ConstraintFixed,3 + + +*********************************************************** +** Node loads Constraints +** written by write_constraints_force function +*CLOAD +** ConstraintForce +** node loads on shape: Box:Face2 +5,3,1.8750000000000E+05 +6,3,1.8750000000000E+05 +7,3,1.8750000000000E+05 +8,3,1.8750000000000E+05 +21,3,-7.5000000000000E+05 +22,3,3.7500000000000E+05 +23,3,-7.5000000000000E+05 +24,3,-7.5000000000000E+05 +25,3,3.7500000000000E+05 +26,3,-7.5000000000000E+05 +27,3,-7.5000000000000E+05 +28,3,3.7500000000000E+05 +29,3,-7.5000000000000E+05 +30,3,-7.5000000000000E+05 +31,3,3.7500000000000E+05 +32,3,-7.5000000000000E+05 +98,3,-1.5000000000000E+06 +99,3,-1.5000000000000E+06 +100,3,7.5000000000000E+05 +101,3,-1.5000000000000E+06 +102,3,-1.5000000000000E+06 + + + +*********************************************************** +** Outputs --> frd file +** written by write_outputs_types function +*NODE FILE +U +*EL FILE +S, E +** outputs --> dat file +** reaction forces for Constraint fixed +*NODE PRINT, NSET=ConstraintFixed, TOTALS=ONLY +RF + + +*********************************************************** +** written by write_step_end function +*END STEP + +*********************************************************** +** CalculiX Input file +** written by write_footer function +** written by --> FreeCAD 0.19.19767 (Git) +** written on --> Sun Mar 1 22:34:34 2020 +** file name --> CantilverHexa20FaceLoad.FCStd +** analysis name --> Analysis +** +** +** +** Units +** +** Geometry (mesh data) --> mm +** Materials (Young's modulus) --> N/mm2 = MPa +** Loads (nodal loads) --> N +**