Parallel faMesh. Zeljko Tukovic
This commit is contained in:
parent
34aaf84c92
commit
6d559fe2b1
1 changed files with 186 additions and 17 deletions
|
@ -38,6 +38,7 @@ Description
|
||||||
#include "faMeshLduAddressing.H"
|
#include "faMeshLduAddressing.H"
|
||||||
#include "wedgeFaPatch.H"
|
#include "wedgeFaPatch.H"
|
||||||
#include "faPatchData.H"
|
#include "faPatchData.H"
|
||||||
|
#include "SortableList.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
@ -577,12 +578,155 @@ Foam::faMesh::faMesh
|
||||||
|
|
||||||
if (tmpList.size() > 0)
|
if (tmpList.size() > 0)
|
||||||
{
|
{
|
||||||
label pI = faPatches.size()-1;
|
// Check for processor edges
|
||||||
|
labelList allUndefEdges = tmpList;
|
||||||
|
labelList ngbPolyPatch(allUndefEdges.size(), -1);
|
||||||
|
forAll(ngbPolyPatch, edgeI)
|
||||||
|
{
|
||||||
|
label curEdge = allUndefEdges[edgeI];
|
||||||
|
|
||||||
faPatches[pI].name_ = "undefined";
|
label curPMeshEdge = meshEdges[curEdge];
|
||||||
faPatches[pI].type_ = "patch";
|
|
||||||
faPatches[pI].edgeLabels_ = tmpList;
|
forAll(edgeFaces[curPMeshEdge], faceI)
|
||||||
|
{
|
||||||
|
label curFace = edgeFaces[curPMeshEdge][faceI];
|
||||||
|
|
||||||
|
if (findIndex(faceLabels_, curFace) == -1)
|
||||||
|
{
|
||||||
|
label polyPatchID =
|
||||||
|
m.boundaryMesh().whichPatch(curFace);
|
||||||
|
|
||||||
|
if (polyPatchID != -1)
|
||||||
|
{
|
||||||
|
ngbPolyPatch[edgeI] = polyPatchID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Count ngb processorPolyPatch-es
|
||||||
|
labelHashSet processorPatchSet;
|
||||||
|
forAll(ngbPolyPatch, edgeI)
|
||||||
|
{
|
||||||
|
if (ngbPolyPatch[edgeI] != -1)
|
||||||
|
{
|
||||||
|
if
|
||||||
|
(
|
||||||
|
m.boundaryMesh()[ngbPolyPatch[edgeI]].type()
|
||||||
|
== processorPolyPatch::typeName
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if(!processorPatchSet.found(ngbPolyPatch[edgeI]))
|
||||||
|
{
|
||||||
|
processorPatchSet.insert(ngbPolyPatch[edgeI]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
labelList processorPatches(processorPatchSet.toc());
|
||||||
|
faPatches.setSize(faPatches.size() + processorPatches.size());
|
||||||
|
|
||||||
|
for(label i=0; i<processorPatches.size(); i++)
|
||||||
|
{
|
||||||
|
SLList<label> tmpLst;
|
||||||
|
|
||||||
|
forAll (ngbPolyPatch, eI)
|
||||||
|
{
|
||||||
|
if (ngbPolyPatch[eI] == processorPatches[i])
|
||||||
|
{
|
||||||
|
tmpLst.append(allUndefEdges[eI]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
faPatches[faPatchNames.size() + i].edgeLabels_ = tmpLst;
|
||||||
|
faPatches[faPatchNames.size() + i].name_ =
|
||||||
|
m.boundaryMesh()[processorPatches[i]].name();
|
||||||
|
faPatches[faPatchNames.size() + i].type_ =
|
||||||
|
processorFaPatch::typeName;
|
||||||
|
faPatches[faPatchNames.size() + i].ngbPolyPatchID_ =
|
||||||
|
processorPatches[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remaining undefined edges
|
||||||
|
SLList<label> undefEdges;
|
||||||
|
forAll(ngbPolyPatch, eI)
|
||||||
|
{
|
||||||
|
if (ngbPolyPatch[eI] == -1)
|
||||||
|
{
|
||||||
|
undefEdges.append(allUndefEdges[eI]);
|
||||||
|
}
|
||||||
|
else if
|
||||||
|
(
|
||||||
|
m.boundaryMesh()[ngbPolyPatch[eI]].type()
|
||||||
|
!= processorPolyPatch::typeName
|
||||||
|
)
|
||||||
|
{
|
||||||
|
undefEdges.append(allUndefEdges[eI]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (undefEdges.size() > 0)
|
||||||
|
{
|
||||||
|
label pI = faPatches.size()-1;
|
||||||
|
|
||||||
|
faPatches[pI].name_ = "undefined";
|
||||||
|
faPatches[pI].type_ = "patch";
|
||||||
|
faPatches[pI].edgeLabels_ = undefEdges;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
faPatches.setSize(faPatches.size()-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
faPatches.setSize(faPatches.size()-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Reorder processorFaPatch using
|
||||||
|
// ordering of ngb processorPolyPatch
|
||||||
|
forAll(faPatches, patchI)
|
||||||
|
{
|
||||||
|
if (faPatches[patchI].type_ == processorFaPatch::typeName)
|
||||||
|
{
|
||||||
|
labelList ngbFaces(faPatches[patchI].edgeLabels_.size(), -1);
|
||||||
|
|
||||||
|
forAll(ngbFaces, edgeI)
|
||||||
|
{
|
||||||
|
label curEdge = faPatches[patchI].edgeLabels_[edgeI];
|
||||||
|
|
||||||
|
label curPMeshEdge = meshEdges[curEdge];
|
||||||
|
|
||||||
|
forAll(edgeFaces[curPMeshEdge], faceI)
|
||||||
|
{
|
||||||
|
label curFace = edgeFaces[curPMeshEdge][faceI];
|
||||||
|
|
||||||
|
label curPatchID =
|
||||||
|
m.boundaryMesh().whichPatch(curFace);
|
||||||
|
|
||||||
|
if (curPatchID == faPatches[patchI].ngbPolyPatchID_)
|
||||||
|
{
|
||||||
|
ngbFaces[edgeI] = curFace;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SortableList<label> sortedNgbFaces(ngbFaces);
|
||||||
|
labelList reorderedEdgeLabels(ngbFaces.size(), -1);
|
||||||
|
for (label i=0; i<reorderedEdgeLabels.size(); i++)
|
||||||
|
{
|
||||||
|
reorderedEdgeLabels[i] =
|
||||||
|
faPatches[patchI].edgeLabels_
|
||||||
|
[
|
||||||
|
sortedNgbFaces.indices()[i]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
faPatches[patchI].edgeLabels_ = reorderedEdgeLabels;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Add good patches to faMesh
|
// Add good patches to faMesh
|
||||||
SLList<faPatch*> faPatchLst;
|
SLList<faPatch*> faPatchLst;
|
||||||
|
@ -597,24 +741,52 @@ Foam::faMesh::faMesh
|
||||||
faPatches[pI].ngbPolyPatchID_
|
faPatches[pI].ngbPolyPatchID_
|
||||||
);
|
);
|
||||||
|
|
||||||
if(faPatches[pI].edgeLabels_.size() > 0)
|
if (faPatches[pI].type_ == processorFaPatch::typeName)
|
||||||
{
|
{
|
||||||
faPatchLst.append
|
if (faPatches[pI].ngbPolyPatchID_ == -1)
|
||||||
(
|
{
|
||||||
faPatch::New
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
faPatches[pI].name_,
|
"void faMesh::faMesh(const polyMesh&, const fileName&)"
|
||||||
faPatches[pI].dict_,
|
)
|
||||||
pI,
|
<< "ngbPolyPatch is not defined for processorFaPatch: "
|
||||||
boundary()
|
<< faPatches[pI].name_
|
||||||
).ptr()
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
const processorPolyPatch& procPolyPatch =
|
||||||
|
refCast<const processorPolyPatch>
|
||||||
|
(
|
||||||
|
m.boundaryMesh()[faPatches[pI].ngbPolyPatchID_]
|
||||||
|
);
|
||||||
|
|
||||||
|
faPatches[pI].dict_.add("myProcNo", procPolyPatch.myProcNo());
|
||||||
|
faPatches[pI].dict_.add
|
||||||
|
(
|
||||||
|
"neighbProcNo",
|
||||||
|
procPolyPatch.neighbProcNo()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
faPatchLst.append
|
||||||
|
(
|
||||||
|
faPatch::New
|
||||||
|
(
|
||||||
|
faPatches[pI].name_,
|
||||||
|
faPatches[pI].dict_,
|
||||||
|
pI,
|
||||||
|
boundary()
|
||||||
|
).ptr()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
addFaPatches(List<faPatch*>(faPatchLst));
|
addFaPatches(List<faPatch*>(faPatchLst));
|
||||||
|
|
||||||
setPrimitiveMeshData();
|
// Create global mesh data
|
||||||
|
if (Pstream::parRun())
|
||||||
|
{
|
||||||
|
globalData();
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate topology for the patches (processor-processor comms etc.)
|
// Calculate topology for the patches (processor-processor comms etc.)
|
||||||
boundary_.updateMesh();
|
boundary_.updateMesh();
|
||||||
|
@ -861,9 +1033,6 @@ void Foam::faMesh::addFaPatches(const List<faPatch*>& p)
|
||||||
setPrimitiveMeshData();
|
setPrimitiveMeshData();
|
||||||
|
|
||||||
boundary_.checkDefinition();
|
boundary_.checkDefinition();
|
||||||
|
|
||||||
// Calculate the geometry for the patches (transformation tensors etc.)
|
|
||||||
boundary_.calcGeometry();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in a new issue