Merge branch 'FreeCAD:master' into FixDefaultShapeVertexColor

This commit is contained in:
Benjamin Alterauge
2021-08-05 19:03:02 +02:00
committed by GitHub
10 changed files with 1376 additions and 4 deletions

View File

@@ -90,8 +90,11 @@ SET(FemExamples_SRCS
femexamples/thermomech_bimetall.py
femexamples/thermomech_flow1d.py
femexamples/thermomech_spine.py
femexamples/truss_3d_cs_circle_ele_seg2.py
femexamples/truss_3d_cs_circle_ele_seg3.py
)
SET(FemExampleMeshes_SRCS
femexamples/meshes/__init__.py
femexamples/meshes/mesh_beamsimple_tetra10.py
@@ -128,6 +131,8 @@ SET(FemExampleMeshes_SRCS
femexamples/meshes/mesh_thermomech_spine_tetra10.py
femexamples/meshes/mesh_transform_beam_hinged_tetra10.py
femexamples/meshes/mesh_transform_torque_tetra10.py
femexamples/meshes/mesh_truss_crane_seg2.py
femexamples/meshes/mesh_truss_crane_seg3.py
)
SET(FemInOut_SRCS
@@ -322,7 +327,9 @@ SET(FemTestsCcx_SRCS
femtest/data/calculix/box.FCStd
femtest/data/calculix/ccx_buckling_flexuralbuckling.dat
femtest/data/calculix/ccx_buckling_flexuralbuckling.inp
femtest/data/calculix/ccx_cantilever_faceload.inp
femtest/data/calculix/ccx_cantilever_beam_circle.inp
femtest/data/calculix/ccx_cantilever_beam_pipe.inp
femtest/data/calculix/ccx_cantilever_beam_rect.inp
femtest/data/calculix/ccx_cantilever_ele_hexa20.inp
femtest/data/calculix/ccx_cantilever_ele_quad4.inp
femtest/data/calculix/ccx_cantilever_ele_quad8.inp
@@ -330,6 +337,7 @@ SET(FemTestsCcx_SRCS
femtest/data/calculix/ccx_cantilever_ele_seg3.inp
femtest/data/calculix/ccx_cantilever_ele_tria3.inp
femtest/data/calculix/ccx_cantilever_ele_tria6.inp
femtest/data/calculix/ccx_cantilever_faceload.inp
femtest/data/calculix/ccx_cantilever_nodeload.inp
femtest/data/calculix/ccx_cantilever_prescribeddisplacement.inp
femtest/data/calculix/constraint_centrif.inp

View File

@@ -0,0 +1,82 @@
def create_nodes(femmesh):
# nodes
femmesh.addNode(0.0, 2000.0, 0.0, 1)
femmesh.addNode(0.0, 0.0, 0.0, 2)
femmesh.addNode(2000.0, 2000.0, 0.0, 3)
femmesh.addNode(2000.0, 0.0, 0.0, 4)
femmesh.addNode(4000.0, 2000.0, 0.0, 5)
femmesh.addNode(4000.0, 0.0, 0.0, 6)
femmesh.addNode(6000.0, 2000.0, 0.0, 7)
femmesh.addNode(6000.0, 0.0, 0.0, 8)
femmesh.addNode(8000.0, 2000.0, 0.0, 9)
femmesh.addNode(8000.0, 0.0, 0.0, 10)
femmesh.addNode(10000.0, 2000.0, 0.0, 11)
femmesh.addNode(10000.0, 0.0, 0.0, 12)
femmesh.addNode(12000.0, 2000.0, 0.0, 13)
femmesh.addNode(12000.0, 0.0, 0.0, 14)
femmesh.addNode(1000.0, 1000.0, 2000.0, 15)
femmesh.addNode(3000.0, 1000.0, 2000.0, 16)
femmesh.addNode(5000.0, 1000.0, 2000.0, 17)
femmesh.addNode(7000.0, 1000.0, 2000.0, 18)
femmesh.addNode(9000.0, 1000.0, 2000.0, 19)
femmesh.addNode(11000.0, 1000.0, 2000.0, 20)
return True
def create_elements(femmesh):
# elements
femmesh.addEdge([1, 2], 1)
femmesh.addEdge([3, 4], 2)
femmesh.addEdge([5, 6], 3)
femmesh.addEdge([7, 8], 4)
femmesh.addEdge([9, 10], 5)
femmesh.addEdge([11, 12], 6)
femmesh.addEdge([13, 14], 7)
femmesh.addEdge([1, 3], 8)
femmesh.addEdge([2, 4], 9)
femmesh.addEdge([3, 5], 10)
femmesh.addEdge([4, 6], 11)
femmesh.addEdge([5, 7], 12)
femmesh.addEdge([6, 8], 13)
femmesh.addEdge([7, 9], 14)
femmesh.addEdge([8, 10], 15)
femmesh.addEdge([9, 11], 16)
femmesh.addEdge([10, 12], 17)
femmesh.addEdge([11, 13], 18)
femmesh.addEdge([12, 14], 19)
femmesh.addEdge([1, 15], 20)
femmesh.addEdge([3, 16], 21)
femmesh.addEdge([5, 17], 22)
femmesh.addEdge([7, 18], 23)
femmesh.addEdge([9, 19], 24)
femmesh.addEdge([11, 20], 25)
femmesh.addEdge([2, 15], 26)
femmesh.addEdge([4, 16], 27)
femmesh.addEdge([6, 17], 28)
femmesh.addEdge([8, 18], 29)
femmesh.addEdge([10, 19], 30)
femmesh.addEdge([12, 20], 31)
femmesh.addEdge([15, 3], 32)
femmesh.addEdge([16, 5], 33)
femmesh.addEdge([17, 7], 34)
femmesh.addEdge([18, 9], 35)
femmesh.addEdge([19, 11], 36)
femmesh.addEdge([20, 13], 37)
femmesh.addEdge([15, 4], 38)
femmesh.addEdge([16, 6], 39)
femmesh.addEdge([17, 8], 40)
femmesh.addEdge([18, 10], 41)
femmesh.addEdge([19, 12], 42)
femmesh.addEdge([20, 14], 43)
femmesh.addEdge([15, 16], 44)
femmesh.addEdge([16, 17], 45)
femmesh.addEdge([17, 18], 46)
femmesh.addEdge([18, 19], 47)
femmesh.addEdge([19, 20], 48)
femmesh.addEdge([2, 3], 49)
femmesh.addEdge([4, 5], 50)
femmesh.addEdge([6, 7], 51)
femmesh.addEdge([8, 9], 52)
femmesh.addEdge([10, 11], 53)
femmesh.addEdge([12, 13], 54)
return True

View File

@@ -0,0 +1,298 @@
def create_nodes(femmesh):
# nodes
femmesh.addNode(0.0, 2000.0, 0.0, 1)
femmesh.addNode(0.0, 0.0, 0.0, 2)
femmesh.addNode(2000.0, 2000.0, 0.0, 3)
femmesh.addNode(2000.0, 0.0, 0.0, 4)
femmesh.addNode(4000.0, 2000.0, 0.0, 5)
femmesh.addNode(4000.0, 0.0, 0.0, 6)
femmesh.addNode(6000.0, 2000.0, 0.0, 7)
femmesh.addNode(6000.0, 0.0, 0.0, 8)
femmesh.addNode(8000.0, 2000.0, 0.0, 9)
femmesh.addNode(8000.0, 0.0, 0.0, 10)
femmesh.addNode(10000.0, 2000.0, 0.0, 11)
femmesh.addNode(10000.0, 0.0, 0.0, 12)
femmesh.addNode(12000.0, 2000.0, 0.0, 13)
femmesh.addNode(12000.0, 0.0, 0.0, 14)
femmesh.addNode(1000.0, 1000.0, 2000.0, 15)
femmesh.addNode(3000.0, 1000.0, 2000.0, 16)
femmesh.addNode(5000.0, 1000.0, 2000.0, 17)
femmesh.addNode(7000.0, 1000.0, 2000.0, 18)
femmesh.addNode(9000.0, 1000.0, 2000.0, 19)
femmesh.addNode(11000.0, 1000.0, 2000.0, 20)
femmesh.addNode(0.0, 999.999999999999, 0.0, 21)
femmesh.addNode(0.0, 1499.9999999999995, 0.0, 22)
femmesh.addNode(0.0, 499.99999999999955, 0.0, 23)
femmesh.addNode(2000.0, 999.999999999999, 0.0, 24)
femmesh.addNode(2000.0, 1499.9999999999995, 0.0, 25)
femmesh.addNode(2000.0, 499.99999999999955, 0.0, 26)
femmesh.addNode(4000.0, 999.999999999999, 0.0, 27)
femmesh.addNode(4000.0, 1499.9999999999995, 0.0, 28)
femmesh.addNode(4000.0, 499.99999999999955, 0.0, 29)
femmesh.addNode(6000.0, 999.999999999999, 0.0, 30)
femmesh.addNode(6000.0, 1499.9999999999995, 0.0, 31)
femmesh.addNode(6000.0, 499.99999999999955, 0.0, 32)
femmesh.addNode(8000.0, 999.999999999999, 0.0, 33)
femmesh.addNode(8000.0, 1499.9999999999995, 0.0, 34)
femmesh.addNode(8000.0, 499.99999999999955, 0.0, 35)
femmesh.addNode(10000.0, 999.999999999999, 0.0, 36)
femmesh.addNode(10000.0, 1499.9999999999995, 0.0, 37)
femmesh.addNode(10000.0, 499.99999999999955, 0.0, 38)
femmesh.addNode(12000.0, 999.999999999999, 0.0, 39)
femmesh.addNode(12000.0, 1499.9999999999995, 0.0, 40)
femmesh.addNode(12000.0, 499.99999999999955, 0.0, 41)
femmesh.addNode(1000.000000000001, 2000.0, 0.0, 42)
femmesh.addNode(500.0000000000005, 2000.0, 0.0, 43)
femmesh.addNode(1500.0000000000005, 2000.0, 0.0, 44)
femmesh.addNode(1000.000000000001, 0.0, 0.0, 45)
femmesh.addNode(500.0000000000005, 0.0, 0.0, 46)
femmesh.addNode(1500.0000000000005, 0.0, 0.0, 47)
femmesh.addNode(3000.000000000001, 2000.0, 0.0, 48)
femmesh.addNode(2500.0000000000005, 2000.0, 0.0, 49)
femmesh.addNode(3500.0000000000005, 2000.0, 0.0, 50)
femmesh.addNode(3000.000000000001, 0.0, 0.0, 51)
femmesh.addNode(2500.0000000000005, 0.0, 0.0, 52)
femmesh.addNode(3500.0000000000005, 0.0, 0.0, 53)
femmesh.addNode(5000.000000000001, 2000.0, 0.0, 54)
femmesh.addNode(4500.000000000001, 2000.0, 0.0, 55)
femmesh.addNode(5500.0, 2000.0, 0.0, 56)
femmesh.addNode(5000.000000000001, 0.0, 0.0, 57)
femmesh.addNode(4500.000000000001, 0.0, 0.0, 58)
femmesh.addNode(5500.0, 0.0, 0.0, 59)
femmesh.addNode(7000.000000000001, 2000.0, 0.0, 60)
femmesh.addNode(6500.000000000001, 2000.0, 0.0, 61)
femmesh.addNode(7500.0, 2000.0, 0.0, 62)
femmesh.addNode(7000.000000000001, 0.0, 0.0, 63)
femmesh.addNode(6500.000000000001, 0.0, 0.0, 64)
femmesh.addNode(7500.0, 0.0, 0.0, 65)
femmesh.addNode(9000.000000000002, 2000.0, 0.0, 66)
femmesh.addNode(8500.0, 2000.0, 0.0, 67)
femmesh.addNode(9500.0, 2000.0, 0.0, 68)
femmesh.addNode(9000.000000000002, 0.0, 0.0, 69)
femmesh.addNode(8500.0, 0.0, 0.0, 70)
femmesh.addNode(9500.0, 0.0, 0.0, 71)
femmesh.addNode(11000.000000000002, 2000.0, 0.0, 72)
femmesh.addNode(10500.0, 2000.0, 0.0, 73)
femmesh.addNode(11500.0, 2000.0, 0.0, 74)
femmesh.addNode(11000.000000000002, 0.0, 0.0, 75)
femmesh.addNode(10500.0, 0.0, 0.0, 76)
femmesh.addNode(11500.0, 0.0, 0.0, 77)
femmesh.addNode(500.00000000000085, 1499.999999999999, 1000.0000000000017, 78)
femmesh.addNode(250.00000000000043, 1749.9999999999995, 500.00000000000085, 79)
femmesh.addNode(750.0000000000009, 1249.999999999999, 1500.0000000000018, 80)
femmesh.addNode(2500.000000000001, 1499.999999999999, 1000.0000000000017, 81)
femmesh.addNode(2250.0000000000005, 1749.9999999999995, 500.00000000000085, 82)
femmesh.addNode(2750.000000000001, 1249.999999999999, 1500.0000000000018, 83)
femmesh.addNode(4500.000000000001, 1499.999999999999, 1000.0000000000017, 84)
femmesh.addNode(4250.0, 1749.9999999999995, 500.00000000000085, 85)
femmesh.addNode(4750.000000000001, 1249.999999999999, 1500.0000000000018, 86)
femmesh.addNode(6500.000000000001, 1499.999999999999, 1000.0000000000017, 87)
femmesh.addNode(6250.0, 1749.9999999999995, 500.00000000000085, 88)
femmesh.addNode(6750.000000000001, 1249.999999999999, 1500.0000000000018, 89)
femmesh.addNode(8500.0, 1499.999999999999, 1000.0000000000017, 90)
femmesh.addNode(8250.0, 1749.9999999999995, 500.00000000000085, 91)
femmesh.addNode(8750.0, 1249.999999999999, 1500.0000000000018, 92)
femmesh.addNode(10500.0, 1499.999999999999, 1000.0000000000017, 93)
femmesh.addNode(10250.0, 1749.9999999999995, 500.00000000000085, 94)
femmesh.addNode(10750.0, 1249.999999999999, 1500.0000000000018, 95)
femmesh.addNode(500.00000000000085, 500.00000000000085, 1000.0000000000017, 96)
femmesh.addNode(250.00000000000043, 250.00000000000043, 500.00000000000085, 97)
femmesh.addNode(750.0000000000009, 750.0000000000009, 1500.0000000000018, 98)
femmesh.addNode(2500.000000000001, 500.00000000000085, 1000.0000000000017, 99)
femmesh.addNode(2250.0000000000005, 250.00000000000043, 500.00000000000085, 100)
femmesh.addNode(2750.000000000001, 750.0000000000009, 1500.0000000000018, 101)
femmesh.addNode(4500.000000000001, 500.00000000000085, 1000.0000000000017, 102)
femmesh.addNode(4250.0, 250.00000000000043, 500.00000000000085, 103)
femmesh.addNode(4750.000000000001, 750.0000000000009, 1500.0000000000018, 104)
femmesh.addNode(6500.000000000001, 500.00000000000085, 1000.0000000000017, 105)
femmesh.addNode(6250.0, 250.00000000000043, 500.00000000000085, 106)
femmesh.addNode(6750.000000000001, 750.0000000000009, 1500.0000000000018, 107)
femmesh.addNode(8500.0, 500.00000000000085, 1000.0000000000017, 108)
femmesh.addNode(8250.0, 250.00000000000043, 500.00000000000085, 109)
femmesh.addNode(8750.0, 750.0000000000009, 1500.0000000000018, 110)
femmesh.addNode(10500.0, 500.00000000000085, 1000.0000000000017, 111)
femmesh.addNode(10250.0, 250.00000000000043, 500.00000000000085, 112)
femmesh.addNode(10750.0, 750.0000000000009, 1500.0000000000018, 113)
femmesh.addNode(1500.000000000001, 1500.000000000001, 999.9999999999983, 114)
femmesh.addNode(1250.0000000000005, 1250.0000000000005, 1499.999999999999, 115)
femmesh.addNode(1750.000000000001, 1750.000000000001, 499.9999999999982, 116)
femmesh.addNode(3500.000000000001, 1500.000000000001, 999.9999999999983, 117)
femmesh.addNode(3250.0000000000005, 1250.0000000000005, 1499.999999999999, 118)
femmesh.addNode(3750.000000000001, 1750.000000000001, 499.9999999999982, 119)
femmesh.addNode(5500.000000000001, 1500.000000000001, 999.9999999999983, 120)
femmesh.addNode(5250.0, 1250.0000000000005, 1499.999999999999, 121)
femmesh.addNode(5750.000000000001, 1750.000000000001, 499.9999999999982, 122)
femmesh.addNode(7500.000000000001, 1500.000000000001, 999.9999999999983, 123)
femmesh.addNode(7250.0, 1250.0000000000005, 1499.999999999999, 124)
femmesh.addNode(7750.000000000001, 1750.000000000001, 499.9999999999982, 125)
femmesh.addNode(9500.0, 1500.000000000001, 999.9999999999983, 126)
femmesh.addNode(9250.0, 1250.0000000000005, 1499.999999999999, 127)
femmesh.addNode(9750.0, 1750.000000000001, 499.9999999999982, 128)
femmesh.addNode(11500.0, 1500.000000000001, 999.9999999999983, 129)
femmesh.addNode(11250.0, 1250.0000000000005, 1499.999999999999, 130)
femmesh.addNode(11750.0, 1750.000000000001, 499.9999999999982, 131)
femmesh.addNode(1500.000000000001, 499.99999999999915, 999.9999999999983, 132)
femmesh.addNode(1250.0000000000005, 749.9999999999995, 1499.999999999999, 133)
femmesh.addNode(1750.000000000001, 249.9999999999991, 499.9999999999982, 134)
femmesh.addNode(3500.000000000001, 499.99999999999915, 999.9999999999983, 135)
femmesh.addNode(3250.0000000000005, 749.9999999999995, 1499.999999999999, 136)
femmesh.addNode(3750.000000000001, 249.9999999999991, 499.9999999999982, 137)
femmesh.addNode(5500.000000000001, 499.99999999999915, 999.9999999999983, 138)
femmesh.addNode(5250.0, 749.9999999999995, 1499.999999999999, 139)
femmesh.addNode(5750.000000000001, 249.9999999999991, 499.9999999999982, 140)
femmesh.addNode(7500.000000000001, 499.99999999999915, 999.9999999999983, 141)
femmesh.addNode(7250.0, 749.9999999999995, 1499.999999999999, 142)
femmesh.addNode(7750.000000000001, 249.9999999999991, 499.9999999999982, 143)
femmesh.addNode(9500.0, 499.99999999999915, 999.9999999999983, 144)
femmesh.addNode(9250.0, 749.9999999999995, 1499.999999999999, 145)
femmesh.addNode(9750.0, 249.9999999999991, 499.9999999999982, 146)
femmesh.addNode(11500.0, 499.99999999999915, 999.9999999999983, 147)
femmesh.addNode(11250.0, 749.9999999999995, 1499.999999999999, 148)
femmesh.addNode(11750.0, 249.9999999999991, 499.9999999999982, 149)
femmesh.addNode(2000.000000000001, 1000.0, 2000.0, 150)
femmesh.addNode(1500.0000000000005, 1000.0, 2000.0, 151)
femmesh.addNode(2500.0000000000005, 1000.0, 2000.0, 152)
femmesh.addNode(4000.000000000001, 1000.0, 2000.0, 153)
femmesh.addNode(3500.0000000000005, 1000.0, 2000.0, 154)
femmesh.addNode(4500.0, 1000.0, 2000.0, 155)
femmesh.addNode(6000.000000000001, 1000.0, 2000.0, 156)
femmesh.addNode(5500.000000000001, 1000.0, 2000.0, 157)
femmesh.addNode(6500.0, 1000.0, 2000.0, 158)
femmesh.addNode(8000.000000000001, 1000.0, 2000.0, 159)
femmesh.addNode(7500.000000000001, 1000.0, 2000.0, 160)
femmesh.addNode(8500.0, 1000.0, 2000.0, 161)
femmesh.addNode(10000.000000000002, 1000.0, 2000.0, 162)
femmesh.addNode(9500.0, 1000.0, 2000.0, 163)
femmesh.addNode(10500.0, 1000.0, 2000.0, 164)
femmesh.addNode(1000.0, 1000.0, 0.0, 165)
femmesh.addNode(500.0, 500.0, 0.0, 166)
femmesh.addNode(1500.0, 1500.0, 0.0, 167)
femmesh.addNode(3000.0, 1000.0, 0.0, 168)
femmesh.addNode(2500.0, 500.0, 0.0, 169)
femmesh.addNode(3500.0, 1500.0, 0.0, 170)
femmesh.addNode(5000.0, 1000.0, 0.0, 171)
femmesh.addNode(4500.0, 500.0, 0.0, 172)
femmesh.addNode(5500.0, 1500.0, 0.0, 173)
femmesh.addNode(7000.0, 1000.0, 0.0, 174)
femmesh.addNode(6500.0, 500.0, 0.0, 175)
femmesh.addNode(7500.0, 1500.0, 0.0, 176)
femmesh.addNode(9000.0, 1000.0, 0.0, 177)
femmesh.addNode(8500.0, 500.0, 0.0, 178)
femmesh.addNode(9500.0, 1500.0, 0.0, 179)
femmesh.addNode(11000.0, 1000.0, 0.0, 180)
femmesh.addNode(10500.0, 500.0, 0.0, 181)
femmesh.addNode(11500.0, 1500.0, 0.0, 182)
return True
def create_elements(femmesh):
# elements
femmesh.addEdge([1, 21, 22], 1)
femmesh.addEdge([21, 2, 23], 2)
femmesh.addEdge([3, 24, 25], 3)
femmesh.addEdge([24, 4, 26], 4)
femmesh.addEdge([5, 27, 28], 5)
femmesh.addEdge([27, 6, 29], 6)
femmesh.addEdge([7, 30, 31], 7)
femmesh.addEdge([30, 8, 32], 8)
femmesh.addEdge([9, 33, 34], 9)
femmesh.addEdge([33, 10, 35], 10)
femmesh.addEdge([11, 36, 37], 11)
femmesh.addEdge([36, 12, 38], 12)
femmesh.addEdge([13, 39, 40], 13)
femmesh.addEdge([39, 14, 41], 14)
femmesh.addEdge([1, 42, 43], 15)
femmesh.addEdge([42, 3, 44], 16)
femmesh.addEdge([2, 45, 46], 17)
femmesh.addEdge([45, 4, 47], 18)
femmesh.addEdge([3, 48, 49], 19)
femmesh.addEdge([48, 5, 50], 20)
femmesh.addEdge([4, 51, 52], 21)
femmesh.addEdge([51, 6, 53], 22)
femmesh.addEdge([5, 54, 55], 23)
femmesh.addEdge([54, 7, 56], 24)
femmesh.addEdge([6, 57, 58], 25)
femmesh.addEdge([57, 8, 59], 26)
femmesh.addEdge([7, 60, 61], 27)
femmesh.addEdge([60, 9, 62], 28)
femmesh.addEdge([8, 63, 64], 29)
femmesh.addEdge([63, 10, 65], 30)
femmesh.addEdge([9, 66, 67], 31)
femmesh.addEdge([66, 11, 68], 32)
femmesh.addEdge([10, 69, 70], 33)
femmesh.addEdge([69, 12, 71], 34)
femmesh.addEdge([11, 72, 73], 35)
femmesh.addEdge([72, 13, 74], 36)
femmesh.addEdge([12, 75, 76], 37)
femmesh.addEdge([75, 14, 77], 38)
femmesh.addEdge([1, 78, 79], 39)
femmesh.addEdge([78, 15, 80], 40)
femmesh.addEdge([3, 81, 82], 41)
femmesh.addEdge([81, 16, 83], 42)
femmesh.addEdge([5, 84, 85], 43)
femmesh.addEdge([84, 17, 86], 44)
femmesh.addEdge([7, 87, 88], 45)
femmesh.addEdge([87, 18, 89], 46)
femmesh.addEdge([9, 90, 91], 47)
femmesh.addEdge([90, 19, 92], 48)
femmesh.addEdge([11, 93, 94], 49)
femmesh.addEdge([93, 20, 95], 50)
femmesh.addEdge([2, 96, 97], 51)
femmesh.addEdge([96, 15, 98], 52)
femmesh.addEdge([4, 99, 100], 53)
femmesh.addEdge([99, 16, 101], 54)
femmesh.addEdge([6, 102, 103], 55)
femmesh.addEdge([102, 17, 104], 56)
femmesh.addEdge([8, 105, 106], 57)
femmesh.addEdge([105, 18, 107], 58)
femmesh.addEdge([10, 108, 109], 59)
femmesh.addEdge([108, 19, 110], 60)
femmesh.addEdge([12, 111, 112], 61)
femmesh.addEdge([111, 20, 113], 62)
femmesh.addEdge([15, 114, 115], 63)
femmesh.addEdge([114, 3, 116], 64)
femmesh.addEdge([16, 117, 118], 65)
femmesh.addEdge([117, 5, 119], 66)
femmesh.addEdge([17, 120, 121], 67)
femmesh.addEdge([120, 7, 122], 68)
femmesh.addEdge([18, 123, 124], 69)
femmesh.addEdge([123, 9, 125], 70)
femmesh.addEdge([19, 126, 127], 71)
femmesh.addEdge([126, 11, 128], 72)
femmesh.addEdge([20, 129, 130], 73)
femmesh.addEdge([129, 13, 131], 74)
femmesh.addEdge([15, 132, 133], 75)
femmesh.addEdge([132, 4, 134], 76)
femmesh.addEdge([16, 135, 136], 77)
femmesh.addEdge([135, 6, 137], 78)
femmesh.addEdge([17, 138, 139], 79)
femmesh.addEdge([138, 8, 140], 80)
femmesh.addEdge([18, 141, 142], 81)
femmesh.addEdge([141, 10, 143], 82)
femmesh.addEdge([19, 144, 145], 83)
femmesh.addEdge([144, 12, 146], 84)
femmesh.addEdge([20, 147, 148], 85)
femmesh.addEdge([147, 14, 149], 86)
femmesh.addEdge([15, 150, 151], 87)
femmesh.addEdge([150, 16, 152], 88)
femmesh.addEdge([16, 153, 154], 89)
femmesh.addEdge([153, 17, 155], 90)
femmesh.addEdge([17, 156, 157], 91)
femmesh.addEdge([156, 18, 158], 92)
femmesh.addEdge([18, 159, 160], 93)
femmesh.addEdge([159, 19, 161], 94)
femmesh.addEdge([19, 162, 163], 95)
femmesh.addEdge([162, 20, 164], 96)
femmesh.addEdge([2, 165, 166], 97)
femmesh.addEdge([165, 3, 167], 98)
femmesh.addEdge([4, 168, 169], 99)
femmesh.addEdge([168, 5, 170], 100)
femmesh.addEdge([6, 171, 172], 101)
femmesh.addEdge([171, 7, 173], 102)
femmesh.addEdge([8, 174, 175], 103)
femmesh.addEdge([174, 9, 176], 104)
femmesh.addEdge([10, 177, 178], 105)
femmesh.addEdge([177, 11, 179], 106)
femmesh.addEdge([12, 180, 181], 107)
femmesh.addEdge([180, 13, 182], 108)
return True

View File

@@ -0,0 +1,79 @@
# ***************************************************************************
# * Copyright (c) 2021 Bernd Hahnebach <bernd@bimstatik.org> *
# * *
# * This file is part of the FreeCAD CAx development system. *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
import FreeCAD
import Fem
from .truss_3d_cs_circle_ele_seg3 import setup as setup_truss_seg3
from .manager import get_meshname
from .manager import init_doc
def get_information():
return {
"name": "Truss 3D circle cs, seg2 elements",
"meshtype": "edge",
"meshelement": "Seg3",
"constraints": ["fixed", "force"],
"solvers": ["z88"],
"material": "solid",
"equation": "mechanical"
}
def setup(doc=None, solvertype="z88"):
# init FreeCAD document
if doc is None:
doc = init_doc()
# explanation object
# see seg3 for the header
# for simplicity reason only one explanation is used for both
# setup cantilever faceload
doc = setup_truss_seg3(doc, solvertype)
femmesh_obj = doc.getObject(get_meshname())
# mesh
from .meshes.mesh_truss_crane_seg2 import create_nodes, create_elements
fem_mesh = Fem.FemMesh()
control = create_nodes(fem_mesh)
if not control:
FreeCAD.Console.PrintError("Error on creating nodes.\n")
control = create_elements(fem_mesh)
if not control:
FreeCAD.Console.PrintError("Error on creating elements.\n")
# overwrite mesh with the hexa20 mesh
femmesh_obj.FemMesh = fem_mesh
# set changed properties
femmesh_obj.ElementOrder = "1st"
# one element for each bar
femmesh_obj.CharacteristicLengthMax = "3000.0 mm"
femmesh_obj.CharacteristicLengthMin = "3000.0 mm"
doc.recompute()
return doc

View File

@@ -0,0 +1,476 @@
# ***************************************************************************
# * Copyright (c) 2021 Bernd Hahnebach <bernd@bimstatik.org> *
# * *
# * This file is part of the FreeCAD CAx development system. *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENCE text file. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Library General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with this program; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************
import FreeCAD
from FreeCAD import Vector as vec
from BOPTools import SplitFeatures
from Part import makeLine
import Fem
import ObjectsFem
from . import manager
from .manager import get_meshname
from .manager import init_doc
def get_information():
return {
"name": "Truss 3D circle cs, seg3 elements",
"meshtype": "edge",
"meshelement": "Seg3",
"constraints": ["fixed", "force"],
"solvers": ["calculix"],
"material": "solid",
"equation": "mechanical"
}
def get_explanation(header=""):
return header + """
# To run the example from Python console use,
# (works even after an edit without restart of FreeCAD):
import importlib
import femexamples.truss_3d_cs_circle_ele_seg3 as example
importlib.reload(example)
example.setup()
See forum topic post:
https://forum.freecadweb.org/viewtopic.php?f=18&t=23318&start=20#p521050
https://forum.freecadweb.org/viewtopic.php?f=13&t=59239&start=100#p521220
Z88 official example 2, crane beam
- nonsway (on x deformation on both support)
- in pratical engineering one would let the truss breathe on one side
- max deflection CalxuliX: 8.22 mm # but it needs four seg3 elements foreach bar
- max deflection Mystran : x.xx mm
- max deflection Z88 : 8.19 mm # one seg2 truss element foreach bar
"""
def setup(doc=None, solvertype="ccxtools"):
# init FreeCAD document
if doc is None:
doc = init_doc()
# explanation object
# just keep the following line and change text string in get_explanation method
manager.add_explanation_obj(doc, get_explanation(manager.get_header(get_information())))
# geometric object
# load line
load_line = doc.addObject("Part::Line", "LoadLine")
load_line.X1 = 0
load_line.Y1 = 0
load_line.Z1 = 1000
load_line.X2 = 0
load_line.Y2 = 0
load_line.Z2 = 0
if FreeCAD.GuiUp:
load_line.ViewObject.hide()
# commands where generated by Pyhon out of the original Z88 Mesh obj data
v1 = vec(0.0, 2000.0, 0.0)
v2 = vec(0.0, 0.0, 0.0)
v3 = vec(1000.0, 1000.0, 2000.0)
v4 = vec(2000.0, 2000.0, 0.0)
v5 = vec(2000.0, 0.0, 0.0)
v6 = vec(3000.0, 1000.0, 2000.0)
v7 = vec(4000.0, 2000.0, 0.0)
v8 = vec(4000.0, 0.0, 0.0)
v9 = vec(5000.0, 1000.0, 2000.0)
v10 = vec(6000.0, 2000.0, 0.0)
v11 = vec(6000.0, 0.0, 0.0)
v12 = vec(7000.0, 1000.0, 2000.0)
v13 = vec(8000.0, 2000.0, 0.0)
v14 = vec(8000.0, 0.0, 0.0)
v15 = vec(9000.0, 1000.0, 2000.0)
v16 = vec(10000.0, 2000.0, 0.0)
v17 = vec(10000.0, 0.0, 0.0)
v18 = vec(11000.0, 1000.0, 2000.0)
v19 = vec(12000.0, 2000.0, 0.0)
v20 = vec(12000.0, 0.0, 0.0)
line1 = makeLine(v1, v2)
line2 = makeLine(v4, v5)
line3 = makeLine(v7, v8)
line4 = makeLine(v10, v11)
line5 = makeLine(v13, v14)
line6 = makeLine(v16, v17)
line7 = makeLine(v19, v20)
line8 = makeLine(v1, v4)
line9 = makeLine(v2, v5)
line10 = makeLine(v4, v7)
line11 = makeLine(v5, v8)
line12 = makeLine(v7, v10)
line13 = makeLine(v8, v11)
line14 = makeLine(v10, v13)
line15 = makeLine(v11, v14)
line16 = makeLine(v13, v16)
line17 = makeLine(v14, v17)
line18 = makeLine(v16, v19)
line19 = makeLine(v17, v20)
line20 = makeLine(v1, v3)
line21 = makeLine(v4, v6)
line22 = makeLine(v7, v9)
line23 = makeLine(v10, v12)
line24 = makeLine(v13, v15)
line25 = makeLine(v16, v18)
line26 = makeLine(v2, v3)
line27 = makeLine(v5, v6)
line28 = makeLine(v8, v9)
line29 = makeLine(v11, v12)
line30 = makeLine(v14, v15)
line31 = makeLine(v17, v18)
line32 = makeLine(v3, v4)
line33 = makeLine(v6, v7)
line34 = makeLine(v9, v10)
line35 = makeLine(v12, v13)
line36 = makeLine(v15, v16)
line37 = makeLine(v18, v19)
line38 = makeLine(v3, v5)
line39 = makeLine(v6, v8)
line40 = makeLine(v9, v11)
line41 = makeLine(v12, v14)
line42 = makeLine(v15, v17)
line43 = makeLine(v18, v20)
line44 = makeLine(v3, v6)
line45 = makeLine(v6, v9)
line46 = makeLine(v9, v12)
line47 = makeLine(v12, v15)
line48 = makeLine(v15, v18)
line49 = makeLine(v2, v4)
line50 = makeLine(v5, v7)
line51 = makeLine(v8, v10)
line52 = makeLine(v11, v13)
line53 = makeLine(v14, v16)
line54 = makeLine(v17, v19)
obj_line1 = doc.addObject("Part::Feature", "Line1")
obj_line1.Shape = line1
obj_line2 = doc.addObject("Part::Feature", "Line2")
obj_line2.Shape = line2
obj_line3 = doc.addObject("Part::Feature", "Line3")
obj_line3.Shape = line3
obj_line4 = doc.addObject("Part::Feature", "Line4")
obj_line4.Shape = line4
obj_line5 = doc.addObject("Part::Feature", "Line5")
obj_line5.Shape = line5
obj_line6 = doc.addObject("Part::Feature", "Line6")
obj_line6.Shape = line6
obj_line7 = doc.addObject("Part::Feature", "Line7")
obj_line7.Shape = line7
obj_line8 = doc.addObject("Part::Feature", "Line8")
obj_line8.Shape = line8
obj_line9 = doc.addObject("Part::Feature", "Line9")
obj_line9.Shape = line9
obj_line10 = doc.addObject("Part::Feature", "Line10")
obj_line10.Shape = line10
obj_line11 = doc.addObject("Part::Feature", "Line11")
obj_line11.Shape = line11
obj_line12 = doc.addObject("Part::Feature", "Line12")
obj_line12.Shape = line12
obj_line13 = doc.addObject("Part::Feature", "Line13")
obj_line13.Shape = line13
obj_line14 = doc.addObject("Part::Feature", "Line14")
obj_line14.Shape = line14
obj_line15 = doc.addObject("Part::Feature", "Line15")
obj_line15.Shape = line15
obj_line16 = doc.addObject("Part::Feature", "Line16")
obj_line16.Shape = line16
obj_line17 = doc.addObject("Part::Feature", "Line17")
obj_line17.Shape = line17
obj_line18 = doc.addObject("Part::Feature", "Line18")
obj_line18.Shape = line18
obj_line19 = doc.addObject("Part::Feature", "Line19")
obj_line19.Shape = line19
obj_line20 = doc.addObject("Part::Feature", "Line20")
obj_line20.Shape = line20
obj_line21 = doc.addObject("Part::Feature", "Line21")
obj_line21.Shape = line21
obj_line22 = doc.addObject("Part::Feature", "Line22")
obj_line22.Shape = line22
obj_line23 = doc.addObject("Part::Feature", "Line23")
obj_line23.Shape = line23
obj_line24 = doc.addObject("Part::Feature", "Line24")
obj_line24.Shape = line24
obj_line25 = doc.addObject("Part::Feature", "Line25")
obj_line25.Shape = line25
obj_line26 = doc.addObject("Part::Feature", "Line26")
obj_line26.Shape = line26
obj_line27 = doc.addObject("Part::Feature", "Line27")
obj_line27.Shape = line27
obj_line28 = doc.addObject("Part::Feature", "Line28")
obj_line28.Shape = line28
obj_line29 = doc.addObject("Part::Feature", "Line29")
obj_line29.Shape = line29
obj_line30 = doc.addObject("Part::Feature", "Line30")
obj_line30.Shape = line30
obj_line31 = doc.addObject("Part::Feature", "Line31")
obj_line31.Shape = line31
obj_line32 = doc.addObject("Part::Feature", "Line32")
obj_line32.Shape = line32
obj_line33 = doc.addObject("Part::Feature", "Line33")
obj_line33.Shape = line33
obj_line34 = doc.addObject("Part::Feature", "Line34")
obj_line34.Shape = line34
obj_line35 = doc.addObject("Part::Feature", "Line35")
obj_line35.Shape = line35
obj_line36 = doc.addObject("Part::Feature", "Line36")
obj_line36.Shape = line36
obj_line37 = doc.addObject("Part::Feature", "Line37")
obj_line37.Shape = line37
obj_line38 = doc.addObject("Part::Feature", "Line38")
obj_line38.Shape = line38
obj_line39 = doc.addObject("Part::Feature", "Line39")
obj_line39.Shape = line39
obj_line40 = doc.addObject("Part::Feature", "Line40")
obj_line40.Shape = line40
obj_line41 = doc.addObject("Part::Feature", "Line41")
obj_line41.Shape = line41
obj_line42 = doc.addObject("Part::Feature", "Line42")
obj_line42.Shape = line42
obj_line43 = doc.addObject("Part::Feature", "Line43")
obj_line43.Shape = line43
obj_line44 = doc.addObject("Part::Feature", "Line44")
obj_line44.Shape = line44
obj_line45 = doc.addObject("Part::Feature", "Line45")
obj_line45.Shape = line45
obj_line46 = doc.addObject("Part::Feature", "Line46")
obj_line46.Shape = line46
obj_line47 = doc.addObject("Part::Feature", "Line47")
obj_line47.Shape = line47
obj_line48 = doc.addObject("Part::Feature", "Line48")
obj_line48.Shape = line48
obj_line49 = doc.addObject("Part::Feature", "Line49")
obj_line49.Shape = line49
obj_line50 = doc.addObject("Part::Feature", "Line50")
obj_line50.Shape = line50
obj_line51 = doc.addObject("Part::Feature", "Line51")
obj_line51.Shape = line51
obj_line52 = doc.addObject("Part::Feature", "Line52")
obj_line52.Shape = line52
obj_line53 = doc.addObject("Part::Feature", "Line53")
obj_line53.Shape = line53
obj_line54 = doc.addObject("Part::Feature", "Line54")
obj_line54.Shape = line54
doc.recompute()
geom_obj = SplitFeatures.makeBooleanFragments(name="CraneTruss")
geom_obj.Objects = [
obj_line1,
obj_line2,
obj_line3,
obj_line4,
obj_line5,
obj_line6,
obj_line7,
obj_line8,
obj_line9,
obj_line10,
obj_line11,
obj_line12,
obj_line13,
obj_line14,
obj_line15,
obj_line16,
obj_line17,
obj_line18,
obj_line19,
obj_line20,
obj_line21,
obj_line22,
obj_line23,
obj_line24,
obj_line25,
obj_line26,
obj_line27,
obj_line28,
obj_line29,
obj_line30,
obj_line31,
obj_line32,
obj_line33,
obj_line34,
obj_line35,
obj_line36,
obj_line37,
obj_line38,
obj_line39,
obj_line40,
obj_line41,
obj_line42,
obj_line43,
obj_line44,
obj_line45,
obj_line46,
obj_line47,
obj_line48,
obj_line49,
obj_line50,
obj_line51,
obj_line52,
obj_line53,
obj_line54,
]
if FreeCAD.GuiUp:
obj_line1.ViewObject.hide()
obj_line2.ViewObject.hide()
obj_line3.ViewObject.hide()
obj_line4.ViewObject.hide()
obj_line5.ViewObject.hide()
obj_line6.ViewObject.hide()
obj_line7.ViewObject.hide()
obj_line8.ViewObject.hide()
obj_line9.ViewObject.hide()
obj_line10.ViewObject.hide()
obj_line11.ViewObject.hide()
obj_line12.ViewObject.hide()
obj_line13.ViewObject.hide()
obj_line14.ViewObject.hide()
obj_line15.ViewObject.hide()
obj_line16.ViewObject.hide()
obj_line17.ViewObject.hide()
obj_line18.ViewObject.hide()
obj_line19.ViewObject.hide()
obj_line20.ViewObject.hide()
obj_line21.ViewObject.hide()
obj_line22.ViewObject.hide()
obj_line23.ViewObject.hide()
obj_line24.ViewObject.hide()
obj_line25.ViewObject.hide()
obj_line26.ViewObject.hide()
obj_line27.ViewObject.hide()
obj_line28.ViewObject.hide()
obj_line29.ViewObject.hide()
obj_line30.ViewObject.hide()
obj_line31.ViewObject.hide()
obj_line32.ViewObject.hide()
obj_line33.ViewObject.hide()
obj_line34.ViewObject.hide()
obj_line35.ViewObject.hide()
obj_line36.ViewObject.hide()
obj_line37.ViewObject.hide()
obj_line38.ViewObject.hide()
obj_line39.ViewObject.hide()
obj_line40.ViewObject.hide()
obj_line41.ViewObject.hide()
obj_line42.ViewObject.hide()
obj_line43.ViewObject.hide()
obj_line44.ViewObject.hide()
obj_line45.ViewObject.hide()
obj_line46.ViewObject.hide()
obj_line47.ViewObject.hide()
obj_line48.ViewObject.hide()
obj_line49.ViewObject.hide()
obj_line50.ViewObject.hide()
obj_line51.ViewObject.hide()
obj_line52.ViewObject.hide()
obj_line53.ViewObject.hide()
obj_line54.ViewObject.hide()
doc.recompute()
if FreeCAD.GuiUp:
geom_obj.ViewObject.Document.activeView().viewAxonometric()
geom_obj.ViewObject.Document.activeView().fitAll()
# analysis
analysis = ObjectsFem.makeAnalysis(doc, "Analysis")
# solver
if solvertype == "calculix":
solver_obj = ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX")
elif solvertype == "ccxtools":
solver_obj = ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools")
solver_obj.WorkingDir = u""
elif solvertype == "z88":
solver_obj = ObjectsFem.makeSolverZ88(doc, "SolverZ88")
else:
FreeCAD.Console.PrintWarning(
"Not known or not supported solver type: {}. "
"No solver object was created.\n".format(solvertype)
)
if solvertype == "calculix" or solvertype == "ccxtools":
solver_obj.SplitInputWriter = False
solver_obj.AnalysisType = "static"
solver_obj.GeometricalNonlinearity = "linear"
solver_obj.ThermoMechSteadyState = False
solver_obj.MatrixSolverType = "default"
solver_obj.IterationsControlParameterTimeUse = False
analysis.addObject(solver_obj)
# beam section
beamsection_obj = ObjectsFem.makeElementGeometry1D(
doc,
sectiontype="Circular",
height=25.0,
name="CrossSectionCircular"
)
analysis.addObject(beamsection_obj)
# material
material_obj = ObjectsFem.makeMaterialSolid(doc, "MechanicalMaterial")
mat = material_obj.Material
mat["Name"] = "Steel"
mat["YoungsModulus"] = "200000 MPa"
mat["PoissonRatio"] = "0.30"
material_obj.Material = mat
analysis.addObject(material_obj)
# constraint fixed
con_fixed = ObjectsFem.makeConstraintFixed(doc, "ConstraintFixed")
con_fixed.References = [(geom_obj, ("Vertex1", "Vertex2", "Vertex13", "Vertex14"))]
analysis.addObject(con_fixed)
# constraint force
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
con_force.References = [(geom_obj, ("Vertex5", "Vertex6"))]
con_force.Force = 60000.0 # 30 kN on each Node
con_force.Direction = (load_line, ["Edge1"])
con_force.Reversed = False
analysis.addObject(con_force)
# mesh
from .meshes.mesh_truss_crane_seg3 import create_nodes, create_elements
fem_mesh = Fem.FemMesh()
control = create_nodes(fem_mesh)
if not control:
FreeCAD.Console.PrintError("Error on creating nodes.\n")
control = create_elements(fem_mesh)
if not control:
FreeCAD.Console.PrintError("Error on creating elements.\n")
femmesh_obj = analysis.addObject(ObjectsFem.makeMeshGmsh(doc, get_meshname()))[0]
femmesh_obj.FemMesh = fem_mesh
femmesh_obj.Part = geom_obj
femmesh_obj.SecondOrderLinear = False
femmesh_obj.ElementDimension = "1D"
# four elements for each bar
femmesh_obj.CharacteristicLengthMax = "1500.0 mm"
femmesh_obj.CharacteristicLengthMin = "1500.0 mm"
if FreeCAD.GuiUp:
femmesh_obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
femmesh_obj.ViewObject.PointColor = (1.0, 0.0, 0.5, 0.0)
doc.recompute()
return doc

View File

@@ -215,7 +215,7 @@ class FemInputWriterZ88(writerbase.FemInputWriter):
)
# TODO make the check in prechecks and delete it here
# no extensive errorhandling in writer
# this way the solver will fail and an exeption is raised somehow
# this way the solver will fail and an exception is raised somehow
elements_data.append(
"1 {} {} 0 0 0 0 0 0 "
.format(self.element_count, area)

View File

@@ -104,10 +104,26 @@ class TestSolverCalculix(unittest.TestCase):
self.input_file_writing_test(get_namefromdef("test_"))
# ********************************************************************************************
def test_ccx_cantilever_faceload(
def test_ccx_cantilever_beam_circle(
self
):
from femexamples.ccx_cantilever_faceload import setup
from femexamples.ccx_cantilever_beam_circle import setup
setup(self.document, "calculix")
self.input_file_writing_test(get_namefromdef("test_"))
# ********************************************************************************************
def test_ccx_cantilever_beam_pipe(
self
):
from femexamples.ccx_cantilever_beam_pipe import setup
setup(self.document, "calculix")
self.input_file_writing_test(get_namefromdef("test_"))
# ********************************************************************************************
def test_ccx_cantilever_beam_rect(
self
):
from femexamples.ccx_cantilever_beam_rect import setup
setup(self.document, "calculix")
self.input_file_writing_test(get_namefromdef("test_"))
@@ -167,6 +183,14 @@ class TestSolverCalculix(unittest.TestCase):
setup(self.document, "calculix")
self.input_file_writing_test(get_namefromdef("test_"))
# ********************************************************************************************
def test_ccx_cantilever_faceload(
self
):
from femexamples.ccx_cantilever_faceload import setup
setup(self.document, "calculix")
self.input_file_writing_test(get_namefromdef("test_"))
# ********************************************************************************************
def test_ccx_cantilever_nodeload(
self

View File

@@ -0,0 +1,135 @@
** written by FreeCAD inp file writer for CalculiX,Abaqus meshes
** highest dimension mesh elements only.
** Nodes
*Node, NSET=Nall
1, 0, 500, 500
2, 8000, 500, 500
3, 1600, 500, 500
4, 3200, 500, 500
5, 4800, 500, 500
6, 6400, 500, 500
7, 800, 500, 500
8, 2400, 500, 500
9, 4000, 500, 500
10, 5600, 500, 500
11, 7200, 500, 500
** Edge elements
*Element, TYPE=B32, ELSET=Eedges
1, 1, 7, 3
2, 3, 8, 4
3, 4, 9, 5
4, 5, 10, 6
5, 6, 11, 2
** Define element set Eall
*ELSET, ELSET=Eall
Eedges
***********************************************************
** Element sets for materials and FEM element type (solid, shell, beam, fluid)
*ELSET,ELSET=M0B0RstdD0
1,
2,
3,
4,
5,
***********************************************************
** constraints fixed node sets
** ConstraintFixed
*NSET,NSET=ConstraintFixed
1,
***********************************************************
** Materials
** see information about units at file end
** FreeCAD material name: Calculix-Steel
** MechanicalMaterial
*MATERIAL, NAME=MechanicalMaterial
*ELASTIC
210000,0.3
***********************************************************
** Sections
*BEAM SECTION, ELSET=M0B0RstdD0, MATERIAL=MechanicalMaterial, SECTION=CIRC
1000
-0, 1, 0
***********************************************************
** At least one step is needed to run an CalculiX analysis of FreeCAD
*STEP
*STATIC
***********************************************************
** Fixed Constraints
** ConstraintFixed
*BOUNDARY
ConstraintFixed,1
ConstraintFixed,2
ConstraintFixed,3
ConstraintFixed,4
ConstraintFixed,5
ConstraintFixed,6
***********************************************************
** constraints force node loads
*CLOAD
** ConstraintForce
** node load on shape: CantileverLine:Vertex2
2,3,-9.0000000000000E+06
***********************************************************
** Outputs --> frd file
*NODE FILE, OUTPUT=2d
U
*EL FILE
S, E
** outputs --> dat file
** reaction forces for Constraint fixed
*NODE PRINT, NSET=ConstraintFixed, TOTALS=ONLY
RF
***********************************************************
*END STEP
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25432 (Git)
** written on --> Wed Aug 4 22:12:24 2021
** file name -->
** analysis name --> Analysis
**
**
***********************************************************
** About units:
** See ccx manual, ccx does not know about any unit.
** Golden rule: The user must make sure that the numbers he provides have consistent units.
** The user is the FreeCAD calculix writer module ;-)
**
** The unit system which is used at Guido Dhondt's company: mm, N, s, K
** Since Length and Mass are connected by Force, if Length is mm the Mass is in t to get N
** The following units are used to write to inp file:
**
** Length: mm (this includes the mesh geometry)
** Mass: t
** TimeSpan: s
** Temperature: K
**
** This leads to:
** Force: N
** Pressure: N/mm^2 == MPa (Young's Modulus has unit Pressure)
** Density: t/mm^3
** Gravity: mm/s^2
** Thermal conductivity: t*mm/K/s^3 == as W/m/K == kW/mm/K
** Specific Heat: mm^2/s^2/K = J/kg/K == kJ/t/K
**

View File

@@ -0,0 +1,135 @@
** written by FreeCAD inp file writer for CalculiX,Abaqus meshes
** highest dimension mesh elements only.
** Nodes
*Node, NSET=Nall
1, 0, 500, 500
2, 8000, 500, 500
3, 1600, 500, 500
4, 3200, 500, 500
5, 4800, 500, 500
6, 6400, 500, 500
7, 800, 500, 500
8, 2400, 500, 500
9, 4000, 500, 500
10, 5600, 500, 500
11, 7200, 500, 500
** Edge elements
*Element, TYPE=B32, ELSET=Eedges
1, 1, 7, 3
2, 3, 8, 4
3, 4, 9, 5
4, 5, 10, 6
5, 6, 11, 2
** Define element set Eall
*ELSET, ELSET=Eall
Eedges
***********************************************************
** Element sets for materials and FEM element type (solid, shell, beam, fluid)
*ELSET,ELSET=M0B0RstdD0
1,
2,
3,
4,
5,
***********************************************************
** constraints fixed node sets
** ConstraintFixed
*NSET,NSET=ConstraintFixed
1,
***********************************************************
** Materials
** see information about units at file end
** FreeCAD material name: Calculix-Steel
** MechanicalMaterial
*MATERIAL, NAME=MechanicalMaterial
*ELASTIC
210000,0.3
***********************************************************
** Sections
*BEAM GENERAL SECTION, ELSET=M0B0RstdD0, MATERIAL=MechanicalMaterial, SECTION=PIPE
500,100
-0, 1, 0
***********************************************************
** At least one step is needed to run an CalculiX analysis of FreeCAD
*STEP
*STATIC
***********************************************************
** Fixed Constraints
** ConstraintFixed
*BOUNDARY
ConstraintFixed,1
ConstraintFixed,2
ConstraintFixed,3
ConstraintFixed,4
ConstraintFixed,5
ConstraintFixed,6
***********************************************************
** constraints force node loads
*CLOAD
** ConstraintForce
** node load on shape: CantileverLine:Vertex2
2,3,-9.0000000000000E+06
***********************************************************
** Outputs --> frd file
*NODE FILE, OUTPUT=2d
U
*EL FILE
S, E
** outputs --> dat file
** reaction forces for Constraint fixed
*NODE PRINT, NSET=ConstraintFixed, TOTALS=ONLY
RF
***********************************************************
*END STEP
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25432 (Git)
** written on --> Wed Aug 4 22:13:20 2021
** file name -->
** analysis name --> Analysis
**
**
***********************************************************
** About units:
** See ccx manual, ccx does not know about any unit.
** Golden rule: The user must make sure that the numbers he provides have consistent units.
** The user is the FreeCAD calculix writer module ;-)
**
** The unit system which is used at Guido Dhondt's company: mm, N, s, K
** Since Length and Mass are connected by Force, if Length is mm the Mass is in t to get N
** The following units are used to write to inp file:
**
** Length: mm (this includes the mesh geometry)
** Mass: t
** TimeSpan: s
** Temperature: K
**
** This leads to:
** Force: N
** Pressure: N/mm^2 == MPa (Young's Modulus has unit Pressure)
** Density: t/mm^3
** Gravity: mm/s^2
** Thermal conductivity: t*mm/K/s^3 == as W/m/K == kW/mm/K
** Specific Heat: mm^2/s^2/K = J/kg/K == kJ/t/K
**

View File

@@ -0,0 +1,135 @@
** written by FreeCAD inp file writer for CalculiX,Abaqus meshes
** highest dimension mesh elements only.
** Nodes
*Node, NSET=Nall
1, 0, 500, 500
2, 8000, 500, 500
3, 1600, 500, 500
4, 3200, 500, 500
5, 4800, 500, 500
6, 6400, 500, 500
7, 800, 500, 500
8, 2400, 500, 500
9, 4000, 500, 500
10, 5600, 500, 500
11, 7200, 500, 500
** Edge elements
*Element, TYPE=B32, ELSET=Eedges
1, 1, 7, 3
2, 3, 8, 4
3, 4, 9, 5
4, 5, 10, 6
5, 6, 11, 2
** Define element set Eall
*ELSET, ELSET=Eall
Eedges
***********************************************************
** Element sets for materials and FEM element type (solid, shell, beam, fluid)
*ELSET,ELSET=M0B0RstdD0
1,
2,
3,
4,
5,
***********************************************************
** constraints fixed node sets
** ConstraintFixed
*NSET,NSET=ConstraintFixed
1,
***********************************************************
** Materials
** see information about units at file end
** FreeCAD material name: Calculix-Steel
** MechanicalMaterial
*MATERIAL, NAME=MechanicalMaterial
*ELASTIC
210000,0.3
***********************************************************
** Sections
*BEAM SECTION, ELSET=M0B0RstdD0, MATERIAL=MechanicalMaterial, SECTION=RECT
400,1250
-0, 1, 0
***********************************************************
** At least one step is needed to run an CalculiX analysis of FreeCAD
*STEP
*STATIC
***********************************************************
** Fixed Constraints
** ConstraintFixed
*BOUNDARY
ConstraintFixed,1
ConstraintFixed,2
ConstraintFixed,3
ConstraintFixed,4
ConstraintFixed,5
ConstraintFixed,6
***********************************************************
** constraints force node loads
*CLOAD
** ConstraintForce
** node load on shape: CantileverLine:Vertex2
2,3,-9.0000000000000E+06
***********************************************************
** Outputs --> frd file
*NODE FILE, OUTPUT=2d
U
*EL FILE
S, E
** outputs --> dat file
** reaction forces for Constraint fixed
*NODE PRINT, NSET=ConstraintFixed, TOTALS=ONLY
RF
***********************************************************
*END STEP
***********************************************************
** CalculiX Input file
** written by --> FreeCAD 0.20.25432 (Git)
** written on --> Wed Aug 4 22:14:46 2021
** file name -->
** analysis name --> Analysis
**
**
***********************************************************
** About units:
** See ccx manual, ccx does not know about any unit.
** Golden rule: The user must make sure that the numbers he provides have consistent units.
** The user is the FreeCAD calculix writer module ;-)
**
** The unit system which is used at Guido Dhondt's company: mm, N, s, K
** Since Length and Mass are connected by Force, if Length is mm the Mass is in t to get N
** The following units are used to write to inp file:
**
** Length: mm (this includes the mesh geometry)
** Mass: t
** TimeSpan: s
** Temperature: K
**
** This leads to:
** Force: N
** Pressure: N/mm^2 == MPa (Young's Modulus has unit Pressure)
** Density: t/mm^3
** Gravity: mm/s^2
** Thermal conductivity: t*mm/K/s^3 == as W/m/K == kW/mm/K
** Specific Heat: mm^2/s^2/K = J/kg/K == kJ/t/K
**