void printMeshInfo(MeshTopologyPtr mesh) { unsigned spaceDim = mesh->getDimension(); unsigned vertexCount = mesh->getEntityCount(0); unsigned edgeCount = (spaceDim > 1) ? mesh->getEntityCount(1) : 0; unsigned faceCount = (spaceDim > 2) ? mesh->getEntityCount(2) : 0; if (vertexCount > 0) { cout << "Vertices:\n"; for (int vertexIndex=0; vertexIndex < vertexCount; vertexIndex++) { mesh->printEntityVertices(0, vertexIndex); } } if (edgeCount > 0) { cout << "Edges:\n"; for (int edgeIndex=0; edgeIndex < edgeCount; edgeIndex++) { cout << "Edge " << edgeIndex << ":\n"; mesh->printEntityVertices(1, edgeIndex); } } if (faceCount > 0) { cout << "Faces:\n"; for (int faceIndex=0; faceIndex < faceCount; faceIndex++) { cout << "Face " << faceIndex << ":\n"; mesh->printEntityVertices(2, faceIndex); } } }
bool checkConstraints( MeshTopologyPtr mesh, unsigned entityDim, map<unsigned,pair<IndexType,unsigned> > &expectedConstraints, string meshName = "mesh") { bool success = true; // check constraints for entities belonging to active cells set<IndexType> myActiveCells = mesh->getMyActiveCellIndices(); for (IndexType cellIndex : myActiveCells) { CellPtr cell = mesh->getCell(cellIndex); vector<unsigned> entitiesForCell = cell->getEntityIndices(entityDim); for (vector<unsigned>::iterator entityIt = entitiesForCell.begin(); entityIt != entitiesForCell.end(); entityIt++) { unsigned entityIndex = *entityIt; pair<IndexType,unsigned> constrainingEntity = mesh->getConstrainingEntity(entityDim, entityIndex); unsigned constrainingEntityIndex = constrainingEntity.first; unsigned constrainingEntityDim = constrainingEntity.second; if ((constrainingEntityIndex==entityIndex) && (constrainingEntityDim == entityDim)) { // then we should expect not to have an entry in expectedConstraints: if (expectedConstraints.find(entityIndex) != expectedConstraints.end()) { cout << "Expected entity constraint is not imposed in " << meshName << ".\n"; cout << "Expected " << typeString(entityDim) << " " << entityIndex << " to be constrained by "; cout << typeString(expectedConstraints[entityIndex].second) << " " << expectedConstraints[entityIndex].first << endl; cout << typeString(entityDim) << " " << entityIndex << " vertices:\n"; mesh->printEntityVertices(entityDim, entityIndex); cout << typeString(expectedConstraints[entityIndex].second) << " " << expectedConstraints[entityIndex].first << " vertices:\n"; mesh->printEntityVertices(entityDim, expectedConstraints[entityIndex].first); success = false; } } else { if (expectedConstraints.find(entityIndex) == expectedConstraints.end()) { cout << "Unexpected entity constraint is imposed in " << meshName << ".\n"; string entityType; if (entityDim==0) { entityType = "Vertex "; } else if (entityDim==1) { entityType = "Edge "; } else if (entityDim==2) { entityType = "Face "; } else if (entityDim==3) { entityType = "Volume "; } string constrainingEntityType; if (constrainingEntityDim==0) { constrainingEntityType = "Vertex "; } else if (constrainingEntityDim==1) { constrainingEntityType = "Edge "; } else if (constrainingEntityDim==2) { constrainingEntityType = "Face "; } else if (constrainingEntityDim==3) { constrainingEntityType = "Volume "; } cout << entityType << entityIndex << " unexpectedly constrained by " << constrainingEntityType << constrainingEntityIndex << endl; cout << entityType << entityIndex << " vertices:\n"; mesh->printEntityVertices(entityDim, entityIndex); cout << constrainingEntityType << constrainingEntityIndex << " vertices:\n"; mesh->printEntityVertices(constrainingEntityDim, constrainingEntityIndex); success = false; } else { unsigned expectedConstrainingEntity = expectedConstraints[entityIndex].first; if (expectedConstrainingEntity != constrainingEntityIndex) { cout << "The constraining entity is not the expected one in " << meshName << ".\n"; cout << "Expected " << typeString(entityDim) << " " << entityIndex << " to be constrained by "; cout << typeString(expectedConstraints[entityIndex].second) << " " << expectedConstrainingEntity; cout << "; was constrained by " << constrainingEntityIndex << endl; cout << typeString(entityDim) << " " << entityIndex << " vertices:\n"; mesh->printEntityVertices(entityDim, entityIndex); cout << typeString(expectedConstraints[entityIndex].second) << " " << expectedConstrainingEntity << " vertices:\n"; mesh->printEntityVertices(entityDim, expectedConstrainingEntity); cout << typeString(constrainingEntityDim) << " " << constrainingEntityIndex << " vertices:\n"; mesh->printEntityVertices(constrainingEntityDim, constrainingEntityIndex); success = false; } } } } } return success; }