mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
BUG: decompositionMethod: enforce explicitConnections to be on same proc
This commit is contained in:
@ -884,6 +884,51 @@ Foam::labelList Foam::decompositionMethod::decompose
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Implement the explicitConnections since above decompose
|
||||||
|
// does not know about them
|
||||||
|
forAll(explicitConnections, i)
|
||||||
|
{
|
||||||
|
const labelPair& baffle = explicitConnections[i];
|
||||||
|
label f0 = baffle.first();
|
||||||
|
label f1 = baffle.second();
|
||||||
|
|
||||||
|
if (!blockedFace[f0] && !blockedFace[f1])
|
||||||
|
{
|
||||||
|
// Note: what if internal faces and owner and neighbour on
|
||||||
|
// different processor? So for now just push owner side
|
||||||
|
// proc
|
||||||
|
|
||||||
|
const label procI = finalDecomp[mesh.faceOwner()[f0]];
|
||||||
|
|
||||||
|
finalDecomp[mesh.faceOwner()[f1]] = procI;
|
||||||
|
if (mesh.isInternalFace(f1))
|
||||||
|
{
|
||||||
|
finalDecomp[mesh.faceNeighbour()[f1]] = procI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (blockedFace[f0] != blockedFace[f1])
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList decompose\n"
|
||||||
|
"(\n"
|
||||||
|
" const polyMesh&,\n"
|
||||||
|
" const scalarField&,\n"
|
||||||
|
" const boolList&,\n"
|
||||||
|
" const PtrList<labelList>&,\n"
|
||||||
|
" const labelList&,\n"
|
||||||
|
" const List<labelPair>&\n"
|
||||||
|
")"
|
||||||
|
) << "On explicit connection between faces " << f0
|
||||||
|
<< " and " << f1
|
||||||
|
<< " the two blockedFace status are not equal : "
|
||||||
|
<< blockedFace[f0] << " and " << blockedFace[f1]
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// For specifiedProcessorFaces rework the cellToProc to enforce
|
// For specifiedProcessorFaces rework the cellToProc to enforce
|
||||||
// all on one processor since we can't guarantee that the input
|
// all on one processor since we can't guarantee that the input
|
||||||
// to regionSplit was a single region.
|
// to regionSplit was a single region.
|
||||||
|
|||||||
@ -266,13 +266,16 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Decompose a mesh with constraints:
|
// Decompose a mesh with constraints:
|
||||||
// - blockedFace : whether owner and neighbour should be on
|
// - blockedFace : whether owner and neighbour should be on same
|
||||||
|
// processor
|
||||||
// - specifiedProcessorFaces, specifiedProcessor : sets of faces
|
// - specifiedProcessorFaces, specifiedProcessor : sets of faces
|
||||||
// that should go to same processor (as specified in
|
// that should go to same processor (as specified in
|
||||||
// specifiedProcessor, can be -1)
|
// specifiedProcessor, can be -1)
|
||||||
// - explicitConnections : connections between baffle faces
|
// - explicitConnections : connections between baffle faces
|
||||||
|
// (blockedFace should be false on these). Owner and
|
||||||
|
// neighbour on same processor.
|
||||||
// Set all to zero size to have unconstrained decomposition.
|
// Set all to zero size to have unconstrained decomposition.
|
||||||
labelList decompose
|
virtual labelList decompose
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const scalarField& cellWeights,
|
const scalarField& cellWeights,
|
||||||
|
|||||||
Reference in New Issue
Block a user