Example #1
0
#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)

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