diff --git a/src/Mod/Fem/feminout/convert2TetGen.py b/src/Mod/Fem/feminout/convert2TetGen.py index 8d068a1928..38c35fee53 100644 --- a/src/Mod/Fem/feminout/convert2TetGen.py +++ b/src/Mod/Fem/feminout/convert2TetGen.py @@ -42,7 +42,7 @@ def exportMeshToTetGenPoly(meshToExport, filePath, beVerbose=1): if beVerbose == 1: FreeCAD.Console.PrintMessage("\nExport of mesh to TetGen file ...") (allVertices, allFacets) = meshToExport.Topology - f = open(filePath, 'w') + f = open(filePath, "w") f.write("# This file was generated from FreeCAD geometry\n") f.write("# Part 1 - node list\n") f.write( @@ -52,10 +52,10 @@ def exportMeshToTetGenPoly(meshToExport, filePath, beVerbose=1): ) for PointIndex in range(len(allVertices)): f.write("%(PointIndex)5i %(x) e %(y) e %(z) e\n" % { - 'PointIndex': PointIndex, - 'x': allVertices[PointIndex].x, - 'y': allVertices[PointIndex].y, - 'z': allVertices[PointIndex].z + "PointIndex": PointIndex, + "x": allVertices[PointIndex].x, + "y": allVertices[PointIndex].y, + "z": allVertices[PointIndex].z }) # Find out BoundaryMarker for each facet. If edge connects only two facets, @@ -92,7 +92,7 @@ def exportMeshToTetGenPoly(meshToExport, filePath, beVerbose=1): # disconnectedEdges = len(EdgeKeys) if beVerbose == 1: FreeCAD.Console.PrintMessage( - '\nBoundaryMarker:' + repr(BoundaryMarker) + ' ' + repr(len(EdgeFacets)) + "\nBoundaryMarker:" + repr(BoundaryMarker) + " " + repr(len(EdgeFacets)) ) searchForPair = 1 @@ -144,24 +144,24 @@ def exportMeshToTetGenPoly(meshToExport, filePath, beVerbose=1): # End of main loop if beVerbose == 1: FreeCAD.Console.PrintMessage( - '\nNew BoundaryMarker:' + repr(BoundaryMarker) + ' ' + repr(len(EdgeFacets)) + "\nNew BoundaryMarker:" + repr(BoundaryMarker) + " " + repr(len(EdgeFacets)) ) # ********** Part 2 - write all facets to *.poly file f.write("# Part 2 - facet list\n") f.write("%(TotalNumOfFacets)i %(BoundaryMarkerExists)i\n" % { - 'TotalNumOfFacets': len(allFacets), - 'BoundaryMarkerExists': BoundaryMarkerExists + "TotalNumOfFacets": len(allFacets), + "BoundaryMarkerExists": BoundaryMarkerExists }) for FacetIndex in range(len(allFacets)): - f.write("# FacetIndex = %(Index)i\n" % {'Index': FacetIndex}) - f.write("%(NumOfPolygons)3i " % {'NumOfPolygons': 1}) + f.write("# FacetIndex = %(Index)i\n" % {"Index": FacetIndex}) + f.write("%(NumOfPolygons)3i " % {"NumOfPolygons": 1}) if BoundaryMarkerExists == 1: - f.write("0 %(BoundaryMarker)i" % {'BoundaryMarker': BoundaryMarker[FacetIndex]}) - f.write("\n%(NumOfConers)3i " % {'NumOfConers': len(allFacets[FacetIndex])}) + f.write("0 %(BoundaryMarker)i" % {"BoundaryMarker": BoundaryMarker[FacetIndex]}) + f.write("\n%(NumOfConers)3i " % {"NumOfConers": len(allFacets[FacetIndex])}) for PointIndex in range(len(allFacets[FacetIndex])): # f.write(repr(allFacets[FacetIndex][PointIndex])) - f.write("%(PointIndex)i " % {'PointIndex': allFacets[FacetIndex][PointIndex]}) + f.write("%(PointIndex)i " % {"PointIndex": allFacets[FacetIndex][PointIndex]}) f.write("\n") # ********** Part 3 and Part 4 are zero f.write("# Part 3 - the hole list.\n# There is no hole in bar.\n0\n") diff --git a/src/Mod/Fem/feminout/importCcxDatResults.py b/src/Mod/Fem/feminout/importCcxDatResults.py index 2f2f8d99f8..37f6e292f1 100644 --- a/src/Mod/Fem/feminout/importCcxDatResults.py +++ b/src/Mod/Fem/feminout/importCcxDatResults.py @@ -36,10 +36,10 @@ EIGENVALUE_OUTPUT_SECTION = " E I G E N V A L U E O U T P U T" # ********* generic FreeCAD import and export methods ********* -if open.__module__ == '__builtin__': +if open.__module__ == "__builtin__": # because we'll redefine open below (Python2) pyopen = open -elif open.__module__ == 'io': +elif open.__module__ == "io": # because we'll redefine open below (Python3) pyopen = open @@ -79,7 +79,7 @@ def import_dat( def readResult( dat_input ): - FreeCAD.Console.PrintMessage('Read ccx results from dat file: {}\n'.format(dat_input)) + FreeCAD.Console.PrintMessage("Read ccx results from dat file: {}\n".format(dat_input)) dat_file = pyopen(dat_input, "r") eigenvalue_output_section_found = False mode_reading = False @@ -94,8 +94,8 @@ def readResult( mode = int(line[0:7]) mode_frequency = float(line[39:55]) m = {} - m['eigenmode'] = mode - m['frequency'] = mode_frequency + m["eigenmode"] = mode + m["frequency"] = mode_frequency results.append(m) mode_reading = True except: diff --git a/src/Mod/Fem/feminout/importCcxFrdResults.py b/src/Mod/Fem/feminout/importCcxFrdResults.py index 3c1db172d5..ca2c092572 100644 --- a/src/Mod/Fem/feminout/importCcxFrdResults.py +++ b/src/Mod/Fem/feminout/importCcxFrdResults.py @@ -35,10 +35,10 @@ import os # ********* generic FreeCAD import and export methods ********* -if open.__module__ == '__builtin__': +if open.__module__ == "__builtin__": # because we'll redefine open below (Python2) pyopen = open -elif open.__module__ == 'io': +elif open.__module__ == "io": # because we'll redefine open below (Python3) pyopen = open @@ -71,47 +71,47 @@ def importFrd( from . import importToolsFem import ObjectsFem if result_name_prefix is None: - result_name_prefix = '' + result_name_prefix = "" m = read_frd_result(filename) result_mesh_object = None - if len(m['Nodes']) > 0: + if len(m["Nodes"]) > 0: if analysis: analysis_object = analysis mesh = importToolsFem.make_femmesh(m) result_mesh_object = ObjectsFem.makeMeshResult( FreeCAD.ActiveDocument, - 'ResultMesh' + "ResultMesh" ) result_mesh_object.FemMesh = mesh res_mesh_is_compacted = False nodenumbers_for_compacted_mesh = [] - number_of_increments = len(m['Results']) + number_of_increments = len(m["Results"]) FreeCAD.Console.PrintLog( - 'Increments: ' + str(number_of_increments) + '\n' + "Increments: " + str(number_of_increments) + "\n" ) - if len(m['Results']) > 0: - for result_set in m['Results']: - if 'number' in result_set: - eigenmode_number = result_set['number'] + if len(m["Results"]) > 0: + for result_set in m["Results"]: + if "number" in result_set: + eigenmode_number = result_set["number"] else: eigenmode_number = 0 - step_time = result_set['time'] + step_time = result_set["time"] step_time = round(step_time, 2) if eigenmode_number > 0: results_name = ( - '{}Mode{}_Results' + "{}Mode{}_Results" .format(result_name_prefix, eigenmode_number) ) elif number_of_increments > 1: results_name = ( - '{}Time{}_Results' + "{}Time{}_Results" .format(result_name_prefix, step_time) ) else: results_name = ( - '{}Results' + "{}Results" .format(result_name_prefix) ) @@ -152,8 +152,8 @@ def importFrd( if res_obj.getParentGroup(): has_reinforced_mat = False for obj in res_obj.getParentGroup().Group: - if obj.isDerivedFrom('App::MaterialObjectPython') \ - and femutils.is_of_type(obj, 'Fem::MaterialReinforced'): + if obj.isDerivedFrom("App::MaterialObjectPython") \ + and femutils.is_of_type(obj, "Fem::MaterialReinforced"): has_reinforced_mat = True restools.add_principal_stress_reinforced(res_obj) break @@ -187,7 +187,7 @@ def importFrd( else: FreeCAD.Console.PrintError( - 'Problem on frd file import. No nodes found in frd file.\n' + "Problem on frd file import. No nodes found in frd file.\n" ) return res_obj @@ -198,11 +198,11 @@ def read_frd_result( frd_input ): FreeCAD.Console.PrintMessage( - 'Read ccx results from frd file: {}\n' + "Read ccx results from frd file: {}\n" .format(frd_input) ) inout_nodes = [] - inout_nodes_file = frd_input.rsplit('.', 1)[0] + '_inout_nodes.txt' + inout_nodes_file = frd_input.rsplit(".", 1)[0] + "_inout_nodes.txt" if os.path.exists(inout_nodes_file): FreeCAD.Console.PrintMessage( "Read special 1DFlow nodes data form: {}\n".format(inout_nodes_file) @@ -210,7 +210,7 @@ def read_frd_result( f = pyopen(inout_nodes_file, "r") lines = f.readlines() for line in lines: - a = line.split(',') + a = line.split(",") inout_nodes.append(a) f.close() FreeCAD.Console.PrintMessage("{}\n".format(inout_nodes)) @@ -230,8 +230,8 @@ def read_frd_result( elements_seg3 = {} results = [] mode_results = {} - mode_results['number'] = float('NaN') - mode_results['time'] = float('NaN') + mode_results["number"] = float("NaN") + mode_results["time"] = float("NaN") mode_disp = {} mode_stress = {} mode_strain = {} @@ -345,7 +345,7 @@ def read_frd_result( nd19 = int(line[83:93]) nd20 = int(line[93:103]) input_continues = False - ''' + """ CalculiX uses a different node order in input file *.inp and result file *.frd for hexa20 (C3D20) according to Guido (the developer of ccx): @@ -365,7 +365,7 @@ def read_frd_result( nd16, nd13, nd18, nd19, nd20, nd17, nd10, nd11, nd12, nd9 ) hexa20 import works with the following frd file node assignment - ''' + """ elements_hexa20[elem] = ( nd8, nd5, nd6, nd7, nd4, nd1, nd2, nd3, nd20, nd17, nd18, nd19, nd12, nd9, nd10, nd11, nd16, nd13, nd14, nd15 @@ -394,7 +394,7 @@ def read_frd_result( nd14 = int(line[33:43]) nd15 = int(line[43:53]) input_continues = False - ''' + """ CalculiX uses a different node order in input file *.inp and result file *.frd for penta15 (C3D15) see notes at hexa20 @@ -402,7 +402,7 @@ def read_frd_result( nd5, nd6, nd4, nd2, nd3, nd1, nd11, nd12, nd10, nd8, nd9, nd7, nd14, nd15, nd13 ) # order of the *.inp file - ''' + """ elements_penta15[elem] = ( nd5, nd6, nd4, nd2, nd3, nd1, nd14, nd15, nd13, nd8, nd9, nd7, nd11, nd12, nd10 @@ -610,57 +610,57 @@ def read_frd_result( node_element_section = True if mode_disp_found: - mode_results['disp'] = mode_disp + mode_results["disp"] = mode_disp mode_disp = {} mode_disp_found = False node_element_section = False if mode_stress_found: - mode_results['stress'] = mode_stress + mode_results["stress"] = mode_stress mode_stress = {} mode_stress_found = False node_element_section = False if mode_strain_found: - mode_results['strain'] = mode_strain + mode_results["strain"] = mode_strain mode_strain = {} mode_strain_found = False node_element_section = False if mode_peeq_found: - mode_results['peeq'] = mode_peeq + mode_results["peeq"] = mode_peeq mode_peeq = {} mode_peeq_found = False node_element_section = False if mode_temp_found: - mode_results['temp'] = mode_temp + mode_results["temp"] = mode_temp mode_temp = {} mode_temp_found = False node_element_section = False if mode_massflow_found: - mode_results['mflow'] = mode_massflow + mode_results["mflow"] = mode_massflow mode_massflow = {} mode_massflow_found = False node_element_section = False if mode_networkpressure_found: - mode_results['npressure'] = mode_networkpressure + mode_results["npressure"] = mode_networkpressure mode_networkpressure_found = False mode_networkpressure = {} node_element_section = False - ''' - print('---- End of Section --> Mode_Results may be changed ----') + """ + print("---- End of Section --> Mode_Results may be changed ----") for key in sorted(mode_results.keys()): - if key is 'number' or key is 'time': - print(key + ' --> ' + str(mode_results[key])) + if key is "number" or key is "time": + print(key + " --> " + str(mode_results[key])) else: - print(key + ' --> ' + str(len(mode_results[key]))) - print('----Mode_Results----\n') - ''' + print(key + " --> " + str(len(mode_results[key]))) + print("----Mode_Results----\n") + """ # Check if we found the end of frd data if line[1:5] == "9999": @@ -670,34 +670,34 @@ def read_frd_result( and end_of_section_found \ and not node_element_section: - ''' - print('\n\n----Append mode_results to results') + """ + print("\n\n----Append mode_results to results") print(line) for key in sorted(mode_results.keys()): - if key is 'number' or key is 'time': - print(key + ' --> ' + str(mode_results[key])) + if key is "number" or key is "time": + print(key + " --> " + str(mode_results[key])) else: - print(key + ' --> ' + str(len(mode_results[key]))) - print('----Append Mode_Results----\n') - ''' + print(key + " --> " + str(len(mode_results[key]))) + print("----Append Mode_Results----\n") + """ # append mode_results to results and reset mode_result results.append(mode_results) mode_results = {} # https://forum.freecadweb.org/viewtopic.php?f=18&t=32649&start=10#p274686 - mode_results['number'] = float('NaN') - mode_results['time'] = float('NaN') + mode_results["number"] = float("NaN") + mode_results["time"] = float("NaN") end_of_section_found = False # on changed --> write changed values in mode_result # will be the first to do on an empty mode_result if mode_eigen_changed: - mode_results['number'] = eigenmode + mode_results["number"] = eigenmode mode_eigen_changed = False if mode_time_changed: - mode_results['time'] = timestep - # mode_results['time'] = 0 # Don't return time if static # WARUM? + mode_results["time"] = timestep + # mode_results["time"] = 0 # Don't return time if static # WARUM? mode_time_found = False mode_time_changed = False @@ -707,37 +707,37 @@ def read_frd_result( # close frd file if loop over all lines is finished frd_file.close() - ''' + """ # debug prints and checks with the read data - print('\n\n----RESULTS values begin----') + print("\n\n----RESULTS values begin----") print(len(results)) - # print('\n') + # print("\n") # print(results) - print('----RESULTS values end----\n\n') - ''' + print("----RESULTS values end----\n\n") + """ if not inout_nodes: if results: - if 'mflow' in results[0] or 'npressure' in results[0]: + if "mflow" in results[0] or "npressure" in results[0]: FreeCAD.Console.PrintError( - 'We have mflow or npressure, but no inout_nodes file.\n' + "We have mflow or npressure, but no inout_nodes file.\n" ) if not nodes: - FreeCAD.Console.PrintError('FEM: No nodes found in Frd file.\n') + FreeCAD.Console.PrintError("FEM: No nodes found in Frd file.\n") return { - 'Nodes': nodes, - 'Seg2Elem': elements_seg2, - 'Seg3Elem': elements_seg3, - 'Tria3Elem': elements_tria3, - 'Tria6Elem': elements_tria6, - 'Quad4Elem': elements_quad4, - 'Quad8Elem': elements_quad8, - 'Tetra4Elem': elements_tetra4, - 'Tetra10Elem': elements_tetra10, - 'Hexa8Elem': elements_hexa8, - 'Hexa20Elem': elements_hexa20, - 'Penta6Elem': elements_penta6, - 'Penta15Elem': elements_penta15, - 'Results': results + "Nodes": nodes, + "Seg2Elem": elements_seg2, + "Seg3Elem": elements_seg3, + "Tria3Elem": elements_tria3, + "Tria6Elem": elements_tria6, + "Quad4Elem": elements_quad4, + "Quad8Elem": elements_quad8, + "Tetra4Elem": elements_tetra4, + "Tetra10Elem": elements_tetra10, + "Hexa8Elem": elements_hexa8, + "Hexa20Elem": elements_hexa20, + "Penta6Elem": elements_penta6, + "Penta15Elem": elements_penta15, + "Results": results } diff --git a/src/Mod/Fem/feminout/importFenicsMesh.py b/src/Mod/Fem/feminout/importFenicsMesh.py index 356cfe7961..c34bbb25b2 100644 --- a/src/Mod/Fem/feminout/importFenicsMesh.py +++ b/src/Mod/Fem/feminout/importFenicsMesh.py @@ -43,10 +43,10 @@ if FreeCAD.GuiUp: # Template copied from importZ88Mesh.py. Thanks Bernd! # ********* generic FreeCAD import and export methods ********* -if open.__module__ == '__builtin__': +if open.__module__ == "__builtin__": # because we'll redefine open below (Python2) pyopen = open -elif open.__module__ == 'io': +elif open.__module__ == "io": # because we'll redefine open below (Python3) pyopen = open @@ -175,14 +175,14 @@ def export(objectslist, fileString, group_values_dict_nogui=None): if fileString != "": fileName, fileExtension = os.path.splitext(fileString) - if fileExtension.lower() == '.xml': + if fileExtension.lower() == ".xml": FreeCAD.Console.PrintWarning( "XML is not designed to save higher order elements.\n") FreeCAD.Console.PrintWarning( "Reducing order for second order mesh.\n") FreeCAD.Console.PrintWarning("Tri6 -> Tri3, Tet10 -> Tet4, etc.\n") writeFenicsXML.write_fenics_mesh_xml(obj, fileString) - elif fileExtension.lower() == '.xdmf': + elif fileExtension.lower() == ".xdmf": mesh_groups = importToolsFem.get_FemMeshObjectMeshGroups(obj) if mesh_groups is not (): # if there are groups found, make task panel available if GuiUp @@ -203,13 +203,13 @@ def export(objectslist, fileString, group_values_dict_nogui=None): # ********* module specific methods ********* def import_fenics_mesh(filename, analysis=None): - '''insert a FreeCAD FEM Mesh object in the ActiveDocument - ''' + """insert a FreeCAD FEM Mesh object in the ActiveDocument + """ mesh_data = readFenicsXML.read_fenics_mesh_xml(filename) # xdmf not operational mesh_name = os.path.basename(os.path.splitext(filename)[0]) femmesh = importToolsFem.make_femmesh(mesh_data) if femmesh: - mesh_object = FreeCAD.ActiveDocument.addObject('Fem::FemMeshObject', mesh_name) + mesh_object = FreeCAD.ActiveDocument.addObject("Fem::FemMeshObject", mesh_name) mesh_object.FemMesh = femmesh diff --git a/src/Mod/Fem/feminout/importInpMesh.py b/src/Mod/Fem/feminout/importInpMesh.py index 477605bc50..c0dad0a730 100644 --- a/src/Mod/Fem/feminout/importInpMesh.py +++ b/src/Mod/Fem/feminout/importInpMesh.py @@ -34,10 +34,10 @@ import os # ********* generic FreeCAD import and export methods ********* -if open.__module__ == '__builtin__': +if open.__module__ == "__builtin__": # because we'll redefine open below (Python2) pyopen = open -elif open.__module__ == 'io': +elif open.__module__ == "io": # because we'll redefine open below (Python3) pyopen = open @@ -60,8 +60,8 @@ def insert(filename, docname): # ********* module specific methods ********* def read(filename): - '''read a FemMesh from a inp mesh file and return the FemMesh - ''' + """read a FemMesh from a inp mesh file and return the FemMesh + """ # no document object is created, just the FemMesh is returned mesh_data = read_inp(filename) from . import importToolsFem @@ -69,17 +69,17 @@ def read(filename): def import_inp(filename): - '''read a FEM mesh from a Z88 mesh file and insert a FreeCAD FEM Mesh object in the ActiveDocument - ''' + """read a FEM mesh from a Z88 mesh file and insert a FreeCAD FEM Mesh object in the ActiveDocument + """ femmesh = read(filename) mesh_name = os.path.splitext(os.path.basename(filename))[0] if femmesh: - mesh_object = FreeCAD.ActiveDocument.addObject('Fem::FemMeshObject', mesh_name) + mesh_object = FreeCAD.ActiveDocument.addObject("Fem::FemMeshObject", mesh_name) mesh_object.FemMesh = femmesh def read_inp(file_name): - '''read .inp file ''' + """read .inp file """ # ATM only mesh reading is supported (no boundary conditions) class elements(): @@ -113,10 +113,10 @@ def read_inp(file_name): line = f.readline() else: line = f.readline() - if line.strip() == '': + if line.strip() == "": continue - elif line[0] == '*': # start/end of a reading set - if line[0:2] == '**': # comments + elif line[0] == "*": # start/end of a reading set + if line[0:2] == "**": # comments continue if line[:8].upper() == "*INCLUDE": start = 1 + line.index("=") @@ -137,7 +137,7 @@ def read_inp(file_name): if (line[:5].upper() == "*NODE") and (model_definition is True): read_node = True elif read_node is True: - line_list = line.split(',') + line_list = line.split(",") number = int(line_list[0]) x = float(line_list[1]) y = float(line_list[2]) @@ -146,10 +146,10 @@ def read_inp(file_name): # reading elements elif line[:8].upper() == "*ELEMENT": - line_list = line[8:].upper().split(',') + line_list = line[8:].upper().split(",") for line_part in line_list: if line_part.lstrip()[:4] == "TYPE": - elm_type = line_part.split('=')[1].strip() + elm_type = line_part.split("=")[1].strip() if elm_type in ["S3", "CPS3", "CPE3", "CAX3"]: elm_category = elements.tria3 @@ -192,7 +192,7 @@ def read_inp(file_name): error_seg3 = True # to print "not supported" elif elm_category != []: - line_list = line.split(',') + line_list = line.split(",") if elm_2nd_line is False: number = int(line_list[0]) elm_category[number] = [] @@ -244,17 +244,17 @@ def read_inp(file_name): elements.seg3[en] = [n[0], n[2], n[1]] return { - 'Nodes': nodes, - 'Seg2Elem': elements.seg2, - 'Seg3Elem': elements.seg3, - 'Tria3Elem': elements.tria3, - 'Tria6Elem': elements.tria6, - 'Quad4Elem': elements.quad4, - 'Quad8Elem': elements.quad8, - 'Tetra4Elem': elements.tetra4, - 'Tetra10Elem': elements.tetra10, - 'Hexa8Elem': elements.hexa8, - 'Hexa20Elem': elements.hexa20, - 'Penta6Elem': elements.penta6, - 'Penta15Elem': elements.penta15 + "Nodes": nodes, + "Seg2Elem": elements.seg2, + "Seg3Elem": elements.seg3, + "Tria3Elem": elements.tria3, + "Tria6Elem": elements.tria6, + "Quad4Elem": elements.quad4, + "Quad8Elem": elements.quad8, + "Tetra4Elem": elements.tetra4, + "Tetra10Elem": elements.tetra10, + "Hexa8Elem": elements.hexa8, + "Hexa20Elem": elements.hexa20, + "Penta6Elem": elements.penta6, + "Penta15Elem": elements.penta15 } diff --git a/src/Mod/Fem/feminout/importToolsFem.py b/src/Mod/Fem/feminout/importToolsFem.py index 68b8f87f98..b16a74ec43 100644 --- a/src/Mod/Fem/feminout/importToolsFem.py +++ b/src/Mod/Fem/feminout/importToolsFem.py @@ -133,82 +133,82 @@ def get_MaxDimElementFromList( def make_femmesh( mesh_data ): - ''' makes an FreeCAD FEM Mesh object from FEM Mesh data - ''' + """ makes an FreeCAD FEM Mesh object from FEM Mesh data + """ import Fem mesh = Fem.FemMesh() m = mesh_data - if ('Nodes' in m) and (len(m['Nodes']) > 0): + if ("Nodes" in m) and (len(m["Nodes"]) > 0): FreeCAD.Console.PrintLog("Found: nodes\n") if ( - ('Seg2Elem' in m) - or ('Seg3Elem' in m) - or ('Tria3Elem' in m) - or ('Tria6Elem' in m) - or ('Quad4Elem' in m) - or ('Quad8Elem' in m) - or ('Tetra4Elem' in m) - or ('Tetra10Elem' in m) - or ('Penta6Elem' in m) - or ('Penta15Elem' in m) - or ('Hexa8Elem' in m) - or ('Hexa20Elem' in m) + ("Seg2Elem" in m) + or ("Seg3Elem" in m) + or ("Tria3Elem" in m) + or ("Tria6Elem" in m) + or ("Quad4Elem" in m) + or ("Quad8Elem" in m) + or ("Tetra4Elem" in m) + or ("Tetra10Elem" in m) + or ("Penta6Elem" in m) + or ("Penta15Elem" in m) + or ("Hexa8Elem" in m) + or ("Hexa20Elem" in m) ): - nds = m['Nodes'] + nds = m["Nodes"] FreeCAD.Console.PrintLog("Found: elements\n") for i in nds: n = nds[i] mesh.addNode(n[0], n[1], n[2], i) - elms_hexa8 = m['Hexa8Elem'] + elms_hexa8 = m["Hexa8Elem"] for i in elms_hexa8: e = elms_hexa8[i] mesh.addVolume([e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7]], i) - elms_penta6 = m['Penta6Elem'] + elms_penta6 = m["Penta6Elem"] for i in elms_penta6: e = elms_penta6[i] mesh.addVolume([e[0], e[1], e[2], e[3], e[4], e[5]], i) - elms_tetra4 = m['Tetra4Elem'] + elms_tetra4 = m["Tetra4Elem"] for i in elms_tetra4: e = elms_tetra4[i] mesh.addVolume([e[0], e[1], e[2], e[3]], i) - elms_tetra10 = m['Tetra10Elem'] + elms_tetra10 = m["Tetra10Elem"] for i in elms_tetra10: e = elms_tetra10[i] mesh.addVolume([e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9]], i) - elms_penta15 = m['Penta15Elem'] + elms_penta15 = m["Penta15Elem"] for i in elms_penta15: e = elms_penta15[i] mesh.addVolume([e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9], e[10], e[11], e[12], e[13], e[14]], i) - elms_hexa20 = m['Hexa20Elem'] + elms_hexa20 = m["Hexa20Elem"] for i in elms_hexa20: e = elms_hexa20[i] mesh.addVolume([ e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9], e[10], e[11], e[12], e[13], e[14], e[15], e[16], e[17], e[18], e[19] ], i) - elms_tria3 = m['Tria3Elem'] + elms_tria3 = m["Tria3Elem"] for i in elms_tria3: e = elms_tria3[i] mesh.addFace([e[0], e[1], e[2]], i) - elms_tria6 = m['Tria6Elem'] + elms_tria6 = m["Tria6Elem"] for i in elms_tria6: e = elms_tria6[i] mesh.addFace([e[0], e[1], e[2], e[3], e[4], e[5]], i) - elms_quad4 = m['Quad4Elem'] + elms_quad4 = m["Quad4Elem"] for i in elms_quad4: e = elms_quad4[i] mesh.addFace([e[0], e[1], e[2], e[3]], i) - elms_quad8 = m['Quad8Elem'] + elms_quad8 = m["Quad8Elem"] for i in elms_quad8: e = elms_quad8[i] mesh.addFace([e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7]], i) - elms_seg2 = m['Seg2Elem'] + elms_seg2 = m["Seg2Elem"] for i in elms_seg2: e = elms_seg2[i] mesh.addEdge([e[0], e[1]], i) - elms_seg3 = m['Seg3Elem'] + elms_seg3 = m["Seg3Elem"] for i in elms_seg3: e = elms_seg3[i] mesh.addEdge([e[0], e[1], e[2]], i) @@ -302,24 +302,24 @@ def make_dict_from_femmesh( len_to_volume[len(t)].append((v, t)) mesh_data = { - 'Nodes': dict([(k, (v.x, v.y, v.z)) + "Nodes": dict([(k, (v.x, v.y, v.z)) for (k, v) in femmesh.Nodes.items()]), - 'Seg2Elem': dict(seg2), - 'Seg3Elem': dict(seg3), + "Seg2Elem": dict(seg2), + "Seg3Elem": dict(seg3), - 'Tria3Elem': dict(tri3), - 'Tria6Elem': dict(tri6), - 'Quad4Elem': dict(quad4), - 'Quad8Elem': dict(quad8), + "Tria3Elem": dict(tri3), + "Tria6Elem": dict(tri6), + "Quad4Elem": dict(quad4), + "Quad8Elem": dict(quad8), - 'Tetra4Elem': dict(tet4), - 'Tetra10Elem': dict(tet10), - 'Hexa8Elem': dict(hex8), - 'Hexa20Elem': dict(hex20), - 'Penta6Elem': dict(pent6), - 'Penta15Elem': dict(pent15), + "Tetra4Elem": dict(tet4), + "Tetra10Elem": dict(tet10), + "Hexa8Elem": dict(hex8), + "Hexa20Elem": dict(hex20), + "Penta6Elem": dict(pent6), + "Penta15Elem": dict(pent15), - 'Groups': dict([( + "Groups": dict([( group_num, ( femmesh.getGroupName(group_num), femmesh.getGroupElements(group_num) @@ -336,22 +336,22 @@ def fill_femresult_mechanical( res_obj, result_set ): - ''' fills a FreeCAD FEM mechanical result object with result data - ''' - if 'number' in result_set: - eigenmode_number = result_set['number'] + """ fills a FreeCAD FEM mechanical result object with result data + """ + if "number" in result_set: + eigenmode_number = result_set["number"] else: eigenmode_number = 0 - if 'time' in result_set: - step_time = result_set['time'] + if "time" in result_set: + step_time = result_set["time"] step_time = round(step_time, 2) # if disp exists, fill res_obj.NodeNumbers and # res_obj.DisplacementVectors as well as stress and strain # furthermore the eigenmode number - if 'disp' in result_set: - disp = result_set['disp'] + if "disp" in result_set: + disp = result_set["disp"] res_obj.DisplacementVectors = list(map((lambda x: x), disp.values())) res_obj.NodeNumbers = list(disp.keys()) @@ -359,8 +359,8 @@ def fill_femresult_mechanical( # list values are just added # Should we check if the key in stress and strain dict # is the same as the number in NodeNumbers? - if 'stress' in result_set: - stress = result_set['stress'] + if "stress" in result_set: + stress = result_set["stress"] Sxx = [] Syy = [] Szz = [] @@ -383,8 +383,8 @@ def fill_femresult_mechanical( res_obj.NodeStressYZ = Syz # fill res_obj.NodeStrainXX etc if they exist in result_set - if 'strain' in result_set: - strain = result_set['strain'] + if "strain" in result_set: + strain = result_set["strain"] Exx = [] Eyy = [] Ezz = [] @@ -407,12 +407,12 @@ def fill_femresult_mechanical( res_obj.NodeStrainYZ = Eyz # fill Equivalent Plastic strain if they exist - if 'peeq' in result_set: - Peeq = result_set['peeq'] + if "peeq" in result_set: + Peeq = result_set["peeq"] if len(Peeq) > 0: if len(Peeq.values()) != len(disp.values()): # how is this possible? An example is needed! - FreeCAD.Console.PrintError('PEEQ seams to have exptra nodes.\n') + FreeCAD.Console.PrintError("PEEQ seams to have exptra nodes.\n") Pe = [] Pe_extra_nodes = list(Peeq.values()) nodes = len(disp.values()) @@ -430,8 +430,8 @@ def fill_femresult_mechanical( # fill res_obj.Temperature if they exist # TODO, check if it is possible to have Temperature without disp # we would need to set NodeNumbers than - if 'temp' in result_set: - Temperature = result_set['temp'] + if "temp" in result_set: + Temperature = result_set["temp"] if len(Temperature) > 0: if len(Temperature.values()) != len(disp.values()): Temp = [] @@ -439,7 +439,7 @@ def fill_femresult_mechanical( nodes = len(disp.values()) for i in range(nodes): # how is this possible? An example is needed! - FreeCAD.Console.PrintError('Temperature seams to have exptra nodes.\n') + FreeCAD.Console.PrintError("Temperature seams to have exptra nodes.\n") Temp_value = Temp_extra_nodes[i] Temp.append(Temp_value) res_obj.Temperature = list(map((lambda x: x), Temp)) @@ -448,8 +448,8 @@ def fill_femresult_mechanical( res_obj.Time = step_time # fill res_obj.MassFlow - if 'mflow' in result_set: - MassFlow = result_set['mflow'] + if "mflow" in result_set: + MassFlow = result_set["mflow"] if len(MassFlow) > 0: res_obj.MassFlowRate = list(map((lambda x: x), MassFlow.values())) res_obj.Time = step_time @@ -457,8 +457,8 @@ def fill_femresult_mechanical( res_obj.NodeNumbers = list(MassFlow.keys()) # fill res_obj.NetworkPressure, disp does not exist, see MassFlow - if 'npressure' in result_set: - NetworkPressure = result_set['npressure'] + if "npressure" in result_set: + NetworkPressure = result_set["npressure"] if len(NetworkPressure) > 0: res_obj.NetworkPressure = list(map((lambda x: x), NetworkPressure.values())) res_obj.Time = step_time diff --git a/src/Mod/Fem/feminout/importVTKResults.py b/src/Mod/Fem/feminout/importVTKResults.py index a8725220ad..0b9dab84b2 100644 --- a/src/Mod/Fem/feminout/importVTKResults.py +++ b/src/Mod/Fem/feminout/importVTKResults.py @@ -36,10 +36,10 @@ import Fem # ********* generic FreeCAD import and export methods ********* -if open.__module__ == '__builtin__': +if open.__module__ == "__builtin__": # because we'll redefine open below (Python2) pyopen = open -elif open.__module__ == 'io': +elif open.__module__ == "io": # because we'll redefine open below (Python3) pyopen = open @@ -79,19 +79,19 @@ def export( obj = objectslist[0] if obj.isDerivedFrom("Fem::FemPostPipeline"): FreeCAD.Console.PrintError( - 'Export of a VTK post object to vtk is not yet implemented !\n' + "Export of a VTK post object to vtk is not yet implemented !\n" ) return elif obj.isDerivedFrom("Fem::FemMeshObject"): FreeCAD.Console.PrintError( - 'Use export to FEM mesh formats to export a FEM mesh object to vtk!\n' + "Use export to FEM mesh formats to export a FEM mesh object to vtk!\n" ) return elif obj.isDerivedFrom("Fem::FemResultObject"): Fem.writeResult(filename, obj) else: FreeCAD.Console.PrintError( - 'Selected object is not supported by export to VTK.\n' + "Selected object is not supported by export to VTK.\n" ) return @@ -120,7 +120,7 @@ def importVtk( importVtkFCResult(filename, object_name) else: FreeCAD.Console.PrintError( - 'Error, wrong parameter in VTK import pref: {}\n' + "Error, wrong parameter in VTK import pref: {}\n" .format(object_type) ) @@ -158,11 +158,11 @@ def importVtkFCResult( import ObjectsFem if result_name_prefix is None: - result_name_prefix = '' + result_name_prefix = "" if analysis: analysis_object = analysis - results_name = result_name_prefix + 'results' + results_name = result_name_prefix + "results" result_obj = ObjectsFem.makeResultMechanical(FreeCAD.ActiveDocument, results_name) # readResult always creates a new femmesh named ResultMesh Fem.readResult(filename, result_obj.Name) @@ -172,14 +172,14 @@ def importVtkFCResult( import femresult.resulttools as restools result_obj = restools.add_disp_apps(result_obj) # DisplacementLengths - ''' seems unused at the moment - filenamebase = '.'.join(filename.split('.')[:-1]) # pattern: filebase_timestamp.vtk - ts = filenamebase.split('_')[-1] + """ seems unused at the moment + filenamebase = ".".join(filename.split(".")[:-1]) # pattern: filebase_timestamp.vtk + ts = filenamebase.split("_")[-1] try: time_step = float(ts) except: time_step = 0.0 - ''' + """ if analysis: analysis_object.addObject(result_obj) diff --git a/src/Mod/Fem/feminout/importYamlJsonMesh.py b/src/Mod/Fem/feminout/importYamlJsonMesh.py index 678c2a60d8..2a95a7ab67 100644 --- a/src/Mod/Fem/feminout/importYamlJsonMesh.py +++ b/src/Mod/Fem/feminout/importYamlJsonMesh.py @@ -50,10 +50,10 @@ except ImportError: # names are fix given from FreeCAD, these methods are called from FreeCAD # they are set in FEM modules Init.py -if open.__module__ == '__builtin__': +if open.__module__ == "__builtin__": # because we'll redefine open below (Python2) pyopen = open -elif open.__module__ == 'io': +elif open.__module__ == "io": # because we'll redefine open below (Python3) pyopen = open @@ -61,8 +61,8 @@ elif open.__module__ == 'io': def open( filename ): - '''called when freecad opens a file - a FEM mesh object is created in a new document''' + """called when freecad opens a file + a FEM mesh object is created in a new document""" docname = os.path.splitext(os.path.basename(filename))[0] return insert(filename, docname) @@ -72,8 +72,8 @@ def insert( filename, docname ): - '''called when freecad wants to import a file" - a FEM mesh object is created in a existing document''' + """called when freecad wants to import a file" + a FEM mesh object is created in a existing document""" try: doc = FreeCAD.getDocument(docname) @@ -129,7 +129,7 @@ def import_yaml_json_mesh( femmesh = read(fileString) if femmesh: mesh_object = FreeCAD.ActiveDocument.addObject( - 'Fem::FemMeshObject', + "Fem::FemMeshObject", mesh_name ) mesh_object.FemMesh = femmesh @@ -140,8 +140,8 @@ def import_yaml_json_mesh( def read( fileString ): - '''read a FemMesh from a yaml/json mesh file and return the FemMesh - ''' + """read a FemMesh from a yaml/json mesh file and return the FemMesh + """ # no document object is created, just the FemMesh is returned fileExtension = os.path.basename(os.path.splitext(fileString)[1]) @@ -197,8 +197,8 @@ def write( fileString, fem_mesh ): - '''directly write a FemMesh to a yaml/json mesh file - fem_mesh: a FemMesh''' + """directly write a FemMesh to a yaml/json mesh file + fem_mesh: a FemMesh""" mesh_data = importToolsFem.make_dict_from_femmesh(fem_mesh) diff --git a/src/Mod/Fem/feminout/importZ88Mesh.py b/src/Mod/Fem/feminout/importZ88Mesh.py index 57e4cc39e3..fb5a0e306c 100644 --- a/src/Mod/Fem/feminout/importZ88Mesh.py +++ b/src/Mod/Fem/feminout/importZ88Mesh.py @@ -1,6 +1,7 @@ # *************************************************************************** # * * # * Copyright (c) 2016 - Bernd Hahnebach * + # * * # * This program is free software; you can redistribute it and/or modify * # * it under the terms of the GNU Lesser General Public License (LGPL) * @@ -36,10 +37,10 @@ import FreeCAD # names are fix given from FreeCAD, these methods are called from FreeCAD # they are set in FEM modules Init.py -if open.__module__ == '__builtin__': +if open.__module__ == "__builtin__": # because we'll redefine open below (Python2) pyopen = open -elif open.__module__ == 'io': +elif open.__module__ == "io": # because we'll redefine open below (Python3) pyopen = open @@ -47,8 +48,8 @@ elif open.__module__ == 'io': def open( filename ): - '''called when freecad opens a file - a FEM mesh object is created in a new document''' + """called when freecad opens a file + a FEM mesh object is created in a new document""" docname = os.path.splitext(os.path.basename(filename))[0] return insert(filename, docname) @@ -58,8 +59,8 @@ def insert( filename, docname ): - '''called when freecad wants to import a file - a FEM mesh object is created in a existing document''' + """called when freecad wants to import a file + a FEM mesh object is created in a existing document""" try: doc = FreeCAD.getDocument(docname) @@ -109,9 +110,9 @@ def import_z88_mesh( analysis=None, docname=None ): - '''read a FEM mesh from a Z88 mesh file and + """read a FEM mesh from a Z88 mesh file and insert a FreeCAD FEM Mesh object in the ActiveDocument - ''' + """ try: doc = FreeCAD.getDocument(docname) @@ -126,7 +127,7 @@ def import_z88_mesh( femmesh = read(filename) if femmesh: - mesh_object = doc.addObject('Fem::FemMeshObject', mesh_name) + mesh_object = doc.addObject("Fem::FemMeshObject", mesh_name) mesh_object.FemMesh = femmesh return mesh_object @@ -135,8 +136,8 @@ def import_z88_mesh( def read( filename ): - '''read a FemMesh from a Z88 mesh file and return the FemMesh - ''' + """read a FemMesh from a Z88 mesh file and return the FemMesh + """ # no document object is created, just the FemMesh is returned mesh_data = read_z88_mesh(filename) @@ -148,9 +149,9 @@ def read( def read_z88_mesh( z88_mesh_input ): - ''' reads a z88 mesh file z88i1.txt (Z88OSV14) or z88structure.txt (Z88AuroraV3) + """ reads a z88 mesh file z88i1.txt (Z88OSV14) or z88structure.txt (Z88AuroraV3) and extracts the nodes and elements - ''' + """ nodes = {} elements_hexa8 = {} elements_penta6 = {} @@ -188,13 +189,13 @@ def read_z88_mesh( elements_last_line = elemts_first_line - 1 + elements_count * 2 FreeCAD.Console.PrintLog(nodes_count) - FreeCAD.Console.PrintLog('\n') + FreeCAD.Console.PrintLog("\n") FreeCAD.Console.PrintLog(elements_count) - FreeCAD.Console.PrintLog('\n') + FreeCAD.Console.PrintLog("\n") FreeCAD.Console.PrintLog(nodes_last_line) - FreeCAD.Console.PrintLog('\n') + FreeCAD.Console.PrintLog("\n") FreeCAD.Console.PrintLog(elemts_first_line) - FreeCAD.Console.PrintLog('\n') + FreeCAD.Console.PrintLog("\n") FreeCAD.Console.PrintLog(elements_last_line) z88_mesh_file.seek(0) # go back to the beginning of the file @@ -395,27 +396,27 @@ def read_z88_mesh( return {} for n in nodes: - FreeCAD.Console.PrintLog(str(n) + ' ' + str(nodes[n]) + '\n') + FreeCAD.Console.PrintLog(str(n) + " " + str(nodes[n]) + "\n") for e in elements_tria6: - FreeCAD.Console.PrintLog(str(e) + ' ' + str(elements_tria6[e]) + '\n') - FreeCAD.Console.PrintLog('\n') + FreeCAD.Console.PrintLog(str(e) + " " + str(elements_tria6[e]) + "\n") + FreeCAD.Console.PrintLog("\n") z88_mesh_file.close() return { - 'Nodes': nodes, - 'Seg2Elem': elements_seg2, - 'Seg3Elem': elements_seg3, - 'Tria3Elem': elements_tria3, - 'Tria6Elem': elements_tria6, - 'Quad4Elem': elements_quad4, - 'Quad8Elem': elements_quad8, - 'Tetra4Elem': elements_tetra4, - 'Tetra10Elem': elements_tetra10, - 'Hexa8Elem': elements_hexa8, - 'Hexa20Elem': elements_hexa20, - 'Penta6Elem': elements_penta6, - 'Penta15Elem': elements_penta15 + "Nodes": nodes, + "Seg2Elem": elements_seg2, + "Seg3Elem": elements_seg3, + "Tria3Elem": elements_tria3, + "Tria6Elem": elements_tria6, + "Quad4Elem": elements_quad4, + "Quad8Elem": elements_quad8, + "Tetra4Elem": elements_tetra4, + "Tetra10Elem": elements_tetra10, + "Hexa8Elem": elements_hexa8, + "Hexa20Elem": elements_hexa20, + "Penta6Elem": elements_penta6, + "Penta15Elem": elements_penta15 } @@ -424,8 +425,8 @@ def write( fem_mesh, filename ): - '''directly write a FemMesh to a Z88 mesh file format - fem_mesh: a FemMesh''' + """directly write a FemMesh to a Z88 mesh file format + fem_mesh: a FemMesh""" if not fem_mesh.isDerivedFrom("Fem::FemMesh"): FreeCAD.Console.PrintError("Not a FemMesh was given as parameter.\n") @@ -565,7 +566,7 @@ def get_z88_element_type( # in some cases lowest key in femelement_table is not [1] for elem in sorted(femelement_table): elem_length = len(femelement_table[elem]) - FreeCAD.Console.PrintLog('node count of first element: ' + str(elem_length) + '\n') + FreeCAD.Console.PrintLog("node count of first element: " + str(elem_length) + "\n") break # break after the first elem if FemMeshTools.is_solid_femmesh(femmesh): if femmesh.TetraCount == femmesh.VolumeCount: @@ -574,43 +575,43 @@ def get_z88_element_type( elif elem_length == 10: return 16 else: - FreeCAD.Console.PrintMessage('Tetra with neither 4 nor 10 nodes.\n') + FreeCAD.Console.PrintMessage("Tetra with neither 4 nor 10 nodes.\n") elif femmesh.HexaCount == femmesh.VolumeCount: if elem_length == 8: return 1 elif elem_length == 20: return 10 else: - FreeCAD.Console.PrintMessage('Hexa with neither 8 nor 20 nodes.\n') + FreeCAD.Console.PrintMessage("Hexa with neither 8 nor 20 nodes.\n") return 0 else: - FreeCAD.Console.PrintMessage('no tetra, no hexa or Mixed Volume Elements.\n') + FreeCAD.Console.PrintMessage("no tetra, no hexa or Mixed Volume Elements.\n") elif FemMeshTools.is_face_femmesh(femmesh): if femmesh.TriangleCount == femmesh.FaceCount: if elem_length == 3: - FreeCAD.Console.PrintMessage('tria3mesh, not supported by Z88.\n') + FreeCAD.Console.PrintMessage("tria3mesh, not supported by Z88.\n") return 0 elif elem_length == 6: return 24 else: - FreeCAD.Console.PrintMessage('Tria with neither 3 nor 6 nodes.\n') + FreeCAD.Console.PrintMessage("Tria with neither 3 nor 6 nodes.\n") return 0 elif femmesh.QuadrangleCount == femmesh.FaceCount: if elem_length == 4: - FreeCAD.Console.PrintMessage('quad4mesh, not supported by Z88.\n') + FreeCAD.Console.PrintMessage("quad4mesh, not supported by Z88.\n") return 0 elif elem_length == 8: return 23 else: - FreeCAD.Console.PrintMessage('Quad with neither 4 nor 8 nodes.\n') + FreeCAD.Console.PrintMessage("Quad with neither 4 nor 8 nodes.\n") return 0 else: - FreeCAD.Console.PrintMessage('no tria, no quad\n') + FreeCAD.Console.PrintMessage("no tria, no quad\n") return 0 elif FemMeshTools.is_edge_femmesh(femmesh): - FreeCAD.Console.PrintMessage('Edge femmesh will be exported as 3D truss element nr 4.\n') + FreeCAD.Console.PrintMessage("Edge femmesh will be exported as 3D truss element nr 4.\n") return 4 else: - FreeCAD.Console.PrintMessage('Neither edge nor face nor solid femmesh.\n') + FreeCAD.Console.PrintMessage("Neither edge nor face nor solid femmesh.\n") return 0 return 0 diff --git a/src/Mod/Fem/feminout/importZ88O2Results.py b/src/Mod/Fem/feminout/importZ88O2Results.py index 795e1cbe18..e1d9662b22 100644 --- a/src/Mod/Fem/feminout/importZ88O2Results.py +++ b/src/Mod/Fem/feminout/importZ88O2Results.py @@ -33,10 +33,10 @@ import os # ********* generic FreeCAD import and export methods ********* -if open.__module__ == '__builtin__': +if open.__module__ == "__builtin__": # because we'll redefine open below (Python2) pyopen = open -elif open.__module__ == 'io': +elif open.__module__ == "io": # because we'll redefine open below (Python3) pyopen = open @@ -68,42 +68,42 @@ def import_z88_disp( analysis=None, result_name_prefix=None ): - '''insert a FreeCAD FEM mechanical result object in the ActiveDocument + """insert a FreeCAD FEM mechanical result object in the ActiveDocument pure usage: import feminout.importZ88O2Results as importZ88O2Results - disp_file = '/pathtofile/z88o2.txt' + disp_file = "/pathtofile/z88o2.txt" importZ88O2Results.import_z88_disp(disp_file) the z888i1.txt FEMMesh file needs to be in the same directory as z88o2.txt # ahh, make a new document first ;-) - ''' + """ from . import importZ88Mesh from . import importToolsFem import ObjectsFem if result_name_prefix is None: - result_name_prefix = '' + result_name_prefix = "" disp_read = read_z88_disp(filename) result_mesh_object = None - if len(disp_read['Nodes']) > 0: + if len(disp_read["Nodes"]) > 0: if analysis: analysis_object = analysis # read result mesh - if filename.endswith('z88o2.txt'): - mesh_file = filename.replace('o2', 'i1') + if filename.endswith("z88o2.txt"): + mesh_file = filename.replace("o2", "i1") mesh_data = importZ88Mesh.read_z88_mesh(mesh_file) femmesh = importToolsFem.make_femmesh(mesh_data) result_mesh_object = ObjectsFem.makeMeshResult( FreeCAD.ActiveDocument, - 'Result_mesh' + "Result_mesh" ) result_mesh_object.FemMesh = femmesh else: - FreeCAD.Console.PrintError('Z88 mesh file z88i1.txt not found!') + FreeCAD.Console.PrintError("Z88 mesh file z88i1.txt not found!") # create result obj - for result_set in disp_read['Results']: - results_name = result_name_prefix + 'results' + for result_set in disp_read["Results"]: + results_name = result_name_prefix + "results" res_obj = ObjectsFem.makeResultMechanical(FreeCAD.ActiveDocument, results_name) res_obj.Mesh = result_mesh_object @@ -119,7 +119,7 @@ def import_z88_disp( else: FreeCAD.Console.PrintError( - 'Problem on Z88 result file import. No nodes found in Z88 result file.\n' + "Problem on Z88 result file import. No nodes found in Z88 result file.\n" ) return res_obj @@ -127,11 +127,11 @@ def import_z88_disp( def read_z88_disp( z88_disp_input ): - ''' + """ read a z88 disp file and extract the nodes and elements z88 Displacement output file is z88o2.txt works with Z88OS14 - ''' + """ nodes = {} mode_disp = {} mode_results = {} @@ -156,11 +156,11 @@ def read_z88_disp( mode_disp[node_no] = FreeCAD.Vector(mode_disp_x, mode_disp_y, mode_disp_z) nodes[node_no] = node_no - mode_results['disp'] = mode_disp + mode_results["disp"] = mode_disp results.append(mode_results) - for r in results[0]['disp']: - FreeCAD.Console.PrintLog("{} --> {}\n".format(r, results[0]['disp'][r])) + for r in results[0]["disp"]: + FreeCAD.Console.PrintLog("{} --> {}\n".format(r, results[0]["disp"][r])) z88_disp_file.close() - return {'Nodes': nodes, 'Results': results} + return {"Nodes": nodes, "Results": results} diff --git a/src/Mod/Fem/feminout/readFenicsXDMF.py b/src/Mod/Fem/feminout/readFenicsXDMF.py index 5dce89393d..3cc59311bb 100644 --- a/src/Mod/Fem/feminout/readFenicsXDMF.py +++ b/src/Mod/Fem/feminout/readFenicsXDMF.py @@ -36,16 +36,16 @@ def read_fenics_mesh_xdmf(xdmffilename): FreeCAD.Console.PrintMessage("Not operational, yet\n") return { - 'Nodes': {}, - 'Hexa8Elem': {}, - 'Penta6Elem': {}, - 'Tetra4Elem': {}, - 'Tetra10Elem': {}, - 'Penta15Elem': {}, - 'Hexa20Elem': {}, - 'Tria3Elem': {}, - 'Tria6Elem': {}, - 'Quad4Elem': {}, - 'Quad8Elem': {}, - 'Seg2Elem': {} + "Nodes": {}, + "Hexa8Elem": {}, + "Penta6Elem": {}, + "Tetra4Elem": {}, + "Tetra10Elem": {}, + "Penta15Elem": {}, + "Hexa20Elem": {}, + "Tria3Elem": {}, + "Tria6Elem": {}, + "Quad4Elem": {}, + "Quad8Elem": {}, + "Seg2Elem": {} } diff --git a/src/Mod/Fem/feminout/readFenicsXML.py b/src/Mod/Fem/feminout/readFenicsXML.py index 8df2264381..9afa651086 100644 --- a/src/Mod/Fem/feminout/readFenicsXML.py +++ b/src/Mod/Fem/feminout/readFenicsXML.py @@ -36,9 +36,9 @@ import itertools def read_fenics_mesh_xml(xmlfilename): - ''' + """ Returns element dictionary to be evaluated by make_femmesh later - ''' + """ Fenics_to_FreeCAD_dict = { "triangle": "tria3", @@ -49,10 +49,10 @@ def read_fenics_mesh_xml(xmlfilename): } def read_mesh_block(mesh_block): - ''' + """ Reading mesh block from XML file. The mesh block only contains cells and vertices. - ''' + """ dim = int(mesh_block.get("dim")) cell_type = mesh_block.get("celltype") @@ -63,12 +63,12 @@ def read_fenics_mesh_xml(xmlfilename): # every cell type contains a dict with key=dimension and value=number - cells_parts_dim = {'point': {0: 1}, - 'interval': {0: 2, 1: 1}, - 'triangle': {0: 3, 1: 3, 2: 1}, - 'tetrahedron': {0: 4, 1: 6, 2: 4, 3: 1}, - 'quadrilateral': {0: 4, 1: 4, 2: 1}, - 'hexahedron': {0: 8, 1: 12, 2: 6, 3: 1}} + cells_parts_dim = {"point": {0: 1}, + "interval": {0: 2, 1: 1}, + "triangle": {0: 3, 1: 3, 2: 1}, + "tetrahedron": {0: 4, 1: 6, 2: 4, 3: 1}, + "quadrilateral": {0: 4, 1: 4, 2: 1}, + "hexahedron": {0: 8, 1: 12, 2: 6, 3: 1}} find_vertices = mesh_block.find("vertices") find_cells = mesh_block.find("cells") @@ -85,7 +85,7 @@ def read_fenics_mesh_xml(xmlfilename): for vertex in find_vertices: ind = int(vertex.get("index")) - if vertex.tag.lower() == 'vertex': + if vertex.tag.lower() == "vertex": [node_x, node_y, node_z] = [ float(vertex.get(coord, 0.)) for coord in ["x", "y", "z"] ] @@ -126,15 +126,15 @@ def read_fenics_mesh_xml(xmlfilename): def generate_lower_dimensional_structures(nodes, cell_dict, cell_type, dim): def correct_volume_det(element_dict): - ''' + """ Checks whether the cell elements all have the same volume (<0?) sign (is necessary to avoid negative Jacobian errors). Works only with tet4 and tri3 elements at the moment - ''' + """ if dim == 3: - for (ind, tet) in list(element_dict['tetra4'].items()): + for (ind, tet) in list(element_dict["tetra4"].items()): v0 = nodes[tet[0]] v1 = nodes[tet[1]] v2 = nodes[tet[2]] @@ -143,17 +143,17 @@ def read_fenics_mesh_xml(xmlfilename): b = v2 - v0 c = v3 - v0 if a.dot(b.cross(c)) > 0: - element_dict['tetra4'][ind] = (tet[1], tet[0], tet[2], tet[3]) + element_dict["tetra4"][ind] = (tet[1], tet[0], tet[2], tet[3]) if dim == 2: nz = FreeCAD.Vector(0., 0., 1.) - for (ind, tria) in list(element_dict['tria3'].items()): + for (ind, tria) in list(element_dict["tria3"].items()): v0 = nodes[tria[0]] v1 = nodes[tria[1]] v2 = nodes[tria[2]] a = v1 - v0 b = v2 - v0 if nz.dot(a.cross(b)) < 0: - element_dict['tria3'][ind] = (tria[1], tria[0], tria[2]) + element_dict["tria3"][ind] = (tria[1], tria[0], tria[2]) element_dict = {} element_counter = {} @@ -176,16 +176,16 @@ def read_fenics_mesh_xml(xmlfilename): invdic[it] = key return invdic - num_vert_dict = {'interval': 2, - 'triangle': 3, - 'tetrahedron': 4, - 'hexahedron': 8, - 'quadrilateral': 4} - lower_dims_dict = {'interval': [], - 'triangle': ['interval'], - 'tetrahedron': ['triangle', 'interval'], - 'hexahedron': ['quadrilateral', 'interval'], - 'quadrilateral': ['interval']} + num_vert_dict = {"interval": 2, + "triangle": 3, + "tetrahedron": 4, + "hexahedron": 8, + "quadrilateral": 4} + lower_dims_dict = {"interval": [], + "triangle": ["interval"], + "tetrahedron": ["triangle", "interval"], + "hexahedron": ["quadrilateral", "interval"], + "quadrilateral": ["interval"]} # generate cell list from file # read vertex list from cells @@ -207,14 +207,14 @@ def read_fenics_mesh_xml(xmlfilename): # print("len & len counter", length_counter) for (key, val_dict) in list(element_dict.items()): # to ensure distinct indices for FreeCAD - # print('key: ', key) + # print("key: ", key) for (vkey, it) in list(val_dict.items()): val_dict[vkey] = it + length_counter # maintain distinct element numbers len_val_dict = len(val_dict) if len_val_dict > 0: length_counter += len_val_dict + 1 # only if preceding list is not empty - # print('len: ', len_val_dict) - # print('lencounter: ', length_counter) + # print("len: ", len_val_dict) + # print("lencounter: ", length_counter) # inverse of the dict (dict[key] = val -> dict[val] = key) element_dict[key] = invertdict(val_dict) @@ -251,17 +251,17 @@ def read_fenics_mesh_xml(xmlfilename): print("Internal mesh data found") return { - 'Nodes': nodes, - 'Seg2Elem': element_dict['seg2'], - 'Seg3Elem': {}, - 'Tria3Elem': element_dict['tria3'], - 'Tria6Elem': {}, - 'Quad4Elem': element_dict['quad4'], - 'Quad8Elem': {}, - 'Tetra4Elem': element_dict['tetra4'], - 'Tetra10Elem': {}, - 'Hexa8Elem': {}, - 'Hexa20Elem': {}, - 'Penta6Elem': {}, - 'Penta15Elem': {} + "Nodes": nodes, + "Seg2Elem": element_dict["seg2"], + "Seg3Elem": {}, + "Tria3Elem": element_dict["tria3"], + "Tria6Elem": {}, + "Quad4Elem": element_dict["quad4"], + "Quad8Elem": {}, + "Tetra4Elem": element_dict["tetra4"], + "Tetra10Elem": {}, + "Hexa8Elem": {}, + "Hexa20Elem": {}, + "Penta6Elem": {}, + "Penta15Elem": {} } diff --git a/src/Mod/Fem/feminout/writeFenicsXDMF.py b/src/Mod/Fem/feminout/writeFenicsXDMF.py index 88bb95e65e..528204f6f7 100644 --- a/src/Mod/Fem/feminout/writeFenicsXDMF.py +++ b/src/Mod/Fem/feminout/writeFenicsXDMF.py @@ -39,8 +39,8 @@ __url__ = "http://www.freecadweb.org" # \ingroup FEM # \brief FreeCAD Fenics Mesh XDMF writer for FEM workbench -ENCODING_ASCII = 'ASCII' -ENCODING_HDF5 = 'HDF5' +ENCODING_ASCII = "ASCII" +ENCODING_HDF5 = "HDF5" FreeCAD_Group_Dimensions = { "Vertex": 0, @@ -68,9 +68,9 @@ def numpy_array_to_str( ): res = "" dt = str(npa.dtype) - if 'int' in dt: + if "int" in dt: res = "\n".join([" ".join([("%d" % s) for s in a]) for a in npa.tolist()]) - elif 'float' in dt: + elif "float" in dt: res = "\n".join([" ".join([("%3.6f" % s) for s in a]) for a in npa.tolist()]) return res @@ -141,11 +141,11 @@ def write_fenics_mesh_codim_xdmf( element_types = get_FemMeshObjectElementTypes(fem_mesh_obj, remove_zero_element_entries=True) element_order = get_FemMeshObjectOrder(fem_mesh_obj) # we get all elements from mesh to decide which one to write by selection of codim - ''' + """ nodeindices = [( nodes_dict[ind] for ind in fem_mesh_obj.FemMesh.getElementNodes(fc_volume_ind) ) for (fen_ind, fc_volume_ind) in enumerate(fc_cells)] - ''' + """ writeout_element_dimension = mesh_dimension - codim (num_topo, name_topo, dim_topo) = (0, "", 0) @@ -314,14 +314,14 @@ def write_fenics_mesh_xdmf( gmshgroups = get_FemMeshObjectMeshGroups(fem_mesh_obj) if gmshgroups is not (): - print('found mesh groups') + print("found mesh groups") for g in gmshgroups: mesh_function_type = fem_mesh.getGroupElementType(g) mesh_function_codim = dim_cell - FreeCAD_Group_Dimensions[mesh_function_type] mesh_function_name = fem_mesh.getGroupName(g) - print('group id: %d (label: %s) with element type %s and codim %d' + print("group id: %d (label: %s) with element type %s and codim %d" % (g, mesh_function_name, mesh_function_type, mesh_function_codim)) mesh_function_grid = ET.SubElement(