mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'issue-3238-nbx-failure' into 'develop'
ENH: more unique tags to avoid overlapping comms See merge request Development/openfoam!704
This commit is contained in:
@ -45,6 +45,11 @@ registerOptSwitch
|
|||||||
Foam::PstreamBuffers::algorithm
|
Foam::PstreamBuffers::algorithm
|
||||||
);
|
);
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(PstreamBuffers, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -231,6 +236,12 @@ void Foam::PstreamBuffers::finalExchange
|
|||||||
labelList& recvSizes
|
labelList& recvSizes
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
DebugPoutInFunction
|
||||||
|
<< "tag:" << tag_
|
||||||
|
<< " comm:" << comm_
|
||||||
|
<< " nProcs:" << nProcs_
|
||||||
|
<< endl;
|
||||||
|
|
||||||
initFinalExchange();
|
initFinalExchange();
|
||||||
|
|
||||||
if (commsType_ == UPstream::commsTypes::nonBlocking)
|
if (commsType_ == UPstream::commsTypes::nonBlocking)
|
||||||
@ -303,13 +314,25 @@ Foam::PstreamBuffers::PstreamBuffers
|
|||||||
sendBuffers_(nProcs_),
|
sendBuffers_(nProcs_),
|
||||||
recvBuffers_(nProcs_),
|
recvBuffers_(nProcs_),
|
||||||
recvPositions_(nProcs_, Zero)
|
recvPositions_(nProcs_, Zero)
|
||||||
{}
|
{
|
||||||
|
DebugPoutInFunction
|
||||||
|
<< "tag:" << tag_
|
||||||
|
<< " comm:" << comm_
|
||||||
|
<< " nProcs:" << nProcs_
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::PstreamBuffers::~PstreamBuffers()
|
Foam::PstreamBuffers::~PstreamBuffers()
|
||||||
{
|
{
|
||||||
|
DebugPoutInFunction
|
||||||
|
<< "tag:" << tag_
|
||||||
|
<< " comm:" << comm_
|
||||||
|
<< " nProcs:" << nProcs_
|
||||||
|
<< endl;
|
||||||
|
|
||||||
// Check that all data has been consumed.
|
// Check that all data has been consumed.
|
||||||
forAll(recvBuffers_, proci)
|
forAll(recvBuffers_, proci)
|
||||||
{
|
{
|
||||||
@ -321,6 +344,7 @@ Foam::PstreamBuffers::~PstreamBuffers()
|
|||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
<< "Message from processor " << proci
|
<< "Message from processor " << proci
|
||||||
<< " Only consumed " << pos << " of " << len << " bytes" << nl
|
<< " Only consumed " << pos << " of " << len << " bytes" << nl
|
||||||
|
<< " comm " << comm_ << " tag " << tag_ << nl
|
||||||
<< Foam::abort(FatalError);
|
<< Foam::abort(FatalError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -623,6 +647,12 @@ Foam::PstreamBuffers::peekRecvData(const label proci) const
|
|||||||
|
|
||||||
void Foam::PstreamBuffers::finishedSends(const bool wait)
|
void Foam::PstreamBuffers::finishedSends(const bool wait)
|
||||||
{
|
{
|
||||||
|
DebugPoutInFunction
|
||||||
|
<< "tag:" << tag_
|
||||||
|
<< " comm:" << comm_
|
||||||
|
<< " nProcs:" << nProcs_
|
||||||
|
<< endl;
|
||||||
|
|
||||||
labelList recvSizes;
|
labelList recvSizes;
|
||||||
finalExchange(modeOption::DEFAULT, wait, recvSizes);
|
finalExchange(modeOption::DEFAULT, wait, recvSizes);
|
||||||
}
|
}
|
||||||
@ -630,6 +660,12 @@ void Foam::PstreamBuffers::finishedSends(const bool wait)
|
|||||||
|
|
||||||
void Foam::PstreamBuffers::finishedSendsNBX(const bool wait)
|
void Foam::PstreamBuffers::finishedSendsNBX(const bool wait)
|
||||||
{
|
{
|
||||||
|
DebugPoutInFunction
|
||||||
|
<< "tag:" << tag_
|
||||||
|
<< " comm:" << comm_
|
||||||
|
<< " nProcs:" << nProcs_
|
||||||
|
<< endl;
|
||||||
|
|
||||||
labelList recvSizes;
|
labelList recvSizes;
|
||||||
finalExchange(modeOption::NBX_PEX, wait, recvSizes);
|
finalExchange(modeOption::NBX_PEX, wait, recvSizes);
|
||||||
}
|
}
|
||||||
@ -641,6 +677,12 @@ void Foam::PstreamBuffers::finishedSends
|
|||||||
const bool wait
|
const bool wait
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
DebugPoutInFunction
|
||||||
|
<< "tag:" << tag_
|
||||||
|
<< " comm:" << comm_
|
||||||
|
<< " nProcs:" << nProcs_
|
||||||
|
<< endl;
|
||||||
|
|
||||||
// Resize for copying back
|
// Resize for copying back
|
||||||
recvSizes.resize_nocopy(sendBuffers_.size());
|
recvSizes.resize_nocopy(sendBuffers_.size());
|
||||||
|
|
||||||
|
|||||||
@ -248,6 +248,10 @@ class PstreamBuffers
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// Declare name of the class and its debug switch
|
||||||
|
ClassName("PstreamBuffers");
|
||||||
|
|
||||||
|
|
||||||
// Static Data
|
// Static Data
|
||||||
|
|
||||||
//- Preferred exchange algorithm (may change or be removed in future)
|
//- Preferred exchange algorithm (may change or be removed in future)
|
||||||
|
|||||||
@ -88,6 +88,9 @@ void Foam::globalMeshData::initProcAddr()
|
|||||||
|
|
||||||
if (UPstream::parRun())
|
if (UPstream::parRun())
|
||||||
{
|
{
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
PstreamBuffers pBufs(mesh_.comm());
|
PstreamBuffers pBufs(mesh_.comm());
|
||||||
|
|
||||||
// Send indices of my processor patches to my neighbours
|
// Send indices of my processor patches to my neighbours
|
||||||
@ -120,6 +123,9 @@ void Foam::globalMeshData::initProcAddr()
|
|||||||
|
|
||||||
fromNeighbour >> processorPatchNeighbours_[patchi];
|
fromNeighbour >> processorPatchNeighbours_[patchi];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,6 +143,9 @@ void Foam::globalMeshData::calcSharedPoints() const
|
|||||||
<< "Shared point addressing already done" << abort(FatalError);
|
<< "Shared point addressing already done" << abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Calculate all shared points (exclude points that are only
|
// Calculate all shared points (exclude points that are only
|
||||||
// on two coupled patches). This does all the hard work.
|
// on two coupled patches). This does all the hard work.
|
||||||
const globalPoints parallelPoints(mesh_, false, true);
|
const globalPoints parallelPoints(mesh_, false, true);
|
||||||
@ -229,6 +238,9 @@ void Foam::globalMeshData::calcSharedPoints() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "globalMeshData : nGlobalPoints_:" << nGlobalPoints_ << nl
|
Pout<< "globalMeshData : nGlobalPoints_:" << nGlobalPoints_ << nl
|
||||||
@ -356,6 +368,9 @@ void Foam::globalMeshData::calcSharedEdges() const
|
|||||||
|
|
||||||
EdgeMap<label> globalShared(2*nGlobalPoints());
|
EdgeMap<label> globalShared(2*nGlobalPoints());
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
if (UPstream::master())
|
if (UPstream::master())
|
||||||
{
|
{
|
||||||
label sharedEdgeI = 0;
|
label sharedEdgeI = 0;
|
||||||
@ -466,6 +481,9 @@ void Foam::globalMeshData::calcSharedEdges() const
|
|||||||
new labelList(std::move(dynSharedEdgeAddr))
|
new labelList(std::move(dynSharedEdgeAddr))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "globalMeshData : nGlobalEdges_:" << nGlobalEdges_ << nl
|
Pout<< "globalMeshData : nGlobalEdges_:" << nGlobalEdges_ << nl
|
||||||
@ -486,6 +504,9 @@ void Foam::globalMeshData::calcGlobalPointSlaves() const
|
|||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Calculate connected points for master points.
|
// Calculate connected points for master points.
|
||||||
globalPoints globalData(mesh_, coupledPatch(), true, true);
|
globalPoints globalData(mesh_, coupledPatch(), true, true);
|
||||||
|
|
||||||
@ -511,6 +532,9 @@ void Foam::globalMeshData::calcGlobalPointSlaves() const
|
|||||||
std::move(globalData.map())
|
std::move(globalData.map())
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -522,10 +546,14 @@ void Foam::globalMeshData::calcPointConnectivity
|
|||||||
const globalIndexAndTransform& transforms = globalTransforms();
|
const globalIndexAndTransform& transforms = globalTransforms();
|
||||||
const labelListList& slaves = globalPointSlaves();
|
const labelListList& slaves = globalPointSlaves();
|
||||||
const labelListList& transformedSlaves = globalPointTransformedSlaves();
|
const labelListList& transformedSlaves = globalPointTransformedSlaves();
|
||||||
|
const auto& slavesMap = globalPointSlavesMap();
|
||||||
|
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Create field with my local data
|
// Create field with my local data
|
||||||
labelPairList myData(globalPointSlavesMap().constructSize());
|
labelPairList myData(slavesMap.constructSize());
|
||||||
forAll(slaves, pointi)
|
forAll(slaves, pointi)
|
||||||
{
|
{
|
||||||
myData[pointi] = transforms.encode
|
myData[pointi] = transforms.encode
|
||||||
@ -536,11 +564,11 @@ void Foam::globalMeshData::calcPointConnectivity
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
// Send to master
|
// Send to master
|
||||||
globalPointSlavesMap().distribute(myData);
|
slavesMap.distribute(myData, true, UPstream::msgType());
|
||||||
|
|
||||||
|
|
||||||
// String of connected points with their transform
|
// String of connected points with their transform
|
||||||
allPointConnectivity.setSize(globalPointSlavesMap().constructSize());
|
allPointConnectivity.setSize(slavesMap.constructSize());
|
||||||
allPointConnectivity = labelPairList(0);
|
allPointConnectivity = labelPairList(0);
|
||||||
|
|
||||||
// Pass1: do the master points since these also update local slaves
|
// Pass1: do the master points since these also update local slaves
|
||||||
@ -569,7 +597,7 @@ void Foam::globalMeshData::calcPointConnectivity
|
|||||||
forAll(pTransformSlaves, i)
|
forAll(pTransformSlaves, i)
|
||||||
{
|
{
|
||||||
// Get transform from index
|
// Get transform from index
|
||||||
label transformI = globalPointSlavesMap().whichTransform
|
label transformI = slavesMap.whichTransform
|
||||||
(
|
(
|
||||||
pTransformSlaves[i]
|
pTransformSlaves[i]
|
||||||
);
|
);
|
||||||
@ -610,11 +638,16 @@ void Foam::globalMeshData::calcPointConnectivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
globalPointSlavesMap().reverseDistribute
|
slavesMap.reverseDistribute
|
||||||
(
|
(
|
||||||
slaves.size(),
|
slaves.size(),
|
||||||
allPointConnectivity
|
allPointConnectivity,
|
||||||
|
true,
|
||||||
|
UPstream::msgType()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -655,8 +688,25 @@ void Foam::globalMeshData::calcGlobalPointEdges
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Pull slave data to master. Dummy transform.
|
// Pull slave data to master. Dummy transform.
|
||||||
globalPointSlavesMap().distribute(globalPointEdges);
|
|
||||||
globalPointSlavesMap().distribute(globalPointPoints);
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
|
globalPointSlavesMap().distribute
|
||||||
|
(
|
||||||
|
globalPointEdges,
|
||||||
|
true,
|
||||||
|
UPstream::msgType()
|
||||||
|
);
|
||||||
|
// Make sure second send uses 'far' away tags in case of NBX deciding on
|
||||||
|
// multi-pass spraying of messages with consecutive tags
|
||||||
|
globalPointSlavesMap().distribute
|
||||||
|
(
|
||||||
|
globalPointPoints,
|
||||||
|
true,
|
||||||
|
UPstream::msgType()+23456 // Unique, far enough away tag
|
||||||
|
);
|
||||||
|
|
||||||
// Add all pointEdges
|
// Add all pointEdges
|
||||||
forAll(slaves, pointi)
|
forAll(slaves, pointi)
|
||||||
{
|
{
|
||||||
@ -764,14 +814,21 @@ void Foam::globalMeshData::calcGlobalPointEdges
|
|||||||
globalPointSlavesMap().reverseDistribute
|
globalPointSlavesMap().reverseDistribute
|
||||||
(
|
(
|
||||||
slaves.size(),
|
slaves.size(),
|
||||||
globalPointEdges
|
globalPointEdges,
|
||||||
|
true,
|
||||||
|
UPstream::msgType()
|
||||||
);
|
);
|
||||||
// Push back
|
// Push back
|
||||||
globalPointSlavesMap().reverseDistribute
|
globalPointSlavesMap().reverseDistribute
|
||||||
(
|
(
|
||||||
slaves.size(),
|
slaves.size(),
|
||||||
globalPointPoints
|
globalPointPoints,
|
||||||
|
true,
|
||||||
|
UPstream::msgType()+65432 // Unique, far enough away tag
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -852,6 +909,8 @@ void Foam::globalMeshData::calcGlobalEdgeSlaves() const
|
|||||||
// need to make sure that all points know about connectivity and
|
// need to make sure that all points know about connectivity and
|
||||||
// the transformations.
|
// the transformations.
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// 1. collect point connectivity - basically recreating globalPoints output.
|
// 1. collect point connectivity - basically recreating globalPoints output.
|
||||||
// All points will now have a string of coupled points. The transforms are
|
// All points will now have a string of coupled points. The transforms are
|
||||||
@ -1037,10 +1096,13 @@ void Foam::globalMeshData::calcGlobalEdgeSlaves() const
|
|||||||
transformedEdges,
|
transformedEdges,
|
||||||
globalEdgeTransformedSlavesPtr_(),
|
globalEdgeTransformedSlavesPtr_(),
|
||||||
|
|
||||||
compactMap
|
compactMap,
|
||||||
|
UPstream::msgType()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
@ -1061,6 +1123,9 @@ void Foam::globalMeshData::calcGlobalEdgeOrientation() const
|
|||||||
<< " calculating edge orientation w.r.t. master edge." << endl;
|
<< " calculating edge orientation w.r.t. master edge." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
const globalIndex& globalPoints = globalPointNumbering();
|
const globalIndex& globalPoints = globalPointNumbering();
|
||||||
|
|
||||||
// 1. Determine master point
|
// 1. Determine master point
|
||||||
@ -1172,6 +1237,9 @@ void Foam::globalMeshData::calcGlobalEdgeOrientation() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "globalMeshData::calcGlobalEdgeOrientation() :"
|
Pout<< "globalMeshData::calcGlobalEdgeOrientation() :"
|
||||||
@ -1262,6 +1330,9 @@ void Foam::globalMeshData::calcGlobalPointBoundaryFaces() const
|
|||||||
|
|
||||||
const label myProci = UPstream::myProcNo();
|
const label myProci = UPstream::myProcNo();
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Construct local point to (uncoupled)boundaryfaces.
|
// Construct local point to (uncoupled)boundaryfaces.
|
||||||
labelListList pointBoundaryFaces;
|
labelListList pointBoundaryFaces;
|
||||||
calcPointBoundaryFaces(pointBoundaryFaces);
|
calcPointBoundaryFaces(pointBoundaryFaces);
|
||||||
@ -1429,6 +1500,9 @@ void Foam::globalMeshData::calcGlobalPointBoundaryFaces() const
|
|||||||
globalPointBoundaryFaces.setSize(coupledPatch().nPoints());
|
globalPointBoundaryFaces.setSize(coupledPatch().nPoints());
|
||||||
globalPointTransformedBoundaryFacesPtr_().setSize(coupledPatch().nPoints());
|
globalPointTransformedBoundaryFacesPtr_().setSize(coupledPatch().nPoints());
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "globalMeshData::calcGlobalPointBoundaryFaces() :"
|
Pout<< "globalMeshData::calcGlobalPointBoundaryFaces() :"
|
||||||
@ -1498,6 +1572,10 @@ void Foam::globalMeshData::calcGlobalPointBoundaryCells() const
|
|||||||
// Convert point-cells to global (boundary)cell numbers
|
// Convert point-cells to global (boundary)cell numbers
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
globalBoundaryCellNumberingPtr_.reset
|
globalBoundaryCellNumberingPtr_.reset
|
||||||
(
|
(
|
||||||
new globalIndex(boundaryCells.size())
|
new globalIndex(boundaryCells.size())
|
||||||
@ -1654,6 +1732,9 @@ void Foam::globalMeshData::calcGlobalPointBoundaryCells() const
|
|||||||
globalPointBoundaryCells.setSize(coupledPatch().nPoints());
|
globalPointBoundaryCells.setSize(coupledPatch().nPoints());
|
||||||
globalPointTransformedBoundaryCellsPtr_().setSize(coupledPatch().nPoints());
|
globalPointTransformedBoundaryCellsPtr_().setSize(coupledPatch().nPoints());
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "globalMeshData::calcGlobalPointBoundaryCells() :"
|
Pout<< "globalMeshData::calcGlobalPointBoundaryCells() :"
|
||||||
@ -1676,6 +1757,9 @@ void Foam::globalMeshData::calcGlobalCoPointSlaves() const
|
|||||||
<< " slave point addressing." << endl;
|
<< " slave point addressing." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Calculate connected points for master points.
|
// Calculate connected points for master points.
|
||||||
globalPoints globalData(mesh_, coupledPatch(), true, false);
|
globalPoints globalData(mesh_, coupledPatch(), true, false);
|
||||||
|
|
||||||
@ -1694,6 +1778,8 @@ void Foam::globalMeshData::calcGlobalCoPointSlaves() const
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "globalMeshData::calcGlobalCoPointSlaves() :"
|
Pout<< "globalMeshData::calcGlobalCoPointSlaves() :"
|
||||||
@ -1850,6 +1936,9 @@ Foam::pointField Foam::globalMeshData::sharedPoints() const
|
|||||||
// Get all processors to send their shared points to master.
|
// Get all processors to send their shared points to master.
|
||||||
// (not very efficient)
|
// (not very efficient)
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
pointField sharedPoints(nGlobalPoints());
|
pointField sharedPoints(nGlobalPoints());
|
||||||
const labelList& pointAddr = sharedPointAddr();
|
const labelList& pointAddr = sharedPointAddr();
|
||||||
const labelList& pointLabels = sharedPointLabels();
|
const labelList& pointLabels = sharedPointLabels();
|
||||||
@ -1901,6 +1990,8 @@ Foam::pointField Foam::globalMeshData::sharedPoints() const
|
|||||||
// Broadcast: sharedPoints to all
|
// Broadcast: sharedPoints to all
|
||||||
Pstream::broadcast(sharedPoints); // == worldComm
|
Pstream::broadcast(sharedPoints); // == worldComm
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
return sharedPoints;
|
return sharedPoints;
|
||||||
}
|
}
|
||||||
@ -1908,6 +1999,9 @@ Foam::pointField Foam::globalMeshData::sharedPoints() const
|
|||||||
|
|
||||||
Foam::pointField Foam::globalMeshData::geometricSharedPoints() const
|
Foam::pointField Foam::globalMeshData::geometricSharedPoints() const
|
||||||
{
|
{
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Get coords of my shared points
|
// Get coords of my shared points
|
||||||
pointField sharedPoints(mesh_.points(), sharedPointLabels());
|
pointField sharedPoints(mesh_.points(), sharedPointLabels());
|
||||||
|
|
||||||
@ -1926,6 +2020,9 @@ Foam::pointField Foam::globalMeshData::geometricSharedPoints() const
|
|||||||
pointMap
|
pointMap
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
return sharedPoints;
|
return sharedPoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2091,10 +2188,16 @@ const Foam::globalIndex& Foam::globalMeshData::globalPointNumbering() const
|
|||||||
{
|
{
|
||||||
if (!globalPointNumberingPtr_)
|
if (!globalPointNumberingPtr_)
|
||||||
{
|
{
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
globalPointNumberingPtr_.reset
|
globalPointNumberingPtr_.reset
|
||||||
(
|
(
|
||||||
new globalIndex(coupledPatch().nPoints())
|
new globalIndex(coupledPatch().nPoints())
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
return *globalPointNumberingPtr_;
|
return *globalPointNumberingPtr_;
|
||||||
}
|
}
|
||||||
@ -2105,7 +2208,13 @@ Foam::globalMeshData::globalTransforms() const
|
|||||||
{
|
{
|
||||||
if (!globalTransformsPtr_)
|
if (!globalTransformsPtr_)
|
||||||
{
|
{
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
globalTransformsPtr_.reset(new globalIndexAndTransform(mesh_));
|
globalTransformsPtr_.reset(new globalIndexAndTransform(mesh_));
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
return *globalTransformsPtr_;
|
return *globalTransformsPtr_;
|
||||||
}
|
}
|
||||||
@ -2146,10 +2255,16 @@ const Foam::globalIndex& Foam::globalMeshData::globalEdgeNumbering() const
|
|||||||
{
|
{
|
||||||
if (!globalEdgeNumberingPtr_)
|
if (!globalEdgeNumberingPtr_)
|
||||||
{
|
{
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
globalEdgeNumberingPtr_.reset
|
globalEdgeNumberingPtr_.reset
|
||||||
(
|
(
|
||||||
new globalIndex(coupledPatch().nEdges())
|
new globalIndex(coupledPatch().nEdges())
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
return *globalEdgeNumberingPtr_;
|
return *globalEdgeNumberingPtr_;
|
||||||
}
|
}
|
||||||
@ -2326,6 +2441,8 @@ Foam::autoPtr<Foam::globalIndex> Foam::globalMeshData::mergePoints
|
|||||||
const labelListList& pointSlaves = globalCoPointSlaves();
|
const labelListList& pointSlaves = globalCoPointSlaves();
|
||||||
const mapDistribute& pointSlavesMap = globalCoPointSlavesMap();
|
const mapDistribute& pointSlavesMap = globalCoPointSlavesMap();
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Points are either
|
// Points are either
|
||||||
// - master with slaves
|
// - master with slaves
|
||||||
@ -2444,6 +2561,9 @@ Foam::autoPtr<Foam::globalIndex> Foam::globalMeshData::mergePoints
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Restore tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
return globalPointsPtr;
|
return globalPointsPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2471,6 +2591,9 @@ Foam::autoPtr<Foam::globalIndex> Foam::globalMeshData::mergePoints
|
|||||||
// patch point via coupled patches).
|
// patch point via coupled patches).
|
||||||
|
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Determine mapping:
|
// Determine mapping:
|
||||||
// - from patch point to coupled point (or -1)
|
// - from patch point to coupled point (or -1)
|
||||||
// - from coupled point to global patch point
|
// - from coupled point to global patch point
|
||||||
@ -2659,6 +2782,9 @@ Foam::autoPtr<Foam::globalIndex> Foam::globalMeshData::mergePoints
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Restore tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
|
|
||||||
return globalPointsPtr;
|
return globalPointsPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2015 OpenFOAM Foundation
|
Copyright (C) 2011-2015 OpenFOAM Foundation
|
||||||
Copyright (C) 2018-2019 OpenCFD Ltd.
|
Copyright (C) 2018-2024 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -44,6 +44,9 @@ void Foam::globalMeshData::syncData
|
|||||||
const TransformOp& top
|
const TransformOp& top
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Pull slave data onto master
|
// Pull slave data onto master
|
||||||
slavesMap.distribute(transforms, elems, top);
|
slavesMap.distribute(transforms, elems, top);
|
||||||
|
|
||||||
@ -94,6 +97,9 @@ void Foam::globalMeshData::syncData
|
|||||||
elems,
|
elems,
|
||||||
top
|
top
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -107,6 +113,9 @@ void Foam::globalMeshData::syncData
|
|||||||
const CombineOp& cop
|
const CombineOp& cop
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Pull slave data onto master
|
// Pull slave data onto master
|
||||||
slavesMap.distribute(elems);
|
slavesMap.distribute(elems);
|
||||||
|
|
||||||
@ -151,6 +160,9 @@ void Foam::globalMeshData::syncData
|
|||||||
|
|
||||||
// Push slave-slot data back to slaves
|
// Push slave-slot data back to slaves
|
||||||
slavesMap.reverseDistribute(elems.size(), elems);
|
slavesMap.reverseDistribute(elems.size(), elems);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -300,6 +300,9 @@ void Foam::polyBoundaryMesh::clearAddressing()
|
|||||||
|
|
||||||
void Foam::polyBoundaryMesh::calcGeometry()
|
void Foam::polyBoundaryMesh::calcGeometry()
|
||||||
{
|
{
|
||||||
|
// Make sure messages don't interact by having unique tag
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
PstreamBuffers pBufs(Pstream::defaultCommsType);
|
PstreamBuffers pBufs(Pstream::defaultCommsType);
|
||||||
|
|
||||||
if
|
if
|
||||||
@ -341,6 +344,9 @@ void Foam::polyBoundaryMesh::calcGeometry()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -92,6 +92,9 @@ void Foam::syncTools::syncPointMap
|
|||||||
{
|
{
|
||||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||||
|
|
||||||
|
// Make sure we use unique message tag
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Synchronize multiple shared points.
|
// Synchronize multiple shared points.
|
||||||
const globalMeshData& pd = mesh.globalData();
|
const globalMeshData& pd = mesh.globalData();
|
||||||
|
|
||||||
@ -369,6 +372,9 @@ void Foam::syncTools::syncPointMap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -387,6 +393,8 @@ void Foam::syncTools::syncEdgeMap
|
|||||||
// Do synchronisation without constructing globalEdge addressing
|
// Do synchronisation without constructing globalEdge addressing
|
||||||
// (since this constructs mesh edge addressing)
|
// (since this constructs mesh edge addressing)
|
||||||
|
|
||||||
|
// Make sure we use unique message tag
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
// Swap proc patch info
|
// Swap proc patch info
|
||||||
// ~~~~~~~~~~~~~~~~~~~~
|
// ~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -734,6 +742,9 @@ void Foam::syncTools::syncEdgeMap
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1037,6 +1048,9 @@ void Foam::syncTools::syncBoundaryFaceList
|
|||||||
|
|
||||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
if (parRun && UPstream::parRun())
|
if (parRun && UPstream::parRun())
|
||||||
{
|
{
|
||||||
// Avoid mesh.globalData() - possible race condition
|
// Avoid mesh.globalData() - possible race condition
|
||||||
@ -1252,6 +1266,9 @@ void Foam::syncTools::syncBoundaryFaceList
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1283,6 +1300,9 @@ void Foam::syncTools::syncFaceList
|
|||||||
|
|
||||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
if (parRun && UPstream::parRun())
|
if (parRun && UPstream::parRun())
|
||||||
{
|
{
|
||||||
const label startRequest = UPstream::nRequests();
|
const label startRequest = UPstream::nRequests();
|
||||||
@ -1403,6 +1423,9 @@ void Foam::syncTools::syncFaceList
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -611,6 +611,8 @@ void Foam::cyclicACMIFvPatchField<Type>::initInterfaceMatrixUpdate
|
|||||||
scalarRecvBufs_
|
scalarRecvBufs_
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->updatedMatrix(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -679,6 +681,8 @@ void Foam::cyclicACMIFvPatchField<Type>::updateInterfaceMatrix
|
|||||||
}
|
}
|
||||||
|
|
||||||
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
||||||
|
|
||||||
|
this->updatedMatrix(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -735,6 +739,8 @@ void Foam::cyclicACMIFvPatchField<Type>::initInterfaceMatrixUpdate
|
|||||||
recvBufs_
|
recvBufs_
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->updatedMatrix(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -792,6 +798,8 @@ void Foam::cyclicACMIFvPatchField<Type>::updateInterfaceMatrix
|
|||||||
}
|
}
|
||||||
|
|
||||||
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
||||||
|
|
||||||
|
this->updatedMatrix(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -616,6 +616,8 @@ void Foam::cyclicAMIFvPatchField<Type>::initInterfaceMatrixUpdate
|
|||||||
scalarRecvBufs_
|
scalarRecvBufs_
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->updatedMatrix(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -693,6 +695,8 @@ void Foam::cyclicAMIFvPatchField<Type>::updateInterfaceMatrix
|
|||||||
|
|
||||||
// Multiply the field by coefficients and add into the result
|
// Multiply the field by coefficients and add into the result
|
||||||
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
||||||
|
|
||||||
|
this->updatedMatrix(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -751,6 +755,8 @@ void Foam::cyclicAMIFvPatchField<Type>::initInterfaceMatrixUpdate
|
|||||||
recvBufs_
|
recvBufs_
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->updatedMatrix(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -827,6 +833,8 @@ void Foam::cyclicAMIFvPatchField<Type>::updateInterfaceMatrix
|
|||||||
|
|
||||||
// Multiply the field by coefficients and add into the result
|
// Multiply the field by coefficients and add into the result
|
||||||
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
||||||
|
|
||||||
|
this->updatedMatrix(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -145,7 +145,8 @@ void Foam::AMIInterpolation::interpolateToTarget
|
|||||||
if (distributed())
|
if (distributed())
|
||||||
{
|
{
|
||||||
const mapDistribute& map = srcMapPtr_();
|
const mapDistribute& map = srcMapPtr_();
|
||||||
work = fld; // deep copy
|
work.resize_nocopy(map.constructSize());
|
||||||
|
SubList<Type>(work, fld.size()) = fld; // deep copy
|
||||||
map.distribute(work);
|
map.distribute(work);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,7 +206,8 @@ void Foam::AMIInterpolation::interpolateToSource
|
|||||||
if (distributed())
|
if (distributed())
|
||||||
{
|
{
|
||||||
const mapDistribute& map = tgtMapPtr_();
|
const mapDistribute& map = tgtMapPtr_();
|
||||||
work = fld; // deep copy
|
work.resize_nocopy(map.constructSize());
|
||||||
|
SubList<Type>(work, fld.size()) = fld; // deep copy
|
||||||
map.distribute(work);
|
map.distribute(work);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2013-2016 OpenFOAM Foundation
|
Copyright (C) 2013-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2018-2021 OpenCFD Ltd.
|
Copyright (C) 2018-2024 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -714,6 +714,8 @@ bool Foam::faceAreaWeightAMI::calculate
|
|||||||
if (distributed())
|
if (distributed())
|
||||||
{
|
{
|
||||||
const label myRank = UPstream::myProcNo(comm_);
|
const label myRank = UPstream::myProcNo(comm_);
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
const primitivePatch& srcPatch0 = this->srcPatch0();
|
const primitivePatch& srcPatch0 = this->srcPatch0();
|
||||||
const primitivePatch& tgtPatch0 = this->tgtPatch0();
|
const primitivePatch& tgtPatch0 = this->tgtPatch0();
|
||||||
@ -751,7 +753,7 @@ bool Foam::faceAreaWeightAMI::calculate
|
|||||||
labelList(),
|
labelList(),
|
||||||
ListOps::appendEqOp<label>(),
|
ListOps::appendEqOp<label>(),
|
||||||
flipOp(), // flip operation
|
flipOp(), // flip operation
|
||||||
UPstream::msgType(),
|
UPstream::msgType()+77431,
|
||||||
comm_
|
comm_
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -768,7 +770,7 @@ bool Foam::faceAreaWeightAMI::calculate
|
|||||||
scalarList(),
|
scalarList(),
|
||||||
ListOps::appendEqOp<scalar>(),
|
ListOps::appendEqOp<scalar>(),
|
||||||
flipOp(),
|
flipOp(),
|
||||||
UPstream::msgType(),
|
UPstream::msgType()+77432,
|
||||||
comm_
|
comm_
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -784,7 +786,7 @@ bool Foam::faceAreaWeightAMI::calculate
|
|||||||
globalSrcFaces,
|
globalSrcFaces,
|
||||||
tgtAddress_,
|
tgtAddress_,
|
||||||
cMapSrc,
|
cMapSrc,
|
||||||
UPstream::msgType(),
|
UPstream::msgType()+77433,
|
||||||
comm_
|
comm_
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -797,10 +799,13 @@ bool Foam::faceAreaWeightAMI::calculate
|
|||||||
globalTgtFaces,
|
globalTgtFaces,
|
||||||
srcAddress_,
|
srcAddress_,
|
||||||
cMapTgt,
|
cMapTgt,
|
||||||
UPstream::msgType(),
|
UPstream::msgType()+77434,
|
||||||
comm_
|
comm_
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert the weights from areas to normalised values
|
// Convert the weights from areas to normalised values
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2020,2022 OpenCFD Ltd.
|
Copyright (C) 2020,2022,2024 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -428,6 +428,8 @@ bool Foam::faceAreaWeightAMI2D::calculate
|
|||||||
if (distributed())
|
if (distributed())
|
||||||
{
|
{
|
||||||
const label myRank = UPstream::myProcNo(comm_);
|
const label myRank = UPstream::myProcNo(comm_);
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
const primitivePatch& srcPatch0 = this->srcPatch0();
|
const primitivePatch& srcPatch0 = this->srcPatch0();
|
||||||
const primitivePatch& tgtPatch0 = this->tgtPatch0();
|
const primitivePatch& tgtPatch0 = this->tgtPatch0();
|
||||||
@ -465,7 +467,7 @@ bool Foam::faceAreaWeightAMI2D::calculate
|
|||||||
labelList(),
|
labelList(),
|
||||||
ListOps::appendEqOp<label>(),
|
ListOps::appendEqOp<label>(),
|
||||||
flipOp(), // flip operation
|
flipOp(), // flip operation
|
||||||
UPstream::msgType(),
|
UPstream::msgType()+77431,
|
||||||
comm_
|
comm_
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -482,7 +484,7 @@ bool Foam::faceAreaWeightAMI2D::calculate
|
|||||||
scalarList(),
|
scalarList(),
|
||||||
ListOps::appendEqOp<scalar>(),
|
ListOps::appendEqOp<scalar>(),
|
||||||
flipOp(), // flip operation
|
flipOp(), // flip operation
|
||||||
UPstream::msgType(),
|
UPstream::msgType()+77432,
|
||||||
comm_
|
comm_
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -498,7 +500,7 @@ bool Foam::faceAreaWeightAMI2D::calculate
|
|||||||
globalSrcFaces,
|
globalSrcFaces,
|
||||||
tgtAddress_,
|
tgtAddress_,
|
||||||
cMapSrc,
|
cMapSrc,
|
||||||
UPstream::msgType(),
|
UPstream::msgType()+77433,
|
||||||
comm_
|
comm_
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -511,10 +513,13 @@ bool Foam::faceAreaWeightAMI2D::calculate
|
|||||||
globalTgtFaces,
|
globalTgtFaces,
|
||||||
srcAddress_,
|
srcAddress_,
|
||||||
cMapTgt,
|
cMapTgt,
|
||||||
UPstream::msgType(),
|
UPstream::msgType()+77434,
|
||||||
comm_
|
comm_
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert the weights from areas to normalised values
|
// Convert the weights from areas to normalised values
|
||||||
|
|||||||
@ -238,10 +238,13 @@ void Foam::cyclicACMIGAMGInterfaceField::initInterfaceMatrixUpdate
|
|||||||
sendRequests_,
|
sendRequests_,
|
||||||
scalarSendBufs_,
|
scalarSendBufs_,
|
||||||
recvRequests_,
|
recvRequests_,
|
||||||
scalarRecvBufs_
|
scalarRecvBufs_,
|
||||||
|
19462+cyclicACMIInterface_.index() // unique offset + patch index
|
||||||
);
|
);
|
||||||
UPstream::commWarn(oldWarnComm);
|
UPstream::commWarn(oldWarnComm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->updatedMatrix(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -286,7 +289,13 @@ void Foam::cyclicACMIGAMGInterfaceField::updateInterfaceMatrix
|
|||||||
// Receive (= copy) data from buffers into work. TBD: receive directly
|
// Receive (= copy) data from buffers into work. TBD: receive directly
|
||||||
// into slices of work.
|
// into slices of work.
|
||||||
solveScalarField work;
|
solveScalarField work;
|
||||||
map.receive(recvRequests_, scalarRecvBufs_, work);
|
map.receive
|
||||||
|
(
|
||||||
|
recvRequests_,
|
||||||
|
scalarRecvBufs_,
|
||||||
|
work,
|
||||||
|
19462+cyclicACMIInterface_.index() // unique offset + patch index
|
||||||
|
);
|
||||||
|
|
||||||
// Receive requests all handled by last function call
|
// Receive requests all handled by last function call
|
||||||
recvRequests_.clear();
|
recvRequests_.clear();
|
||||||
@ -327,6 +336,8 @@ void Foam::cyclicACMIGAMGInterfaceField::updateInterfaceMatrix
|
|||||||
|
|
||||||
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->updatedMatrix(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -239,10 +239,13 @@ void Foam::cyclicAMIGAMGInterfaceField::initInterfaceMatrixUpdate
|
|||||||
sendRequests_,
|
sendRequests_,
|
||||||
scalarSendBufs_,
|
scalarSendBufs_,
|
||||||
recvRequests_,
|
recvRequests_,
|
||||||
scalarRecvBufs_
|
scalarRecvBufs_,
|
||||||
|
19462+cyclicAMIInterface_.index() // unique offset + patch index
|
||||||
);
|
);
|
||||||
UPstream::commWarn(oldWarnComm);
|
UPstream::commWarn(oldWarnComm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->updatedMatrix(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -300,7 +303,13 @@ void Foam::cyclicAMIGAMGInterfaceField::updateInterfaceMatrix
|
|||||||
// Receive (= copy) data from buffers into work. TBD: receive directly
|
// Receive (= copy) data from buffers into work. TBD: receive directly
|
||||||
// into slices of work.
|
// into slices of work.
|
||||||
solveScalarField work;
|
solveScalarField work;
|
||||||
map.receive(recvRequests_, scalarRecvBufs_, work);
|
map.receive
|
||||||
|
(
|
||||||
|
recvRequests_,
|
||||||
|
scalarRecvBufs_,
|
||||||
|
work,
|
||||||
|
19462+cyclicAMIInterface_.index() // unique offset + patch index
|
||||||
|
);
|
||||||
|
|
||||||
// Receive requests all handled by last function call
|
// Receive requests all handled by last function call
|
||||||
recvRequests_.clear();
|
recvRequests_.clear();
|
||||||
@ -340,6 +349,8 @@ void Foam::cyclicAMIGAMGInterfaceField::updateInterfaceMatrix
|
|||||||
// Add result using coefficients
|
// Add result using coefficients
|
||||||
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
this->addToInternalField(result, !add, faceCells, coeffs, pnf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->updatedMatrix(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2021-2023 OpenCFD Ltd.
|
Copyright (C) 2021-2024 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -175,7 +175,15 @@ void Foam::cyclicAMIPolyPatch::initInterpolateUntransformed
|
|||||||
const auto& map = (owner() ? AMI.tgtMap() : AMI.srcMap());
|
const auto& map = (owner() ? AMI.tgtMap() : AMI.srcMap());
|
||||||
|
|
||||||
// Insert send/receive requests (non-blocking)
|
// Insert send/receive requests (non-blocking)
|
||||||
map.send(fld, sendRequests, sendBuffers, recvRequests, recvBuffers);
|
map.send
|
||||||
|
(
|
||||||
|
fld,
|
||||||
|
sendRequests,
|
||||||
|
sendBuffers,
|
||||||
|
recvRequests,
|
||||||
|
recvBuffers,
|
||||||
|
3894+this->index() // unique offset + patch index
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,7 +264,13 @@ Foam::tmp<Foam::Field<Type>> Foam::cyclicAMIPolyPatch::interpolate
|
|||||||
{
|
{
|
||||||
// Receive (= copy) data from buffers into work. TBD: receive directly
|
// Receive (= copy) data from buffers into work. TBD: receive directly
|
||||||
// into slices of work.
|
// into slices of work.
|
||||||
map.receive(requests, recvBuffers, work);
|
map.receive
|
||||||
|
(
|
||||||
|
requests,
|
||||||
|
recvBuffers,
|
||||||
|
work,
|
||||||
|
3894+this->index() // unique offset + patch index
|
||||||
|
);
|
||||||
}
|
}
|
||||||
const Field<Type>& fld = (AMI.distributed() ? work : localFld);
|
const Field<Type>& fld = (AMI.distributed() ? work : localFld);
|
||||||
|
|
||||||
|
|||||||
@ -2026,6 +2026,9 @@ void Foam::polyTopoChange::reorderCoupledFaces
|
|||||||
// Rotation on new faces.
|
// Rotation on new faces.
|
||||||
labelList rotation(faces_.size(), Zero);
|
labelList rotation(faces_.size(), Zero);
|
||||||
|
|
||||||
|
// Allocate unique tag for all comms
|
||||||
|
const int oldTag = UPstream::incrMsgType();
|
||||||
|
|
||||||
PstreamBuffers pBufs;
|
PstreamBuffers pBufs;
|
||||||
|
|
||||||
// Send ordering
|
// Send ordering
|
||||||
@ -2131,6 +2134,9 @@ void Foam::polyTopoChange::reorderCoupledFaces
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset tag
|
||||||
|
UPstream::msgType(oldTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user