def write_files(faces_list,results_path,faces_ID,complete_flux): #flux file_names=File_names() flux_results_file_name=file_names.flux_results_file_name() full_path=os.path.join(results_path,flux_results_file_name) write_numeric_file_numpy(full_path,complete_flux) #faces from to number_faces=len(faces_list) from_to=np.zeros((number_faces,2)) counter=0 for each_face in faces_list: from_to[counter,0]=each_face.elem_1 from_to[counter,1]=each_face.elem_2 counter+=1 from_to_file_name=file_names.faces_from_to_file_name() full_path=os.path.join(results_path,from_to_file_name) write_numeric_file_numpy(full_path,from_to) #faces ID faces_ID_file_name=file_names.get_faces_ID_file_name() full_path=os.path.join(results_path,faces_ID_file_name) write_numeric_data_file(full_path,faces_ID,"faces_ID",True)
def write_files(faces_list, results_path, faces_ID, complete_flux): #flux file_names = File_names() flux_results_file_name = file_names.flux_results_file_name() full_path = os.path.join(results_path, flux_results_file_name) write_numeric_file_numpy(full_path, complete_flux) #faces from to number_faces = len(faces_list) from_to = np.zeros((number_faces, 2)) counter = 0 for each_face in faces_list: from_to[counter, 0] = each_face.elem_1 from_to[counter, 1] = each_face.elem_2 counter += 1 from_to_file_name = file_names.faces_from_to_file_name() full_path = os.path.join(results_path, from_to_file_name) write_numeric_file_numpy(full_path, from_to) #faces ID faces_ID_file_name = file_names.get_faces_ID_file_name() full_path = os.path.join(results_path, faces_ID_file_name) write_numeric_data_file(full_path, faces_ID, "faces_ID", True)
def run_Biot_Savart(setupFileName,meshFileName,folder_path): ''' Runs the Biot-Savart method\n setupFileName: setup file name\n meshFileName: file name of the mesh\n folder_path: path of solution folder\n example:\n field_solution=Biot_Savart.run_Biot_Savart(setup_file_name,mesh_file_name,folder_path) ''' print("Running Biot-Savart law") #=============================================================================== # Pre Processing #=============================================================================== preProcData= get_preproc_data(meshFileName, setupFileName) integ_gauss_points_coordinates=Get_Gauss_points_list(preProcData,True,folder_path) #=============================================================================== # Initial data #=============================================================================== # Setup regions_excitation=preProcData.RegionExcitation #------------------------------------------------------------------------------ # Pre-processor mesh_data=preProcData.MeshData all_elem_nodes= mesh_data.ElemNodes nodes_coordenates=mesh_data.NodesCoordenates elem_tags=mesh_data.ElemTags elem_type=mesh_data.ElemType operations=Operations() global_nodes=list() counter=0 global_values=list() for each_elem in integ_gauss_points_coordinates: local=list() for each_point in each_elem: local.append(np.array([0,0,0])) global_values.append(local) for elem_counter, each_element in enumerate(all_elem_nodes): if elem_type[elem_counter]>1: I=0 for eachregion in regions_excitation: if eachregion.RegionNumber==elem_tags[elem_counter][0]: Js=eachregion.Value element_area=operations.get_area_element(elem_type[elem_counter],all_elem_nodes[elem_counter],nodes_coordenates) I=math.fabs(Js*element_area) break if I!=0: dl=np.array([0,0,Js/math.fabs(Js)]) #baricenter of the element with current density xbar=0 ybar=0 zbar=0 nodes=all_elem_nodes[elem_counter] for nodeCounter in range(0,len(nodes)): xbar=nodes_coordenates[nodes[nodeCounter]][0]+xbar ybar=nodes_coordenates[nodes[nodeCounter]][1]+ybar zbar=nodes_coordenates[nodes[nodeCounter]][2]+zbar num_nodes=len(nodes) baricenter_coordinates=np.array([xbar/num_nodes,ybar/num_nodes,zbar/num_nodes]) local=list() for elem_inner_counter, inner_elem_coodinates in enumerate(integ_gauss_points_coordinates): for node_counter,each_node in enumerate(inner_elem_coodinates): r= each_node-baricenter_coordinates abs_r=LA.norm(r) #============================================================================== # Biot_savart equation #============================================================================== H_field=I*(1.0/(2.0*math.pi))*np.cross(dl,r)/math.pow(abs_r,2) global_values[elem_inner_counter][node_counter]=global_values[elem_inner_counter][node_counter]+H_field #List containing all the integration points coordinates points_list=list() counter=0 for each_elem in integ_gauss_points_coordinates: local=list() local_nodes=list() for each_point in each_elem: local.append(counter) points_list.append(each_point) local_nodes.append(counter) counter+=1 global_nodes.append(local_nodes) # Folder results path file_names=File_names() results_folder=file_names.get_results_folder_name() results_path=os.path.join(folder_path,results_folder) #============================================================================== # Write file with the results integPOintResults=list() for each_element in global_values: for each in each_element: integPOintResults.append(each) counter=0 h_field_results_file_name=file_names.get_H_results_file_name() full_path=os.path.join(results_path,h_field_results_file_name) write_numeric_data_file(full_path,integPOintResults,"HResults",True) # Write file with the points numbering global_list=list() for eachw in global_nodes: local=list() for each in eachw: local.append(each) global_list.append(local) h_field_results_file_name=file_names.get_H_results_file_name() full_path=os.path.join(results_path,h_field_results_file_name) write_numeric_data_file(full_path,global_list,"Points",False) #============================================================================== # GMSH post processing Gmsh_file_name=file_names.get_H_Gmsh_pos_proc_file_name() path=os.path.join(results_path,Gmsh_file_name) Create_Vector_field(points_list,integPOintResults,path,"H vector")
counter=0 counter_face=0 for each in range(0,number_complete_flux): if not each in faces_ID_deleted_list: complete_flux[each,0]=flux[counter,0] counter+=1 else: faces_list.insert(each,faces_deleted_list[counter_face]) counter_face+=1 #%% Post-processing #write the results flux_results_file_name=file_names.flux_results_file_name() full_path=os.path.join(results_path,flux_results_file_name) write_numeric_data_file(full_path,complete_flux,"Flux",True) # GMSH post processing #W functions Gmsh_file_name=file_names.get_Gmsh_facet_functions_file_name() path=os.path.join(results_path,Gmsh_file_name) Create_Vector_field(xy_integ_points_list,W_integ_points_list,path,"W Shape funtions") tags_plot=list() tags_plot="all" #tags_plot.append(58) #tags_plot.append(59) #tags_plot.append(60) #Create_Vector_field(integ_nodes_coordinates_plot,integ_w_real_plot,path,"Shape functions") #Create_Vector_field(integ_nodes_coordinates_plot,elem_area_list,path,"Shape functions")
def run_permanent_magnets(preProcData, folder_path): print("Running permanent magnetic field solution") #=============================================================================== # Initial data #=============================================================================== #------------------------------------------------------------------------------ # Pre-processor mesh_data=preProcData.MeshData all_elem_nodes= mesh_data.ElemNodes elem_tags=mesh_data.ElemTags regions_material=preProcData.RegionMaterial materials_lib=get_materials_lib() elem_type=mesh_data.ElemType region_ID_list=list() counter=0 for elem_counter in range(0,len(all_elem_nodes)): if elem_type[elem_counter]>3: for each_region in regions_material: if each_region.RegionNumber==elem_tags[counter][0]: region_ID_list.append(each_region.MaterialName) counter+=1 integ_gauss_points_coordinates=Get_Gauss_points_list(preProcData,True,folder_path) global_Hc_list=list() for elem_counter, each_element in enumerate(region_ID_list): local_Hc=list() for integ_point in range(0,len(integ_gauss_points_coordinates[elem_counter])): local_Hc.append(materials_lib[each_element].Hc) global_Hc_list.append(local_Hc) Hc_points_list=list() for each_element in global_Hc_list: for each_point in each_element: Hc_points_list.append((each_point)) points_list=list() global_nodes=list() counter=0 for each_elem in integ_gauss_points_coordinates: local=list() for each_point in each_elem: local.append(counter) counter+=1 points_list.append(each_point) global_nodes.append(local) #============================================================================== # Folder results path file_names=File_names() results_folder=file_names.get_results_folder_name() folder_path=os.path.join(folder_path,results_folder) #============================================================================== # Write file with the results file_names=File_names() global_list=list() for eachw in Hc_points_list: global_list.append(eachw) h_field_results_file_name=file_names.get_H_results_file_name() full_path=os.path.join(folder_path,h_field_results_file_name) # print(global_list) write_numeric_data_file(full_path,global_list,"HResults",True) global_list=list() for eachw in global_nodes: local=list() for each in eachw: local.append(each) global_list.append(local) h_field_results_file_name=file_names.get_H_results_file_name() full_path=os.path.join(folder_path,h_field_results_file_name) write_numeric_data_file(full_path,global_list,"Points",False) #============================================================================== # GMSH post processing file_names=File_names() Gmsh_file_name=file_names.get_H_Gmsh_pos_proc_file_name() path=os.path.join(folder_path,Gmsh_file_name) global_coor=list() for each_element in integ_gauss_points_coordinates: for each_point in each_element: global_coor.append(each_point) Create_Vector_field(points_list,Hc_points_list,path,"H vector")
def run_Biot_Savart(setupFileName, meshFileName, folder_path): ''' Runs the Biot-Savart method\n setupFileName: setup file name\n meshFileName: file name of the mesh\n folder_path: path of solution folder\n example:\n field_solution=Biot_Savart.run_Biot_Savart(setup_file_name,mesh_file_name,folder_path) ''' print("Running Biot-Savart law") #=============================================================================== # Pre Processing #=============================================================================== preProcData = get_preproc_data(meshFileName, setupFileName) integ_gauss_points_coordinates = Get_Gauss_points_list( preProcData, True, folder_path) #=============================================================================== # Initial data #=============================================================================== # Setup regions_excitation = preProcData.RegionExcitation #------------------------------------------------------------------------------ # Pre-processor mesh_data = preProcData.MeshData all_elem_nodes = mesh_data.ElemNodes nodes_coordenates = mesh_data.NodesCoordenates elem_tags = mesh_data.ElemTags elem_type = mesh_data.ElemType operations = Operations() global_nodes = list() counter = 0 global_values = list() for each_elem in integ_gauss_points_coordinates: local = list() for each_point in each_elem: local.append(np.array([0, 0, 0])) global_values.append(local) for elem_counter, each_element in enumerate(all_elem_nodes): if elem_type[elem_counter] > 1: I = 0 for eachregion in regions_excitation: if eachregion.RegionNumber == elem_tags[elem_counter][0]: Js = eachregion.Value element_area = operations.get_area_element( elem_type[elem_counter], all_elem_nodes[elem_counter], nodes_coordenates) I = math.fabs(Js * element_area) break if I != 0: dl = np.array([0, 0, Js / math.fabs(Js)]) #baricenter of the element with current density xbar = 0 ybar = 0 zbar = 0 nodes = all_elem_nodes[elem_counter] for nodeCounter in range(0, len(nodes)): xbar = nodes_coordenates[nodes[nodeCounter]][0] + xbar ybar = nodes_coordenates[nodes[nodeCounter]][1] + ybar zbar = nodes_coordenates[nodes[nodeCounter]][2] + zbar num_nodes = len(nodes) baricenter_coordinates = np.array( [xbar / num_nodes, ybar / num_nodes, zbar / num_nodes]) local = list() for elem_inner_counter, inner_elem_coodinates in enumerate( integ_gauss_points_coordinates): for node_counter, each_node in enumerate( inner_elem_coodinates): r = each_node - baricenter_coordinates abs_r = LA.norm(r) #============================================================================== # Biot_savart equation #============================================================================== H_field = I * (1.0 / (2.0 * math.pi)) * np.cross( dl, r) / math.pow(abs_r, 2) global_values[elem_inner_counter][ node_counter] = global_values[elem_inner_counter][ node_counter] + H_field #List containing all the integration points coordinates points_list = list() counter = 0 for each_elem in integ_gauss_points_coordinates: local = list() local_nodes = list() for each_point in each_elem: local.append(counter) points_list.append(each_point) local_nodes.append(counter) counter += 1 global_nodes.append(local_nodes) # Folder results path file_names = File_names() results_folder = file_names.get_results_folder_name() results_path = os.path.join(folder_path, results_folder) #============================================================================== # Write file with the results integPOintResults = list() for each_element in global_values: for each in each_element: integPOintResults.append(each) counter = 0 h_field_results_file_name = file_names.get_H_results_file_name() full_path = os.path.join(results_path, h_field_results_file_name) write_numeric_data_file(full_path, integPOintResults, "HResults", True) # Write file with the points numbering global_list = list() for eachw in global_nodes: local = list() for each in eachw: local.append(each) global_list.append(local) h_field_results_file_name = file_names.get_H_results_file_name() full_path = os.path.join(results_path, h_field_results_file_name) write_numeric_data_file(full_path, global_list, "Points", False) #============================================================================== # GMSH post processing Gmsh_file_name = file_names.get_H_Gmsh_pos_proc_file_name() path = os.path.join(results_path, Gmsh_file_name) Create_Vector_field(points_list, integPOintResults, path, "H vector")