From 98e8704e792ac0f208dbf39727bdff9699474c4b Mon Sep 17 00:00:00 2001 From: marioalexis Date: Fri, 29 Aug 2025 04:36:35 -0300 Subject: [PATCH] Fem: Update body heat source element getter for CalculiX --- src/Mod/Fem/femmesh/meshsetsgetter.py | 25 +++++++++++++------ .../write_constraint_bodyheatsource.py | 10 ++++---- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/Mod/Fem/femmesh/meshsetsgetter.py b/src/Mod/Fem/femmesh/meshsetsgetter.py index e063218a6d..ba9d487397 100644 --- a/src/Mod/Fem/femmesh/meshsetsgetter.py +++ b/src/Mod/Fem/femmesh/meshsetsgetter.py @@ -553,13 +553,24 @@ class MeshSetsGetter: # get element ids and write them into the femobj if not self.member.cons_bodyheatsource: return - if ( - len(self.member.cons_bodyheatsource) == 1 - and not self.member.cons_bodyheatsource[0]["Object"].References - ): - self.member.cons_bodyheatsource[0]["FEMElements"] = self.ccx_evolumes - else: - self.get_solid_element_sets(self.member.cons_bodyheatsource) + 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)) + + femobj["BodyHeatSourceElements"] = result # ******************************************************************************************** # ******************************************************************************************** diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_bodyheatsource.py b/src/Mod/Fem/femsolver/calculix/write_constraint_bodyheatsource.py index 65d48a7c24..35fde847d1 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_bodyheatsource.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_bodyheatsource.py @@ -58,12 +58,12 @@ def get_after_write_constraint(): def write_meshdata_constraint(f, femobj, bodyheatsource_obj, ccxwriter): + f.write(f"*ELSET,ELSET={bodyheatsource_obj.Name}\n") - if isinstance(femobj["FEMElements"], str): - f.write("{}\n".format(femobj["FEMElements"])) - else: - for e in femobj["FEMElements"]: - f.write(f"{e},\n") + for refs, surf, is_sub_el in femobj["BodyHeatSourceElements"]: + if not is_sub_el: + for elem in surf: + f.write(f"{elem},\n") def write_constraint(f, femobj, bodyheatsource_obj, ccxwriter):