FEM: input writer, use own element table for each shape type
This commit is contained in:
@@ -108,6 +108,34 @@ def get_femelement_table(femmesh):
|
||||
return femelement_table
|
||||
|
||||
|
||||
def get_femelement_volumes_table(femmesh):
|
||||
""" get_femelement_volumes_table(femmesh): { elementid : [ nodeid, nodeid, ... , nodeid ] }"""
|
||||
table = {}
|
||||
for i in femmesh.Volumes:
|
||||
table[i] = femmesh.getElementNodes(i)
|
||||
return table
|
||||
|
||||
|
||||
def get_femelement_faces_table(femmesh, faces_only=None):
|
||||
""" get_femelement_faces_table(femmesh): { elementid : [ nodeid, nodeid, ... , nodeid ] }"""
|
||||
table = {}
|
||||
if not faces_only:
|
||||
faces_only = femmesh.FacesOnly
|
||||
for i in faces_only:
|
||||
table[i] = femmesh.getElementNodes(i)
|
||||
return table
|
||||
|
||||
|
||||
def get_femelement_edges_table(femmesh, edges_only=None):
|
||||
""" get_femelement_edges_table(femmesh): { elementid : [ nodeid, nodeid, ... , nodeid ] }"""
|
||||
table = {}
|
||||
if not edges_only:
|
||||
edges_only = femmesh.EdgesOnly
|
||||
for i in edges_only:
|
||||
table[i] = femmesh.getElementNodes(i)
|
||||
return table
|
||||
|
||||
|
||||
def get_femnodes_ele_table(femnodes_mesh, femelement_table):
|
||||
'''the femnodes_ele_table contains for each node its membership in elements
|
||||
{nodeID : [[eleID, NodePosition], [], ...], nodeID : [[], [], ...], ...}
|
||||
|
||||
@@ -87,6 +87,11 @@ class FemInputWriter():
|
||||
self.femelement_table = {}
|
||||
self.constraint_conflict_nodes = []
|
||||
self.femnodes_ele_table = {}
|
||||
self.femelements_edges_only = []
|
||||
self.femelements_faces_only = []
|
||||
self.femelement_volumes_table = {}
|
||||
self.femelement_faces_table = {}
|
||||
self.femelement_edges_table = {}
|
||||
|
||||
def get_constraints_fixed_nodes(self):
|
||||
# get nodes
|
||||
@@ -189,30 +194,30 @@ class FemInputWriter():
|
||||
def get_element_geometry2D_elements(self):
|
||||
# get element ids and write them into the objects
|
||||
FreeCAD.Console.PrintMessage('Shell thicknesses\n')
|
||||
if not self.femelement_table:
|
||||
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_table, self.shellthickness_objects)
|
||||
if not self.femelement_faces_table:
|
||||
self.femelement_faces_table = FemMeshTools.get_femelement_faces_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_faces_table, self.shellthickness_objects)
|
||||
|
||||
def get_element_geometry1D_elements(self):
|
||||
# get element ids and write them into the objects
|
||||
FreeCAD.Console.PrintMessage('Beam sections\n')
|
||||
if not self.femelement_table:
|
||||
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_table, self.beamsection_objects)
|
||||
if not self.femelement_edges_table:
|
||||
self.femelement_edges_table = FemMeshTools.get_femelement_edges_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_edges_table, self.beamsection_objects)
|
||||
|
||||
def get_element_rotation1D_elements(self):
|
||||
# get for each geometry edge direction the element ids and rotation norma
|
||||
FreeCAD.Console.PrintMessage('Beam rotations\n')
|
||||
if not self.femelement_table:
|
||||
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_direction1D_set(self.femmesh, self.femelement_table, self.beamrotation_objects, self.theshape)
|
||||
if not self.femelement_edges_table:
|
||||
self.femelement_edges_table = FemMeshTools.get_femelement_edges_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_direction1D_set(self.femmesh, self.femelement_edges_table, self.beamrotation_objects, self.theshape)
|
||||
|
||||
def get_element_fluid1D_elements(self):
|
||||
# get element ids and write them into the objects
|
||||
FreeCAD.Console.PrintMessage('Fluid sections\n')
|
||||
if not self.femelement_table:
|
||||
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_table, self.fluidsection_objects)
|
||||
if not self.femelement_edges_table:
|
||||
self.femelement_edges_table = FemMeshTools.get_femelement_edges_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_edges_table, self.fluidsection_objects)
|
||||
|
||||
def get_material_elements(self):
|
||||
# it only works if either Volumes or Shellthicknesses or Beamsections are in the material objects
|
||||
@@ -228,8 +233,8 @@ class FemInputWriter():
|
||||
FreeCAD.Console.PrintMessage(all_found)
|
||||
FreeCAD.Console.PrintMessage('\n')
|
||||
if all_found is False:
|
||||
if not self.femelement_table:
|
||||
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
|
||||
if not self.femelement_volumes_table:
|
||||
self.femelement_volumes_table = FemMeshTools.get_femelement_volumes_table(self.femmesh)
|
||||
# we're going to use the binary search for get_femelements_by_femnodes()
|
||||
# thus we need the parameter values self.femnodes_ele_table
|
||||
if not self.femnodes_mesh:
|
||||
@@ -238,12 +243,12 @@ class FemInputWriter():
|
||||
self.femnodes_ele_table = FemMeshTools.get_femnodes_ele_table(self.femnodes_mesh, self.femelement_table)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_table, self.material_objects, self.femnodes_ele_table)
|
||||
if self.shellthickness_objects:
|
||||
if not self.femelement_table:
|
||||
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_table, self.material_objects)
|
||||
if not self.femelement_faces_table:
|
||||
self.femelement_faces_table = FemMeshTools.get_femelement_faces_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_faces_table, self.material_objects)
|
||||
if self.beamsection_objects or self.fluidsection_objects:
|
||||
if not self.femelement_table:
|
||||
self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_table, self.material_objects)
|
||||
if not self.femelement_edges_table:
|
||||
self.femelement_edges_table = FemMeshTools.get_femelement_edges_table(self.femmesh)
|
||||
FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_edges_table, self.material_objects)
|
||||
|
||||
## @}
|
||||
|
||||
Reference in New Issue
Block a user