FEM Mesh/en: Difference between revisions
(Importing a new version from external source) |
(Importing a new version from external source) |
||
Line 156: | Line 156: | ||
seg2.addNode( 0, 0, 0, 1) |
seg2.addNode( 0, 0, 0, 1) |
||
seg2.addNode(10, 0, 0, 2) |
seg2.addNode(10, 0, 0, 2) |
||
seg2.addEdge( |
seg2.addEdge(1, 2) |
||
seg2 |
seg2 |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","seg2") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","seg2") |
||
obj.FemMesh = seg2 |
obj.FemMesh = seg2 |
||
obj.Placement.Base = (0,110,0) |
obj.Placement.Base = (0,110,0) |
||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
|||
# add Edge with element number |
|||
⚫ | |||
nds = seg2.Nodes |
|||
for n in nds: |
|||
elemseg2.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
|||
elemseg2.addEdge([1, 2], 1) |
|||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemseg2") |
|||
obj.FemMesh = elemseg2 |
|||
obj.Placement.Base = (200,110,0) |
|||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
Line 199: | Line 188: | ||
elemtria3.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elemtria3.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elemtria3.addFace([1, 2, 3], |
elemtria3.addFace([1, 2, 3], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtria3") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtria3") |
||
obj.FemMesh = elemtria3 |
obj.FemMesh = elemtria3 |
||
Line 205: | Line 194: | ||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
obj.ViewObject.BackfaceCulling = False |
obj.ViewObject.BackfaceCulling = False |
||
elemtria3.Faces |
|||
Line 228: | Line 218: | ||
elemtria6.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elemtria6.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elemtria6.addFace([1, 2, 3, 4, 5, 6], |
elemtria6.addFace([1, 2, 3, 4, 5, 6], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtria6") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtria6") |
||
obj.FemMesh = elemtria6 |
obj.FemMesh = elemtria6 |
||
Line 234: | Line 224: | ||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
obj.ViewObject.BackfaceCulling = False |
obj.ViewObject.BackfaceCulling = False |
||
elemtria6.Faces |
|||
Line 255: | Line 246: | ||
elemquad4.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elemquad4.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elemquad4.addFace([1, 2, 3, 4], |
elemquad4.addFace([1, 2, 3, 4], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemquad4") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemquad4") |
||
obj.FemMesh = elemquad4 |
obj.FemMesh = elemquad4 |
||
Line 261: | Line 252: | ||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
obj.ViewObject.BackfaceCulling = False |
obj.ViewObject.BackfaceCulling = False |
||
elemquad4.Faces |
|||
Line 286: | Line 278: | ||
elemquad8.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elemquad8.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elemquad8.addFace([1, 2, 3, 4, 5, 6, 7, 8], |
elemquad8.addFace([1, 2, 3, 4, 5, 6, 7, 8], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemquad8") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemquad8") |
||
obj.FemMesh = elemquad8 |
obj.FemMesh = elemquad8 |
||
Line 292: | Line 284: | ||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
obj.ViewObject.BackfaceCulling = False |
obj.ViewObject.BackfaceCulling = False |
||
elemquad8.Faces |
|||
Line 314: | Line 307: | ||
elemtetra4.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elemtetra4.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elemtetra4.addVolume([1, 2, 3, 4], |
elemtetra4.addVolume([1, 2, 3, 4], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtetra4") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtetra4") |
||
obj.FemMesh = elemtetra4 |
obj.FemMesh = elemtetra4 |
||
obj.Placement.Base = (200,50,0) |
obj.Placement.Base = (200,50,0) |
||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
elemtetra4.Volumes |
|||
Line 347: | Line 341: | ||
elemtetra10.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elemtetra10.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elemtetra10.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], |
elemtetra10.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtetra10") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtetra10") |
||
obj.FemMesh = elemtetra10 |
obj.FemMesh = elemtetra10 |
||
obj.Placement.Base = (230,50,0) |
obj.Placement.Base = (230,50,0) |
||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
elemtetra10.Volumes |
|||
Line 376: | Line 371: | ||
elemhexa8.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elemhexa8.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elemhexa8.addVolume([1, 2, 3, 4, 5, 6, 7, 8], |
elemhexa8.addVolume([1, 2, 3, 4, 5, 6, 7, 8], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemhexa8") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemhexa8") |
||
obj.FemMesh = elemhexa8 |
obj.FemMesh = elemhexa8 |
||
obj.Placement.Base = (260,50,0) |
obj.Placement.Base = (260,50,0) |
||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
elemhexa8.Volumes |
|||
Line 420: | Line 416: | ||
elemhexa20.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elemhexa20.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elemhexa20.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], |
elemhexa20.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemhexa20") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemhexa20") |
||
obj.FemMesh = elemhexa20 |
obj.FemMesh = elemhexa20 |
||
obj.Placement.Base = (290,50,0) |
obj.Placement.Base = (290,50,0) |
||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
elemhexa20.Volumes |
|||
Line 447: | Line 444: | ||
elempenta6.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elempenta6.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elempenta6.addVolume([ 1, 2, 3, 4, 5, 6], |
elempenta6.addVolume([ 1, 2, 3, 4, 5, 6], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempenta6") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempenta6") |
||
obj.FemMesh = elempenta6 |
obj.FemMesh = elempenta6 |
||
obj.Placement.Base = (200,0,0) |
obj.Placement.Base = (200,0,0) |
||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
elempenta6.Volumes |
|||
Line 482: | Line 479: | ||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
# add Volume with element number |
# add Volume with element number |
||
elempenta15 = Fem.FemMesh) |
elempenta15 = Fem.FemMesh() |
||
nds = penta15.Nodes |
nds = penta15.Nodes |
||
for n in nds: |
for n in nds: |
||
elempenta15.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elempenta15.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
⚫ | |||
''' |
|||
FreeCAD 0.17.8183 crashes by adding a penta15 volume with element nomber |
|||
⚫ | |||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempenta15") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempenta15") |
||
obj.FemMesh = elempenta15 |
obj.FemMesh = elempenta15 |
||
obj.Placement.Base = (240,0,0) |
obj.Placement.Base = (240,0,0) |
||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
elempenta15.Volumes |
|||
''' |
|||
# 5 node pyramid --> pyra5 ###################### |
# 5 node pyramid --> pyra5 ###################### |
||
Line 515: | Line 511: | ||
elempyra5.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elempyra5.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
elempyra5.addVolume([1, 2, 3, 4, 5], |
elempyra5.addVolume([1, 2, 3, 4, 5], 88) |
||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempyra5") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempyra5") |
||
obj.FemMesh = elempyra5 |
obj.FemMesh = elempyra5 |
||
obj.Placement.Base = (280,0,0) |
obj.Placement.Base = (280,0,0) |
||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
elempyra5.Volumes |
|||
Line 538: | Line 535: | ||
pyra13.addNode(15,15, 5,11) |
pyra13.addNode(15,15, 5,11) |
||
pyra13.addNode(15, 5, 5,12) |
pyra13.addNode(15, 5, 5,12) |
||
⚫ | |||
pyra13.addNode( 5, 5, 5,13) |
pyra13.addNode( 5, 5, 5,13) |
||
pyra13.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]) |
pyra13.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]) |
||
Line 551: | Line 549: | ||
elempyra13.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
elempyra13.addNode(nds[n].x, nds[n].y, nds[n].z, n) |
||
⚫ | |||
''' |
|||
FreeCAD 0.17.8183 crash by adding a pyra13 volume with element nomber |
|||
⚫ | |||
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempyra13") |
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempyra13") |
||
obj.FemMesh = elempyra13 |
obj.FemMesh = elempyra13 |
||
obj.Placement.Base = (320,0,0) |
obj.Placement.Base = (320,0,0) |
||
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes" |
||
elempyra13.Volumes |
|||
''' |
|||
</syntaxhighlight> |
</syntaxhighlight> |
Revision as of 10:57, 22 August 2016
Create a FEM Mesh
There are different possibilities to create a FEM Mesh in FreeCAD:
- The Gui tool Fem MeshFromShape
- The Gui tool by Python
- Python directly means make the FEM Mesh by Hand
- Import a FEM Mesh
Objects created in PartDesign and Part are supported, as well as simple copies of those bodies. There are two meshers available to the user: Netgen and GMSH. Netgen is included in FreeCAD. Refer to FEM Install For FEM Mesh generation by GMSH user psicofil has provided a GMSHMesh Macro.
("-" means not supported by the interface, thus it is not possible to support it. )
FEM Element Types
General
More informations about the FEM element types and their data structure inside FreeCAD can be find on FEM Element Types.
Segment element
Triangle element
Quadratic element
Tetrahedron element
Pyramid element
Hexahedron element
Pentahedron element
Scripting
Create a FEM Mesh totally py python
Creating a mesh with one Tet-10 Elements
import FreeCAD, Fem
# create a empty mesh
m = Fem.FemMesh()
#create the nodes
m.addNode(0,1,0)
m.addNode(0,0,1)
m.addNode(1,0,0)
m.addNode(0,0,0)
m.addNode(0,0.5,0.5)
m.addNode(0.5,0.03,.5)
m.addNode(0.5,0.5,0.03)
m.addNode(0,0.5,0)
m.addNode(0.03,0,0.5)
m.addNode(0.5,0,0)
# add the volume with the created nodes
m.addVolume([1,2,3,4,5,6,7,8,9,10])
Fem.show(m)
If you want to have predefined element and node numbering:
m.addNode(0.0,1.0,0.0,1)
m.addVolume([1,2,3,4,5,6,7,8,9,10],1)
Visual handling
Highlight some nodes on the view:
import FreeCAD, Fem
m = Fem.FemMesh()
m.addNode(0,1,0)
m.addNode(0,0,1)
m.addNode(1,0,0)
m.addNode(0,0,0)
m.addNode(0,0.5,0.5)
m.addNode(0.5,0.03,.5)
m.addNode(0.5,0.5,0.03)
m.addNode(0,0.5,0)
m.addNode(0.03,0,0.5)
m.addNode(0.5,0,0)
m.addVolume([1,2,3,4,5,6,7,8,9,10])
Fem.show(m)
Gui.ActiveDocument.ActiveObject.HighlightedNodes = [1,2,3]
Postprocessing colors and displacement: Highlight some nodes on the view:
# set the volume 1 to red
Gui.ActiveDocument.ActiveObject.ElementColor= {1:(1,0,0)}
# set the node 1 and 2 to a certain Color and interpolate the survace
Gui.ActiveDocument.ActiveObject.NodeColor= {1:(1,0,0),2:(1,0,0)}
# set the node 1 and 2 to a certain displacement
Gui.ActiveDocument.ActiveObject.NodeDisplacement= {1:FreeCAD.Vector(1,0,0),2:FreeCAD.Vector(1,0,0)}
# double the factor of the displacement shown
Gui.ActiveDocument.ActiveObject.animate(2.0)
Script one Element of each supported Element Type
import Fem
#################################################
# Beams
# 2 node line --> seg2 ##########################
seg2 = Fem.FemMesh()
seg2.addNode( 0, 0, 0, 1)
seg2.addNode(10, 0, 0, 2)
seg2.addEdge(1, 2)
seg2
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","seg2")
obj.FemMesh = seg2
obj.Placement.Base = (0,110,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# 3 node line --> seg3 ##########################
# not implemented
#################################################
# Shells
# 3 node triangle --> tria3 #####################
tria3 = Fem.FemMesh()
tria3.addNode( 0, 0, 0, 1)
tria3.addNode( 6, 12, 0, 2)
tria3.addNode(12, 0, 0, 3)
tria3.addFace([1, 2, 3])
tria3
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","tria3")
obj.FemMesh = tria3
obj.Placement.Base = (0,80,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
# add Face with element number
elemtria3 = Fem.FemMesh()
nds = tria3.Nodes
for n in nds:
elemtria3.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elemtria3.addFace([1, 2, 3], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtria3")
obj.FemMesh = elemtria3
obj.Placement.Base = (200,80,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
elemtria3.Faces
# 6 node triangle --> tria 6 ####################
tria6 = Fem.FemMesh()
tria6.addNode( 0, 0, 0, 1)
tria6.addNode( 6, 12, 0, 2)
tria6.addNode(12, 0, 0, 3)
tria6.addNode( 3, 6, 0, 4)
tria6.addNode( 9, 6, 0, 5)
tria6.addNode( 6, 0, 0, 6)
tria6.addFace([1, 2, 3, 4, 5, 6])
tria6
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","tria6")
obj.FemMesh = tria6
obj.Placement.Base = (30,80,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
# add Face with element number
elemtria6 = Fem.FemMesh()
nds = tria6.Nodes
for n in nds:
elemtria6.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elemtria6.addFace([1, 2, 3, 4, 5, 6], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtria6")
obj.FemMesh = elemtria6
obj.Placement.Base = (230,80,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
elemtria6.Faces
# 4 node quad --> quad4 #########################
quad4 = Fem.FemMesh()
quad4.addNode( 0, 10, 0, 1)
quad4.addNode(10, 10, 0, 2)
quad4.addNode(10, 0, 0, 3)
quad4.addNode( 0, 0, 0, 4)
quad4.addFace([1, 2, 3, 4])
quad4
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","quad4")
obj.FemMesh = quad4
obj.Placement.Base = (60,80,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
# add Face with element number
elemquad4 = Fem.FemMesh()
nds = quad4.Nodes
for n in nds:
elemquad4.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elemquad4.addFace([1, 2, 3, 4], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemquad4")
obj.FemMesh = elemquad4
obj.Placement.Base = (260,80,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
elemquad4.Faces
# 8 node quad --> quad8 #########################
quad8 = Fem.FemMesh()
quad8.addNode( 0, 10, 0, 1)
quad8.addNode(10, 10, 0, 2)
quad8.addNode(10, 0, 0, 3)
quad8.addNode( 0, 0, 0, 4)
quad8.addNode( 5, 10, 0, 5)
quad8.addNode(10, 5, 0, 6)
quad8.addNode( 5, 0, 0, 7)
quad8.addNode( 0, 5, 0, 8)
quad8.addFace([1, 2, 3, 4, 5, 6, 7, 8])
quad8
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","quad8")
obj.FemMesh = quad8
obj.ViewObject.BackfaceCulling = False
obj.Placement.Base = (90,80,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# add Face with element number
elemquad8 = Fem.FemMesh()
nds = quad8.Nodes
for n in nds:
elemquad8.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elemquad8.addFace([1, 2, 3, 4, 5, 6, 7, 8], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemquad8")
obj.FemMesh = elemquad8
obj.Placement.Base = (290,80,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
obj.ViewObject.BackfaceCulling = False
elemquad8.Faces
#################################################
# Volumes
# 4 node tetrahedron --> tetra4 #################
tetra4 = Fem.FemMesh()
tetra4.addNode( 6, 12, 18, 1)
tetra4.addNode( 0, 0, 18, 2)
tetra4.addNode(12, 0, 18, 3)
tetra4.addNode( 6, 6, 0, 4)
tetra4.addVolume([1, 2, 3, 4])
tetra4
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","tetra4")
obj.FemMesh = tetra4
obj.Placement.Base = (0,50,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# add Volume with element number
elemtetra4 = Fem.FemMesh()
nds = tetra4.Nodes
for n in nds:
elemtetra4.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elemtetra4.addVolume([1, 2, 3, 4], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtetra4")
obj.FemMesh = elemtetra4
obj.Placement.Base = (200,50,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
elemtetra4.Volumes
# 10 node tetrahedron --> tetra10 ###############
tetra10 = Fem.FemMesh()
tetra10.addNode( 6, 12, 18, 1)
tetra10.addNode( 0, 0, 18, 2)
tetra10.addNode(12, 0, 18, 3)
tetra10.addNode( 6, 6, 0, 4)
tetra10.addNode( 3, 6, 18, 5)
tetra10.addNode( 6, 0, 18, 6)
tetra10.addNode( 9, 6, 18, 7)
tetra10.addNode( 6, 9, 9, 8)
tetra10.addNode( 3, 3, 9, 9)
tetra10.addNode( 9, 3, 9,10)
tetra10.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
tetra10
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","tetra10")
obj.FemMesh = tetra10
obj.Placement.Base = (30,50,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# add Volume with element number
elemtetra10 = Fem.FemMesh()
nds = tetra10.Nodes
for n in nds:
elemtetra10.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elemtetra10.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemtetra10")
obj.FemMesh = elemtetra10
obj.Placement.Base = (230,50,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
elemtetra10.Volumes
# 8 node Hexahedron --> hexa8 ###################
hexa8 = Fem.FemMesh()
hexa8.addNode( 0, 10, 10, 1)
hexa8.addNode( 0, 0, 10, 2)
hexa8.addNode(10, 0, 10, 3)
hexa8.addNode(10, 10, 10, 4)
hexa8.addNode( 0, 10, 0, 5)
hexa8.addNode( 0, 0, 0, 6)
hexa8.addNode(10, 0, 0, 7)
hexa8.addNode(10, 10, 0, 8)
hexa8.addVolume([1, 2, 3, 4, 5, 6, 7, 8])
hexa8
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","hexa8")
obj.FemMesh = hexa8
obj.Placement.Base = (60,50,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# add Volume with element number
elemhexa8 = Fem.FemMesh()
nds = hexa8.Nodes
for n in nds:
elemhexa8.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elemhexa8.addVolume([1, 2, 3, 4, 5, 6, 7, 8], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemhexa8")
obj.FemMesh = elemhexa8
obj.Placement.Base = (260,50,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
elemhexa8.Volumes
# 20 node Hexahedron --> hexa20 #################
hexa20 = Fem.FemMesh()
hexa20.addNode( 0, 10, 10, 1)
hexa20.addNode( 0, 0, 10, 2)
hexa20.addNode(10, 0, 10, 3)
hexa20.addNode(10, 10, 10, 4)
hexa20.addNode( 0, 10, 0, 5)
hexa20.addNode( 0, 0, 0, 6)
hexa20.addNode(10, 0, 0, 7)
hexa20.addNode(10, 10, 0, 8)
hexa20.addNode( 0, 5, 10, 9)
hexa20.addNode( 5, 0, 10, 10)
hexa20.addNode(10, 5, 10, 11)
hexa20.addNode( 5, 10, 10, 12)
hexa20.addNode( 0, 5, 0, 13)
hexa20.addNode( 5, 0, 0, 14)
hexa20.addNode(10, 5, 0, 15)
hexa20.addNode( 5, 10, 0, 16)
hexa20.addNode( 0, 10, 5, 17)
hexa20.addNode( 0, 0, 5, 18)
hexa20.addNode(10, 0, 5, 19)
hexa20.addNode(10, 10, 5, 20)
hexa20.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
hexa20
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","hexa20")
obj.FemMesh = hexa20
obj.Placement.Base = (90,50,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# add Volume with element number
elemhexa20 = Fem.FemMesh()
nds = hexa20.Nodes
for n in nds:
elemhexa20.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elemhexa20.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elemhexa20")
obj.FemMesh = elemhexa20
obj.Placement.Base = (290,50,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
elemhexa20.Volumes
# 6 node pentahedron --> penta6 #################
penta6 = Fem.FemMesh()
penta6.addNode(10,10,10, 1)
penta6.addNode( 0, 0,10, 2)
penta6.addNode(20, 0,10, 3)
penta6.addNode(10,10, 0, 4)
penta6.addNode( 0, 0, 0, 5)
penta6.addNode(20, 0, 0, 6)
penta6.addVolume([1, 2, 3, 4, 5, 6])
penta6
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","penta6")
obj.FemMesh = penta6
obj.Placement.Base = (0,0,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# add Volume with element number
elempenta6 = Fem.FemMesh()
nds = penta6.Nodes
for n in nds:
elempenta6.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elempenta6.addVolume([ 1, 2, 3, 4, 5, 6], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempenta6")
obj.FemMesh = elempenta6
obj.Placement.Base = (200,0,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
elempenta6.Volumes
# 15 node pentahedron --> penta15 ###############
penta15 = Fem.FemMesh()
penta15.addNode(10,10,10, 1)
penta15.addNode( 0, 0,10, 2)
penta15.addNode(20, 0,10, 3)
penta15.addNode(10,10, 0, 4)
penta15.addNode( 0, 0, 0, 5)
penta15.addNode(20, 0, 0, 6)
penta15.addNode( 5, 5,10, 7)
penta15.addNode(10, 0,10, 8)
penta15.addNode(15, 5,10, 9)
penta15.addNode( 5, 5, 0,10)
penta15.addNode(10, 0, 0,11)
penta15.addNode(15, 5, 0,12)
penta15.addNode(10,10, 5,13)
penta15.addNode( 0, 0, 5,14)
penta15.addNode(20, 0, 5,15)
penta15.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
penta15
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","penta15")
obj.FemMesh = penta15
obj.Placement.Base = (40,0,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# add Volume with element number
elempenta15 = Fem.FemMesh()
nds = penta15.Nodes
for n in nds:
elempenta15.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elempenta15.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempenta15")
obj.FemMesh = elempenta15
obj.Placement.Base = (240,0,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
elempenta15.Volumes
# 5 node pyramid --> pyra5 ######################
pyra5 = Fem.FemMesh()
pyra5.addNode( 0,20, 0, 1)
pyra5.addNode(20,20, 0, 2)
pyra5.addNode(20, 0, 0, 3)
pyra5.addNode( 0, 0, 0, 4)
pyra5.addNode(10,10,10, 5)
pyra5.addVolume([1, 2, 3, 4, 5])
pyra5
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","pyra5")
obj.FemMesh = pyra5
obj.Placement.Base = (80,0,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# add Volume with element number
elempyra5 = Fem.FemMesh()
nds = pyra5.Nodes
for n in nds:
elempyra5.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elempyra5.addVolume([1, 2, 3, 4, 5], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempyra5")
obj.FemMesh = elempyra5
obj.Placement.Base = (280,0,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
elempyra5.Volumes
# 13 node pyramid --> pyra13 ####################
pyra13 = Fem.FemMesh()
pyra13.addNode( 0,20, 0, 1)
pyra13.addNode(20,20, 0, 2)
pyra13.addNode(20, 0, 0, 3)
pyra13.addNode( 0, 0, 0, 4)
pyra13.addNode(10,10,10, 5)
pyra13.addNode(10,20, 0, 6)
pyra13.addNode(20,10, 0, 7)
pyra13.addNode(10, 0, 0, 8)
pyra13.addNode( 0,10, 0, 9)
pyra13.addNode( 5,15, 5,10)
pyra13.addNode(15,15, 5,11)
pyra13.addNode(15, 5, 5,12)
pyra5 = Fem.FemMesh()
pyra13.addNode( 5, 5, 5,13)
pyra13.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])
pyra13
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","pyra13")
obj.FemMesh = pyra13
obj.Placement.Base = (120,0,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
# add Volume with element number
elempyra13 = Fem.FemMesh()
nds = pyra13.Nodes
for n in nds:
elempyra13.addNode(nds[n].x, nds[n].y, nds[n].z, n)
elempyra13.addVolume([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], 88)
obj = App.ActiveDocument.addObject("Fem::FemMeshObject","elempyra13")
obj.FemMesh = elempyra13
obj.Placement.Base = (320,0,0)
obj.ViewObject.DisplayMode = "Faces, Wireframe & Nodes"
elempyra13.Volumes