def _calcValue(self): ids = self.mesh.cellFaceIDs contributions = numerix.take(self.faceVariable, ids, axis=-1) s = (numerix.newaxis, ) * (len(contributions.shape) - 2) + (slice( 0, None, None), ) + (slice(0, None, None), ) faceContributions = contributions * self.mesh._cellToFaceOrientations[ s] #just changes sign temp = faceContributions.copy() maskedValues = np.vstack( ([not isinstance(xi, float) for xi in temp[0] ], [not isinstance(xi, float) for xi in temp[1] ], [not isinstance(xi, float) for xi in temp[2]], [not isinstance(xi, float) for xi in temp[3]])) faceAreas = np.take(self.mesh._faceAreas, ids) faceAreas = MA.masked_where(maskedValues, faceAreas) if (len(temp) > 1): temp = temp * faceAreas temp[2] = numerix.MA.filled(temp[2], temp[0]) temp[3] = numerix.MA.filled(temp[3], temp[1]) faceAreas[2] = numerix.MA.filled(faceAreas[2], faceAreas[0]) faceAreas[3] = numerix.MA.filled(faceAreas[3], faceAreas[1]) faceAreas[0] = (faceAreas[0] + faceAreas[2]) faceAreas[1] = (faceAreas[1] + faceAreas[3]) temp[0] = (temp[0] + temp[2]) / faceAreas[0] temp[1] = (temp[1] + temp[3]) / faceAreas[1] temp = numerix.vstack( (numerix.array(temp[0]), numerix.array(temp[1]))) return numerix.tensordot(numerix.ones(temp.shape[-2], 'd'), temp, (0, -2)) / self.mesh.cellVolumes
def _cellIDsToLocalColIDs(self, IDs): M = self.numberOfVariables N = len(IDs) return (numerix.vstack([IDs] * M) + numerix.indices( (M, N))[0] * self.mesh.numberOfCells).flatten()
def _cellIDsToGlobalIDs(IDs, M, L): N = len(IDs) return (numerix.vstack([IDs] * M) + numerix.indices( (M, N))[0] * L).flatten()
def _cellIDsToGlobalColIDs(self, IDs): N = len(IDs) M = self.numberOfVariables return (numerix.vstack([IDs] * M) + numerix.indices( (M, N))[0] * self.mesh.globalNumberOfCells).flatten()