Example #1
0
    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
Example #2
0
 def _cellIDsToLocalColIDs(self, IDs):
     M = self.numberOfVariables
     N = len(IDs)
     return (numerix.vstack([IDs] * M) + numerix.indices(
         (M, N))[0] * self.mesh.numberOfCells).flatten()
Example #3
0
 def _cellIDsToGlobalIDs(IDs, M, L):
     N = len(IDs)
     return (numerix.vstack([IDs] * M) + numerix.indices(
         (M, N))[0] * L).flatten()
Example #4
0
 def _cellIDsToGlobalColIDs(self, IDs):
     N = len(IDs)
     M = self.numberOfVariables
     return (numerix.vstack([IDs] * M) + numerix.indices(
         (M, N))[0] * self.mesh.globalNumberOfCells).flatten()