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")
|
||||
nodes = {}
|
||||
elements_hexa8 = {}
|
||||
elements_penta6 = {}
|
||||
elements_tetra4 = {}
|
||||
elements_tetra10 = {}
|
||||
elements_penta15 = {}
|
||||
elements_hexa20 = {}
|
||||
elements_tria3 = {}
|
||||
elements_tria6 = {}
|
||||
elements_quad4 = {}
|
||||
|
@ -55,6 +58,7 @@ def readResult(frd_input):
|
|||
nodes_found = False
|
||||
mode_stress_found = False
|
||||
elements_found = False
|
||||
input_continues = False
|
||||
eigenmode = 0
|
||||
elem = -1
|
||||
elemType = 0
|
||||
|
@ -88,6 +92,15 @@ def readResult(frd_input):
|
|||
node_id_3 = int(line[63:73])
|
||||
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)
|
||||
#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
|
||||
if elements_found and (line[1:3] == "-2") and elemType == 3:
|
||||
node_id_2 = int(line[3:13])
|
||||
|
@ -95,6 +108,55 @@ def readResult(frd_input):
|
|||
node_id_3 = int(line[23:33])
|
||||
node_id_4 = int(line[33:43])
|
||||
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
|
||||
if elements_found and (line[1:3] == "-2") and elemType == 6:
|
||||
node_id_2 = int(line[3:13])
|
||||
|
@ -193,8 +255,11 @@ def readResult(frd_input):
|
|||
elements_found = False
|
||||
|
||||
frd_file.close()
|
||||
return {'Nodes': nodes, 'Hexa8Elem': elements_hexa8, 'Tetra4Elem': elements_tetra4, 'Tetra10Elem': elements_tetra10, 'Tria3Elem': elements_tria3,
|
||||
'Tria6Elem': elements_tria6, 'Quad4Elem': elements_quad4, 'Quad8Elem': elements_quad8, 'Seg2Elem': elements_seg2, 'Results': results}
|
||||
return {'Nodes': nodes,
|
||||
'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):
|
||||
|
@ -238,10 +303,10 @@ def importFrd(filename, analysis=None):
|
|||
z_span = abs(p_z_max - p_z_min)
|
||||
span = max(x_span, y_span, z_span)
|
||||
|
||||
if (not analysis) and ('Nodes' in m) and (('Hexa8Elem' in m) or
|
||||
('Tetra4Elem' in m) or ('Tetra10Elem' in m) or ('Tria3Elem' in m) or
|
||||
('Tria6Elem' in m) or ('Quad4Elem' in m) or ('Quad8Elem' in m) or
|
||||
('Seg2Elem' in m)):
|
||||
if (not analysis) and ('Nodes' in m) and \
|
||||
(('Hexa8Elem' in m) or ('Penta6Elem' in m) or ('Tetra4Elem' in m) or ('Tetra10Elem' in m) or \
|
||||
('Penta6Elem' in m) or ('Hexa20Elem' in m) or ('Tria3Elem' in m) or ('Tria6Elem' in m) or \
|
||||
('Quad4Elem' in m) or ('Quad8Elem' in m) or ('Seg2Elem' in m)):
|
||||
mesh = Fem.FemMesh()
|
||||
nds = m['Nodes']
|
||||
|
||||
|
@ -252,6 +317,10 @@ def importFrd(filename, analysis=None):
|
|||
for i in elms_hexa8:
|
||||
e = elms_hexa8[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']
|
||||
for i in elms_tetra4:
|
||||
e = elms_tetra4[i]
|
||||
|
@ -260,6 +329,16 @@ def importFrd(filename, analysis=None):
|
|||
for i in elms_tetra10:
|
||||
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)
|
||||
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']
|
||||
for i in elms_tria3:
|
||||
e = elms_tria3[i]
|
||||
|
@ -280,10 +359,10 @@ def importFrd(filename, analysis=None):
|
|||
for i in elms_seg2:
|
||||
e = elms_seg2[i]
|
||||
mesh.addEdge(e[0], e[1])
|
||||
print ("imported mesh: {} nodes, {} HEXA8, {} TETRA4, {} TETRA10".format(
|
||||
len(nds), len(elms_hexa8), len(elms_tetra4), len(elms_tetra10)))
|
||||
print ("imported mesh: {} TRIA3, {} TRIA6, {} QUAD4, {} QUAD8, {} SEG2".format(
|
||||
len(elms_tria3), len(elms_tria6), len(elms_quad4), len(elms_quad8), len(elms_seg2)))
|
||||
print ("imported mesh: {} nodes, {} HEXA8, {} PENTA6, {} TETRA4, {} TETRA10, {} PENTA15".format(
|
||||
len(nds), len(elms_hexa8), len(elms_penta6), len(elms_tetra4), len(elms_tetra10), len(elms_penta15)))
|
||||
print ("imported mesh: {} HEXA20, {} TRIA3, {} TRIA6, {} QUAD4, {} QUAD8, {} SEG2".format(
|
||||
len(elms_hexa20), len(elms_tria3), len(elms_tria6), len(elms_quad4), len(elms_quad8), len(elms_seg2)))
|
||||
if len(nds) > 0:
|
||||
mesh_object = FreeCAD.ActiveDocument.addObject('Fem::FemMeshObject', 'ResultMesh')
|
||||
mesh_object.FemMesh = mesh
|
||||
|
|
Loading…
Reference in New Issue
Block a user