From 1bd94cf4de8a3b87c5288d616074098dd7314b60 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Fri, 6 Aug 2021 07:38:51 +0200 Subject: [PATCH] FEM: z88 writer, code formatting --- src/Mod/Fem/femsolver/z88/writer.py | 77 +++++++++++++++++++---------- 1 file changed, 50 insertions(+), 27 deletions(-) diff --git a/src/Mod/Fem/femsolver/z88/writer.py b/src/Mod/Fem/femsolver/z88/writer.py index 1c796fe728..289434c08d 100644 --- a/src/Mod/Fem/femsolver/z88/writer.py +++ b/src/Mod/Fem/femsolver/z88/writer.py @@ -29,6 +29,7 @@ __url__ = "https://www.freecadweb.org" # @{ import time +from os.path import join import FreeCAD @@ -54,23 +55,26 @@ class FemInputWriterZ88(writerbase.FemInputWriter): member, dir_name ) - from os.path import join self.file_name = join(self.dir_name, "z88") - FreeCAD.Console.PrintLog( - "FemInputWriterZ88 --> self.dir_name --> " + self.dir_name + "\n" - ) - FreeCAD.Console.PrintMessage( - "FemInputWriterZ88 --> self.file_name --> " + self.file_name + "\n" - ) + # ******************************************************************************************** + # write solver input def write_solver_input(self): timestart = time.process_time() - FreeCAD.Console.PrintMessage("Write z88 input files to: {}\n".format(self.dir_name)) - 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) - self.element_count = len(self.femelement_table) + FreeCAD.Console.PrintMessage("\n") # because of time print in separate line + FreeCAD.Console.PrintMessage("Z88 solver input writing...\n") + FreeCAD.Console.PrintLog( + "FemInputWriterZ88 --> self.dir_name --> {}\n" + .format(self.dir_name) + ) + FreeCAD.Console.PrintMessage( + "FemInputWriterZ88 --> self.file_name --> {}\n" + .format(self.file_name) + ) + FreeCAD.Console.PrintMessage( + "Write z88 input files to: {}\n" + .format(self.dir_name) + ) control = self.set_z88_elparam() if control is False: return None @@ -86,9 +90,11 @@ class FemInputWriterZ88(writerbase.FemInputWriter): "Writing time input file: {} seconds" .format(round((time.process_time() - timestart), 2)) ) - FreeCAD.Console.PrintMessage(writing_time_string + " \n\n") + FreeCAD.Console.PrintMessage( + "{}\n\n".format(writing_time_string)) return self.dir_name + # ******************************************************************************************** def set_z88_elparam(self): # TODO: param should be moved to the solver object like the known analysis z8804 = {"INTORD": "0", "INTOS": "0", "IHFLAG": "0", "ISFLAG": "1"} # seg2 --> stab4 @@ -114,7 +120,13 @@ class FemInputWriterZ88(writerbase.FemInputWriter): FreeCAD.Console.PrintMessage("\n") return True + # ******************************************************************************************** def write_z88_mesh(self): + 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) + self.element_count = len(self.femelement_table) mesh_file_path = self.file_name + "i1.txt" f = open(mesh_file_path, "w") importZ88Mesh.write_z88_mesh_to_file( @@ -125,6 +137,7 @@ class FemInputWriterZ88(writerbase.FemInputWriter): ) f.close() + # ******************************************************************************************** def write_z88_constraints(self): constraints_data = [] # will be a list of tuple for better sorting @@ -134,9 +147,9 @@ class FemInputWriterZ88(writerbase.FemInputWriter): # write nodes to constraints_data (different from writing to file in ccxInpWriter for femobj in self.fixed_objects: for n in femobj["Nodes"]: - constraints_data.append((n, str(n) + " 1 2 0\n")) - constraints_data.append((n, str(n) + " 2 2 0\n")) - constraints_data.append((n, str(n) + " 3 2 0\n")) + constraints_data.append((n, "{} 1 2 0\n".format(n))) + constraints_data.append((n, "{} 2 2 0\n".format(n))) + constraints_data.append((n, "{} 3 2 0\n".format(n))) # forces constraints # check shape type of reference shape and get node loads @@ -151,13 +164,13 @@ class FemInputWriterZ88(writerbase.FemInputWriter): node_load = ref_shape[1][n] if (direction_vec.x != 0.0): v1 = direction_vec.x * node_load - constraints_data.append((n, str(n) + " 1 1 " + str(v1) + "\n")) + constraints_data.append((n, "{} 1 1 {}\n".format(n, v1))) if (direction_vec.y != 0.0): v2 = direction_vec.y * node_load - constraints_data.append((n, str(n) + " 2 1 " + str(v2) + "\n")) + constraints_data.append((n, "{} 2 1 {}\n".format(n, v2))) if (direction_vec.z != 0.0): v3 = direction_vec.z * node_load - constraints_data.append((n, str(n) + " 3 1 " + str(v3) + "\n")) + constraints_data.append((n, "{} 3 1 {}\n".format(n, v3))) # write constraints_data to file constraints_file_path = self.file_name + "i2.txt" @@ -167,6 +180,7 @@ class FemInputWriterZ88(writerbase.FemInputWriter): f.write(c[1]) f.close() + # ******************************************************************************************** def write_z88_face_loads(self): # not yet supported face_load_file_path = self.file_name + "i5.txt" @@ -175,16 +189,17 @@ class FemInputWriterZ88(writerbase.FemInputWriter): f.write("\n") f.close() + # ******************************************************************************************** def write_z88_materials(self): mat_obj = self.material_objects[0]["Object"] material_data_file_name = "51.txt" materials_file_path = self.file_name + "mat.txt" fms = open(materials_file_path, "w") fms.write("1\n") - fms.write("1 " + str(self.element_count) + " " + material_data_file_name) + fms.write("1 {} {}".format(self.element_count, material_data_file_name)) fms.write("\n") fms.close() - material_data_file_path = self.dir_name + "/" + material_data_file_name + material_data_file_path = join(self.dir_name, material_data_file_name) fmd = open(material_data_file_path, "w") YM = FreeCAD.Units.Quantity(mat_obj.Material["YoungsModulus"]) YM_in_MPa = YM.getValueAs("MPa") @@ -193,6 +208,7 @@ class FemInputWriterZ88(writerbase.FemInputWriter): fmd.write("\n") fmd.close() + # ******************************************************************************************** def write_z88_elements_properties(self): element_properties_file_path = self.file_name + "elp.txt" elements_data = [] @@ -225,12 +241,16 @@ class FemInputWriterZ88(writerbase.FemInputWriter): ) elif meshtools.is_face_femmesh(self.femmesh): thick_obj = self.shellthickness_objects[0]["Object"] - thickness = str(thick_obj.Thickness.getValueAs("mm")) + thickness = thick_obj.Thickness.getValueAs("mm").Value elements_data.append( - "1 " + str(self.element_count) + " " + thickness + " 0 0 0 0 0 0 " + "1 {} {} 0 0 0 0 0 0 " + .format(self.element_count, thickness) ) elif meshtools.is_solid_femmesh(self.femmesh): - elements_data.append("1 " + str(self.element_count) + " 0 0 0 0 0 0 0") + elements_data.append( + "1 {} 0 0 0 0 0 0 0" + .format(self.element_count) + ) else: FreeCAD.Console.PrintError("Error!\n") f = open(element_properties_file_path, "w") @@ -240,6 +260,7 @@ class FemInputWriterZ88(writerbase.FemInputWriter): f.write("\n") f.close() + # ******************************************************************************************** def write_z88_integration_properties(self): integration_data = [] integration_data.append("1 {} {} {}".format( @@ -249,12 +270,13 @@ class FemInputWriterZ88(writerbase.FemInputWriter): )) integration_properties_file_path = self.file_name + "int.txt" f = open(integration_properties_file_path, "w") - f.write(str(len(integration_data)) + "\n") + f.write("{}\n".format(len(integration_data))) for i in integration_data: f.write(i) f.write("\n") f.close() + # ******************************************************************************************** def write_z88_solver_parameter(self): global z88_man_template z88_man_template = z88_man_template.replace( @@ -268,13 +290,14 @@ class FemInputWriterZ88(writerbase.FemInputWriter): f.write(z88_man_template) f.close() + # ******************************************************************************************** def write_z88_memory_parameter(self): # self.z88_param_maxgs = 6000000 self.z88_param_maxgs = 50000000 # vierkantrohr global z88_dyn_template z88_dyn_template = z88_dyn_template.replace( "$z88_param_maxgs", - str(self.z88_param_maxgs) + "{}".format(self.z88_param_maxgs) ) solver_parameter_file_path = self.file_name + ".dyn" f = open(solver_parameter_file_path, "w")