#folder_path=os.path.normpath(os.path.join(tests_folder,'39_H_discon\\FFEM_Complete')) #folder_path=os.path.normpath(os.path.join(tests_folder,'39_H_discon\\FFEM_Complete')) #folder_path=os.path.normpath(os.path.join(tests_folder,'34_Atuador_vert\\FFEM_3D_Acopla')) folder_path = os.path.normpath( os.path.join(tests_folder, '40_3D_Winding\\algo')) #folder_path=os.path.normpath(os.path.join(tests_folder,'40_3D_Winding\\normal')) setup_file = 'setup.txt' mesh_file = 'model.msh' #%% Pre processing file_names = File_names() results_folder = file_names.get_results_folder_name() setup_file_name = os.path.join(folder_path, setup_file) mesh_file_name = os.path.join(folder_path, mesh_file) results_path = os.path.join(folder_path, results_folder) pre_proc_data = get_preproc_data(mesh_file_name, setup_file_name) #%%Processing processing(folder_path, pre_proc_data) #%%Post processing #============================================================================== # Plot B #============================================================================== tags_plot = list() tags_plot = "all" #tags_plot=[10002] Create_B_vector_plot(pre_proc_data.MeshData, results_path, tags_plot) #==============================================================================
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")
for eachnode in elemNodes[i]: nodesBC[eachnode] = eachBC.Value return nodesBC #folder_path=os.path.normpath('E:/Anderson/Dropbox/BKP/10_UFSC/01_Doutorado/3_Codigos/FacetElement/tests/4_Rele_PM') #setup_file='setup.txt' #mesh_file='rele.msh' ## folder_path=os.path.normpath('E:/Anderson/Dropbox/BKP/10_UFSC/01_Doutorado/3_Codigos/FacetElement/tests/3_Rele') setup_file='setup.txt' mesh_file='rele.msh' #folder_path=os.path.normpath(r'E:\Anderson\Dropbox\BKP\10_UFSC\01_Doutorado\3_Codigos\FacetElement\tests\1_Elem_Tri') #setup_file='1Elem_tri.txt' #mesh_file='1Elem_tri.msh' #folder_path=os.path.normpath(r'E:\Anderson\Dropbox\BKP\10_UFSC\01_Doutorado\3_Codigos\FacetElement\tests\5_Rele_large_mesh_test') #setup_file='setup.txt' #mesh_file='rele.msh' setup_file_name=os.path.join(folder_path,setup_file) mesh_file_name =os.path.join(folder_path,mesh_file) file_names=File_names() #=============================================================================== # Pre Processing #=============================================================================== preProcData= get_preproc_data(mesh_file_name, setup_file_name) FEM_1order_Solver (preProcData)
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")