FEM: z88 writer, code formatting
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user