FEM: meshtools, add generic method to return femmesh type
This commit is contained in:
@@ -555,60 +555,19 @@ def get_z88_element_type(
|
|||||||
femmesh,
|
femmesh,
|
||||||
femelement_table=None
|
femelement_table=None
|
||||||
):
|
):
|
||||||
if not femmesh:
|
return z88_ele_types[meshtools.get_femmesh_eletype(femmesh, femelement_table)]
|
||||||
Console.PrintError("Error: No femmesh.\n")
|
|
||||||
if not femelement_table:
|
|
||||||
Console.PrintError("The femelement_table need to be calculated.\n")
|
z88_ele_types = {
|
||||||
femelement_table = meshtools.get_femelement_table(femmesh)
|
"tetra4": 17,
|
||||||
# in some cases lowest key in femelement_table is not [1]
|
"tetra10": 16,
|
||||||
for elem in sorted(femelement_table):
|
"hexa8": 1,
|
||||||
elem_length = len(femelement_table[elem])
|
"hexa20": 10,
|
||||||
Console.PrintLog("Node count of first element: {}\n".format(elem_length))
|
"tria3": 0,
|
||||||
break # break after the first elem
|
"tria6": 24,
|
||||||
if meshtools.is_solid_femmesh(femmesh):
|
"quad4": 0,
|
||||||
if femmesh.TetraCount == femmesh.VolumeCount:
|
"quad8": 23,
|
||||||
if elem_length == 4:
|
"seg2": 4,
|
||||||
return 17
|
"seg3": 4,
|
||||||
elif elem_length == 10:
|
"None": 0,
|
||||||
return 16
|
}
|
||||||
else:
|
|
||||||
Console.PrintMessage("Tetra with neither 4 nor 10 nodes.\n")
|
|
||||||
elif femmesh.HexaCount == femmesh.VolumeCount:
|
|
||||||
if elem_length == 8:
|
|
||||||
return 1
|
|
||||||
elif elem_length == 20:
|
|
||||||
return 10
|
|
||||||
else:
|
|
||||||
Console.PrintError("Hexa with neither 8 nor 20 nodes.\n")
|
|
||||||
return 0
|
|
||||||
else:
|
|
||||||
Console.PrintError("no tetra, no hexa or Mixed Volume Elements.\n")
|
|
||||||
elif meshtools.is_face_femmesh(femmesh):
|
|
||||||
if femmesh.TriangleCount == femmesh.FaceCount:
|
|
||||||
if elem_length == 3:
|
|
||||||
Console.PrintError("tria3mesh, not supported by Z88.\n")
|
|
||||||
return 0
|
|
||||||
elif elem_length == 6:
|
|
||||||
return 24
|
|
||||||
else:
|
|
||||||
Console.PrintError("Tria with neither 3 nor 6 nodes.\n")
|
|
||||||
return 0
|
|
||||||
elif femmesh.QuadrangleCount == femmesh.FaceCount:
|
|
||||||
if elem_length == 4:
|
|
||||||
Console.PrintError("quad4mesh, not supported by Z88.\n")
|
|
||||||
return 0
|
|
||||||
elif elem_length == 8:
|
|
||||||
return 23
|
|
||||||
else:
|
|
||||||
Console.PrintError("Quad with neither 4 nor 8 nodes.\n")
|
|
||||||
return 0
|
|
||||||
else:
|
|
||||||
Console.PrintError("no tria, no quad\n")
|
|
||||||
return 0
|
|
||||||
elif meshtools.is_edge_femmesh(femmesh):
|
|
||||||
Console.PrintMessage("Edge femmesh will be exported as 3D truss element nr 4.\n")
|
|
||||||
return 4
|
|
||||||
else:
|
|
||||||
Console.PrintError("Neither edge nor face nor solid femmesh.\n")
|
|
||||||
return 0
|
|
||||||
return 0
|
|
||||||
|
|||||||
@@ -2193,6 +2193,74 @@ def is_zplane_2D_mesh(
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
# ************************************************************************************************
|
||||||
|
def get_femmesh_eletype(
|
||||||
|
femmesh,
|
||||||
|
femelement_table=None
|
||||||
|
):
|
||||||
|
if not femmesh:
|
||||||
|
FreeCAD.Console.PrintError("Error: No femmesh.\n")
|
||||||
|
if not femelement_table:
|
||||||
|
FreeCAD.Console.PrintError("The femelement_table need to be calculated.\n")
|
||||||
|
femelement_table = get_femelement_table(femmesh)
|
||||||
|
# in some cases lowest key in femelement_table is not [1]
|
||||||
|
for elem in sorted(femelement_table):
|
||||||
|
elem_length = len(femelement_table[elem])
|
||||||
|
FreeCAD.Console.PrintLog("Node count of first element: {}\n".format(elem_length))
|
||||||
|
break # break after the first elem
|
||||||
|
if is_solid_femmesh(femmesh):
|
||||||
|
if femmesh.TetraCount == femmesh.VolumeCount:
|
||||||
|
if elem_length == 4:
|
||||||
|
return "tetra4"
|
||||||
|
elif elem_length == 10:
|
||||||
|
return "tetra10"
|
||||||
|
else:
|
||||||
|
FreeCAD.Console.PrintMessage("Tetra with neither 4 nor 10 nodes.\n")
|
||||||
|
return "None"
|
||||||
|
elif femmesh.HexaCount == femmesh.VolumeCount:
|
||||||
|
if elem_length == 8:
|
||||||
|
return "hexa8"
|
||||||
|
elif elem_length == 20:
|
||||||
|
return "hexa20"
|
||||||
|
else:
|
||||||
|
FreeCAD.Console.PrintError("Hexa with neither 8 nor 20 nodes.\n")
|
||||||
|
return "None"
|
||||||
|
else:
|
||||||
|
FreeCAD.Console.PrintError("no tetra, no hexa or Mixed Volume Elements.\n")
|
||||||
|
elif is_face_femmesh(femmesh):
|
||||||
|
if femmesh.TriangleCount == femmesh.FaceCount:
|
||||||
|
if elem_length == 3:
|
||||||
|
return "tria3"
|
||||||
|
elif elem_length == 6:
|
||||||
|
return "tria6"
|
||||||
|
else:
|
||||||
|
FreeCAD.Console.PrintError("Tria with neither 3 nor 6 nodes.\n")
|
||||||
|
return "None"
|
||||||
|
elif femmesh.QuadrangleCount == femmesh.FaceCount:
|
||||||
|
if elem_length == 4:
|
||||||
|
return "quad4"
|
||||||
|
elif elem_length == 8:
|
||||||
|
return "quad8"
|
||||||
|
else:
|
||||||
|
FreeCAD.Console.PrintError("Quad with neither 4 nor 8 nodes.\n")
|
||||||
|
return "None"
|
||||||
|
else:
|
||||||
|
FreeCAD.Console.PrintError("no tria, no quad\n")
|
||||||
|
return "None"
|
||||||
|
elif is_edge_femmesh(femmesh):
|
||||||
|
if elem_length == 3:
|
||||||
|
return "seg2"
|
||||||
|
elif elem_length == 6:
|
||||||
|
return "seg3"
|
||||||
|
else:
|
||||||
|
FreeCAD.Console.PrintError("Seg with neither 2 nor 3 nodes.\n")
|
||||||
|
return "None"
|
||||||
|
else:
|
||||||
|
FreeCAD.Console.PrintError("Neither edge nor face nor solid femmesh.\n")
|
||||||
|
return "None"
|
||||||
|
return "None"
|
||||||
|
|
||||||
|
|
||||||
# ************************************************************************************************
|
# ************************************************************************************************
|
||||||
def get_three_non_colinear_nodes(
|
def get_three_non_colinear_nodes(
|
||||||
nodes_coords
|
nodes_coords
|
||||||
|
|||||||
Reference in New Issue
Block a user