Robustness improvement in donorBasedLayeredOverlapFringe

Looking at bounding box of the connected region to determine whether we are
going in the right direction.
This commit is contained in:
Vuko Vukcevic 2019-04-11 17:38:28 +02:00
parent 02f459fc91
commit bcdab3b784
2 changed files with 40 additions and 3 deletions

View file

@ -331,6 +331,10 @@ void Foam::donorBasedLayeredOverlapFringe::calcAddressing() const
const unallocLabelList& owner = mesh.faceOwner(); const unallocLabelList& owner = mesh.faceOwner();
const unallocLabelList& neighbour = mesh.faceNeighbour(); const unallocLabelList& neighbour = mesh.faceNeighbour();
// Get bounding box of this region for additional check when marking
// acceptors
const boundBox& bb = allRegions[regionID].globalBounds();
// Mark cells that are eligible to be acceptors (not donors) // Mark cells that are eligible to be acceptors (not donors)
boolList eligibleCells(mesh.nCells(), true); boolList eligibleCells(mesh.nCells(), true);
forAllConstIter (labelHashSet, donors, iter) forAllConstIter (labelHashSet, donors, iter)
@ -372,9 +376,14 @@ void Foam::donorBasedLayeredOverlapFringe::calcAddressing() const
if if
( (
faceCentreToRegionCentreDist // First, distance based criterium
- donorCentreToRegionCentreDist (
< distTol_ faceCentreToRegionCentreDist
- donorCentreToRegionCentreDist
< distTol_
)
// Second, bounding box based criterium
&& (bb.contains(faceCentre))
) )
{ {
// Face is closer to the centre point than cell: we // Face is closer to the centre point than cell: we
@ -681,6 +690,27 @@ Foam::donorBasedLayeredOverlapFringe::donorBasedLayeredOverlapFringe
<< "The number should be greater than 0." << "The number should be greater than 0."
<< abort(FatalError); << abort(FatalError);
} }
// Recommendation: use at least two layers in order to avoid going defining
// acceptors on the wrong side and filling in the whole region with holes
if (nLayers_ == 1)
{
WarningIn
(
"donorBasedLayeredOverlapFringe::"
"donorBasedLayeredOverlapFringe\n"
"(\n"
" const fvMesh& mesh,\n"
" const oversetRegion& region,\n"
" const dictionary& dict\n"
")"
) << "It is recommended to use at least 2 layers (nLayers = 2) in"
<< " order to avoid defining acceptor cells on the wrong side"
<< " of the region."
<< nl
<< "Be sure to check the fringe layer for this region."
<< endl;
}
} }

View file

@ -37,6 +37,13 @@ Description
each other (e.g. 10:1 cell ratio, where the finer cells are found on the each other (e.g. 10:1 cell ratio, where the finer cells are found on the
background mesh will probably be problematic to correctly set-up). background mesh will probably be problematic to correctly set-up).
Note: based on distance tolerance (see distTol_ member), specified number of
layers and the bounding box of the connected donor region, it is possible
that acceptors end also on the wrong side (from the region centre as opposed
to towards the region centre). I do all I can to prevent this by looking at
the bounding box and hinting that at least 2 layers should be used. Be sure
to check the overset assembly for this region using calcOverset utility.
Author Author
Vuko Vukcevic, Wikki Ltd. All rights reserved. Vuko Vukcevic, Wikki Ltd. All rights reserved.