def VTKFaceDataSet(self): """Returns a TVTK `DataSet` representing the face centers of this mesh """ try: from tvtk.api import tvtk except ImportError as e: from enthought.tvtk.api import tvtk points = self.faceCenters points = self._toVTK3D(numerix.array(points)) ug = tvtk.UnstructuredGrid(points=points) num = len(points) counts = numerix.array([1] * num)[..., numerix.newaxis] cells = numerix.arange(self.numberOfFaces)[..., numerix.newaxis] cells = numerix.concatenate((counts, cells), axis=1) cell_types = numerix.array([tvtk.Vertex().cell_type]*num) cell_array = tvtk.CellArray() cell_array.set_cells(num, cells) counts = numerix.array([1] * num) offset = numerix.cumsum(counts+1) if len(offset) > 0: offset -= offset[0] ug.set_cells(cell_types, offset, cell_array) return ug
def getVTKCellDataSet(self): """Returns a TVTK `DataSet` representing the cells of this mesh """ cvi = self._getOrderedCellVertexIDs().swapaxes(0,1) from fipy.tools import numerix if type(cvi) is numerix.ma.masked_array: counts = cvi.count(axis=1)[:,None] cells = numerix.ma.concatenate((counts,cvi),axis=1).compressed() else: counts = numerix.array([cvi.shape[1]]*cvi.shape[0])[:,None] cells = numerix.concatenate((counts,cvi),axis=1).flatten() from enthought.tvtk.api import tvtk num = counts.shape[0] cps_type = self._getVTKCellType() cell_types = numerix.array([cps_type]*num) cell_array = tvtk.CellArray() cell_array.set_cells(num, cells) points = self.getVertexCoords() points = self._toVTK3D(points) ug = tvtk.UnstructuredGrid(points=points) offset = numerix.cumsum(counts[:,0]+1) if len(offset) > 0: offset -= offset[0] ug.set_cells(cell_types, offset, cell_array) return ug
def VTKCellDataSet(self): """Returns a TVTK `DataSet` representing the cells of this mesh """ cvi = self._orderedCellVertexIDs.swapaxes(0, 1) from fipy.tools import numerix if isinstance(cvi, numerix.ma.masked_array): counts = cvi.count(axis=1)[:, None] cells = numerix.ma.concatenate((counts, cvi), axis=1).compressed() else: counts = numerix.array([cvi.shape[1]]*cvi.shape[0])[:, None] cells = numerix.concatenate((counts, cvi), axis=1).flatten() try: from tvtk.api import tvtk except ImportError as e: from enthought.tvtk.api import tvtk num = counts.shape[0] cps_type = self._VTKCellType cell_types = numerix.array([cps_type]*num) cell_array = tvtk.CellArray() cell_array.set_cells(num, cells) points = self.vertexCoords points = self._toVTK3D(points) ug = tvtk.UnstructuredGrid(points=points) offset = numerix.cumsum(counts[:, 0]+1) if len(offset) > 0: offset -= offset[0] ug.set_cells(cell_types, offset, cell_array) return ug
def _scipy_csr(self): """Return the PETSc-ordered CSR matrix """ from scipy import sparse mpi4pycomm = self.matrix.comm.tompi4py() self.matrix.assemblyBegin() self.matrix.assemblyEnd() indptr, indices, data = self.matrix.getValuesCSR() # getValuesCSR() returns entries local to node # with node-relative indptr. # sparse.csr_matrix() requires all elements for construction # and global indptr offset = numerix.cumsum([0] + mpi4pycomm.allgather(len(data))) offset = mpi4pycomm.scatter(offset[:-1]) indices = numerix.concatenate(mpi4pycomm.allgather(indices)) data = numerix.concatenate(mpi4pycomm.allgather(data)) # strip local end markers and append global end marker indptr = mpi4pycomm.allgather(indptr[:-1] + offset) + [[len(data)]] indptr = numerix.concatenate(indptr) (rows, globalRows), (cols, globalCols) = self.matrix.getSizes() return sparse.csr_matrix((data, indices, indptr), shape=(globalRows, globalCols))
def CSR(self): """The Compact Sparse Row description of the local matrix Returns ------- ptrs : array_like of int Locations in `cols` and `data` vectors that start a row, terminated with len(data) + 1 cols : array_like of int Sequence of non-sparse column indices. data : array_like of float Sequence of non-sparse values. Examples -------- >>> L = _PysparseMatrixFromShape(rows=3, cols=3, bandwidth=3) >>> L.put([3.,10.,numerix.pi,2.5], [0,0,1,2], [2,1,1,0]) >>> L.addAt([1.73,2.2,8.4,3.9,1.23], [1,2,0,0,1], [2,2,0,0,2]) >>> ptrs, cols, data = L.CSR >>> print(numerix.asarray(ptrs)) [0 3 5 7] >>> print(numerix.asarray(cols)) [0 1 2 1 2 0 2] >>> print(numerix.asarray(data)) [ 12.3 10. 3. 3.14159265 2.96 2.5 2.2 ] """ rows, lildata = self.LIL ptrs = [0] + [len(row) for row in rows if row] ptrs = list(numerix.cumsum(ptrs)) cols = [col for row in rows for col in row] data = [datum for row in lildata for datum in row] return ptrs, cols, data
try: from tvtk.api import tvtk except ImportError, e: from enthought.tvtk.api import tvtk num = counts.shape[0] cps_type = self._getVTKCellType() cell_types = numerix.array([cps_type]*num) cell_array = tvtk.CellArray() cell_array.set_cells(num, cells) points = self.getVertexCoords() points = self._toVTK3D(points) ug = tvtk.UnstructuredGrid(points=points) offset = numerix.cumsum(counts[:,0]+1) if len(offset) > 0: offset -= offset[0] ug.set_cells(cell_types, offset, cell_array) return ug def getVTKFaceDataSet(self): """Returns a TVTK `DataSet` representing the face centers of this mesh """ try: from tvtk.api import tvtk except ImportError, e: from enthought.tvtk.api import tvtk points = self.getFaceCenters()
try: from tvtk.api import tvtk except ImportError, e: from enthought.tvtk.api import tvtk num = counts.shape[0] cps_type = self._VTKCellType cell_types = numerix.array([cps_type] * num) cell_array = tvtk.CellArray() cell_array.set_cells(num, cells) points = self.vertexCoords points = self._toVTK3D(points) ug = tvtk.UnstructuredGrid(points=points) offset = numerix.cumsum(counts[:, 0] + 1) if len(offset) > 0: offset -= offset[0] ug.set_cells(cell_types, offset, cell_array) return ug @property def VTKFaceDataSet(self): """Returns a TVTK `DataSet` representing the face centers of this mesh """ try: from tvtk.api import tvtk except ImportError, e: from enthought.tvtk.api import tvtk