From b1623c441621dfb8939e15cbb477e4c25cf7a539 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Wed, 22 Apr 2020 21:22:09 +0200 Subject: [PATCH] FEM: ccx writer, splitted writer, improve surface sets for tie and contact --- src/Mod/Fem/femsolver/calculix/writer.py | 60 +++++++++++-------- .../ccx/constraint_contact_shell_shell.inp | 2 +- .../ccx/constraint_contact_solid_solid.inp | 2 +- .../Fem/femtest/data/ccx/constraint_tie.inp | 2 +- 4 files changed, 39 insertions(+), 27 deletions(-) diff --git a/src/Mod/Fem/femsolver/calculix/writer.py b/src/Mod/Fem/femsolver/calculix/writer.py index 6335c3bb8a..b24abe37e3 100644 --- a/src/Mod/Fem/femsolver/calculix/writer.py +++ b/src/Mod/Fem/femsolver/calculix/writer.py @@ -34,6 +34,7 @@ import os import six import sys import time +from os.path import join import FreeCAD @@ -59,7 +60,6 @@ class FemInputWriterCcx(writerbase.FemInputWriter): member, dir_name ) - from os.path import join self.mesh_name = self.mesh_object.Name self.include = join(self.dir_name, self.mesh_name) self.file_name = self.include + ".inp" @@ -211,23 +211,8 @@ class FemInputWriterCcx(writerbase.FemInputWriter): inpfileMain.write("*INCLUDE,INPUT=" + self.mesh_name + "_Node_sets.inp \n") inpfileNodes.close() - if self.contact_objects: - inpfileMain.write("\n***********************************************************\n") - inpfileMain.write("** Surfaces for contact constraint\n") - inpfileMain.write("** written by write_surfaces_constraints_contact\n") - inpfileMain.write("*INCLUDE,INPUT=" + self.mesh_name + "_Surface_Contact.inp \n") - inpfileContact = open(self.include + "_Surface_Contact.inp", "w") - self.write_surfaces_constraints_contact(inpfileContact) - inpfileContact.close() - - if self.tie_objects: - inpfileMain.write("\n***********************************************************\n") - inpfileMain.write("** Surfaces for tie constraint\n") - inpfileMain.write("** written by write_surfaces_constraints_tie\n") - inpfileMain.write("*INCLUDE,INPUT=" + self.mesh_name + "_Surface_Tie.inp \n") - inpfileTie = open(self.include + "_Surface_Tie.inp", "w") - self.write_surfaces_constraints_tie(inpfileTie) - inpfileTie.close() + self.write_surfaces_constraints_contact(inpfileMain, True) + self.write_surfaces_constraints_tie(inpfileMain, True) if self.transform_objects: inpfileMain.write("\n***********************************************************\n") @@ -522,7 +507,7 @@ class FemInputWriterCcx(writerbase.FemInputWriter): for i in range(len(MPC_nodes)): f.write(str(MPC_nodes[i]) + ",\n") - def write_surfaces_constraints_contact(self, f): + def write_surfaces_constraints_contact(self, f, splitted=None): if not self.contact_objects: return # write for all analysis types @@ -530,10 +515,24 @@ class FemInputWriterCcx(writerbase.FemInputWriter): # get faces self.get_constraints_contact_faces() - # write faces to file + write_name = "contact" + write_name = "constraints_contact_surface_sets" f.write("\n***********************************************************\n") - f.write("** Surfaces for contact constraint\n") + f.write("** {}\n".format(write_name.replace("_", " "))) f.write("** written by {} function\n".format(sys._getframe().f_code.co_name)) + + if splitted is True: + file_name_splitt = self.mesh_name + "_" + write_name + ".inp" + f.write("** {}\n".format(write_name.replace("_", " "))) + f.write("*INCLUDE,INPUT={}\n".format(file_name_splitt)) + inpfile_splitt = open(join(self.dir_name, file_name_splitt), "w") + self.write_surfacefaces_constraints_contact(inpfile_splitt) + inpfile_splitt.close() + else: + self.write_surfacefaces_constraints_contact(f) + + def write_surfacefaces_constraints_contact(self, f): + # write faces to file for femobj in self.contact_objects: # femobj --> dict, FreeCAD document object is femobj["Object"] contact_obj = femobj["Object"] @@ -547,7 +546,7 @@ class FemInputWriterCcx(writerbase.FemInputWriter): for i in femobj["ContactMasterFaces"]: f.write("{},S{}\n".format(i[0], i[1])) - def write_surfaces_constraints_tie(self, f): + def write_surfaces_constraints_tie(self, f, splitted=None): if not self.tie_objects: return # write for all analysis types @@ -555,10 +554,23 @@ class FemInputWriterCcx(writerbase.FemInputWriter): # get faces self.get_constraints_tie_faces() - # write faces to file + write_name = "constraints_tie_surface_sets" f.write("\n***********************************************************\n") - f.write("** Surfaces for tie constraint\n") + f.write("** {}\n".format(write_name.replace("_", " "))) f.write("** written by {} function\n".format(sys._getframe().f_code.co_name)) + + if splitted is True: + file_name_splitt = self.mesh_name + "_" + write_name + ".inp" + f.write("** {}\n".format(write_name.replace("_", " "))) + f.write("*INCLUDE,INPUT={}\n".format(file_name_splitt)) + inpfile_splitt = open(join(self.dir_name, file_name_splitt), "w") + self.write_surfacefaces_constraints_tie(inpfile_splitt) + inpfile_splitt.close() + else: + self.write_surfacefaces_constraints_tie(f) + + def write_surfacefaces_constraints_tie(self, f): + # write faces to file for femobj in self.tie_objects: # femobj --> dict, FreeCAD document object is femobj["Object"] tie_obj = femobj["Object"] diff --git a/src/Mod/Fem/femtest/data/ccx/constraint_contact_shell_shell.inp b/src/Mod/Fem/femtest/data/ccx/constraint_contact_shell_shell.inp index cb2763d1b3..dbb87f47a3 100644 --- a/src/Mod/Fem/femtest/data/ccx/constraint_contact_shell_shell.inp +++ b/src/Mod/Fem/femtest/data/ccx/constraint_contact_shell_shell.inp @@ -23069,7 +23069,7 @@ Efaces 197, *********************************************************** -** Surfaces for contact constraint +** constraints contact surface sets ** written by write_surfaces_constraints_contact function ** ConstraintContact *SURFACE, NAME=DEPConstraintContact diff --git a/src/Mod/Fem/femtest/data/ccx/constraint_contact_solid_solid.inp b/src/Mod/Fem/femtest/data/ccx/constraint_contact_solid_solid.inp index 718c6ab8b1..a39c957bff 100644 --- a/src/Mod/Fem/femtest/data/ccx/constraint_contact_solid_solid.inp +++ b/src/Mod/Fem/femtest/data/ccx/constraint_contact_solid_solid.inp @@ -4430,7 +4430,7 @@ Evolumes 1569, *********************************************************** -** Surfaces for contact constraint +** constraints contact surface sets ** written by write_surfaces_constraints_contact function ** ConstraintContact *SURFACE, NAME=DEPConstraintContact diff --git a/src/Mod/Fem/femtest/data/ccx/constraint_tie.inp b/src/Mod/Fem/femtest/data/ccx/constraint_tie.inp index 8ee42ed0b9..59680afff3 100644 --- a/src/Mod/Fem/femtest/data/ccx/constraint_tie.inp +++ b/src/Mod/Fem/femtest/data/ccx/constraint_tie.inp @@ -18544,7 +18544,7 @@ Evolumes 461, *********************************************************** -** Surfaces for tie constraint +** constraints tie surface sets ** written by write_surfaces_constraints_tie function ** ConstraintTie *SURFACE, NAME=TIE_DEPConstraintTie