diff --git a/src/Mod/Fem/femsolver/calculix/writer.py b/src/Mod/Fem/femsolver/calculix/writer.py index 1c4bd5cc5e..4285293d8d 100644 --- a/src/Mod/Fem/femsolver/calculix/writer.py +++ b/src/Mod/Fem/femsolver/calculix/writer.py @@ -27,17 +27,18 @@ __url__ = "http://www.freecadweb.org" ## \addtogroup FEM # @{ -import FreeCAD import os import sys import time import codecs -import femmesh.meshtools as FemMeshTools -from .. import writerbase as FemInputWriter import six +import FreeCAD +from femmesh import meshtools +from .. import writerbase -class FemInputWriterCcx(FemInputWriter.FemInputWriter): + +class FemInputWriterCcx(writerbase.FemInputWriter): def __init__( self, analysis_obj, @@ -62,7 +63,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): fluidsection_obj, dir_name=None ): - FemInputWriter.FemInputWriter.__init__( + writerbase.FemInputWriter.__init__( self, analysis_obj, solver_obj, @@ -91,9 +92,9 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): self.file_name = join(self.dir_name, self.main_file_name) self.FluidInletoutlet_ele = [] self.fluid_inout_nodes_file = join(self.dir_name, (self.mesh_object.Name + '_inout_nodes.txt')) - FreeCAD.Console.PrintLog('FemInputWriterCcx --> self.dir_name --> ' + self.dir_name + '\n') - FreeCAD.Console.PrintLog('FemInputWriterCcx --> self.main_file_name --> ' + self.main_file_name + '\n') - FreeCAD.Console.PrintMessage('FemInputWriterCcx --> self.file_name --> ' + self.file_name + '\n') + FreeCAD.Console.PrintLog('writerbaseCcx --> self.dir_name --> ' + self.dir_name + '\n') + FreeCAD.Console.PrintLog('writerbaseCcx --> self.main_file_name --> ' + self.main_file_name + '\n') + FreeCAD.Console.PrintMessage('writerbaseCcx --> self.file_name --> ' + self.file_name + '\n') def write_calculix_input_file(self): timestart = time.clock() @@ -101,7 +102,10 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): self.write_calculix_splitted_input_file() else: self.write_calculix_one_input_file() - writing_time_string = "Writing time input file: " + str(round((time.clock() - timestart), 2)) + " seconds" + writing_time_string = ( + "Writing time input file: {} seconds" + .format(round((time.clock() - timestart), 2)) + ) if self.femelement_count_test is True: FreeCAD.Console.PrintMessage(writing_time_string + ' \n\n') return self.file_name @@ -120,7 +124,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): # Check to see if fluid sections are in analysis and use D network element type if self.fluidsection_objects: inpfile.close() - FemMeshTools.write_D_network_element_to_inputfile(self.file_name) + meshtools.write_D_network_element_to_inputfile(self.file_name) inpfile = open(self.file_name, 'a') # node and element sets self.write_element_sets_material_and_femelement_type(inpfile) @@ -146,7 +150,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): if self.fluidsection_objects: if is_fluid_section_inlet_outlet(self.ccx_elsets) is True: inpfile.close() - FemMeshTools.use_correct_fluidinout_ele_def(self.FluidInletoutlet_ele, self.file_name, self.fluid_inout_nodes_file) + meshtools.use_correct_fluidinout_ele_def(self.FluidInletoutlet_ele, self.file_name, self.fluid_inout_nodes_file) inpfile = open(self.file_name, 'a') # constraints independent from steps @@ -218,7 +222,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): # Check to see if fluid sections are in analysis and use D network element type if self.fluidsection_objects: - FemMeshTools.write_D_network_element_to_inputfile(name + "_Node_Elem_sets.inp") + meshtools.write_D_network_element_to_inputfile(name + "_Node_Elem_sets.inp") inpfileMain.write('\n***********************************************************\n') inpfileMain.write('**Nodes and Elements\n') @@ -294,7 +298,14 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): # Fluid section: Inlet and Outlet requires special element definition if self.fluidsection_objects: if is_fluid_section_inlet_outlet(self.ccx_elsets) is True: +<<<<<<< HEAD FemMeshTools.use_correct_fluidinout_ele_def(self.FluidInletoutlet_ele, name + "_Node_Elem_sets.inp", self.fluid_inout_nodes_file) +======= + meshtools.use_correct_fluidinout_ele_def( + self.FluidInletoutlet_ele, name + "_Node_Elem_sets.inp", + self.fluid_inout_nodes_file + ) +>>>>>>> 5e4bf5b587... FEM: solver calculix writer and solver writer base, use small character for import identifier # constraints independent from steps if self.planerotation_objects: @@ -516,7 +527,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): nodes_coords = [] for node in l_nodes: nodes_coords.append((node, self.femnodes_mesh[node].x, self.femnodes_mesh[node].y, self.femnodes_mesh[node].z)) - node_planerotation = FemMeshTools.get_three_non_colinear_nodes(nodes_coords) + node_planerotation = meshtools.get_three_non_colinear_nodes(nodes_coords) for i in range(len(l_nodes)): if l_nodes[i] not in node_planerotation: node_planerotation.append(l_nodes[i]) @@ -921,11 +932,11 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): f.write('** ' + trans_obj.Label + '\n') if trans_obj.TransformType == "Rectangular": f.write('*TRANSFORM, NSET=Rect' + trans_obj.Name + ', TYPE=R\n') - coords = FemMeshTools.get_rectangular_coords(trans_obj) + coords = meshtools.get_rectangular_coords(trans_obj) f.write(coords + '\n') elif trans_obj.TransformType == "Cylindrical": f.write('*TRANSFORM, NSET=Cylin' + trans_obj.Name + ', TYPE=C\n') - coords = FemMeshTools.get_cylindrical_coords(trans_obj) + coords = meshtools.get_cylindrical_coords(trans_obj) f.write(coords + '\n') def write_constraints_selfweight(self, f): diff --git a/src/Mod/Fem/femsolver/writerbase.py b/src/Mod/Fem/femsolver/writerbase.py index acadeaf41f..34112bc3f4 100644 --- a/src/Mod/Fem/femsolver/writerbase.py +++ b/src/Mod/Fem/femsolver/writerbase.py @@ -27,7 +27,7 @@ __url__ = "http://www.freecadweb.org" # @{ import FreeCAD -import femmesh.meshtools as FemMeshTools +from femmesh import meshtools import os @@ -118,7 +118,7 @@ class FemInputWriter(): # get nodes for femobj in self.fixed_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] FreeCAD.Console.PrintMessage("Constraint fixed:" + ' ' + femobj['Object'].Name + '\n') - femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) + femobj['Nodes'] = meshtools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) # add nodes to constraint_conflict_nodes, needed by constraint plane rotation for node in femobj['Nodes']: self.constraint_conflict_nodes.append(node) @@ -126,7 +126,7 @@ class FemInputWriter(): if self.femmesh.Volumes and (len(self.shellthickness_objects) > 0 or len(self.beamsection_objects) > 0): print('We need to find the solid nodes.') if not self.femelement_volumes_table: - self.femelement_volumes_table = FemMeshTools.get_femelement_volumes_table(self.femmesh) + self.femelement_volumes_table = meshtools.get_femelement_volumes_table(self.femmesh) for femobj in self.fixed_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] nds_solid = [] nds_faceedge = [] @@ -146,7 +146,7 @@ class FemInputWriter(): # get nodes for femobj in self.displacement_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] FreeCAD.Console.PrintMessage("Constraint displacement:" + ' ' + femobj['Object'].Name + '\n') - femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) + femobj['Nodes'] = meshtools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) # add nodes to constraint_conflict_nodes, needed by constraint plane rotation for node in femobj['Nodes']: self.constraint_conflict_nodes.append(node) @@ -155,25 +155,25 @@ class FemInputWriter(): # get nodes for femobj in self.planerotation_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] FreeCAD.Console.PrintMessage("Constraint plane rotation:" + ' ' + femobj['Object'].Name + '\n') - femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) + femobj['Nodes'] = meshtools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) def get_constraints_transform_nodes(self): # get nodes for femobj in self.transform_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] FreeCAD.Console.PrintMessage("Constraint transform nodes:" + ' ' + femobj['Object'].Name + '\n') - femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) + femobj['Nodes'] = meshtools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) def get_constraints_temperature_nodes(self): # get nodes for femobj in self.temperature_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] FreeCAD.Console.PrintMessage("Constraint temperature:" + ' ' + femobj['Object'].Name + '\n') - femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) + femobj['Nodes'] = meshtools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) def get_constraints_fluidsection_nodes(self): # get nodes for femobj in self.fluidsection_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] FreeCAD.Console.PrintMessage("Constraint fluid section:" + ' ' + femobj['Object'].Name + '\n') - femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) + femobj['Nodes'] = meshtools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) def get_constraints_force_nodeloads(self): # check shape type of reference shape @@ -183,7 +183,7 @@ class FemInputWriter(): if femobj['RefShapeType'] == 'Vertex': # print("load on vertices --> we do not need the femelement_table and femnodes_mesh for node load calculation") pass - elif femobj['RefShapeType'] == 'Face' and FemMeshTools.is_solid_femmesh(self.femmesh) and not FemMeshTools.has_no_face_data(self.femmesh): + elif femobj['RefShapeType'] == 'Face' and meshtools.is_solid_femmesh(self.femmesh) and not meshtools.has_no_face_data(self.femmesh): # print("solid_mesh with face data --> we do not need the femelement_table but we need the femnodes_mesh for node load calculation") if not self.femnodes_mesh: self.femnodes_mesh = self.femmesh.Nodes @@ -192,7 +192,7 @@ class FemInputWriter(): if not self.femnodes_mesh: self.femnodes_mesh = self.femmesh.Nodes if not self.femelement_table: - self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh) + self.femelement_table = meshtools.get_femelement_table(self.femmesh) # get node loads FreeCAD.Console.PrintMessage(" Finite element mesh nodes will be retrieved by searching the appropriate nodes in the finite element mesh.\n") FreeCAD.Console.PrintMessage(" The appropriate finite element mesh node load values will be calculated according to the finite element definition.\n") @@ -201,11 +201,11 @@ class FemInputWriter(): if frc_obj.Force == 0: FreeCAD.Console.PrintMessage(' Warning --> Force = 0\n') if femobj['RefShapeType'] == 'Vertex': # point load on vertices - femobj['NodeLoadTable'] = FemMeshTools.get_force_obj_vertex_nodeload_table(self.femmesh, frc_obj) + femobj['NodeLoadTable'] = meshtools.get_force_obj_vertex_nodeload_table(self.femmesh, frc_obj) elif femobj['RefShapeType'] == 'Edge': # line load on edges - femobj['NodeLoadTable'] = FemMeshTools.get_force_obj_edge_nodeload_table(self.femmesh, self.femelement_table, self.femnodes_mesh, frc_obj) + femobj['NodeLoadTable'] = meshtools.get_force_obj_edge_nodeload_table(self.femmesh, self.femelement_table, self.femnodes_mesh, frc_obj) elif femobj['RefShapeType'] == 'Face': # area load on faces - femobj['NodeLoadTable'] = FemMeshTools.get_force_obj_face_nodeload_table(self.femmesh, self.femelement_table, self.femnodes_mesh, frc_obj) + femobj['NodeLoadTable'] = meshtools.get_force_obj_face_nodeload_table(self.femmesh, self.femelement_table, self.femnodes_mesh, frc_obj) def get_constraints_pressure_faces(self): # TODO see comments in get_constraints_force_nodeloads(), it applies here too. Mhh it applies to all constraints ... @@ -214,20 +214,20 @@ class FemInputWriter(): # depreciated version # get the faces and face numbers for femobj in self.pressure_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] - femobj['PressureFaces'] = FemMeshTools.get_pressure_obj_faces_depreciated(self.femmesh, femobj) + femobj['PressureFaces'] = meshtools.get_pressure_obj_faces_depreciated(self.femmesh, femobj) # print(femobj['PressureFaces']) ''' if not self.femnodes_mesh: self.femnodes_mesh = self.femmesh.Nodes if not self.femelement_table: - self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh) + self.femelement_table = meshtools.get_femelement_table(self.femmesh) if not self.femnodes_ele_table: - self.femnodes_ele_table = FemMeshTools.get_femnodes_ele_table(self.femnodes_mesh, self.femelement_table) + self.femnodes_ele_table = meshtools.get_femnodes_ele_table(self.femnodes_mesh, self.femelement_table) for femobj in self.pressure_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] FreeCAD.Console.PrintMessage("Constraint pressure: " + femobj['Object'].Name + '\n') - pressure_faces = FemMeshTools.get_pressure_obj_faces(self.femmesh, self.femelement_table, self.femnodes_ele_table, femobj) + pressure_faces = meshtools.get_pressure_obj_faces(self.femmesh, self.femelement_table, self.femnodes_ele_table, femobj) femobj['PressureFaces'] = [(femobj['Object'].Name + ': face load', pressure_faces)] FreeCAD.Console.PrintLog('{}\n'.format(femobj['PressureFaces'])) @@ -235,29 +235,29 @@ class FemInputWriter(): # get element ids and write them into the objects FreeCAD.Console.PrintMessage('Shell thicknesses\n') if not self.femelement_faces_table: - self.femelement_faces_table = FemMeshTools.get_femelement_faces_table(self.femmesh) - FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_faces_table, self.shellthickness_objects) + self.femelement_faces_table = meshtools.get_femelement_faces_table(self.femmesh) + meshtools.get_femelement_sets(self.femmesh, self.femelement_faces_table, self.shellthickness_objects) def get_element_geometry1D_elements(self): # get element ids and write them into the objects FreeCAD.Console.PrintMessage('Beam sections\n') if not self.femelement_edges_table: - self.femelement_edges_table = FemMeshTools.get_femelement_edges_table(self.femmesh) - FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_edges_table, self.beamsection_objects) + self.femelement_edges_table = meshtools.get_femelement_edges_table(self.femmesh) + meshtools.get_femelement_sets(self.femmesh, self.femelement_edges_table, self.beamsection_objects) def get_element_rotation1D_elements(self): # get for each geometry edge direction the element ids and rotation norma FreeCAD.Console.PrintMessage('Beam rotations\n') if not self.femelement_edges_table: - self.femelement_edges_table = FemMeshTools.get_femelement_edges_table(self.femmesh) - FemMeshTools.get_femelement_direction1D_set(self.femmesh, self.femelement_edges_table, self.beamrotation_objects, self.theshape) + self.femelement_edges_table = meshtools.get_femelement_edges_table(self.femmesh) + meshtools.get_femelement_direction1D_set(self.femmesh, self.femelement_edges_table, self.beamrotation_objects, self.theshape) def get_element_fluid1D_elements(self): # get element ids and write them into the objects FreeCAD.Console.PrintMessage('Fluid sections\n') if not self.femelement_edges_table: - self.femelement_edges_table = FemMeshTools.get_femelement_edges_table(self.femmesh) - FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_edges_table, self.fluidsection_objects) + self.femelement_edges_table = meshtools.get_femelement_edges_table(self.femmesh) + meshtools.get_femelement_sets(self.femmesh, self.femelement_edges_table, self.fluidsection_objects) def get_material_elements(self): # it only works if either Volumes or Shellthicknesses or Beamsections are in the material objects @@ -270,28 +270,28 @@ class FemInputWriter(): # there we have to check of some geometric objects all_found = False if self.femmesh.GroupCount: - all_found = FemMeshTools.get_femelement_sets_from_group_data(self.femmesh, self.material_objects) + all_found = meshtools.get_femelement_sets_from_group_data(self.femmesh, self.material_objects) FreeCAD.Console.PrintMessage(all_found) FreeCAD.Console.PrintMessage('\n') if all_found is False: if not self.femelement_table: - self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh) + self.femelement_table = meshtools.get_femelement_table(self.femmesh) # we're going to use the binary search for get_femelements_by_femnodes() # thus we need the parameter values self.femnodes_ele_table if not self.femnodes_mesh: self.femnodes_mesh = self.femmesh.Nodes if not self.femnodes_ele_table: - self.femnodes_ele_table = FemMeshTools.get_femnodes_ele_table(self.femnodes_mesh, self.femelement_table) - control = FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_table, self.material_objects, self.femnodes_ele_table) + self.femnodes_ele_table = meshtools.get_femnodes_ele_table(self.femnodes_mesh, self.femelement_table) + control = meshtools.get_femelement_sets(self.femmesh, self.femelement_table, self.material_objects, self.femnodes_ele_table) if (self.femelement_count_test is True) and (control is False): # we only need to set it, if it is still True self.femelement_count_test = False if self.shellthickness_objects: if not self.femelement_faces_table: - self.femelement_faces_table = FemMeshTools.get_femelement_faces_table(self.femmesh) - FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_faces_table, self.material_objects) + self.femelement_faces_table = meshtools.get_femelement_faces_table(self.femmesh) + meshtools.get_femelement_sets(self.femmesh, self.femelement_faces_table, self.material_objects) if self.beamsection_objects or self.fluidsection_objects: if not self.femelement_edges_table: - self.femelement_edges_table = FemMeshTools.get_femelement_edges_table(self.femmesh) - FemMeshTools.get_femelement_sets(self.femmesh, self.femelement_edges_table, self.material_objects) + self.femelement_edges_table = meshtools.get_femelement_edges_table(self.femmesh) + meshtools.get_femelement_sets(self.femmesh, self.femelement_edges_table, self.material_objects) ## @}