def Activated(self): global fdtd_x global fdtd_y global Carte global fdtd_dx x_old = fdtd_x fdtd_x = 0 while fdtd_x==0: try: fdtd_x = float(str(QtGui.QInputDialog.getText(None, "Get text", "x, mm, (old=%f) = " % x_old)[0])) except: pass y_old = fdtd_y fdtd_y = 0 while fdtd_y==0: try: fdtd_y = float(str(QtGui.QInputDialog.getText(None, "Get text", "y, mm, (old=%f) = " % y_old)[0])) except: pass m = Fem.FemMesh() m.addNode(0,0,0) m.addNode(fdtd_x,0,0) m.addNode(fdtd_x,fdtd_y,0) m.addNode(0,fdtd_y,0) m.addVolume([1,2,3,4]) Fem.show(m) nx = int(fdtd_x/fdtd_dx) ny = int(fdtd_y/fdtd_dx) Carte = np.zeros(int(nx*ny), dtype=np.intc) fdtd_material_number = 0
def cleanmeshdoubles(femmesh): ''' find doubles nodes, double edges as they occur after gmsh (2d) unv import -by "checking for double interboundary edges" eleminate edges, nodes and rereference ''' #m=femmesh.FemMesh nodeP=femmesh.FemMesh.Nodes refnodes=[-1]*len(femmesh.FemMesh.Nodes) res=[] #res=[(-1,-1),(-1,-1),-1,-1] resvec=[] edgeE=femmesh.FemMesh.Edges for a1 in edgeE: if res!=[] and len(set([a1]) & set([i[3] for i in res]))!=0: print "double" continue a=femmesh.FemMesh.getElementNodes(a1) a2=femmesh.FemMesh.getNodeById(a[0]) a3=femmesh.FemMesh.getNodeById(a[1]) for a4 in set(femmesh.FemMesh.Edges)-set([a1]): a5=femmesh.FemMesh.getElementNodes(a4) a6=femmesh.FemMesh.getNodeById(a5[0]) a7=femmesh.FemMesh.getNodeById(a5[1]) if [a2,a3]==[a6,a7] or [a3,a2]==[a6,a7]: if a2==a6: doublenode1=a[0] doublenode2=a5[0] doublenode3=a[1] doublenode4=a5[1] else: doublenode1=a[1] doublenode2=a5[0] doublenode3=a[0] doublenode4=a5[1] print "first edge endpoints vectors:" + str(a2) + " " + str(a3)+"double nodes " + str(a) + " " + str(a5) +"first +double edge: " + str(a1) + " " + str(a4) +"\ndoublenodespair1by2: " + str(doublenode1) +" "+ str(doublenode2) +"\ndoublenodespair3by4: " + str(doublenode3) +" "+ str(doublenode4) res.append([a,a5,a1,a4]) resvec.append([[a2,a3]]) #eleminate double edges edgeE=set(edgeE)-set([a4]) #eleminate (hopefully) all double nodes and reference them if doublenode2 in nodeP: del nodeP[doublenode2] refnodes[doublenode2]=doublenode1 if doublenode4 in nodeP: del nodeP[doublenode4] refnodes[doublenode4]=doublenode3 #del nodeP[doublenode4] break #!1find and substitute double nodes in face element nodes facesE=[femmesh.FemMesh.getElementNodes(fac) for fac in list(edgeE.union(femmesh.FemMesh.Faces))] first_n_plain=[resi1 for resi in res for resi1 in resi[0]] double_n_plain=[resi1 for resi in res for resi1 in resi[1]] elenodes=[] for fac in range(len(facesE)): #print "h3" elen=list(set(facesE[fac]) & set(double_n_plain)) #print "h4" if len(elen)>0: #print "h4" factem=facesE[fac] #print "h4.2" for i2 in range(len(elen)): #print "h5" lfac=list(facesE[fac]) #print "h6 " +str(i2) + " " +str(elen) lfac[lfac.index(elen[i2])]=first_n_plain[double_n_plain.index(elen[i2])] #print "h7" facesE[fac]=tuple(lfac) print str(elen) +"mface i with 2 double node:" + str(fac) +"to be substituted by:" + str(first_n_plain[double_n_plain.index(elen[0])]) +" to " +str(facesE[fac])+" from " +str(factem) #elenodes.append(elen) #fac[fac.index(elen)]=first_n_plain[double_n_plain.index(elen)] # if len(elen)==1:print str(elen)+"mface with 1 double node:" + str(fac) #!rebuild mesh import FreeCAD, Fem m = Fem.FemMesh() for n in nodeP.keys(): #print str(n1) + " :" + str(n) n1=nodeP[n] #print str(n1) + " :" + str(n) m.addNode(n1.x, n1.y, n1.z, n) elemN=list(edgeE.union(femmesh.FemMesh.Faces)) for i in range(len(facesE)): #print str(facesE[i]) + "" + str(elemN[i]) #loose id's here if len(facesE[i])==3: m.addFace(facesE[i][0],facesE[i][1],facesE[i][2]) if len(facesE[i])==2: a=m.addEdge(facesE[i][0],facesE[i][1]) Fem.show(m) femmesh2=femmesh1.Document.Objects[len(femmesh1.Document.Objects)-1] return femmesh2