FEM: frd import mesh - added HEX20, PENTA6, PENTA15
This commit is contained in:
parent
32624cbe94
commit
98cd075a84
|
@ -39,8 +39,11 @@ def readResult(frd_input):
|
||||||
frd_file = pyopen(frd_input, "r")
|
frd_file = pyopen(frd_input, "r")
|
||||||
nodes = {}
|
nodes = {}
|
||||||
elements_hexa8 = {}
|
elements_hexa8 = {}
|
||||||
|
elements_penta6 = {}
|
||||||
elements_tetra4 = {}
|
elements_tetra4 = {}
|
||||||
elements_tetra10 = {}
|
elements_tetra10 = {}
|
||||||
|
elements_penta15 = {}
|
||||||
|
elements_hexa20 = {}
|
||||||
elements_tria3 = {}
|
elements_tria3 = {}
|
||||||
elements_tria6 = {}
|
elements_tria6 = {}
|
||||||
elements_quad4 = {}
|
elements_quad4 = {}
|
||||||
|
@ -55,6 +58,7 @@ def readResult(frd_input):
|
||||||
nodes_found = False
|
nodes_found = False
|
||||||
mode_stress_found = False
|
mode_stress_found = False
|
||||||
elements_found = False
|
elements_found = False
|
||||||
|
input_continues = False
|
||||||
eigenmode = 0
|
eigenmode = 0
|
||||||
elem = -1
|
elem = -1
|
||||||
elemType = 0
|
elemType = 0
|
||||||
|
@ -88,6 +92,15 @@ def readResult(frd_input):
|
||||||
node_id_3 = int(line[63:73])
|
node_id_3 = int(line[63:73])
|
||||||
node_id_4 = int(line[73:83])
|
node_id_4 = int(line[73:83])
|
||||||
elements_hexa8[elem] = (node_id_1, node_id_2, node_id_3, node_id_4, node_id_5, node_id_6, node_id_7, node_id_8)
|
elements_hexa8[elem] = (node_id_1, node_id_2, node_id_3, node_id_4, node_id_5, node_id_6, node_id_7, node_id_8)
|
||||||
|
#then the 6 id's for the PENTA6 element
|
||||||
|
if elements_found and (line[1:3] == "-2") and elemType == 2:
|
||||||
|
node_id_4 = int(line[3:13])
|
||||||
|
node_id_5 = int(line[13:23])
|
||||||
|
node_id_6 = int(line[23:33])
|
||||||
|
node_id_1 = int(line[33:43])
|
||||||
|
node_id_2 = int(line[43:53])
|
||||||
|
node_id_3 = int(line[53:63])
|
||||||
|
elements_penta6[elem] = (node_id_1, node_id_2, node_id_3, node_id_4, node_id_5, node_id_6)
|
||||||
#then the 4 id's for the TETRA4 element
|
#then the 4 id's for the TETRA4 element
|
||||||
if elements_found and (line[1:3] == "-2") and elemType == 3:
|
if elements_found and (line[1:3] == "-2") and elemType == 3:
|
||||||
node_id_2 = int(line[3:13])
|
node_id_2 = int(line[3:13])
|
||||||
|
@ -95,6 +108,55 @@ def readResult(frd_input):
|
||||||
node_id_3 = int(line[23:33])
|
node_id_3 = int(line[23:33])
|
||||||
node_id_4 = int(line[33:43])
|
node_id_4 = int(line[33:43])
|
||||||
elements_tetra4[elem] = (node_id_1, node_id_2, node_id_3, node_id_4)
|
elements_tetra4[elem] = (node_id_1, node_id_2, node_id_3, node_id_4)
|
||||||
|
#then the 20 id's for the HEXA20 element
|
||||||
|
if elements_found and (line[1:3] == "-2") and elemType == 4 and input_continues == False:
|
||||||
|
node_id_5 = int(line[3:13])
|
||||||
|
node_id_6 = int(line[13:23])
|
||||||
|
node_id_7 = int(line[23:33])
|
||||||
|
node_id_8 = int(line[33:43])
|
||||||
|
node_id_1 = int(line[43:53])
|
||||||
|
node_id_2 = int(line[53:63])
|
||||||
|
node_id_3 = int(line[63:73])
|
||||||
|
node_id_4 = int(line[73:83])
|
||||||
|
node_id_13 = int(line[83:93])
|
||||||
|
node_id_14 = int(line[93:103])
|
||||||
|
input_continues = True
|
||||||
|
elif elements_found and (line[1:3] == "-2") and elemType == 4 and input_continues == True:
|
||||||
|
node_id_15 = int(line[3:13])
|
||||||
|
node_id_16 = int(line[13:23])
|
||||||
|
node_id_9 = int(line[23:33])
|
||||||
|
node_id_10 = int(line[33:43])
|
||||||
|
node_id_11 = int(line[43:53])
|
||||||
|
node_id_12 = int(line[53:63])
|
||||||
|
node_id_17 = int(line[63:73])
|
||||||
|
node_id_18 = int(line[73:83])
|
||||||
|
node_id_19 = int(line[83:93])
|
||||||
|
node_id_20 = int(line[93:103])
|
||||||
|
input_continues = False
|
||||||
|
elements_hexa20[elem] = ( node_id_1, node_id_2, node_id_3, node_id_4, node_id_5, node_id_6, node_id_7, node_id_8, node_id_9, node_id_10,
|
||||||
|
node_id_11,node_id_12,node_id_13,node_id_14,node_id_15,node_id_16,node_id_17,node_id_18,node_id_19, node_id_20)
|
||||||
|
#then the 15 id's for the PENTA15 element
|
||||||
|
if elements_found and (line[1:3] == "-2") and elemType == 5 and input_continues == False:
|
||||||
|
node_id_4 = int(line[3:13])
|
||||||
|
node_id_5 = int(line[13:23])
|
||||||
|
node_id_6 = int(line[23:33])
|
||||||
|
node_id_1 = int(line[33:43])
|
||||||
|
node_id_2 = int(line[43:53])
|
||||||
|
node_id_3 = int(line[53:63])
|
||||||
|
node_id_10 = int(line[63:73])
|
||||||
|
node_id_11 = int(line[73:83])
|
||||||
|
node_id_12 = int(line[83:93])
|
||||||
|
node_id_13 = int(line[93:103])
|
||||||
|
input_continues = True
|
||||||
|
elif elements_found and (line[1:3] == "-2") and elemType == 5 and input_continues == True:
|
||||||
|
node_id_14 = int(line[3:13])
|
||||||
|
node_id_15 = int(line[13:23])
|
||||||
|
node_id_7 = int(line[23:33])
|
||||||
|
node_id_8 = int(line[33:43])
|
||||||
|
node_id_9 = int(line[43:53])
|
||||||
|
input_continues = False
|
||||||
|
elements_penta15[elem] = ( node_id_1, node_id_2, node_id_3, node_id_4, node_id_5, node_id_6, node_id_7, node_id_8, node_id_9, node_id_10,
|
||||||
|
node_id_11,node_id_12,node_id_13,node_id_14,node_id_15)
|
||||||
#then the 10 id's for the TETRA10 element
|
#then the 10 id's for the TETRA10 element
|
||||||
if elements_found and (line[1:3] == "-2") and elemType == 6:
|
if elements_found and (line[1:3] == "-2") and elemType == 6:
|
||||||
node_id_2 = int(line[3:13])
|
node_id_2 = int(line[3:13])
|
||||||
|
@ -193,8 +255,11 @@ def readResult(frd_input):
|
||||||
elements_found = False
|
elements_found = False
|
||||||
|
|
||||||
frd_file.close()
|
frd_file.close()
|
||||||
return {'Nodes': nodes, 'Hexa8Elem': elements_hexa8, 'Tetra4Elem': elements_tetra4, 'Tetra10Elem': elements_tetra10, 'Tria3Elem': elements_tria3,
|
return {'Nodes': nodes,
|
||||||
'Tria6Elem': elements_tria6, 'Quad4Elem': elements_quad4, 'Quad8Elem': elements_quad8, 'Seg2Elem': elements_seg2, 'Results': results}
|
'Hexa8Elem': elements_hexa8, 'Penta6Elem': elements_penta6, 'Tetra4Elem': elements_tetra4, 'Tetra10Elem': elements_tetra10,
|
||||||
|
'Penta15Elem': elements_penta15, 'Hexa20Elem': elements_hexa20, 'Tria3Elem': elements_tria3, 'Tria6Elem': elements_tria6,
|
||||||
|
'Quad4Elem': elements_quad4, 'Quad8Elem': elements_quad8, 'Seg2Elem': elements_seg2,
|
||||||
|
'Results': results}
|
||||||
|
|
||||||
|
|
||||||
def calculate_von_mises(i):
|
def calculate_von_mises(i):
|
||||||
|
@ -238,10 +303,10 @@ def importFrd(filename, analysis=None):
|
||||||
z_span = abs(p_z_max - p_z_min)
|
z_span = abs(p_z_max - p_z_min)
|
||||||
span = max(x_span, y_span, z_span)
|
span = max(x_span, y_span, z_span)
|
||||||
|
|
||||||
if (not analysis) and ('Nodes' in m) and (('Hexa8Elem' in m) or
|
if (not analysis) and ('Nodes' in m) and \
|
||||||
('Tetra4Elem' in m) or ('Tetra10Elem' in m) or ('Tria3Elem' in m) or
|
(('Hexa8Elem' in m) or ('Penta6Elem' in m) or ('Tetra4Elem' in m) or ('Tetra10Elem' in m) or \
|
||||||
('Tria6Elem' in m) or ('Quad4Elem' in m) or ('Quad8Elem' in m) or
|
('Penta6Elem' in m) or ('Hexa20Elem' in m) or ('Tria3Elem' in m) or ('Tria6Elem' in m) or \
|
||||||
('Seg2Elem' in m)):
|
('Quad4Elem' in m) or ('Quad8Elem' in m) or ('Seg2Elem' in m)):
|
||||||
mesh = Fem.FemMesh()
|
mesh = Fem.FemMesh()
|
||||||
nds = m['Nodes']
|
nds = m['Nodes']
|
||||||
|
|
||||||
|
@ -252,6 +317,10 @@ def importFrd(filename, analysis=None):
|
||||||
for i in elms_hexa8:
|
for i in elms_hexa8:
|
||||||
e = elms_hexa8[i]
|
e = elms_hexa8[i]
|
||||||
mesh.addVolume([e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7]], i)
|
mesh.addVolume([e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7]], i)
|
||||||
|
elms_penta6 = m['Penta6Elem']
|
||||||
|
for i in elms_penta6:
|
||||||
|
e = elms_penta6[i]
|
||||||
|
mesh.addVolume([e[0], e[1], e[2], e[3], e[4], e[5]], i)
|
||||||
elms_tetra4 = m['Tetra4Elem']
|
elms_tetra4 = m['Tetra4Elem']
|
||||||
for i in elms_tetra4:
|
for i in elms_tetra4:
|
||||||
e = elms_tetra4[i]
|
e = elms_tetra4[i]
|
||||||
|
@ -260,6 +329,16 @@ def importFrd(filename, analysis=None):
|
||||||
for i in elms_tetra10:
|
for i in elms_tetra10:
|
||||||
e = elms_tetra10[i]
|
e = elms_tetra10[i]
|
||||||
mesh.addVolume([e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9]], i)
|
mesh.addVolume([e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9]], i)
|
||||||
|
elms_penta15 = m['Penta15Elem']
|
||||||
|
for i in elms_penta15:
|
||||||
|
e = elms_penta15[i]
|
||||||
|
mesh.addVolume([ e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9],
|
||||||
|
e[10],e[11],e[12],e[13],e[14]], i)
|
||||||
|
elms_hexa20 = m['Hexa20Elem']
|
||||||
|
for i in elms_hexa20:
|
||||||
|
e = elms_hexa20[i]
|
||||||
|
mesh.addVolume([ e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9],
|
||||||
|
e[10],e[11],e[12],e[13],e[14],e[15],e[16],e[17],e[18],e[19]], i)
|
||||||
elms_tria3 = m['Tria3Elem']
|
elms_tria3 = m['Tria3Elem']
|
||||||
for i in elms_tria3:
|
for i in elms_tria3:
|
||||||
e = elms_tria3[i]
|
e = elms_tria3[i]
|
||||||
|
@ -280,10 +359,10 @@ def importFrd(filename, analysis=None):
|
||||||
for i in elms_seg2:
|
for i in elms_seg2:
|
||||||
e = elms_seg2[i]
|
e = elms_seg2[i]
|
||||||
mesh.addEdge(e[0], e[1])
|
mesh.addEdge(e[0], e[1])
|
||||||
print ("imported mesh: {} nodes, {} HEXA8, {} TETRA4, {} TETRA10".format(
|
print ("imported mesh: {} nodes, {} HEXA8, {} PENTA6, {} TETRA4, {} TETRA10, {} PENTA15".format(
|
||||||
len(nds), len(elms_hexa8), len(elms_tetra4), len(elms_tetra10)))
|
len(nds), len(elms_hexa8), len(elms_penta6), len(elms_tetra4), len(elms_tetra10), len(elms_penta15)))
|
||||||
print ("imported mesh: {} TRIA3, {} TRIA6, {} QUAD4, {} QUAD8, {} SEG2".format(
|
print ("imported mesh: {} HEXA20, {} TRIA3, {} TRIA6, {} QUAD4, {} QUAD8, {} SEG2".format(
|
||||||
len(elms_tria3), len(elms_tria6), len(elms_quad4), len(elms_quad8), len(elms_seg2)))
|
len(elms_hexa20), len(elms_tria3), len(elms_tria6), len(elms_quad4), len(elms_quad8), len(elms_seg2)))
|
||||||
if len(nds) > 0:
|
if len(nds) > 0:
|
||||||
mesh_object = FreeCAD.ActiveDocument.addObject('Fem::FemMeshObject', 'ResultMesh')
|
mesh_object = FreeCAD.ActiveDocument.addObject('Fem::FemMeshObject', 'ResultMesh')
|
||||||
mesh_object.FemMesh = mesh
|
mesh_object.FemMesh = mesh
|
||||||
|
|
Loading…
Reference in New Issue
Block a user