def _calcValueInline(self, N, M, ids, orientations, volumes): val = self._array.copy() inline._runIterateElementInline( self.modIn + """ ITEM(val, i, vec) = 0.; int k; for (k = 0; k < M; k++) { int id = ITEM(ids, i, &k); ITEM(val, i, vec) += ITEM(orientations, i, &k) * ITEM(areaProj, id, vec) * ITEM(faceValues, id, NULL); } ITEM(val, i, vec) /= ITEM(volumes, i, NULL); ITEM(val, i, vec) = mod(ITEM(val, i, vec) * gridSpacing[vec[0]]) / gridSpacing[vec[0]]; """, val=val, ids=numerix.array(ids), orientations=numerix.array(orientations), volumes=numerix.array(volumes), areaProj=numerix.array(self.mesh._areaProjections), faceValues=numerix.array(self.var.arithmeticFaceValue), M=M, ni=N, gridSpacing=numerix.array(self.mesh._meshSpacing), shape=numerix.array(numerix.shape(val))) return self._makeValue(value=val)
def _calcValueIn(self, N, M, ids, orientations, volumes): val = self._getArray().copy() inline._runIterateElementInline(self.modIn + """ ITEM(val, i, vec) = 0.; int k; for (k = 0; k < M; k++) { int id = ITEM(ids, i, &k); ITEM(val, i, vec) += ITEM(orientations, i, &k) * ITEM(areaProj, id, vec) * ITEM(faceValues, id, NULL); } ITEM(val, i, vec) /= ITEM(volumes, i, NULL); ITEM(val, i, vec) = mod(ITEM(val, i, vec) * gridSpacing[vec[0]]) / gridSpacing[vec[0]]; """,val = val, ids = numerix.array(ids), orientations = numerix.array(orientations), volumes = numerix.array(volumes), areaProj = numerix.array(self.mesh._getAreaProjections()), faceValues = numerix.array(self.var.getArithmeticFaceValue()), M = M, ni = N, gridSpacing = numerix.array(self.mesh._getMeshSpacing()), shape=numerix.array(numerix.shape(val))) return self._makeValue(value = val)
def _calcValue_(self, alpha, id1, id2): val = self._array.copy() inline._runIterateElementInline(""" int ID1 = ITEM(id1, i, NULL); int ID2 = ITEM(id2, i, NULL); double cell1 = ITEM(var, ID1, vec); double cell2 = ITEM(var, ID2, vec); double cell1Xcell2 = cell1 * cell2; double tmp = ((cell2 - cell1) * ITEM(alpha, i, NULL) + cell1); if (tmp != 0 && cell1Xcell2 > 0.) { ITEM(val, i, vec) = cell1Xcell2 / tmp; } else { ITEM(val, i, vec) = 0.; } """, var=self.var.numericValue, val=val, alpha=alpha, id1=id1, id2=id2, shape=numerix.array( numerix.shape(val)), ni=self.mesh.numberOfFaces) return self._makeValue(value=val)
def _calcValueIn(self, N, M, ids, orientations, volumes): val = self._getArray().copy() inline._runIterateElementInline( """ ITEM(val, i, vec) = 0.; int k; for (k = 0; k < M; k++) { int id = ITEM(ids, i, &k); ITEM(val, i, vec) += ITEM(orientations, i, &k) * ITEM(areaProj, id, vec) * ITEM(faceValues, id, NULL); } ITEM(val, i, vec) /= ITEM(volumes, i, NULL); """, val=val, ids=numerix.array(numerix.MA.filled(ids, 0)), orientations=numerix.array(numerix.MA.filled(orientations, 0)), volumes=numerix.array(volumes), areaProj=numerix.array(self.mesh._getAreaProjections()), faceValues=numerix.array(self.var.getArithmeticFaceValue()), M=M, ni=N, shape=numerix.array(numerix.shape(val)), ) return self._makeValue(value=val)
def _calcValueInline(self): id1, id2 = self.mesh._adjacentCellIDs tangents1 = self.mesh._faceTangents1 tangents2 = self.mesh._faceTangents2 val = self._array.copy() faceNormals = self.mesh._orientedFaceNormals if numerix.MA.isMaskedArray(faceNormals): faceNormals = faceNormals.filled() inline._runIterateElementInline( """ int j; double t1grad1, t1grad2, t2grad1, t2grad2, N, N2; int ID1 = ITEM(id1, i, NULL); int ID2 = ITEM(id2, i, NULL); if ITEM(exteriorFaces, i, NULL) { N2 = ITEM(facevar, i, NULL); } else { N2 = ITEM(var, ID2, NULL); } N = (N2 - ITEM(var, ID1, NULL)) / ITEM(dAP, i, NULL); t1grad1 = t1grad2 = t2grad1 = t2grad2 = 0.; t1grad1 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID1, vec); t1grad2 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID2, vec); t2grad1 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID1, vec); t2grad2 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID2, vec); ITEM(val, i, vec) = ITEM(normals, i, vec) * N; ITEM(val, i, vec) += ITEM(tangents1, i, vec) * (t1grad1 + t1grad2) / 2.; ITEM(val, i, vec) += ITEM(tangents2, i, vec) * (t2grad1 + t2grad2) / 2.; """, tangents1=tangents1, tangents2=tangents2, cellGrad=self.var.grad.numericValue, normals=faceNormals, id1=id1, id2=id2, dAP=numerix.array(self.mesh._cellDistances), var=self.var.numericValue, facevar=self.var.faceValue.numericValue, exteriorFaces=self.mesh.exteriorFaces.numericValue, val=val, ni=tangents1.shape[1], shape=numerix.array(numerix.shape(tangents1))) return self._makeValue(value=val)
def _calcValueInline(self): id1, id2 = self.mesh._adjacentCellIDs tangents1 = self.mesh._faceTangents1 tangents2 = self.mesh._faceTangents2 val = self._array.copy() faceNormals = self.mesh._orientedFaceNormals if numerix.MA.isMaskedArray(faceNormals): faceNormals = faceNormals.filled() inline._runIterateElementInline(""" int j; double t1grad1, t1grad2, t2grad1, t2grad2, N, N2; int ID1 = ITEM(id1, i, NULL); int ID2 = ITEM(id2, i, NULL); if ITEM(exteriorFaces, i, NULL) { N2 = ITEM(facevar, i, NULL); } else { N2 = ITEM(var, ID2, NULL); } N = (N2 - ITEM(var, ID1, NULL)) / ITEM(dAP, i, NULL); t1grad1 = t1grad2 = t2grad1 = t2grad2 = 0.; t1grad1 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID1, vec); t1grad2 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID2, vec); t2grad1 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID1, vec); t2grad2 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID2, vec); ITEM(val, i, vec) = ITEM(normals, i, vec) * N; ITEM(val, i, vec) += ITEM(tangents1, i, vec) * (t1grad1 + t1grad2) / 2.; ITEM(val, i, vec) += ITEM(tangents2, i, vec) * (t2grad1 + t2grad2) / 2.; """, tangents1 = tangents1, tangents2 = tangents2, cellGrad = self.var.grad.numericValue, normals = faceNormals, id1 = id1, id2 = id2, dAP = numerix.array(self.mesh._cellDistances), var = self.var.numericValue, facevar = self.var.faceValue.numericValue, exteriorFaces = self.mesh.exteriorFaces.numericValue, val = val, ni = tangents1.shape[1], shape=numerix.array(numerix.shape(tangents1))) return self._makeValue(value = val)
def _calcValue_(self, alpha, id1, id2): val = self._array.copy() inline._runIterateElementInline(""" int ID1 = ITEM(id1, i, NULL); int ID2 = ITEM(id2, i, NULL); double cell1 = ITEM(var, ID1, vec); double cell2 = ITEM(var, ID2, vec); ITEM(val, i, vec) = (cell2 - cell1) * ITEM(alpha, i, NULL) + cell1; """, var = self.var.numericValue, val = val, alpha = alpha, id1 = id1, id2 = id2, shape=numerix.array(numerix.shape(val)), ni = self.mesh.numberOfFaces) return self._makeValue(value = val)
def _calcValue(self): id1, id2 = self.mesh._adjacentCellIDs tangents1 = self.mesh._faceTangents1 tangents2 = self.mesh._faceTangents2 val = self._array.copy() inline._runIterateElementInline( self.modIn + """ int j; double t1grad1, t1grad2, t2grad1, t2grad2, N; int ID1 = ITEM(id1, i, NULL); int ID2 = ITEM(id2, i, NULL); N = mod(ITEM(var, ID2, NULL) - ITEM(var, ID1, NULL)) / ITEM(dAP, i, NULL); t1grad1 = t1grad2 = t2grad1 = t2grad2 = 0.; t1grad1 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID1, vec); t1grad2 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID2, vec); t2grad1 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID1, vec); t2grad2 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID2, vec); ITEM(val, i, vec) = ITEM(normals, i, vec) * N; ITEM(val, i, vec) += ITEM(tangents1, i, vec) * (t1grad1 + t1grad2) / 2.; ITEM(val, i, vec) += ITEM(tangents2, i, vec) * (t2grad1 + t2grad2) / 2.; """, tangents1=tangents1, tangents2=tangents2, cellGrad=self.var.grad.numericValue, normals=numerix.array(self.mesh._orientedFaceNormals), id1=numerix.array(id1), id2=numerix.array(id2), dAP=numerix.array(self.mesh._cellDistances), var=self.var.numericValue, val=val, ni=tangents1.shape[1], shape=numerix.array(numerix.shape(val))) return self._makeValue(value=val)
def _calcValue(self): id1, id2 = self.mesh._adjacentCellIDs tangents1 = self.mesh._faceTangents1 tangents2 = self.mesh._faceTangents2 val = self._array.copy() inline._runIterateElementInline(self.modIn + """ int j; double t1grad1, t1grad2, t2grad1, t2grad2, N; int ID1 = ITEM(id1, i, NULL); int ID2 = ITEM(id2, i, NULL); N = mod(ITEM(var, ID2, NULL) - ITEM(var, ID1, NULL)) / ITEM(dAP, i, NULL); t1grad1 = t1grad2 = t2grad1 = t2grad2 = 0.; t1grad1 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID1, vec); t1grad2 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID2, vec); t2grad1 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID1, vec); t2grad2 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID2, vec); ITEM(val, i, vec) = ITEM(normals, i, vec) * N; ITEM(val, i, vec) += ITEM(tangents1, i, vec) * (t1grad1 + t1grad2) / 2.; ITEM(val, i, vec) += ITEM(tangents2, i, vec) * (t2grad1 + t2grad2) / 2.; """,tangents1 = tangents1, tangents2 = tangents2, cellGrad = self.var.grad.numericValue, normals = numerix.array(self.mesh._orientedFaceNormals), id1 = numerix.array(id1), id2 = numerix.array(id2), dAP = numerix.array(self.mesh._cellDistances), var = self.var.numericValue, val = val, ni = tangents1.shape[1], shape=numerix.array(numerix.shape(val))) return self._makeValue(value = val)
def _calcValueInline(self): id1, id2 = self.mesh._getAdjacentCellIDs() tangents1 = self.mesh._getFaceTangents1() tangents2 = self.mesh._getFaceTangents2() val = self._getArray().copy() inline._runIterateElementInline(""" int j; double t1grad1, t1grad2, t2grad1, t2grad2, N; int ID1 = ITEM(id1, i, NULL); int ID2 = ITEM(id2, i, NULL); N = (ITEM(var, ID2, NULL) - ITEM(var, ID1, NULL)) / ITEM(dAP, i, NULL); t1grad1 = t1grad2 = t2grad1 = t2grad2 = 0.; t1grad1 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID1, vec); t1grad2 += ITEM(tangents1, i, vec) * ITEM(cellGrad, ID2, vec); t2grad1 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID1, vec); t2grad2 += ITEM(tangents2, i, vec) * ITEM(cellGrad, ID2, vec); ITEM(val, i, vec) = ITEM(normals, i, vec) * N; ITEM(val, i, vec) += ITEM(tangents1, i, vec) * (t1grad1 + t1grad2) / 2.; ITEM(val, i, vec) += ITEM(tangents2, i, vec) * (t2grad1 + t2grad2) / 2.; """,tangents1 = tangents1, tangents2 = tangents2, cellGrad = self.var.getGrad().getNumericValue(), normals = self.mesh._getOrientedFaceNormals(), id1 = id1, id2 = id2, dAP = numerix.array(self.mesh._getCellDistances()), var = self.var.getNumericValue(), val = val, ni = tangents1.shape[1], shape=numerix.array(numerix.shape(tangents1))) return self._makeValue(value = val)
def _calcValueIn(self, alpha, id1, id2): val = self._getArray().copy() inline._runIterateElementInline(""" int ID1 = ITEM(id1, i, NULL); int ID2 = ITEM(id2, i, NULL); double cell1 = ITEM(var, ID1, vec); double cell2 = ITEM(var, ID2, vec); double cell1Xcell2 = cell1 * cell2; double tmp = ((cell2 - cell1) * ITEM(alpha, i, NULL) + cell1); if (tmp != 0 && cell1Xcell2 > 0.) { ITEM(val, i, vec) = cell1Xcell2 / tmp; } else { ITEM(val, i, vec) = 0.; } """, var = self.var.getNumericValue(), val = val, alpha = alpha, id1 = id1, id2 = id2, shape=numerix.array(numerix.shape(val)), ni = self.mesh._getNumberOfFaces()) return self._makeValue(value = val)