FEM: activate binary search get_femelement_by_femnodes_bin for volume meshes
This commit is contained in:
parent
2a5d445b26
commit
8ca705c2d9
|
@ -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 = {}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user