From 09703327ea1694fff243b40de00a7408b4b3d260 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Sun, 11 Jul 2021 22:46:17 +0200 Subject: [PATCH] FEM: calculix writer, add write before and write after to constraints modules --- src/Mod/Fem/femsolver/calculix/con_centrif.py | 16 +++++++++++++ src/Mod/Fem/femsolver/calculix/con_contact.py | 16 +++++++++++++ .../femsolver/calculix/con_displacement.py | 16 +++++++++++++ src/Mod/Fem/femsolver/calculix/con_fixed.py | 16 +++++++++++++ src/Mod/Fem/femsolver/calculix/con_force.py | 8 +++++++ .../Fem/femsolver/calculix/con_heatflux.py | 8 +++++++ .../femsolver/calculix/con_planerotation.py | 16 +++++++++++++ .../Fem/femsolver/calculix/con_pressure.py | 8 +++++++ .../femsolver/calculix/con_sectionprint.py | 16 +++++++++++++ .../Fem/femsolver/calculix/con_temperature.py | 16 +++++++++++++ src/Mod/Fem/femsolver/calculix/con_tie.py | 16 +++++++++++++ .../Fem/femsolver/calculix/con_transform.py | 16 +++++++++++++ src/Mod/Fem/femsolver/calculix/writer.py | 24 +++++++++---------- 13 files changed, 180 insertions(+), 12 deletions(-) diff --git a/src/Mod/Fem/femsolver/calculix/con_centrif.py b/src/Mod/Fem/femsolver/calculix/con_centrif.py index 0ddca10a56..b84b705614 100644 --- a/src/Mod/Fem/femsolver/calculix/con_centrif.py +++ b/src/Mod/Fem/femsolver/calculix/con_centrif.py @@ -44,6 +44,22 @@ def get_constraint_title(): return "Centrif Constraints" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + +def get_before_write_constraint(): + return "" + + +def get_after_write_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, centrif_obj, ccxwriter): f.write("*ELSET,ELSET={}\n".format(centrif_obj.Name)) # use six to be sure to be Python 2.7 and 3.x compatible diff --git a/src/Mod/Fem/femsolver/calculix/con_contact.py b/src/Mod/Fem/femsolver/calculix/con_contact.py index cd082e6fef..cd2f7ad41d 100644 --- a/src/Mod/Fem/femsolver/calculix/con_contact.py +++ b/src/Mod/Fem/femsolver/calculix/con_contact.py @@ -38,6 +38,22 @@ def get_constraint_title(): return "Contact Constraints" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + +def get_before_write_constraint(): + return "" + + +def get_after_write_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, contact_obj, ccxwriter): # slave DEP f.write("*SURFACE, NAME=DEP{}\n".format(contact_obj.Name)) diff --git a/src/Mod/Fem/femsolver/calculix/con_displacement.py b/src/Mod/Fem/femsolver/calculix/con_displacement.py index 8d05d33298..123450fc75 100644 --- a/src/Mod/Fem/femsolver/calculix/con_displacement.py +++ b/src/Mod/Fem/femsolver/calculix/con_displacement.py @@ -38,6 +38,22 @@ def get_constraint_title(): return "Displacement constraint applied" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + +def get_before_write_constraint(): + return "" + + +def get_after_write_constraint(): + return "\n" + + def write_meshdata_constraint(f, femobj, disp_obj, ccxwriter): f.write("*NSET,NSET={}\n".format(disp_obj.Name)) for n in femobj["Nodes"]: diff --git a/src/Mod/Fem/femsolver/calculix/con_fixed.py b/src/Mod/Fem/femsolver/calculix/con_fixed.py index 8ac0e8874f..506e0c54cd 100644 --- a/src/Mod/Fem/femsolver/calculix/con_fixed.py +++ b/src/Mod/Fem/femsolver/calculix/con_fixed.py @@ -38,6 +38,22 @@ def get_constraint_title(): return "Fixed Constraints" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + +def get_before_write_constraint(): + return "" + + +def get_after_write_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, fix_obj, ccxwriter): if ( ccxwriter.femmesh.Volumes diff --git a/src/Mod/Fem/femsolver/calculix/con_force.py b/src/Mod/Fem/femsolver/calculix/con_force.py index a0fe6a4141..e61b14674c 100644 --- a/src/Mod/Fem/femsolver/calculix/con_force.py +++ b/src/Mod/Fem/femsolver/calculix/con_force.py @@ -34,6 +34,14 @@ def get_sets_name(): return "constraints_force_node_loads" +def get_before_write_meshdata_constraint(): + return "*CLOAD\n" + + +def get_after_write_meshdata_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, force_obj, ccxwriter): direction_vec = femobj["Object"].DirectionVector for ref_shape in femobj["NodeLoadTable"]: diff --git a/src/Mod/Fem/femsolver/calculix/con_heatflux.py b/src/Mod/Fem/femsolver/calculix/con_heatflux.py index b7710244d2..14389c1e8c 100644 --- a/src/Mod/Fem/femsolver/calculix/con_heatflux.py +++ b/src/Mod/Fem/femsolver/calculix/con_heatflux.py @@ -34,6 +34,14 @@ def get_sets_name(): return "constraints_heatflux_element_face_heatflux" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, heatflux_obj, ccxwriter): if heatflux_obj.ConstraintType == "Convection": heatflux_key_word = "FILM" diff --git a/src/Mod/Fem/femsolver/calculix/con_planerotation.py b/src/Mod/Fem/femsolver/calculix/con_planerotation.py index 52b70c0492..63df526184 100644 --- a/src/Mod/Fem/femsolver/calculix/con_planerotation.py +++ b/src/Mod/Fem/femsolver/calculix/con_planerotation.py @@ -41,6 +41,22 @@ def get_constraint_title(): return "PlaneRotation Constraints" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + +def get_before_write_constraint(): + return "" + + +def get_after_write_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, fric_obj, ccxwriter): # write nodes to file if not ccxwriter.femnodes_mesh: diff --git a/src/Mod/Fem/femsolver/calculix/con_pressure.py b/src/Mod/Fem/femsolver/calculix/con_pressure.py index 88075f076b..7fc5f6f7e7 100644 --- a/src/Mod/Fem/femsolver/calculix/con_pressure.py +++ b/src/Mod/Fem/femsolver/calculix/con_pressure.py @@ -34,6 +34,14 @@ def get_sets_name(): return "constraints_pressure_element_face_loads" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, prs_obj, ccxwriter): rev = -1 if prs_obj.Reversed else 1 f.write("*DLOAD\n") diff --git a/src/Mod/Fem/femsolver/calculix/con_sectionprint.py b/src/Mod/Fem/femsolver/calculix/con_sectionprint.py index 1ffc4b1a9a..21578a5b61 100644 --- a/src/Mod/Fem/femsolver/calculix/con_sectionprint.py +++ b/src/Mod/Fem/femsolver/calculix/con_sectionprint.py @@ -38,6 +38,22 @@ def get_constraint_title(): return "SectionPrint Constraints" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + +def get_before_write_constraint(): + return "" + + +def get_after_write_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, sectionprint_obj, ccxwriter): f.write("*SURFACE, NAME=SECTIONFACE{}\n".format(sectionprint_obj.Name)) for i in femobj["SectionPrintFaces"]: diff --git a/src/Mod/Fem/femsolver/calculix/con_temperature.py b/src/Mod/Fem/femsolver/calculix/con_temperature.py index ad01e48aed..a4d3321ba0 100644 --- a/src/Mod/Fem/femsolver/calculix/con_temperature.py +++ b/src/Mod/Fem/femsolver/calculix/con_temperature.py @@ -44,6 +44,22 @@ def write_meshdata_constraint(f, femobj, temp_obj, ccxwriter): f.write("{},\n".format(n)) +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + +def get_before_write_constraint(): + return "" + + +def get_after_write_constraint(): + return "" + + def write_constraint(f, femobj, temp_obj, ccxwriter): NumberOfNodes = len(femobj["Nodes"]) if temp_obj.ConstraintType == "Temperature": diff --git a/src/Mod/Fem/femsolver/calculix/con_tie.py b/src/Mod/Fem/femsolver/calculix/con_tie.py index 6602a86466..3261cf1a8a 100644 --- a/src/Mod/Fem/femsolver/calculix/con_tie.py +++ b/src/Mod/Fem/femsolver/calculix/con_tie.py @@ -38,6 +38,22 @@ def get_constraint_title(): return "Tie Constraints" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + +def get_before_write_constraint(): + return "" + + +def get_after_write_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, tie_obj, ccxwriter): # slave DEP f.write("*SURFACE, NAME=TIE_DEP{}\n".format(tie_obj.Name)) diff --git a/src/Mod/Fem/femsolver/calculix/con_transform.py b/src/Mod/Fem/femsolver/calculix/con_transform.py index bbe187a7ac..655a602714 100644 --- a/src/Mod/Fem/femsolver/calculix/con_transform.py +++ b/src/Mod/Fem/femsolver/calculix/con_transform.py @@ -41,6 +41,22 @@ def get_constraint_title(): return "Transform Constraints" +def get_before_write_meshdata_constraint(): + return "" + + +def get_after_write_meshdata_constraint(): + return "" + + +def get_before_write_constraint(): + return "" + + +def get_after_write_constraint(): + return "" + + def write_meshdata_constraint(f, femobj, trans_obj, ccxwriter): if trans_obj.TransformType == "Rectangular": f.write("*NSET,NSET=Rect{}\n".format(trans_obj.Name)) diff --git a/src/Mod/Fem/femsolver/calculix/writer.py b/src/Mod/Fem/femsolver/calculix/writer.py index b2e6deafcc..4b4e703860 100644 --- a/src/Mod/Fem/femsolver/calculix/writer.py +++ b/src/Mod/Fem/femsolver/calculix/writer.py @@ -292,10 +292,15 @@ class FemInputWriterCcx(writerbase.FemInputWriter): self, f, femobjs, - write_before="", - write_after="", con_module=None ): + if not femobjs: + return + + analysis_types = con_module.get_analysis_types() + if analysis_types != "all" and self.analysis_type not in analysis_types: + return + def constraint_sets_loop_writing(the_file, femobjs, write_before, write_after): if write_before != "": f.write(write_before) @@ -307,12 +312,8 @@ class FemInputWriterCcx(writerbase.FemInputWriter): if write_after != "": f.write(write_after) - if not femobjs: - return - - analysis_types = con_module.get_analysis_types() - if analysis_types != "all" and self.analysis_type not in analysis_types: - return + write_before = con_module.get_before_write_meshdata_constraint() + write_after = con_module.get_after_write_meshdata_constraint() # write sets to file write_name = con_module.get_sets_name() @@ -335,8 +336,6 @@ class FemInputWriterCcx(writerbase.FemInputWriter): self, f, femobjs, - write_before="", - write_after="", con_module=None ): @@ -347,6 +346,9 @@ class FemInputWriterCcx(writerbase.FemInputWriter): if analysis_types != "all" and self.analysis_type not in analysis_types: return + write_before = con_module.get_before_write_constraint() + write_after = con_module.get_after_write_constraint() + # write constraint to file f.write("\n{}\n".format(59 * "*")) f.write("** {}\n".format(con_module.get_constraint_title())) @@ -389,7 +391,6 @@ class FemInputWriterCcx(writerbase.FemInputWriter): self.write_constraints_data( f, femobjs=self.displacement_objects, - write_after="\n", con_module=con_displacement ) @@ -561,7 +562,6 @@ class FemInputWriterCcx(writerbase.FemInputWriter): self.write_constraints_sets( f, femobjs=self.force_objects, - write_before="*CLOAD\n", con_module=con_force )