From 01b785f23a6dceb90eff6f981a26e4cca1c6b8f9 Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 21 Dec 2017 13:12:22 +0000 Subject: [PATCH] ENH: 2:1 constraint --- .../polyTopoChange/hexRef8/hexRef8.C | 44 ++-- .../polyTopoChange/hexRef8/hexRef8.H | 22 +- .../meshRefinement/meshRefinement.H | 10 + .../meshRefinement/meshRefinementRefine.C | 102 +++++++- .../snappyHexMeshDriver/snappyRefineDriver.C | 242 ++---------------- 5 files changed, 176 insertions(+), 244 deletions(-) diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C index 74dcafca1d..79c7e7446a 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8/hexRef8.C @@ -1564,6 +1564,7 @@ void Foam::hexRef8::walkFaceFromMid Foam::label Foam::hexRef8::faceConsistentRefinement ( const bool maxSet, + const labelUList& cellLevel, bitSet& refineCell ) const { @@ -1573,10 +1574,10 @@ Foam::label Foam::hexRef8::faceConsistentRefinement for (label facei = 0; facei < mesh_.nInternalFaces(); facei++) { label own = mesh_.faceOwner()[facei]; - label nei = mesh_.faceNeighbour()[facei]; + label ownLevel = cellLevel[own] + refineCell.get(own); - label ownLevel = cellLevel_[own] + refineCell.get(own); - label neiLevel = cellLevel_[nei] + refineCell.get(nei); + label nei = mesh_.faceNeighbour()[facei]; + label neiLevel = cellLevel[nei] + refineCell.get(nei); if (ownLevel > (neiLevel+1)) { @@ -1613,7 +1614,7 @@ Foam::label Foam::hexRef8::faceConsistentRefinement { label own = mesh_.faceOwner()[i+mesh_.nInternalFaces()]; - neiLevel[i] = cellLevel_[own] + refineCell.get(own); + neiLevel[i] = cellLevel[own] + refineCell.get(own); } // Swap to neighbour @@ -1623,7 +1624,7 @@ Foam::label Foam::hexRef8::faceConsistentRefinement forAll(neiLevel, i) { label own = mesh_.faceOwner()[i+mesh_.nInternalFaces()]; - label ownLevel = cellLevel_[own] + refineCell.get(own); + label ownLevel = cellLevel[own] + refineCell.get(own); if (ownLevel > (neiLevel[i]+1)) { @@ -1650,6 +1651,7 @@ Foam::label Foam::hexRef8::faceConsistentRefinement // Debug: check if wanted refinement is compatible with 2:1 void Foam::hexRef8::checkWantedRefinementLevels ( + const labelUList& cellLevel, const labelList& cellsToRefine ) const { @@ -1658,10 +1660,10 @@ void Foam::hexRef8::checkWantedRefinementLevels for (label facei = 0; facei < mesh_.nInternalFaces(); facei++) { label own = mesh_.faceOwner()[facei]; - label nei = mesh_.faceNeighbour()[facei]; + label ownLevel = cellLevel[own] + refineCell.get(own); - label ownLevel = cellLevel_[own] + refineCell.get(own); - label neiLevel = cellLevel_[nei] + refineCell.get(nei); + label nei = mesh_.faceNeighbour()[facei]; + label neiLevel = cellLevel[nei] + refineCell.get(nei); if (mag(ownLevel-neiLevel) > 1) { @@ -1669,11 +1671,11 @@ void Foam::hexRef8::checkWantedRefinementLevels dumpCell(nei); FatalErrorInFunction << "cell:" << own - << " current level:" << cellLevel_[own] + << " current level:" << cellLevel[own] << " level after refinement:" << ownLevel << nl << "neighbour cell:" << nei - << " current level:" << cellLevel_[nei] + << " current level:" << cellLevel[nei] << " level after refinement:" << neiLevel << nl << "which does not satisfy 2:1 constraints anymore." @@ -1689,7 +1691,7 @@ void Foam::hexRef8::checkWantedRefinementLevels { label own = mesh_.faceOwner()[i+mesh_.nInternalFaces()]; - neiLevel[i] = cellLevel_[own] + refineCell.get(own); + neiLevel[i] = cellLevel[own] + refineCell.get(own); } // Swap to neighbour @@ -1701,7 +1703,7 @@ void Foam::hexRef8::checkWantedRefinementLevels label facei = i + mesh_.nInternalFaces(); label own = mesh_.faceOwner()[facei]; - label ownLevel = cellLevel_[own] + refineCell.get(own); + label ownLevel = cellLevel[own] + refineCell.get(own); if (mag(ownLevel - neiLevel[i]) > 1) { @@ -1715,7 +1717,7 @@ void Foam::hexRef8::checkWantedRefinementLevels << " on patch " << patchi << " " << mesh_.boundaryMesh()[patchi].name() << " owner cell " << own - << " current level:" << cellLevel_[own] + << " current level:" << cellLevel[own] << " level after refinement:" << ownLevel << nl << " (coupled) neighbour cell will get refinement " @@ -2251,6 +2253,7 @@ Foam::hexRef8::hexRef8 Foam::labelList Foam::hexRef8::consistentRefinement ( + const labelUList& cellLevel, const labelList& cellsToRefine, const bool maxSet ) const @@ -2264,7 +2267,12 @@ Foam::labelList Foam::hexRef8::consistentRefinement while (true) { - label nChanged = faceConsistentRefinement(maxSet, refineCell); + label nChanged = faceConsistentRefinement + ( + maxSet, + cellLevel, + refineCell + ); reduce(nChanged, sumOp