diff --git a/applications/utilities/mesh/generation/blockMesh/blockPoints.C b/applications/utilities/mesh/generation/blockMesh/blockPoints.C index 0cb024215d..2fecb21bf5 100644 --- a/applications/utilities/mesh/generation/blockMesh/blockPoints.C +++ b/applications/utilities/mesh/generation/blockMesh/blockPoints.C @@ -41,23 +41,23 @@ namespace Foam void block::blockPoints() { // set local variables for mesh specification - label ni = blockDef_.n().x(); - label nj = blockDef_.n().y(); - label nk = blockDef_.n().z(); + const label ni = blockDef_.n().x(); + const label nj = blockDef_.n().y(); + const label nk = blockDef_.n().z(); - point start = blockDef_.points()[blockDef_.blockShape()[0]]; - point xEnd = blockDef_.points()[blockDef_.blockShape()[1]]; - point xyEnd = blockDef_.points()[blockDef_.blockShape()[2]]; - point yEnd = blockDef_.points()[blockDef_.blockShape()[3]]; + const point p000 = blockDef_.points()[blockDef_.blockShape()[0]]; + const point p100 = blockDef_.points()[blockDef_.blockShape()[1]]; + const point p110 = blockDef_.points()[blockDef_.blockShape()[2]]; + const point p010 = blockDef_.points()[blockDef_.blockShape()[3]]; - point zEnd = blockDef_.points()[blockDef_.blockShape()[4]]; - point xzEnd = blockDef_.points()[blockDef_.blockShape()[5]]; - point xyzEnd = blockDef_.points()[blockDef_.blockShape()[6]]; - point yzEnd = blockDef_.points()[blockDef_.blockShape()[7]]; + const point p001 = blockDef_.points()[blockDef_.blockShape()[4]]; + const point p101 = blockDef_.points()[blockDef_.blockShape()[5]]; + const point p111 = blockDef_.points()[blockDef_.blockShape()[6]]; + const point p011 = blockDef_.points()[blockDef_.blockShape()[7]]; - // set reference to the list of edge point and weighting factors - const List >& edgePoints = blockDef_.blockEdgePoints(); - const scalarListList& edgeWeights = blockDef_.blockEdgeWeights(); + // list of edge point and weighting factors + const List >& p = blockDef_.blockEdgePoints(); + const scalarListList& w = blockDef_.blockEdgeWeights(); // generate vertices @@ -69,193 +69,138 @@ void block::blockPoints() { label vertexNo = vtxLabel(i, j, k); - vector edgex1 = start*(1.0 - edgeWeights[0][i]) - + xEnd*edgeWeights[0][i]; + // points on edges + vector edgex1 = p000 + (p100 - p000)*w[0][i]; + vector edgex2 = p010 + (p110 - p010)*w[1][i]; + vector edgex3 = p011 + (p111 - p011)*w[2][i]; + vector edgex4 = p001 + (p101 - p001)*w[3][i]; - vector edgex2 = yEnd*(1.0 - edgeWeights[1][i]) - + xyEnd*edgeWeights[1][i]; + vector edgey1 = p000 + (p010 - p000)*w[4][j]; + vector edgey2 = p100 + (p110 - p100)*w[5][j]; + vector edgey3 = p101 + (p111 - p101)*w[6][j]; + vector edgey4 = p001 + (p011 - p001)*w[7][j]; - vector edgex3 = yzEnd*(1.0 - edgeWeights[2][i]) - + xyzEnd*edgeWeights[2][i]; - - vector edgex4 = zEnd*(1.0 - edgeWeights[3][i]) - + xzEnd*edgeWeights[3][i]; - - - - vector edgey1 = start*(1.0 - edgeWeights[4][j]) - + yEnd*edgeWeights[4][j]; - - vector edgey2 = xEnd*(1.0 - edgeWeights[5][j]) - + xyEnd*edgeWeights[5][j]; - - vector edgey3 = xzEnd*(1.0 - edgeWeights[6][j]) - + xyzEnd*edgeWeights[6][j]; - - vector edgey4 = zEnd*(1.0 - edgeWeights[7][j]) - + yzEnd*edgeWeights[7][j]; - - - - vector edgez1 = start*(1.0 - edgeWeights[8][k]) - + zEnd*edgeWeights[8][k]; - - vector edgez2 = xEnd*(1.0 - edgeWeights[9][k]) - + xzEnd*edgeWeights[9][k]; - - vector edgez3 = xyEnd*(1.0 - edgeWeights[10][k]) - + xyzEnd*edgeWeights[10][k]; - - vector edgez4 = yEnd*(1.0 - edgeWeights[11][k]) - + yzEnd*edgeWeights[11][k]; + vector edgez1 = p000 + (p001 - p000)*w[8][k]; + vector edgez2 = p100 + (p101 - p100)*w[9][k]; + vector edgez3 = p110 + (p111 - p110)*w[10][k]; + vector edgez4 = p010 + (p011 - p010)*w[11][k]; // calculate the importance factors for all edges // x - direction scalar impx1 = ( - (1.0 - edgeWeights[0][i]) - *(1.0 - edgeWeights[4][j]) - *(1.0 - edgeWeights[8][k]) - + edgeWeights[0][i] - *(1.0 - edgeWeights[5][j]) - *(1.0 - edgeWeights[9][k]) + (1.0 - w[0][i])*(1.0 - w[4][j])*(1.0 - w[8][k]) + + w[0][i]*(1.0 - w[5][j])*(1.0 - w[9][k]) ); scalar impx2 = ( - (1.0 - edgeWeights[1][i]) - *edgeWeights[4][j] - *(1.0 - edgeWeights[11][k]) - + edgeWeights[1][i] - *edgeWeights[5][j] - *(1.0 - edgeWeights[10][k]) + (1.0 - w[1][i])*w[4][j]*(1.0 - w[11][k]) + + w[1][i]*w[5][j]*(1.0 - w[10][k]) ); - scalar impx3 = - ( - (1.0 - edgeWeights[2][i]) - *edgeWeights[7][j] - *edgeWeights[11][k] - + edgeWeights[2][i] - *edgeWeights[6][j] - *edgeWeights[10][k] - ); + scalar impx3 = + ( + (1.0 - w[2][i])*w[7][j]*w[11][k] + + w[2][i]*w[6][j]*w[10][k] + ); - scalar impx4 = - ( - (1.0 - edgeWeights[3][i]) - *(1.0 - edgeWeights[7][j]) - *edgeWeights[8][k] - + edgeWeights[3][i] - *(1.0 - edgeWeights[6][j]) - *edgeWeights[9][k] - ); + scalar impx4 = + ( + (1.0 - w[3][i])*(1.0 - w[7][j])*w[8][k] + + w[3][i]*(1.0 - w[6][j])*w[9][k] + ); + scalar magImpx = impx1 + impx2 + impx3 + impx4; + impx1 /= magImpx; + impx2 /= magImpx; + impx3 /= magImpx; + impx4 /= magImpx; // y - direction scalar impy1 = ( - (1.0 - edgeWeights[4][j]) - *(1.0 - edgeWeights[0][i]) - *(1.0 - edgeWeights[8][k]) - + edgeWeights[4][j] - *(1.0 - edgeWeights[1][i]) - *(1.0 - edgeWeights[11][k]) + (1.0 - w[4][j])*(1.0 - w[0][i])*(1.0 - w[8][k]) + + w[4][j]*(1.0 - w[1][i])*(1.0 - w[11][k]) ); scalar impy2 = ( - (1.0 - edgeWeights[5][j]) - *edgeWeights[0][i] - *(1.0 - edgeWeights[9][k]) - + edgeWeights[5][j] - *edgeWeights[1][i] - *(1.0 - edgeWeights[10][k]) + (1.0 - w[5][j])*w[0][i]*(1.0 - w[9][k]) + + w[5][j]*w[1][i]*(1.0 - w[10][k]) ); scalar impy3 = ( - (1.0 - edgeWeights[6][j]) - *edgeWeights[3][i] - *edgeWeights[9][k] - + edgeWeights[6][j] - *edgeWeights[2][i] - *edgeWeights[10][k] + (1.0 - w[6][j])*w[3][i]*w[9][k] + + w[6][j]*w[2][i]*w[10][k] ); scalar impy4 = ( - (1.0 - edgeWeights[7][j]) - *(1.0 - edgeWeights[3][i]) - *edgeWeights[8][k] - + edgeWeights[7][j] - *(1.0 - edgeWeights[2][i]) - *edgeWeights[11][k] + (1.0 - w[7][j])*(1.0 - w[3][i])*w[8][k] + + w[7][j]*(1.0 - w[2][i])*w[11][k] ); + scalar magImpy = impy1 + impy2 + impy3 + impy4; + impy1 /= magImpy; + impy2 /= magImpy; + impy3 /= magImpy; + impy4 /= magImpy; // z - direction scalar impz1 = ( - (1.0 - edgeWeights[8][k]) - *(1.0 - edgeWeights[0][i]) - *(1.0 - edgeWeights[4][j]) - + edgeWeights[8][k] - *(1.0 - edgeWeights[3][i]) - *(1.0 - edgeWeights[7][j]) + (1.0 - w[8][k])*(1.0 - w[0][i])*(1.0 - w[4][j]) + + w[8][k]*(1.0 - w[3][i])*(1.0 - w[7][j]) ); scalar impz2 = ( - (1.0 - edgeWeights[9][k]) - *edgeWeights[0][i] - *(1.0 - edgeWeights[5][j]) - + edgeWeights[9][k] - *edgeWeights[3][i] - *(1.0 - edgeWeights[6][j]) + (1.0 - w[9][k])*w[0][i]*(1.0 - w[5][j]) + + w[9][k]*w[3][i]*(1.0 - w[6][j]) ); scalar impz3 = ( - (1.0 - edgeWeights[10][k]) - *edgeWeights[1][i] - *edgeWeights[5][j] - + edgeWeights[10][k] - *edgeWeights[2][i] - *edgeWeights[6][j] + (1.0 - w[10][k])*w[1][i]*w[5][j] + + w[10][k]*w[2][i]*w[6][j] ); scalar impz4 = ( - (1.0 - edgeWeights[11][k]) - *(1.0 - edgeWeights[1][i]) - *edgeWeights[4][j] - + edgeWeights[11][k] - *(1.0 - edgeWeights[2][i]) - *edgeWeights[7][j] + (1.0 - w[11][k])*(1.0 - w[1][i])*w[4][j] + + w[11][k]*(1.0 - w[2][i])*w[7][j] ); + scalar magImpz = impz1 + impz2 + impz3 + impz4; + impz1 /= magImpz; + impz2 /= magImpz; + impz3 /= magImpz; + impz4 /= magImpz; + // calculate the correction vectors - vector corx1 = impx1*(edgePoints[0][i] - edgex1); - vector corx2 = impx2*(edgePoints[1][i] - edgex2); - vector corx3 = impx3*(edgePoints[2][i] - edgex3); - vector corx4 = impx4*(edgePoints[3][i] - edgex4); + vector corx1 = impx1*(p[0][i] - edgex1); + vector corx2 = impx2*(p[1][i] - edgex2); + vector corx3 = impx3*(p[2][i] - edgex3); + vector corx4 = impx4*(p[3][i] - edgex4); - vector cory1 = impy1*(edgePoints[4][j] - edgey1); - vector cory2 = impy2*(edgePoints[5][j] - edgey2); - vector cory3 = impy3*(edgePoints[6][j] - edgey3); - vector cory4 = impy4*(edgePoints[7][j] - edgey4); + vector cory1 = impy1*(p[4][j] - edgey1); + vector cory2 = impy2*(p[5][j] - edgey2); + vector cory3 = impy3*(p[6][j] - edgey3); + vector cory4 = impy4*(p[7][j] - edgey4); - vector corz1 = impz1*(edgePoints[8][k] - edgez1); - vector corz2 = impz2*(edgePoints[9][k] - edgez2); - vector corz3 = impz3*(edgePoints[10][k] - edgez3); - vector corz4 = impz4*(edgePoints[11][k] - edgez4); + vector corz1 = impz1*(p[8][k] - edgez1); + vector corz2 = impz2*(p[9][k] - edgez2); + vector corz3 = impz3*(p[10][k] - edgez3); + vector corz4 = impz4*(p[11][k] - edgez4); // multiply by the importance factor + // x - direction edgex1 *= impx1; edgex2 *= impx2; @@ -285,7 +230,6 @@ void block::blockPoints() vertices_[vertexNo] += corx1 + corx2 + corx3 + corx4; vertices_[vertexNo] += cory1 + cory2 + cory3 + cory4; vertices_[vertexNo] += corz1 + corz2 + corz3 + corz4; - } } } diff --git a/applications/utilities/postProcessing/sampling/sample/sampleDict b/applications/utilities/postProcessing/sampling/sample/sampleDict index b3e489a176..db42299d1e 100644 --- a/applications/utilities/postProcessing/sampling/sample/sampleDict +++ b/applications/utilities/postProcessing/sampling/sample/sampleDict @@ -40,7 +40,7 @@ surfaceFormat vtk; // 1] vertex values determined from neighbouring cell-centre values // 2] face values determined using the current face interpolation scheme // for the field (linear, gamma, etc.) -interpolationScheme cellPointFace; +interpolationScheme cellPoint; // Fields to sample. fields @@ -155,21 +155,25 @@ surfaces // Optional: whether to leave as faces (=default) or triangulate } -/* not yet (re)implemented -- + interpolatedIso + { + // Iso surface for interpolated values only + type isoSurface; + isoField rho; + isoValue 0.5; + interpolate true; + //regularise false; //optional: do not simplify + } constantIso { - name iso; - field rho; - value 0.5; + // Iso surface for constant values. Guarantees triangles to not + // cross cells. + type isoSurfaceCell; + isoField rho; + isoValue 0.5; + interpolate false; + //regularise false; //optional: do not simplify } - someIso - { - type iso; - field rho; - value 0.5; - interpolate true; - } - */ ); diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C index 3506b05de7..2cd26f757e 100644 --- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C +++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C @@ -36,7 +36,7 @@ License using namespace Foam; // Does face use valid vertices? -bool validTri(const triSurface& surf, const label faceI) +bool validTri(const bool verbose, const triSurface& surf, const label faceI) { // Simple check on indices ok. @@ -49,20 +49,21 @@ bool validTri(const triSurface& surf, const label faceI) || (f[2] < 0) || (f[2] >= surf.points().size()) ) { - //WarningIn("validTri(const triSurface&, const label)") - // << "triangle " << faceI << " vertices " << f - // << " uses point indices outside point range 0.." - // << surf.points().size()-1 << endl; + WarningIn("validTri(const triSurface&, const label)") + << "triangle " << faceI << " vertices " << f + << " uses point indices outside point range 0.." + << surf.points().size()-1 << endl; return false; } if ((f[0] == f[1]) || (f[0] == f[2]) || (f[1] == f[2])) { - //WarningIn("validTri(const triSurface&, const label)") - // << "triangle " << faceI - // << " uses non-unique vertices " << f - // << endl; + WarningIn("validTri(const triSurface&, const label)") + << "triangle " << faceI + << " uses non-unique vertices " << f + << " coords:" << f.points(surf.points()) + << endl; return false; } @@ -91,11 +92,12 @@ bool validTri(const triSurface& surf, const label faceI) && ((f[2] == nbrF[0]) || (f[2] == nbrF[1]) || (f[2] == nbrF[2])) ) { - //WarningIn("validTri(const triSurface&, const label)") - // << "triangle " << faceI << " vertices " << f - // << " has the same vertices as triangle " << nbrFaceI - // << " vertices " << nbrF - // << endl; + WarningIn("validTri(const triSurface&, const label)") + << "triangle " << faceI << " vertices " << f + << " has the same vertices as triangle " << nbrFaceI + << " vertices " << nbrF + << " coords:" << f.points(surf.points()) + << endl; return false; } @@ -170,9 +172,11 @@ int main(int argc, char *argv[]) argList::validArgs.clear(); argList::validArgs.append("surface file"); argList::validOptions.insert("noSelfIntersection", ""); + argList::validOptions.insert("verbose", ""); argList args(argc, argv); bool checkSelfIntersection = !args.options().found("noSelfIntersection"); + bool verbose = args.options().found("verbose"); fileName surfFileName(args.additionalArgs()[0]); Pout<< "Reading surface from " << surfFileName << " ..." << nl << endl; @@ -232,7 +236,7 @@ int main(int argc, char *argv[]) forAll(surf, faceI) { - if (!validTri(surf, faceI)) + if (!validTri(verbose, surf, faceI)) { illegalFaces.append(faceI); } diff --git a/applications/utilities/surface/surfaceSubset/surfaceSubsetDict b/applications/utilities/surface/surfaceSubset/surfaceSubsetDict index 70879af6f4..83f5399b44 100644 --- a/applications/utilities/surface/surfaceSubset/surfaceSubsetDict +++ b/applications/utilities/surface/surfaceSubset/surfaceSubsetDict @@ -42,4 +42,7 @@ surface // Extend selection with edge neighbours addFaceNeighbours no; +// Invert selection +invertSelection false; + // ************************************************************************* // diff --git a/src/OpenFOAM/containers/Lists/SortableList/SortableList.C b/src/OpenFOAM/containers/Lists/SortableList/SortableList.C index 7ebfa9de9e..9eaf99c801 100644 --- a/src/OpenFOAM/containers/Lists/SortableList/SortableList.C +++ b/src/OpenFOAM/containers/Lists/SortableList/SortableList.C @@ -32,7 +32,7 @@ License // Construct from List template -Foam::SortableList::SortableList(const List& values) +Foam::SortableList::SortableList(const UList& values) : List(values), indices_(values.size()) diff --git a/src/OpenFOAM/containers/Lists/SortableList/SortableList.H b/src/OpenFOAM/containers/Lists/SortableList/SortableList.H index 1a5272e5b7..305da6e32e 100644 --- a/src/OpenFOAM/containers/Lists/SortableList/SortableList.H +++ b/src/OpenFOAM/containers/Lists/SortableList/SortableList.H @@ -88,7 +88,7 @@ public: //- Construct from List, sorting the elements. // Starts with indices set to index in argument - explicit SortableList(const List&); + explicit SortableList(const UList&); //- Construct from tranferred List, sorting the elements. // Starts with indices set to index in argument diff --git a/src/OpenFOAM/fields/Fields/Field/Field.C b/src/OpenFOAM/fields/Fields/Field/Field.C index 994f8ee630..c906bcbf55 100644 --- a/src/OpenFOAM/fields/Fields/Field/Field.C +++ b/src/OpenFOAM/fields/Fields/Field/Field.C @@ -575,20 +575,6 @@ void Field::replace } -template -void Field::transfer(Field& f) -{ - List::transfer(f); -} - - -template -void Field::transfer(List& lst) -{ - List::transfer(lst); -} - - template tmp > Field::T() const { diff --git a/src/OpenFOAM/fields/Fields/Field/Field.H b/src/OpenFOAM/fields/Fields/Field/Field.H index 8e168cb0ac..1b372925e3 100644 --- a/src/OpenFOAM/fields/Fields/Field/Field.H +++ b/src/OpenFOAM/fields/Fields/Field/Field.H @@ -297,12 +297,6 @@ public: //- Replace a component field of the field void replace(const direction, const cmptType&); - //- Transfer the contents of the argument Field into this Field - void transfer(Field&); - - //- Transfer the contents of the argument List into this Field - void transfer(List&); - //- Return the field transpose (only defined for second rank tensors) tmp > T() const; diff --git a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointFaces.C b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointFaces.C index dc8d865f59..b7a90375b7 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointFaces.C +++ b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointFaces.C @@ -38,6 +38,11 @@ const labelListList& primitiveMesh::pointFaces() const { if (!pfPtr_) { + if (debug) + { + Pout<< "primitiveMesh::pointFaces() : " + << "calculating pointFaces" << endl; + } // Invert faces() pfPtr_ = new labelListList(nPoints()); invertManyToMany(nPoints(), faces(), *pfPtr_); diff --git a/src/Pstream/mpi/IPread.C b/src/Pstream/mpi/IPread.C index 487749b24b..ac7c2e787a 100644 --- a/src/Pstream/mpi/IPread.C +++ b/src/Pstream/mpi/IPread.C @@ -193,15 +193,13 @@ void Foam::IPstream::waitRequests() { if (IPstream_outstandingRequests_.size() > 0) { - List status(IPstream_outstandingRequests_.size()); - if ( MPI_Waitall ( IPstream_outstandingRequests_.size(), IPstream_outstandingRequests_.begin(), - status.begin() + MPI_STATUSES_IGNORE ) ) { @@ -231,9 +229,7 @@ bool Foam::IPstream::finishedRequest(const label i) } int flag; - MPI_Status status; - - MPI_Test(&IPstream_outstandingRequests_[i], &flag, &status); + MPI_Test(&IPstream_outstandingRequests_[i], &flag, MPI_STATUS_IGNORE); return flag != 0; } diff --git a/src/Pstream/mpi/OPwrite.C b/src/Pstream/mpi/OPwrite.C index 86d9c998ab..d0cdcbd0bc 100644 --- a/src/Pstream/mpi/OPwrite.C +++ b/src/Pstream/mpi/OPwrite.C @@ -131,15 +131,13 @@ void Foam::OPstream::waitRequests() { if (OPstream_outstandingRequests_.size() > 0) { - List status(OPstream_outstandingRequests_.size()); - if ( MPI_Waitall ( OPstream_outstandingRequests_.size(), OPstream_outstandingRequests_.begin(), - status.begin() + MPI_STATUSES_IGNORE ) ) { @@ -169,9 +167,7 @@ bool Foam::OPstream::finishedRequest(const label i) } int flag; - MPI_Status status; - - MPI_Test(&OPstream_outstandingRequests_[i], &flag, &status); + MPI_Test(&OPstream_outstandingRequests_[i], &flag, MPI_STATUS_IGNORE); return flag != 0; } diff --git a/src/Pstream/mpi/Pstream.C b/src/Pstream/mpi/Pstream.C index a6361ab102..caa21b6dcc 100644 --- a/src/Pstream/mpi/Pstream.C +++ b/src/Pstream/mpi/Pstream.C @@ -157,8 +157,6 @@ void Foam::reduce(scalar& Value, const sumOp& bop) if (Pstream::nProcs() <= Pstream::nProcsSimpleSum) { - MPI_Status status; - if (Pstream::master()) { for @@ -180,7 +178,7 @@ void Foam::reduce(scalar& Value, const sumOp& bop) Pstream::procID(slave), Pstream::msgType(), MPI_COMM_WORLD, - &status + MPI_STATUS_IGNORE ) ) { @@ -260,7 +258,7 @@ void Foam::reduce(scalar& Value, const sumOp& bop) Pstream::procID(Pstream::masterNo()), Pstream::msgType(), MPI_COMM_WORLD, - &status + MPI_STATUS_IGNORE ) ) { @@ -279,8 +277,6 @@ void Foam::reduce(scalar& Value, const sumOp& bop) Value = sum; /* - MPI_Status status; - int myProcNo = Pstream::myProcNo(); int nProcs = Pstream::nProcs(); @@ -314,7 +310,7 @@ void Foam::reduce(scalar& Value, const sumOp& bop) Pstream::procID(childProcId), Pstream::msgType(), MPI_COMM_WORLD, - &status + MPI_STATUS_IGNORE ) ) { @@ -370,7 +366,7 @@ void Foam::reduce(scalar& Value, const sumOp& bop) Pstream::procID(parentId), Pstream::msgType(), MPI_COMM_WORLD, - &status + MPI_STATUS_IGNORE ) ) { diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.C index f117968fe1..4cfba30501 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.C @@ -2875,6 +2875,8 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement2 } // 2. Extend to 2:1. I don't understand yet why this is not done + // 2. Extend to 2:1. For non-cube cells the scalar distance does not work + // so make sure it at least provides 2:1. PackedList<1> refineCell(mesh_.nCells(), 0); forAll(allCellInfo, cellI) { @@ -2887,6 +2889,25 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement2 } faceConsistentRefinement(true, refineCell); + while (true) + { + label nChanged = faceConsistentRefinement(true, refineCell); + + reduce(nChanged, sumOp