def connectMesh(c1,c2,e,n=1,n1=None,n2=None): """Connect two meshes to form a hypermesh. c1,e and c2,e are 2 meshes with same topology. The coordinates are given in cooresponding order. The two meshes are connected by a higher order mesh with n elements in the direction between the two meshes. """ if c1.shape != c2.shape: raise ValueError,"Meshes are not compatible" # compact the element numbering scheme ne = unique1d(e) if ne[-1] >= ne.size: c1 = c1[ne] c2 = c2[ne] e = reverseUniqueIndex(ne)[e] # Create the interpolations of the coordinates x = Coords.interpolate(c1,c2,n).reshape(-1,3) nnod = c1.shape[0] nplex = e.shape[1] if n1 is None: n1 = range(nplex) if n2 is None: n2 = range(nplex) e1 = e[:,n1] e2 = e[:,n2] + nnod et = concatenate([e1,e2],axis=-1) e = concatenate([et+i*nnod for i in range(n)]) return x,e
def compact(self): """Renumber the mesh and remove unconnected nodes.""" nodes = unique1d(self.elems) if nodes[-1] >= nodes.size: self.coords = self.coords[nodes] self.elems = reverseUniqueIndex(nodes)[self.elems]