Merge branch 'FreeCAD:master' into FixDefaultShapeVertexColor
This commit is contained in:
@@ -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
|
||||
|
||||
82
src/Mod/Fem/femexamples/meshes/mesh_truss_crane_seg2.py
Normal file
82
src/Mod/Fem/femexamples/meshes/mesh_truss_crane_seg2.py
Normal 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
|
||||
298
src/Mod/Fem/femexamples/meshes/mesh_truss_crane_seg3.py
Normal file
298
src/Mod/Fem/femexamples/meshes/mesh_truss_crane_seg3.py
Normal 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
|
||||
79
src/Mod/Fem/femexamples/truss_3d_cs_circle_ele_seg2.py
Normal file
79
src/Mod/Fem/femexamples/truss_3d_cs_circle_ele_seg2.py
Normal 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
|
||||
476
src/Mod/Fem/femexamples/truss_3d_cs_circle_ele_seg3.py
Normal file
476
src/Mod/Fem/femexamples/truss_3d_cs_circle_ele_seg3.py
Normal 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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
135
src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_circle.inp
Normal file
135
src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_circle.inp
Normal 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
|
||||
**
|
||||
135
src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_pipe.inp
Normal file
135
src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_pipe.inp
Normal 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
|
||||
**
|
||||
135
src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_rect.inp
Normal file
135
src/Mod/Fem/femtest/data/calculix/ccx_cantilever_beam_rect.inp
Normal 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
|
||||
**
|
||||
Reference in New Issue
Block a user