Fem: Remove code duplication in MeshSetsGetter class

This commit is contained in:
marioalexis
2025-08-29 11:21:25 -03:00
parent 54012fbaaf
commit 445828eed7

View File

@@ -101,6 +101,19 @@ class MeshSetsGetter:
self.femelement_count_test = True
self.mat_geo_sets = []
self._load_tables()
def _load_tables(self):
if self.mesh_object:
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femelement_table:
self.femelement_table = meshtools.get_femelement_table(self.femmesh)
if not self.femnodes_ele_table:
self.femnodes_ele_table = meshtools.get_femnodes_ele_table(
self.femnodes_mesh, self.femelement_table
)
# ********************************************************************************************
# ********************************************************************************************
# use set for node sets to be sure all nodes are unique
@@ -338,72 +351,35 @@ class MeshSetsGetter:
# ********************************************************************************************
# ********************************************************************************************
def _get_ccx_elements(self, obj):
print_obj_info(obj)
result = []
ref_data = meshtools.pair_obj_reference(obj.References)
for ref_pair in ref_data:
result.append(meshtools.get_ccx_elements(self, ref_pair))
return result
# faces sets
def get_constraints_pressure_faces(self):
if not self.member.cons_pressure:
return
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femelement_table:
self.femelement_table = meshtools.get_femelement_table(self.femmesh)
if not self.femnodes_ele_table:
self.femnodes_ele_table = meshtools.get_femnodes_ele_table(
self.femnodes_mesh, self.femelement_table
)
for femobj in self.member.cons_pressure:
# femobj --> dict, FreeCAD document object is femobj["Object"]
obj = femobj["Object"]
print_obj_info(obj)
result = []
ref_data = meshtools.pair_obj_reference(obj.References)
for ref_pair in ref_data:
result.append(meshtools.get_ccx_elements(self, ref_pair))
result = self._get_ccx_elements(obj)
femobj["PressureFaces"] = result
def get_constraints_electrostatic_faces(self):
if not self.member.cons_electrostatic:
return
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femelement_table:
self.femelement_table = meshtools.get_femelement_table(self.femmesh)
if not self.femnodes_ele_table:
self.femnodes_ele_table = meshtools.get_femnodes_ele_table(
self.femnodes_mesh, self.femelement_table
)
for femobj in self.member.cons_electrostatic:
obj = femobj["Object"]
if obj.BoundaryCondition == "Neumann":
print_obj_info(obj)
result = []
ref_data = meshtools.pair_obj_reference(obj.References)
for ref_pair in ref_data:
result.append(meshtools.get_ccx_elements(self, ref_pair))
result = self._get_ccx_elements(obj)
femobj["ElectricFluxFaces"] = result
def get_constraints_electricchargedensity_faces(self):
if not self.member.cons_electricchargedensity:
return
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femelement_table:
self.femelement_table = meshtools.get_femelement_table(self.femmesh)
if not self.femnodes_ele_table:
self.femnodes_ele_table = meshtools.get_femnodes_ele_table(
self.femnodes_mesh, self.femelement_table
)
for femobj in self.member.cons_electricchargedensity:
obj = femobj["Object"]
print_obj_info(obj)
result = []
ref_data = meshtools.pair_obj_reference(obj.References)
for ref_pair in ref_data:
result.append(meshtools.get_ccx_elements(self, ref_pair))
result = self._get_ccx_elements(obj)
if obj.Mode in ["Interface", "Total Interface"]:
femobj["ChargeDensityFaces"] = result
@@ -411,25 +387,9 @@ class MeshSetsGetter:
femobj["ChargeDensityElements"] = result
def get_constraints_contact_faces(self):
if not self.member.cons_contact:
return
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femelement_table:
self.femelement_table = meshtools.get_femelement_table(self.femmesh)
if not self.femnodes_ele_table:
self.femnodes_ele_table = meshtools.get_femnodes_ele_table(
self.femnodes_mesh, self.femelement_table
)
for femobj in self.member.cons_contact:
# femobj --> dict, FreeCAD document object is femobj["Object"]
obj = femobj["Object"]
print_obj_info(obj)
result = []
ref_data = meshtools.pair_obj_reference(obj.References)
for ref_pair in ref_data:
result.append(meshtools.get_ccx_elements(self, ref_pair))
result = self._get_ccx_elements(obj)
femobj["ContactSlaveFaces"] = result[:-1]
femobj["ContactMasterFaces"] = result[-1:]
@@ -442,25 +402,9 @@ class MeshSetsGetter:
# from one side of the geometric face are needed
def get_constraints_tie_faces(self):
if not self.member.cons_tie:
return
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femelement_table:
self.femelement_table = meshtools.get_femelement_table(self.femmesh)
if not self.femnodes_ele_table:
self.femnodes_ele_table = meshtools.get_femnodes_ele_table(
self.femnodes_mesh, self.femelement_table
)
for femobj in self.member.cons_tie:
# femobj --> dict, FreeCAD document object is femobj["Object"]
obj = femobj["Object"]
print_obj_info(obj)
result = []
ref_data = meshtools.pair_obj_reference(obj.References)
for ref_pair in ref_data:
result.append(meshtools.get_ccx_elements(self, ref_pair))
result = self._get_ccx_elements(obj)
femobj["TieSlaveFaces"] = result[:-1]
femobj["TieMasterFaces"] = result[-1:]
@@ -513,24 +457,9 @@ class MeshSetsGetter:
)
def get_constraints_heatflux_faces(self):
if not self.member.cons_heatflux:
return
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femelement_table:
self.femelement_table = meshtools.get_femelement_table(self.femmesh)
if not self.femnodes_ele_table:
self.femnodes_ele_table = meshtools.get_femnodes_ele_table(
self.femnodes_mesh, self.femelement_table
)
for femobj in self.member.cons_heatflux:
obj = femobj["Object"]
print_obj_info(obj)
result = []
ref_data = meshtools.pair_obj_reference(obj.References)
for ref_pair in ref_data:
result.append(meshtools.get_ccx_elements(self, ref_pair))
result = self._get_ccx_elements(obj)
femobj["HeatFluxFaces"] = result
@@ -550,25 +479,9 @@ class MeshSetsGetter:
self.get_solid_element_sets(self.member.cons_centrif)
def get_constraints_bodyheatsource_elements(self):
# get element ids and write them into the femobj
if not self.member.cons_bodyheatsource:
return
if not self.femnodes_mesh:
self.femnodes_mesh = self.femmesh.Nodes
if not self.femelement_table:
self.femelement_table = meshtools.get_femelement_table(self.femmesh)
if not self.femnodes_ele_table:
self.femnodes_ele_table = meshtools.get_femnodes_ele_table(
self.femnodes_mesh, self.femelement_table
)
for femobj in self.member.cons_bodyheatsource:
obj = femobj["Object"]
print_obj_info(obj)
result = []
ref_data = meshtools.pair_obj_reference(obj.References)
for ref_pair in ref_data:
result.append(meshtools.get_ccx_elements(self, ref_pair))
result = self._get_ccx_elements(obj)
femobj["BodyHeatSourceElements"] = result