FEM: use group data for multi body material analysis, if available
This commit is contained in:
committed by
Yorik van Havre
parent
8a0b745b2a
commit
56b153070d
@@ -793,9 +793,14 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
self.ccx_elsets.append(ccx_elset)
|
||||
|
||||
def get_ccx_elsets_multiple_mat_solid(self):
|
||||
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)
|
||||
all_found = False
|
||||
if self.femmesh.GroupCount:
|
||||
all_found = FemMeshTools.get_femelement_sets_from_group_data(self.femmesh, self.material_objects)
|
||||
print(all_found)
|
||||
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)
|
||||
for mat_data in self.material_objects:
|
||||
mat_obj = mat_data['Object']
|
||||
ccx_elset = {}
|
||||
|
||||
@@ -195,6 +195,35 @@ def get_femelement_sets(femmesh, femelement_table, fem_objects): # fem_objects
|
||||
FreeCAD.Console.PrintError('Error in get_femelement_sets -- > femelements_count_ok() failed!\n')
|
||||
|
||||
|
||||
def get_femelement_sets_from_group_data(femmesh, fem_objects):
|
||||
# get femelements from femmesh groupdata for reference shapes of each obj.References
|
||||
print("")
|
||||
count_femelements = 0
|
||||
sum_group_elements = []
|
||||
# we assume the mesh group data fits with the reference shapes, no check is done in this regard !!!
|
||||
# what happens if a reference shape was changed, but the mesh and the mesh groups were not created new !?!
|
||||
for fem_object_i, fem_object in enumerate(fem_objects):
|
||||
obj = fem_object['Object']
|
||||
fem_object['ShortName'] = get_elset_short_name(obj, fem_object_i) # unique short identifier
|
||||
if femmesh.GroupCount:
|
||||
for g in femmesh.Groups:
|
||||
grp_name = femmesh.getGroupName(g)
|
||||
if grp_name.startswith(obj.Name + '_'):
|
||||
if femmesh.getGroupElementType(g) == "Volume":
|
||||
print("Constraint: " + obj.Name + " --> " + "mesh group: " + grp_name)
|
||||
group_elements = femmesh.getGroupElements(g) # == ref_shape_femelements
|
||||
sum_group_elements += group_elements
|
||||
count_femelements += len(group_elements)
|
||||
fem_object['FEMElements'] = group_elements
|
||||
# check if all worked out well
|
||||
if not femelements_count_ok(femmesh.VolumeCount, count_femelements):
|
||||
FreeCAD.Console.PrintError('Error in get_femelement_sets_from_group_data -- > femelements_count_ok() failed!\n')
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
print("")
|
||||
|
||||
|
||||
def get_elset_short_name(obj, i):
|
||||
if hasattr(obj, "Proxy") and obj.Proxy.Type == 'MechanicalMaterial':
|
||||
return 'Mat' + str(i)
|
||||
|
||||
Reference in New Issue
Block a user