From 454729f12d8a2ff4906e10d959c8768f69ee7ed7 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Mon, 20 May 2019 12:31:32 +0200 Subject: [PATCH] FEM: solver calculix writer and solver writer base, use small character for import identifier --- src/Mod/Fem/femsolver/calculix/writer.py | 41 +++++++++------ src/Mod/Fem/femsolver/writerbase.py | 66 ++++++++++++------------ 2 files changed, 59 insertions(+), 48 deletions(-) diff --git a/src/Mod/Fem/femsolver/calculix/writer.py b/src/Mod/Fem/femsolver/calculix/writer.py index 1c4bd5cc5e68..4285293d8d84 100644 --- a/src/Mod/Fem/femsolver/calculix/writer.py +++ b/src/Mod/Fem/femsolver/calculix/writer.py @@ -27,17 +27,18 @@ ## \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 @@ def __init__( fluidsection_obj, dir_name=None ): - FemInputWriter.FemInputWriter.__init__( + writerbase.FemInputWriter.__init__( self, analysis_obj, solver_obj, @@ -91,9 +92,9 @@ def __init__( 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 @@ def write_calculix_input_file(self): 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 @@ def write_calculix_one_input_file(self): # 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 @@ def write_calculix_one_input_file(self): 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 @@ def write_calculix_splitted_input_file(self): # 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 @@ def write_calculix_splitted_input_file(self): # 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 @@ def write_node_sets_constraints_planerotation(self, f): 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 @@ def write_constraints_transform(self, f): 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 acadeaf41f25..34112bc3f4fc 100644 --- a/src/Mod/Fem/femsolver/writerbase.py +++ b/src/Mod/Fem/femsolver/writerbase.py @@ -27,7 +27,7 @@ # @{ import FreeCAD -import femmesh.meshtools as FemMeshTools +from femmesh import meshtools import os @@ -118,7 +118,7 @@ def get_constraints_fixed_nodes(self): # 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 @@ def get_constraints_fixed_nodes(self): 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 @@ def get_constraints_displacement_nodes(self): # 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 @@ def get_constraints_planerotation_nodes(self): # 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 @@ def get_constraints_force_nodeloads(self): 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 @@ def get_constraints_force_nodeloads(self): 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 @@ def get_constraints_force_nodeloads(self): 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 @@ def get_constraints_pressure_faces(self): # 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 @@ def get_element_geometry2D_elements(self): # 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 @@ def get_material_elements(self): # 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) ## @}