mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
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:
@ -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(),
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user