diff --git a/src/Mod/Fem/Init.py b/src/Mod/Fem/Init.py index aa20ef7978..eda3580424 100644 --- a/src/Mod/Fem/Init.py +++ b/src/Mod/Fem/Init.py @@ -1,8 +1,6 @@ -# FreeCAD init script of the Fem module -# (c) 2001 Juergen Riegel - # *************************************************************************** -# * (c) Juergen Riegel (juergen.riegel@web.de) 2002 * +# * Copyright (c) 2001 - Juergen Riegel * +# * Copyright (c) 2016 - Bernd Hahnebach * # * * # * This file is part of the FreeCAD CAx development system. * # * * @@ -25,21 +23,31 @@ # * Juergen Riegel 2002 * # ***************************************************************************/ +# FreeCAD init script of the Fem module + import FreeCAD -FreeCAD.addExportType("TetGen file (*.poly)", "feminout.convert2TetGen") -FreeCAD.addImportType("FEM formats (*.unv *.med *.dat *.bdf)", "Fem") -if("BUILD_FEM_VTK" in FreeCAD.__cmake__): - FreeCAD.addImportType("FEM CFD Unstructure Mesh (*.vtk *.vtu)", "Fem") - FreeCAD.addExportType("FEM CFD Unstructure Mesh (*.vtk *.vtu)", "Fem") - FreeCAD.addImportType("FEM results (*.vtk *.vtu)", "feminout.importVTKResults") - FreeCAD.addExportType("FEM CFD Result in VTK format (*.vtk *.vtu)", "feminout.importVTKResults") -FreeCAD.addExportType("FEM formats (*.unv *.med *.dat *.inp)", "Fem") -FreeCAD.addImportType("CalculiX result (*.frd)", "feminout.importCcxFrdResults") -FreeCAD.addImportType("Fenics mesh file (*.xml *.xdmf)", "feminout.importFenicsMesh") -FreeCAD.addExportType("Fenics mesh file (*.xml *.xdmf)", "feminout.importFenicsMesh") -FreeCAD.addImportType("Mesh from Calculix/Abaqus input file (*.inp)", "feminout.importInpMesh") -FreeCAD.addImportType("Z88 mesh (i1) file (*.txt)", "feminout.importZ88Mesh") -FreeCAD.addExportType("Z88 mesh (i1) file (*.txt)", "feminout.importZ88Mesh") -FreeCAD.addImportType("Z88 displacement (o2) result file (*.txt)", "feminout.importZ88O2Results") +FreeCAD.addExportType("FEM mesh TetGen (*.poly)", "feminout.convert2TetGen") + +FreeCAD.addImportType("FEM mesh formats (*.unv *.med *.dat *.bdf)", "Fem") +FreeCAD.addExportType("FEM mesh formats (*.unv *.med *.dat *.inp)", "Fem") + +FreeCAD.addImportType("FEM mesh CalculiX/Abaqus (*.inp)", "feminout.importInpMesh") +FreeCAD.addImportType("FEM result CalculiX (*.frd)", "feminout.importCcxFrdResults") + +FreeCAD.addImportType("FEM mesh Fenics (*.xml *.xdmf)", "feminout.importFenicsMesh") +FreeCAD.addExportType("FEM mesh Fenics (*.xml *.xdmf)", "feminout.importFenicsMesh") + +FreeCAD.addImportType("FEM mesh Z88 (*i1.txt)", "feminout.importZ88Mesh") +FreeCAD.addExportType("FEM mesh Z88 (*i1.txt)", "feminout.importZ88Mesh") + +FreeCAD.addImportType("FEM result Z88 displacements (*o2.txt)", "feminout.importZ88O2Results") + +if("BUILD_FEM_VTK" in FreeCAD.__cmake__): + FreeCAD.addImportType("FEM mesh VTK Unstructure format (*.vtk *.vtu)", "Fem") + FreeCAD.addExportType("FEM mesh VTK Unstructure format (*.vtk *.vtu)", "Fem") + + FreeCAD.addImportType("FEM result VTK Unstructure format (*.vtk *.vtu)", "importVTKResults") + FreeCAD.addExportType("FEM result VTK Unstructure format (*.vtk *.vtu)", "importVTKResults") + diff --git a/src/Mod/Fem/femmesh/gmshtools.py b/src/Mod/Fem/femmesh/gmshtools.py index bf807a8200..1fa7bc279b 100644 --- a/src/Mod/Fem/femmesh/gmshtools.py +++ b/src/Mod/Fem/femmesh/gmshtools.py @@ -41,10 +41,8 @@ class GmshTools(): self.mesh_obj = gmsh_mesh_obj if analysis: self.analysis = analysis - # group meshing turned on else: self.analysis = None - # group meshing turned off # part to mesh self.part_obj = self.mesh_obj.Part @@ -563,7 +561,7 @@ class GmshTools(): geo.write("//\n") geo.write("// to run Gmsh and keep file in Gmsh GUI (with log), run in bash:\n") geo.write("// " + self.gmsh_bin + " " + self.temp_file_geo + "\n") - geo.close + geo.close() def run_gmsh_with_geo(self): comandlist = [self.gmsh_bin, '-', self.temp_file_geo] diff --git a/src/Mod/Fem/femmesh/meshtools.py b/src/Mod/Fem/femmesh/meshtools.py index eb5fb8d592..691402bb08 100644 --- a/src/Mod/Fem/femmesh/meshtools.py +++ b/src/Mod/Fem/femmesh/meshtools.py @@ -157,7 +157,7 @@ def get_femnodes_ele_table(femnodes_mesh, femelement_table): for ele_node in ele_list: femnodes_ele_table[ele_node].append([ele, pos]) pos = pos << 1 - print('len femnodes_ele_table:' + str(len(femnodes_ele_table))) + print('len femnodes_ele_table: ' + str(len(femnodes_ele_table))) # print('femnodes_ele_table: ', femnodes_ele_table) return femnodes_ele_table @@ -182,7 +182,7 @@ def get_bit_pattern_dict(femelement_table, femnodes_ele_table, node_set): The number in the ele_dict is organized as a bit array. The corresponding bit is set, if the node of the node_set is contained in the element. ''' - print('len femnodes_ele_table:' + str(len(femnodes_ele_table))) + print('len femnodes_ele_table: ' + str(len(femnodes_ele_table))) print('len node_set: ' + str(len(node_set))) # print('node_set: ', node_set) bit_pattern_dict = get_copy_of_empty_femelement_table(femelement_table) @@ -193,7 +193,7 @@ def get_bit_pattern_dict(femelement_table, femnodes_ele_table, node_set): for node in node_set: for nList in femnodes_ele_table[node]: bit_pattern_dict[nList[0]][1] += nList[1] - print('len bit_pattern_dict:' + str(len(bit_pattern_dict))) + print('len bit_pattern_dict: ' + str(len(bit_pattern_dict))) # print('bit_pattern_dict: ', bit_pattern_dict) return bit_pattern_dict @@ -270,7 +270,7 @@ def get_femelements_by_femnodes_bin(femelement_table, femnodes_ele_table, node_l 15: 32767, 20: 1048575} # Now we are looking for nodes inside of the Volumes = filling the bit_pattern_dict - print('len femnodes_ele_table:' + str(len(femnodes_ele_table))) + print('len femnodes_ele_table: ' + str(len(femnodes_ele_table))) bit_pattern_dict = get_bit_pattern_dict(femelement_table, femnodes_ele_table, node_list) # search ele_list = [] # The ele_list contains the result of the search. @@ -610,7 +610,7 @@ def get_force_obj_edge_nodeload_table(femmesh, femelement_table, femnodes_mesh, ratio_refedge_lengths = sum_node_lengths / ref_edge.Length if ratio_refedge_lengths < 0.99 or ratio_refedge_lengths > 1.01: FreeCAD.Console.PrintError('Error on: ' + frc_obj.Name + ' --> ' + o.Name + '.' + elem + '\n') - print(' sum_node_lengths:', sum_node_lengths) + print(' sum_node_lengths: ', sum_node_lengths) print(' refedge_length: ', ref_edge.Length) bad_refedge = ref_edge sum_ref_edge_node_length += sum_node_lengths @@ -745,7 +745,7 @@ def get_force_obj_face_nodeload_table(femmesh, femelement_table, femnodes_mesh, ratio_refface_areas = sum_node_areas / ref_face.Area if ratio_refface_areas < 0.99 or ratio_refface_areas > 1.01: FreeCAD.Console.PrintError('Error on: ' + frc_obj.Name + ' --> ' + o.Name + '.' + elem + '\n') - print(' sum_node_areas:', sum_node_areas) + print(' sum_node_areas: ', sum_node_areas) print(' ref_face_area: ', ref_face.Area) sum_ref_face_node_area += sum_node_areas @@ -916,7 +916,7 @@ def build_mesh_faces_of_volume_elements(face_table, femelement_table): index = femelement_table[veID].index(n) # print(index) face_nodenumber_table[veID].append(index + 1) # local node number = index + 1 - # print('VolElement:', veID) + # print('VolElement: ', veID) # print(' --> ', femelement_table[veID]) # print(' --> ', face_table[veID]) # print(' --> ', face_nodenumber_table[veID]) diff --git a/src/Mod/Fem/femsolver/writerbase.py b/src/Mod/Fem/femsolver/writerbase.py index 59a20cbfbd..ac2c9be06f 100644 --- a/src/Mod/Fem/femsolver/writerbase.py +++ b/src/Mod/Fem/femsolver/writerbase.py @@ -241,6 +241,7 @@ class FemInputWriter(): def get_material_elements(self): # it only works if either Volumes or Shellthicknesses or Beamsections are in the material objects # it means it does not work for mixed meshes and multiple materials, this is checked in check_prerequisites + # the femelement_table is only calculated for the hightest dimension in get_femelement_table FreeCAD.Console.PrintMessage('Materials\n') if self.femmesh.Volumes: # we only could do this for volumes, if a mesh contains volumes we're going to use them in the analysis @@ -252,8 +253,8 @@ class FemInputWriter(): FreeCAD.Console.PrintMessage(all_found) FreeCAD.Console.PrintMessage('\n') if all_found is False: - if not self.femelement_volumes_table: - self.femelement_volumes_table = FemMeshTools.get_femelement_volumes_table(self.femmesh) + if not self.femelement_table: + self.femelement_table = FemMeshTools.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: