// bool matchesPoint(double x, double y) { // return true; // } bool matchesPoints(FieldContainer<bool> &pointsMatch, BasisCachePtr basisCache) { const FieldContainer<double> *points = &(basisCache->getPhysicalCubaturePoints()); const FieldContainer<double> *normals = &(basisCache->getSideNormals()); int numCells = (*points).dimension(0); int numPoints = (*points).dimension(1); FieldContainer<double> beta_pts(numCells,numPoints,2); _beta->values(beta_pts,basisCache); double tol=1e-14; bool somePointMatches = false; for (int cellIndex=0; cellIndex<numCells; cellIndex++) { for (int ptIndex=0; ptIndex<numPoints; ptIndex++) { double n1 = (*normals)(cellIndex,ptIndex,0); double n2 = (*normals)(cellIndex,ptIndex,1); double beta_n = beta_pts(cellIndex,ptIndex,0)*n1 + beta_pts(cellIndex,ptIndex,1)*n2 ; // cout << "beta = (" << beta_pts(cellIndex,ptIndex,0)<<", "<< // beta_pts(cellIndex,ptIndex,1)<<"), n = ("<<n1<<", "<<n2<<")"<<endl; pointsMatch(cellIndex,ptIndex) = false; if (beta_n < 0) { pointsMatch(cellIndex,ptIndex) = true; somePointMatches = true; } } } return somePointMatches; }
void values(FieldContainer<double> &values, BasisCachePtr basisCache) { int numCells = values.dimension(0); int numPoints = values.dimension(1); FieldContainer<double> beta_pts(numCells,numPoints,2); _beta->values(beta_pts,basisCache); const FieldContainer<double> *points = &(basisCache->getPhysicalCubaturePoints()); double tol=1e-14; for (int cellIndex=0; cellIndex<numCells; cellIndex++) { for (int ptIndex=0; ptIndex<numPoints; ptIndex++) { double x = (*points)(cellIndex,ptIndex,0); double y = (*points)(cellIndex,ptIndex,1); double b1 = beta_pts(cellIndex,ptIndex,0); double b2 = beta_pts(cellIndex,ptIndex,1); double beta_norm =b1*b1 + b2*b2; values(cellIndex,ptIndex) = sqrt(beta_norm); } } }
void values(FieldContainer<double> &values, BasisCachePtr basisCache) { int numCells = values.dimension(0); int numPoints = values.dimension(1); FieldContainer<double> beta_pts(numCells,numPoints); _f->values(values,basisCache); for (int i = 0;i<numCells;i++){ for (int j = 0;j<numPoints;j++){ if (values(i,j)<0){ values(i,j) = 0.0; } } } }