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)
Example #3
0
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")
Example #4
0
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")