Beispiel #1
0
def create_annotation_vector_field(points,results,path):

	lines=list()
	number_points=len(results)
	for each in range(0,number_points):
		lines.append('Plugin(Annotate).Text= "'+str(results[each][0])+","+str(results[each][1])+","+str(0)+'";')
		lines.append('Plugin(Annotate).Font= "Helvetica";')
		lines.append('Plugin(Annotate).Align= "Left";')
		lines.append('Plugin(Annotate).X='+str(points[each][0])+';')
		lines.append('Plugin(Annotate).Y='+str(points[each][1])+';')
		lines.append('Plugin(Annotate).Z=0;')
		lines.append('Plugin(Annotate).ThreeD=1;')
		lines.append('Plugin(Annotate).FontSize=14;')
		lines.append('Plugin(Annotate).View=0;')
		lines.append('Plugin(Annotate).Run;')
	write_file(path+'.opt',lines,'',True)
Beispiel #2
0
def create_annotation_vector_field(points, results, path):

    lines = list()
    number_points = len(results)
    for each in range(0, number_points):
        lines.append('Plugin(Annotate).Text= "' + str(results[each][0]) + "," +
                     str(results[each][1]) + "," + str(0) + '";')
        lines.append('Plugin(Annotate).Font= "Helvetica";')
        lines.append('Plugin(Annotate).Align= "Left";')
        lines.append('Plugin(Annotate).X=' + str(points[each][0]) + ';')
        lines.append('Plugin(Annotate).Y=' + str(points[each][1]) + ';')
        lines.append('Plugin(Annotate).Z=0;')
        lines.append('Plugin(Annotate).ThreeD=1;')
        lines.append('Plugin(Annotate).FontSize=14;')
        lines.append('Plugin(Annotate).View=0;')
        lines.append('Plugin(Annotate).Run;')
    write_file(path + '.opt', lines, '', True)
Beispiel #3
0
def Create_Vector_field(points,results,path,plot_name):
	'''
	Creates the files to plot a vector field in Gmsh\n
	points: list of points - list[array([ x1,y1,z1]),...]
	results: list of results - list[array([ Vx1,Vy1,Vz1]),...]
	'''
	lines=list()
	lines.append('View "'+str(plot_name)+'" {')
	number_points=len(results)
	for each in range(0,number_points):
		try:
			str_line='VP('+str(points[each][0])+","+str(points[each][1])+","+str(points[each][2])+")"
			str_line=str_line+ '{'+str(results[each][0])+","+str(results[each][1])+","+str(results[each][2])+'};'
			lines.append(str_line)
		except:
			print(each)
	lines.append('// This defines a "time value" for each time step')
	lines.append('TIME{1};')
	lines.append('};')

	write_file(path,lines,'',True)
Beispiel #4
0
def Create_Vector_field(points, results, path, plot_name):
    '''
	Creates the files to plot a vector field in Gmsh\n
	points: list of points - list[array([ x1,y1,z1]),...]
	results: list of results - list[array([ Vx1,Vy1,Vz1]),...]
	'''
    lines = list()
    lines.append('View "' + str(plot_name) + '" {')
    number_points = len(results)
    for each in range(0, number_points):
        try:
            str_line = 'VP(' + str(points[each][0]) + "," + str(
                points[each][1]) + "," + str(points[each][2]) + ")"
            str_line = str_line + '{' + str(results[each][0]) + "," + str(
                results[each][1]) + "," + str(results[each][2]) + '};'
            lines.append(str_line)
        except:
            print(each)
    lines.append('// This defines a "time value" for each time step')
    lines.append('TIME{1};')
    lines.append('};')

    write_file(path, lines, '', True)
Beispiel #5
0
def FEM_1order_Solver (preProcData):
    print ('Solving...')
    timeStart=time.time()

#===============================================================================
# Initial data
#===============================================================================
    shapeFunctions=ShapeFuncions()
    gradN=shapeFunctions.grad_nod_tri_1order()
    mu0=4*np.pi*math.pow(10, -7)
    
#------------------------------------------------------------------------------
# Pre-processor
    meshData=preProcData.MeshData
    elemNodes= meshData.ElemNodes
    nodesCoordenates=meshData.NodesCoordenates
    elemTags=meshData.ElemTags
    elemType=meshData.ElemType
    n=len(nodesCoordenates)

#------------------------------------------------------------------------------
# Materials library
    materialProp=preProcData.MaterialProp
    
