BUG: globalIndex gather/scatter fails with multi-world (fixes #2706)

- was using UPstream::procIDs(), which returns the sub-ranks with
  respect to the parent communicator. This is normally just an
  identity list (single-world) but with multi-world the indexing
  is incorrect.  Use UPstream::allProcs() instead.
This commit is contained in:
Mark Olesen
2023-02-20 14:52:25 +01:00
parent a597c044c7
commit c9081d5daf
3 changed files with 14 additions and 14 deletions

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2018-2022 OpenCFD Ltd. Copyright (C) 2018-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -489,12 +489,12 @@ public:
//- Collect indirect data in processor order on master //- Collect indirect data in processor order on master
// Handles contiguous/non-contiguous data, skips empty fields. // Handles contiguous/non-contiguous data, skips empty fields.
template<class Type, class Addr> template<class ProcIDsContainer, class Type, class Addr>
static void gather static void gather
( (
const labelUList& offsets, //!< offsets (master only) const labelUList& offsets, //!< offsets (master only)
const label comm, //!< communicator const label comm, //!< communicator
const UList<int>& procIDs, const ProcIDsContainer& procIDs,
const IndirectListBase<Type, Addr>& fld, const IndirectListBase<Type, Addr>& fld,
List<Type>& allFld, //! output field (master only) List<Type>& allFld, //! output field (master only)
const int tag = UPstream::msgType(), const int tag = UPstream::msgType(),

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2013-2017 OpenFOAM Foundation Copyright (C) 2013-2017 OpenFOAM Foundation
Copyright (C) 2019-2022 OpenCFD Ltd. Copyright (C) 2019-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -248,12 +248,12 @@ void Foam::globalIndex::gather
} }
template<class Type, class Addr> template<class ProcIDsContainer, class Type, class Addr>
void Foam::globalIndex::gather void Foam::globalIndex::gather
( (
const labelUList& off, // needed on master only const labelUList& off, // needed on master only
const label comm, const label comm,
const UList<int>& procIDs, const ProcIDsContainer& procIDs,
const IndirectListBase<Type, Addr>& fld, const IndirectListBase<Type, Addr>& fld,
List<Type>& allFld, List<Type>& allFld,
const int tag, const int tag,
@ -368,7 +368,7 @@ void Foam::globalIndex::gather
( (
offsets_, // needed on master only offsets_, // needed on master only
comm, comm,
UPstream::procID(comm), UPstream::allProcs(comm), // All communicator ranks
sendData, sendData,
allData, allData,
tag, tag,
@ -404,7 +404,7 @@ void Foam::globalIndex::gather
( (
offsets_, // needed on master only offsets_, // needed on master only
comm, comm,
UPstream::procID(comm), UPstream::allProcs(comm), // All communicator ranks
sendData, sendData,
allData, allData,
tag, tag,
@ -622,7 +622,7 @@ void Foam::globalIndex::mpiGather
( (
offsets_, // needed on master only offsets_, // needed on master only
comm, comm,
UPstream::procID(comm), UPstream::allProcs(comm), // All communicator ranks
sendData, sendData,
allData, allData,
tag, tag,
@ -967,7 +967,7 @@ void Foam::globalIndex::scatter
( (
offsets_, // needed on master only offsets_, // needed on master only
comm, comm,
UPstream::procID(comm), UPstream::allProcs(comm), // All communicator ranks
allData, allData,
localData, localData,
tag, tag,

View File

@ -1949,7 +1949,7 @@ Foam::distributedTriSurfaceMesh::independentlyDistributedBbs
// //globalBorderTris.gather // //globalBorderTris.gather
// //( // //(
// // UPstream::worldComm, // // UPstream::worldComm,
// // UPstream::procID(Pstream::worldComm), // // UPstream::allProcs(UPstream::worldComm),
// // globalBorderCentres // // globalBorderCentres
// //); // //);
// pointField globalBorderCentres(allCentres); // pointField globalBorderCentres(allCentres);
@ -1996,7 +1996,7 @@ Foam::distributedTriSurfaceMesh::independentlyDistributedBbs
// //globalBorderTris.scatter // //globalBorderTris.scatter
// //( // //(
// // UPstream::worldComm, // // UPstream::worldComm,
// // UPstream::procID(Pstream::worldComm), // // UPstream::allProcs(UPstream::worldComm),
// // isMasterPoint // // isMasterPoint
// //); // //);
// //boolList isMasterBorder(s.size(), false); // //boolList isMasterBorder(s.size(), false);
@ -2094,7 +2094,7 @@ Foam::distributedTriSurfaceMesh::independentlyDistributedBbs
globalTris().gather globalTris().gather
( (
UPstream::worldComm, UPstream::worldComm,
UPstream::procID(Pstream::worldComm), UPstream::allProcs(UPstream::worldComm),
allCentres allCentres
); );
} }
@ -2144,7 +2144,7 @@ Foam::distributedTriSurfaceMesh::independentlyDistributedBbs
globalTris().scatter globalTris().scatter
( (
UPstream::worldComm, UPstream::worldComm,
UPstream::procID(Pstream::worldComm), UPstream::allProcs(UPstream::worldComm),
allDistribution, allDistribution,
distribution distribution
); );