FEM: z88 writer, code formatting

This commit is contained in:
Bernd Hahnebach
2021-08-06 07:38:51 +02:00
parent 4dbd2c36da
commit afd885330a

View File

@@ -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")