Fixed upper triangular ordering in processor mesh rebuild
This commit is contained in:
parent
085a1d85b8
commit
e739499202
1 changed files with 82 additions and 5 deletions
|
@ -839,13 +839,50 @@ Foam::processorMeshesReconstructor::reconstructMesh(const Time& db)
|
||||||
nReconFaces++;
|
nReconFaces++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Go through all patches. For regular patches
|
// Go through all patches.
|
||||||
// dump the faces into patch lists and for processor make internal faces
|
// For processor make internal faces
|
||||||
|
// For regular patches dump the faces into patch lists
|
||||||
|
// Note: processor patches need to be visited in the increasing
|
||||||
|
// neighbour processor index. HJ, 24/May/2018
|
||||||
|
|
||||||
const polyBoundaryMesh& procPatches = curMesh.boundaryMesh();
|
const polyBoundaryMesh& procPatches = curMesh.boundaryMesh();
|
||||||
|
|
||||||
|
// Sort processor patches for insertion
|
||||||
|
labelList nrbProcIndex(procPatches.size(), -1);
|
||||||
|
|
||||||
forAll (procPatches, patchI)
|
forAll (procPatches, patchI)
|
||||||
{
|
{
|
||||||
|
if (isA<processorPolyPatch>(procPatches[patchI]))
|
||||||
|
{
|
||||||
|
// Processor patch: faces become internal faces
|
||||||
|
const processorPolyPatch& curPatch =
|
||||||
|
refCast<const processorPolyPatch>(procPatches[patchI]);
|
||||||
|
|
||||||
|
nrbProcIndex[patchI] = curPatch.neighbProcNo();
|
||||||
|
}
|
||||||
|
else if (isA<passiveProcessorPolyPatch>(procPatches[patchI]))
|
||||||
|
{
|
||||||
|
// For passive processor patch, faces need to be inserted in
|
||||||
|
// the increasing global face index
|
||||||
|
const passiveProcessorPolyPatch& curPatch =
|
||||||
|
refCast<const passiveProcessorPolyPatch>
|
||||||
|
(
|
||||||
|
procPatches[patchI]
|
||||||
|
);
|
||||||
|
|
||||||
|
nrbProcIndex[patchI] = curPatch.neighbProcNo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get sorting order. Note make a copy of indices because
|
||||||
|
// sortable list will be deleted
|
||||||
|
labelList procVisitOrder =
|
||||||
|
SortableList<label>(nrbProcIndex).indices();
|
||||||
|
|
||||||
|
forAll (procVisitOrder, pvoI)
|
||||||
|
{
|
||||||
|
const label patchI = procVisitOrder[pvoI];
|
||||||
|
|
||||||
if (isA<processorPolyPatch>(procPatches[patchI]))
|
if (isA<processorPolyPatch>(procPatches[patchI]))
|
||||||
{
|
{
|
||||||
// Processor patch: faces become internal faces
|
// Processor patch: faces become internal faces
|
||||||
|
@ -1115,7 +1152,10 @@ Foam::processorMeshesReconstructor::reconstructMesh(const Time& db)
|
||||||
"autoPtr<fvMesh> "
|
"autoPtr<fvMesh> "
|
||||||
"processorMeshesReconstructor::"
|
"processorMeshesReconstructor::"
|
||||||
"reconstructMesh(const Time& db)"
|
"reconstructMesh(const Time& db)"
|
||||||
) << "Loss of proc sync: "
|
) << "Loss of proc sync: proc pair: ("
|
||||||
|
<< procPatch.myProcNo()
|
||||||
|
<< " " << procPatch.neighbProcNo()
|
||||||
|
<< ") point addr: "
|
||||||
<< ppAddr[curRF[pointI]] << " and "
|
<< ppAddr[curRF[pointI]] << " and "
|
||||||
<< masterPpAddr[curMF[pointI]]
|
<< masterPpAddr[curMF[pointI]]
|
||||||
<< " for point "
|
<< " for point "
|
||||||
|
@ -1200,10 +1240,47 @@ Foam::processorMeshesReconstructor::reconstructMesh(const Time& db)
|
||||||
nReconFaces++;
|
nReconFaces++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Go through all patches. For regular patches
|
// Go through all patches.
|
||||||
// dump the faces into patch lists
|
// For processor make internal faces
|
||||||
|
// Note: processor patches need to be visited in the increasing
|
||||||
|
// neighbour processor index. HJ, 24/May/2018
|
||||||
|
|
||||||
|
// Sort processor patches for insertion
|
||||||
|
labelList nrbProcIndex(procPatches.size(), -1);
|
||||||
|
|
||||||
forAll (procPatches, patchI)
|
forAll (procPatches, patchI)
|
||||||
{
|
{
|
||||||
|
if (isA<processorPolyPatch>(procPatches[patchI]))
|
||||||
|
{
|
||||||
|
// Processor patch: faces become internal faces
|
||||||
|
const processorPolyPatch& curPatch =
|
||||||
|
refCast<const processorPolyPatch>(procPatches[patchI]);
|
||||||
|
|
||||||
|
nrbProcIndex[patchI] = curPatch.neighbProcNo();
|
||||||
|
}
|
||||||
|
else if (isA<passiveProcessorPolyPatch>(procPatches[patchI]))
|
||||||
|
{
|
||||||
|
// For passive processor patch, faces need to be inserted in
|
||||||
|
// the increasing global face index
|
||||||
|
const passiveProcessorPolyPatch& curPatch =
|
||||||
|
refCast<const passiveProcessorPolyPatch>
|
||||||
|
(
|
||||||
|
procPatches[patchI]
|
||||||
|
);
|
||||||
|
|
||||||
|
nrbProcIndex[patchI] = curPatch.neighbProcNo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get sorting order. Note make a copy of indices because
|
||||||
|
// sortable list will be deleted
|
||||||
|
labelList procVisitOrder =
|
||||||
|
SortableList<label>(nrbProcIndex).indices();
|
||||||
|
|
||||||
|
forAll (procVisitOrder, pvoI)
|
||||||
|
{
|
||||||
|
const label patchI = procVisitOrder[pvoI];
|
||||||
|
|
||||||
if (isA<processorPolyPatch>(procPatches[patchI]))
|
if (isA<processorPolyPatch>(procPatches[patchI]))
|
||||||
{
|
{
|
||||||
// Processor patch: faces become internal faces
|
// Processor patch: faces become internal faces
|
||||||
|
|
Reference in a new issue