Skip to content

Commit

Permalink
FEM: ccx input writer, make use of the new faster binary search metho…
Browse files Browse the repository at this point in the history
…d for getting the pressure faces
  • Loading branch information
berndhahnebach committed Nov 22, 2016
1 parent 894d79a commit 8b24da4
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
21 changes: 19 additions & 2 deletions src/Mod/Fem/FemInputWriter.py
Expand Up @@ -85,6 +85,7 @@ def __init__(self,
self.femnodes_mesh = {}
self.femelement_table = {}
self.constraint_conflict_nodes = []
self.femnodes_ele_table = {}

def get_constraints_fixed_nodes(self):
# get nodes
Expand Down Expand Up @@ -159,9 +160,25 @@ def get_constraints_force_nodeloads(self):
def get_constraints_pressure_faces(self):
# TODO see comments in get_constraints_force_nodeloads(), it applies here too. Mhh it applies to all constraints ...

'''
# depreciated version
# get the faces and face numbers
for femobj in self.pressure_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
femobj['PressureFaces'] = FemMeshTools.get_pressure_obj_faces(self.femmesh, femobj)
# print femobj['PressureFaces']
femobj['PressureFaces'] = FemMeshTools.get_pressure_obj_faces_depreciated(self.femmesh, femobj)
# print(femobj['PressureFaces'])
'''

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)
if not self.femnodes_ele_table:
self.femnodes_ele_table = FemMeshTools.get_femnodes_ele_table(self.femnodes_mesh, self.femelement_table)

for femobj in self.pressure_objects: # femobj --> dict, FreeCAD document object is femobj['Object']
pressure_faces = FemMeshTools.get_pressure_obj_faces(self.femmesh, self.femelement_table, self.femnodes_ele_table, femobj)
# print(len(pressure_faces))
femobj['PressureFaces'] = [(femobj['Object'].Name + ': face load', pressure_faces)]
# print(femobj['PressureFaces'])

# @}
12 changes: 11 additions & 1 deletion src/Mod/Fem/FemMeshTools.py
Expand Up @@ -491,7 +491,7 @@ def get_force_obj_edge_nodeload_table(femmesh, femelement_table, femnodes_mesh,
return force_obj_node_load_table


def get_pressure_obj_faces(femmesh, femobj):
def get_pressure_obj_faces_depreciated(femmesh, femobj):
pressure_faces = []
for o, elem_tup in femobj['Object'].References:
for elem in elem_tup:
Expand All @@ -503,6 +503,16 @@ def get_pressure_obj_faces(femmesh, femobj):
return pressure_faces


def get_pressure_obj_faces(femmesh, femelement_table, femnodes_ele_table, femobj):
# get the nodes
prs_face_node_set = get_femnodes_by_femobj_with_references(femmesh, femobj) # sorted and duplicates removed
# print('prs_face_node_set: ', prs_face_node_set)
# fill the bit_pattern_dict and search for the faces
bit_pattern_dict = get_bit_pattern_dict(femelement_table, femnodes_ele_table, prs_face_node_set)
pressure_faces = get_ccxelement_faces_from_binary_search(bit_pattern_dict)
return pressure_faces


def get_force_obj_face_nodeload_table(femmesh, femelement_table, femnodes_mesh, frc_obj):
# force_obj_node_load_table = [('refshape_name.elemname',node_load_table), ..., ('refshape_name.elemname',node_load_table)]
force_obj_node_load_table = []
Expand Down

0 comments on commit 8b24da4

Please sign in to comment.