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)
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)
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)
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)
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')