def validate( self, required = None, other = None ): required_left_over, required_missing \ = self._validate_helper( required, other ) other_left_over, other_missing \ = self._validate_helper( other, required ) assert_( required_left_over == other_left_over ) if other_left_over and self.verbose: output( 'left over:', other_left_over ) if required_missing: raise ValueError('required missing: %s' % required_missing) return other_missing
def validate( self, required = None, other = None ): required_left_over, required_missing \ = self._validate_helper( required, other ) other_left_over, other_missing \ = self._validate_helper( other, required ) assert_( required_left_over == other_left_over ) err = False if required_missing: err = True output( 'error: required missing:', required_missing ) if other_left_over: output( 'left over:', other_left_over ) if err: raise ValueError return other_missing
def explode_groups(self, eps, return_emap=False): """ Explode the mesh element groups by `eps`, i.e. split group interface nodes and shrink each group towards its centre by `eps`. Parameters ---------- eps : float in `[0.0, 1.0]` The group shrinking factor. return_emap : bool, optional If True, also return the mapping against original mesh coordinates that result in the exploded mesh coordinates. The mapping can be used to map mesh vertex data to the exploded mesh vertices. Returns ------- mesh : Mesh The new mesh with exploded groups. emap : spmatrix, optional The maping for exploding vertex values. Only provided if `return_emap` is True. """ assert_(0.0 <= eps <= 1.0) remap = nm.empty((self.n_nod, ), dtype=nm.int32) offset = 0 if return_emap: rows, cols = [], [] coors = [] ngroups = [] conns = [] mat_ids = [] descs = [] for ig, conn in enumerate(self.conns): nodes = nm.unique(conn) group_coors = self.coors[nodes] n_nod = group_coors.shape[0] centre = group_coors.sum(axis=0) / float(n_nod) vectors = group_coors - centre[None, :] new_coors = centre + (vectors * eps) remap[nodes] = nm.arange(n_nod, dtype=nm.int32) + offset new_conn = remap[conn] coors.append(new_coors) ngroups.append(self.ngroups[nodes]) conns.append(new_conn) mat_ids.append(self.mat_ids[ig]) descs.append(self.descs[ig]) offset += n_nod if return_emap: cols.append(nodes) rows.append(remap[nodes]) coors = nm.concatenate(coors, axis=0) ngroups = nm.concatenate(ngroups, axis=0) mesh = Mesh.from_data('exploded_' + self.name, coors, ngroups, conns, mat_ids, descs) if return_emap: rows = nm.concatenate(rows) cols = nm.concatenate(cols) data = nm.ones(rows.shape[0], dtype=nm.float64) emap = sp.coo_matrix((data, (rows, cols)), shape=(mesh.n_nod, self.n_nod)) return mesh, emap else: return mesh
def explode_groups(self, eps, return_emap=False): """ Explode the mesh element groups by `eps`, i.e. split group interface nodes and shrink each group towards its centre by `eps`. Parameters ---------- eps : float in `[0.0, 1.0]` The group shrinking factor. return_emap : bool, optional If True, also return the mapping against original mesh coordinates that result in the exploded mesh coordinates. The mapping can be used to map mesh vertex data to the exploded mesh vertices. Returns ------- mesh : Mesh The new mesh with exploded groups. emap : spmatrix, optional The maping for exploding vertex values. Only provided if `return_emap` is True. """ assert_(0.0 <= eps <= 1.0) remap = nm.empty((self.n_nod,), dtype=nm.int32) offset = 0 if return_emap: rows, cols = [], [] coors = [] ngroups = [] conns = [] mat_ids = [] descs = [] for ig, conn in enumerate(self.conns): nodes = nm.unique(conn) group_coors = self.coors[nodes] n_nod = group_coors.shape[0] centre = group_coors.sum(axis=0) / float(n_nod) vectors = group_coors - centre[None, :] new_coors = centre + (vectors * eps) remap[nodes] = nm.arange(n_nod, dtype=nm.int32) + offset new_conn = remap[conn] coors.append(new_coors) ngroups.append(self.ngroups[nodes]) conns.append(new_conn) mat_ids.append(self.mat_ids[ig]) descs.append(self.descs[ig]) offset += n_nod if return_emap: cols.append(nodes) rows.append(remap[nodes]) coors = nm.concatenate(coors, axis=0) ngroups = nm.concatenate(ngroups, axis=0) mesh = Mesh.from_data('exploded_' + self.name, coors, ngroups, conns, mat_ids, descs) if return_emap: rows = nm.concatenate(rows) cols = nm.concatenate(cols) data = nm.ones(rows.shape[0], dtype=nm.float64) emap = sp.coo_matrix((data, (rows, cols)), shape=(mesh.n_nod, self.n_nod)) return mesh, emap else: return mesh