def _calcFaceCellIDs(self): array = MA.array(MA.indices(self.cellFaceIDs.shape, 'l')[1], mask=MA.getmask(self.cellFaceIDs)) faceCellIDs = MA.zeros((2, self.numberOfFaces), 'l') ## Nasty bug: MA.put(arr, ids, values) fills its ids and ## values arguments when masked! This was not the behavior ## that was assumed when used below. It was only working ## because the old fill value was 0 and the first element of ## the array needed to be 0 since the cell's face was ## 0. numerix.put() has been changed to deal with this ## properly. ## MA.put(firstRow, cellFaceIDsFlat[::-1], array[::-1]) ## MA.put(secondRow, cellFaceIDsFlat, array) firstRow = faceCellIDs[0] secondRow = faceCellIDs[1] numerix.put(firstRow, self.cellFaceIDs[::-1, ::-1], array[::-1, ::-1]) numerix.put(secondRow, self.cellFaceIDs, array) mask = ((False, ) * self.numberOfFaces, (firstRow == secondRow)) return MA.sort(MA.array(faceCellIDs, mask=mask), axis=0)
def _calcFaceCellIDs(self): array = MA.array(MA.indices(self.cellFaceIDs.shape, 'l')[1], mask=MA.getmask(self.cellFaceIDs)) self.faceCellIDs = MA.zeros((2, self.numberOfFaces), 'l') ## Nasty bug: MA.put(arr, ids, values) fills its ids and ## values arguments when masked! This was not the behavior ## that was assumed when used below. It was only working ## because the old fill value was 0 and the first element of ## the array needed to be 0 since the cell's face was ## 0. numerix.put() has been changed to deal with this ## properly. ## MA.put(firstRow, cellFaceIDsFlat[::-1], array[::-1]) ## MA.put(secondRow, cellFaceIDsFlat, array) firstRow = self.faceCellIDs[0] secondRow = self.faceCellIDs[1] numerix.put(firstRow, self.cellFaceIDs[::-1,::-1], array[::-1,::-1]) numerix.put(secondRow, self.cellFaceIDs, array) mask = ((False,) * self.numberOfFaces, (firstRow == secondRow)) self.faceCellIDs = MA.sort(MA.array(self.faceCellIDs, mask = mask), axis=0)
def _cellToFaceOrientations(self): tmp = numerix.take(self.faceCellIDs[0], self.cellFaceIDs) return (tmp == MA.indices(tmp.shape)[-1]) * 2 - 1