FEM: activate binary search get_femelement_by_femnodes_bin for volume meshes

This commit is contained in:
Bernd Hahnebach 2016-11-22 19:46:36 +01:00
parent 2a5d445b26
commit 8ca705c2d9
2 changed files with 15 additions and 5 deletions

View File

@ -974,7 +974,12 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
if all_found is False:
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)
# we gone use the binary search for get_femelements_by_femnodes(), thus we need the parameter values self.femnodes_ele_table
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femnodes_ele_table:
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)
for mat_data in self.material_objects:
mat_obj = mat_data['Object']
ccx_elset = {}

View File

@ -42,13 +42,18 @@ def get_femnodes_by_femobj_with_references(femmesh, femobj):
return node_set
def get_femelements_by_references(femmesh, femelement_table, references):
def get_femelements_by_references(femmesh, femelement_table, references, femnodes_ele_table=None):
'''get the femelements for a list of references
'''
references_femelements = []
for ref in references:
ref_femnodes = get_femnodes_by_refshape(femmesh, ref) # femnodes for the current ref
references_femelements += get_femelements_by_femnodes_std(femelement_table, ref_femnodes) # femelements for all references
if femnodes_ele_table:
# blind fast binary search, works for volumes only
references_femelements += get_femelements_by_femnodes_bin(femelement_table, femnodes_ele_table, ref_femnodes) # femelements for all references
else:
# standars search
references_femelements += get_femelements_by_femnodes_std(femelement_table, ref_femnodes) # femelements for all references
return references_femelements
@ -324,7 +329,7 @@ def get_femvolumeelements_by_femfacenodes(femelement_table, node_list):
return e
def get_femelement_sets(femmesh, femelement_table, fem_objects): # fem_objects = FreeCAD FEM document objects
def get_femelement_sets(femmesh, femelement_table, fem_objects, femnodes_ele_table=None): # fem_objects = FreeCAD FEM document objects
# get femelements for reference shapes of each obj.References
count_femelements = 0
referenced_femelements = []
@ -334,7 +339,7 @@ def get_femelement_sets(femmesh, femelement_table, fem_objects): # fem_objects
fem_object['ShortName'] = get_elset_short_name(obj, fem_object_i) # unique short identifier
if obj.References:
ref_shape_femelements = []
ref_shape_femelements = get_femelements_by_references(femmesh, femelement_table, obj.References)
ref_shape_femelements = get_femelements_by_references(femmesh, femelement_table, obj.References, femnodes_ele_table)
referenced_femelements += ref_shape_femelements
count_femelements += len(ref_shape_femelements)
fem_object['FEMElements'] = ref_shape_femelements