#------------------------------------------------------------------------------
# Setup
    regionMaterial=preProcData.RegionMaterial
    regionExcitation=preProcData.RegionExcitation
    boundary=preProcData.BC
    
#===============================================================================
#Integration points for Gauss method
#===============================================================================
    u=np.array([1.0/6.0,2.0/3.0,1.0/6.0])
    v=np.array([1.0/6.0,1.0/6.0,2.0/3.0])
    w=1.0/6.0;
    qtdNumInted=3
    Integdudv=0.5
    
#===============================================================================
# Global Matrix initialization
#===============================================================================
    MatGlobal_esq=np.zeros((n,n))
    MatGlobal_dir=np.zeros((n,1))


#===============================================================================
# Main loop over the elements
#===============================================================================
    for k in range (0,len(elemTags)):
        if elemType[k]==2:
    
#------------------------------------------------------------------------------
# Element material propriety
            prop=0
            elemMatProperties=0
            for eachRegion in regionMaterial:
                if eachRegion.RegionNumber==elemTags[k][0]:
                    materialName=eachRegion.MaterialName
                    elemMatProperties=materialProp[materialName].Permeability
                    break
            prop=1.0/(mu0*elemMatProperties)
#------------------------------------------------------------------------------
# Nodes coordinates
            nodes=[]
            nodes.append(elemNodes[k][0])
            nodes.append(elemNodes[k][1])
            nodes.append(elemNodes[k][2])
            
            coordJ=np.array([[nodesCoordenates[nodes[0]][0], nodesCoordenates[nodes[0]][1]],
                             [nodesCoordenates[nodes[1]][0], nodesCoordenates[nodes[1]][1]],
                             [nodesCoordenates[nodes[2]][0], nodesCoordenates[nodes[2]][1]]])

#------------------------------------------------------------------------------
# Jacobian
#            coordJ=coordJ.T
#            gradN=gradN.T
            operations=Operations()
            Jac=operations.get_jacobian_triangle(k,elemNodes,nodesCoordenates)
            invJac=np.linalg.inv(Jac)
            detJac=np.linalg.det(Jac)
            invJacGradN=invJac*gradN
    
#------------------------------------------------------------------------------
# Left side integral
            matLocal_esq=np.zeros((3,3))
            for pinteg in range(0,qtdNumInted):
                matLocal_esq=matLocal_esq+np.transpose(invJacGradN)*invJacGradN*detJac*Integdudv*w*prop
    
# Left side matrix assembling
            for im in range (0,3):
                for jm in range(0,3):
                    MatGlobal_esq[elemNodes[k][im],elemNodes[k][jm]]=MatGlobal_esq[elemNodes[k][im],elemNodes[k][jm]]+ matLocal_esq[im,jm]
    
#------------------------------------------------------------------------------
# Right side integral
            matLocal_dir=np.zeros((3,1))

# Get Js
            Js=0
            for eachregion in regionExcitation:
                if eachregion.RegionNumber==elemTags[k][0]:
                    Js=eachregion.Value
                    break
    
# Right side integral    
            for pinteg in range(0,qtdNumInted):
                uinteg=u[pinteg]
                vinteg=v[pinteg]
                N_prim=shapeFunctions.Nod_Tri_1order(uinteg, vinteg)
                matLocal_dir=matLocal_dir+detJac*Integdudv*w*Js*np.transpose(N_prim)
    
# Right side matrix assembling
            for im in range (0,3):
                MatGlobal_dir[elemNodes[k][im],0]=MatGlobal_dir[elemNodes[k][im],0]+matLocal_dir[im,0]
    
    
#===============================================================================
# Boundary conditions
#===============================================================================
# Get values
    nodesBC = GetBCs(elemNodes, elemTags, boundary)
                    
# Apply values
    for eachNodeBC in nodesBC:
        MatGlobal_esq[eachNodeBC,:]=np.zeros(n)
        MatGlobal_esq[eachNodeBC,eachNodeBC]=1.0
        MatGlobal_dir[eachNodeBC]=nodesBC[eachNodeBC]

#===============================================================================
# Linear system
#===============================================================================
    results=np.linalg.solve(MatGlobal_esq,MatGlobal_dir)

#===============================================================================
# Time control
#===============================================================================

    timeEnd=time.time()
    dtime=timeEnd-timeStart
    print ('Solved in '+ str(dtime)+'ms')
    
#===============================================================================
# Save the results
#===============================================================================
    write_file("resultsFile",results,'Results')