FEM: z88 some small code improvements

This commit is contained in:
Bernd Hahnebach
2020-03-27 05:56:36 +01:00
parent 6c399ae851
commit 97d90d53ed
2 changed files with 17 additions and 17 deletions

View File

@@ -30,9 +30,12 @@ __url__ = "http://www.freecadweb.org"
# \brief FreeCAD Z88 Mesh reader and writer for FEM workbench
import os
import FreeCAD
from FreeCAD import Console
from femmesh import meshtools
# ************************************************************************************************
# ********* generic FreeCAD import and export methods ********************************************
# names are fix given from FreeCAD, these methods are called from FreeCAD
@@ -86,8 +89,7 @@ def export(
Console.PrintError("No FEM mesh object selected.\n")
return
femnodes_mesh = obj.FemMesh.Nodes
import femmesh.meshtools as FemMeshTools
femelement_table = FemMeshTools.get_femelement_table(obj.FemMesh)
femelement_table = meshtools.get_femelement_table(obj.FemMesh)
z88_element_type = get_z88_element_type(obj.FemMesh, femelement_table)
f = pyopen(filename, "wb")
write_z88_mesh_to_file(femnodes_mesh, femelement_table, z88_element_type, f)
@@ -429,8 +431,7 @@ def write(
Console.PrintError("Not a FemMesh was given as parameter.\n")
return
femnodes_mesh = fem_mesh.Nodes
import femmesh.meshtools as FemMeshTools
femelement_table = FemMeshTools.get_femelement_table(fem_mesh)
femelement_table = meshtools.get_femelement_table(fem_mesh)
z88_element_type = get_z88_element_type(fem_mesh, femelement_table)
f = pyopen(filename, "w")
write_z88_mesh_to_file(femnodes_mesh, femelement_table, z88_element_type, f)
@@ -554,18 +555,17 @@ def get_z88_element_type(
femmesh,
femelement_table=None
):
import femmesh.meshtools as FemMeshTools
if not femmesh:
Console.PrintError("Error: No femmesh.\n")
if not femelement_table:
Console.PrintError("The femelement_table need to be calculated.\n")
femelement_table = FemMeshTools.get_femelement_table(femmesh)
femelement_table = meshtools.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])
Console.PrintLog("Node count of first element: {}\n".format(elem_length))
break # break after the first elem
if FemMeshTools.is_solid_femmesh(femmesh):
if meshtools.is_solid_femmesh(femmesh):
if femmesh.TetraCount == femmesh.VolumeCount:
if elem_length == 4:
return 17
@@ -583,7 +583,7 @@ def get_z88_element_type(
return 0
else:
Console.PrintError("no tetra, no hexa or Mixed Volume Elements.\n")
elif FemMeshTools.is_face_femmesh(femmesh):
elif meshtools.is_face_femmesh(femmesh):
if femmesh.TriangleCount == femmesh.FaceCount:
if elem_length == 3:
Console.PrintError("tria3mesh, not supported by Z88.\n")
@@ -605,7 +605,7 @@ def get_z88_element_type(
else:
Console.PrintError("no tria, no quad\n")
return 0
elif FemMeshTools.is_edge_femmesh(femmesh):
elif meshtools.is_edge_femmesh(femmesh):
Console.PrintMessage("Edge femmesh will be exported as 3D truss element nr 4.\n")
return 4
else:

View File

@@ -32,12 +32,12 @@ import time
import FreeCAD
from .. import writerbase as FemInputWriter
from .. import writerbase
from feminout import importZ88Mesh
from femmesh import meshtools as FemMeshTools
from femmesh import meshtools
class FemInputWriterZ88(FemInputWriter.FemInputWriter):
class FemInputWriterZ88(writerbase.FemInputWriter):
def __init__(
self,
analysis_obj,
@@ -46,7 +46,7 @@ class FemInputWriterZ88(FemInputWriter.FemInputWriter):
member,
dir_name=None
):
FemInputWriter.FemInputWriter.__init__(
writerbase.FemInputWriter.__init__(
self,
analysis_obj,
solver_obj,
@@ -68,7 +68,7 @@ class FemInputWriterZ88(FemInputWriter.FemInputWriter):
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femelement_table:
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
self.femelement_table = meshtools.get_femelement_table(self.femmesh)
self.element_count = len(self.femelement_table)
self.set_z88_elparam()
self.write_z88_mesh()
@@ -193,7 +193,7 @@ class FemInputWriterZ88(FemInputWriter.FemInputWriter):
def write_z88_elements_properties(self):
element_properties_file_path = self.file_name + "elp.txt"
elements_data = []
if FemMeshTools.is_edge_femmesh(self.femmesh):
if meshtools.is_edge_femmesh(self.femmesh):
if len(self.beamsection_objects) == 1:
beam_obj = self.beamsection_objects[0]["Object"]
width = beam_obj.RectWidth.getValueAs("mm")
@@ -207,7 +207,7 @@ class FemInputWriterZ88(FemInputWriter.FemInputWriter):
)
else:
FreeCAD.Console.PrintError("Multiple beamsections for Z88 not yet supported!\n")
elif FemMeshTools.is_face_femmesh(self.femmesh):
elif meshtools.is_face_femmesh(self.femmesh):
if len(self.shellthickness_objects) == 1:
thick_obj = self.shellthickness_objects[0]["Object"]
thickness = str(thick_obj.Thickness.getValueAs("mm"))
@@ -218,7 +218,7 @@ class FemInputWriterZ88(FemInputWriter.FemInputWriter):
FreeCAD.Console.PrintError(
"Multiple thicknesses for Z88 not yet supported!\n"
)
elif FemMeshTools.is_solid_femmesh(self.femmesh):
elif meshtools.is_solid_femmesh(self.femmesh):
elements_data.append("1 " + str(self.element_count) + " 0 0 0 0 0 0 0")
else:
FreeCAD.Console.PrintError("Error!\n")