def __initializeTopology(self, P_arrays, ratio): """ Determine connectivities - mappings from surfaces to vertices and edges; from edges to groups Initialize order (k), # control points (m), and # points (n) for each edge Input P_arrays: list of doubles(nu,nv,3) Each element of the list is an nu x nv array of x-y-z coordinates """ self.nsurf = len(P_arrays) Ps = numpy.zeros((self.nsurf, 3, 3, 3), order='F') for k in range(self.nsurf): nu = P_arrays[k].shape[0] nv = P_arrays[k].shape[1] for i in range(2): for j in range(2): Ps[k, -i, -j] = P_arrays[k][-i, -j] for i in range(2): Ps[k, -i, 1] += 0.5 * P_arrays[k][-i, int(numpy.ceil((nv - 1) / 2.0))] Ps[k, -i, 1] += 0.5 * P_arrays[k][-i, int(numpy.floor((nv - 1) / 2.0))] for j in range(2): Ps[k, 1, -j] += 0.5 * P_arrays[k][int(numpy.ceil( (nu - 1) / 2.0)), -j] Ps[k, 1, -j] += 0.5 * P_arrays[k][int(numpy.floor( (nu - 1) / 2.0)), -j] self.nvert, self.nedge, self.surf_vert, self.surf_edge = PUBSlib.initializeconnectivities( self.nsurf, 1e-13, 1e-5, Ps) self.vert_count, self.edge_count = PUBSlib.initializevecounts( self.nsurf, self.nvert, self.nedge, self.surf_vert, self.surf_edge) self.ngroup, self.edge_group = PUBSlib.initializegroups( self.nsurf, self.nedge, self.surf_edge) self.surf_c1 = numpy.zeros((self.nsurf, 3, 3), bool, order='F') self.edge_c1 = numpy.zeros((self.nedge, 2), bool, order='F') ns = numpy.zeros((self.nsurf, 2), order='F') for k in range(self.nsurf): ns[k, :] = P_arrays[k].shape[0:2] k = 4 self.group_k, self.group_m, self.group_n = PUBSlib.initializekmn( k, self.nsurf, self.nedge, self.ngroup, ratio, ns, self.surf_edge, self.edge_group) if self.printInfo: print '# Surfaces =', self.nsurf print '# Vertices =', self.nvert print '# Edges =', self.nedge print '# Groups =', self.ngroup
def __initializeTopology(self, P_arrays, ratio): """ Determine connectivities - mappings from surfaces to vertices and edges; from edges to groups Initialize order (k), # control points (m), and # points (n) for each edge Input P_arrays: list of doubles(nu,nv,3) Each element of the list is an nu x nv array of x-y-z coordinates """ self.nsurf = len(P_arrays) Ps = numpy.zeros((self.nsurf,3,3,3),order='F') for k in range(self.nsurf): nu = P_arrays[k].shape[0] nv = P_arrays[k].shape[1] for i in range(2): for j in range(2): Ps[k,-i,-j] = P_arrays[k][-i,-j] for i in range(2): Ps[k,-i,1] += 0.5*P_arrays[k][-i,int(numpy.ceil((nv-1)/2.0))] Ps[k,-i,1] += 0.5*P_arrays[k][-i,int(numpy.floor((nv-1)/2.0))] for j in range(2): Ps[k,1,-j] += 0.5*P_arrays[k][int(numpy.ceil((nu-1)/2.0)),-j] Ps[k,1,-j] += 0.5*P_arrays[k][int(numpy.floor((nu-1)/2.0)),-j] self.nvert,self.nedge,self.surf_vert,self.surf_edge = PUBSlib.initializeconnectivities(self.nsurf,1e-13,1e-5,Ps) self.vert_count,self.edge_count = PUBSlib.initializevecounts(self.nsurf,self.nvert,self.nedge,self.surf_vert,self.surf_edge) self.ngroup,self.edge_group = PUBSlib.initializegroups(self.nsurf,self.nedge,self.surf_edge) self.surf_c1 = numpy.zeros((self.nsurf,3,3),bool,order='F') self.edge_c1 = numpy.zeros((self.nedge,2),bool,order='F') ns = numpy.zeros((self.nsurf,2),order='F') for k in range(self.nsurf): ns[k,:] = P_arrays[k].shape[0:2] k = 4 self.group_k, self.group_m, self.group_n = PUBSlib.initializekmn(k, self.nsurf, self.nedge, self.ngroup, ratio, ns, self.surf_edge, self.edge_group) if self.printInfo: print '# Surfaces =',self.nsurf print '# Vertices =',self.nvert print '# Edges =',self.nedge print '# Groups =',self.ngroup