mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: additional methods for globalIndex
- const version of offsets(). - empty() method to test for empty offsets, or zero overall size - reset() methods for reseting the sizes. For example, when the context has shifted slightly. - localStart() methods, similar to localSize() methods STYLE: make globalIndex single parameter constructors explicit
This commit is contained in:
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
\\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -27,18 +27,27 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::globalIndex::globalIndex
|
||||
Foam::globalIndex::globalIndex(Istream& is)
|
||||
{
|
||||
is >> offsets_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::globalIndex::reset
|
||||
(
|
||||
const label localSize,
|
||||
const int tag,
|
||||
const label comm,
|
||||
const bool parallel
|
||||
)
|
||||
:
|
||||
offsets_(Pstream::nProcs(comm)+1)
|
||||
{
|
||||
labelList localSizes(Pstream::nProcs(comm), 0);
|
||||
offsets_.resize(Pstream::nProcs(comm)+1);
|
||||
|
||||
labelList localSizes(Pstream::nProcs(comm), Zero);
|
||||
localSizes[Pstream::myProcNo(comm)] = localSize;
|
||||
|
||||
if (parallel)
|
||||
{
|
||||
Pstream::gatherList(localSizes, tag, comm);
|
||||
@ -47,9 +56,9 @@ Foam::globalIndex::globalIndex
|
||||
|
||||
label offset = 0;
|
||||
offsets_[0] = 0;
|
||||
for (label proci = 0; proci < Pstream::nProcs(comm); proci++)
|
||||
for (label proci = 0; proci < Pstream::nProcs(comm); ++proci)
|
||||
{
|
||||
label oldOffset = offset;
|
||||
const label oldOffset = offset;
|
||||
offset += localSizes[proci];
|
||||
|
||||
if (offset < oldOffset)
|
||||
@ -65,20 +74,21 @@ Foam::globalIndex::globalIndex
|
||||
}
|
||||
|
||||
|
||||
Foam::globalIndex::globalIndex(const label localSize)
|
||||
:
|
||||
offsets_(Pstream::nProcs()+1)
|
||||
void Foam::globalIndex::reset(const label localSize)
|
||||
{
|
||||
labelList localSizes(Pstream::nProcs(), 0);
|
||||
offsets_.resize(Pstream::nProcs()+1);
|
||||
|
||||
labelList localSizes(Pstream::nProcs(), Zero);
|
||||
localSizes[Pstream::myProcNo()] = localSize;
|
||||
|
||||
Pstream::gatherList(localSizes, Pstream::msgType());
|
||||
Pstream::scatterList(localSizes, Pstream::msgType());
|
||||
|
||||
label offset = 0;
|
||||
offsets_[0] = 0;
|
||||
for (label proci = 0; proci < Pstream::nProcs(); proci++)
|
||||
for (label proci = 0; proci < Pstream::nProcs(); ++proci)
|
||||
{
|
||||
label oldOffset = offset;
|
||||
const label oldOffset = offset;
|
||||
offset += localSizes[proci];
|
||||
|
||||
if (offset < oldOffset)
|
||||
@ -94,12 +104,6 @@ Foam::globalIndex::globalIndex(const label localSize)
|
||||
}
|
||||
|
||||
|
||||
Foam::globalIndex::globalIndex(Istream& is)
|
||||
{
|
||||
is >> offsets_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||
|
||||
Foam::Istream& Foam::operator>>(Istream& is, globalIndex& gi)
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
\\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -78,11 +78,11 @@ public:
|
||||
|
||||
//- Construct from local max size.
|
||||
// Does communication with default communicator and message tag.
|
||||
globalIndex(const label localSize);
|
||||
inline explicit globalIndex(const label localSize);
|
||||
|
||||
//- Construct from local max size.
|
||||
// Does communication with given communicator and message tag
|
||||
globalIndex
|
||||
inline globalIndex
|
||||
(
|
||||
const label localSize,
|
||||
const int tag,
|
||||
@ -91,10 +91,10 @@ public:
|
||||
);
|
||||
|
||||
//- Copy construct from list of labels
|
||||
inline globalIndex(const labelUList& offsets);
|
||||
inline explicit globalIndex(const labelUList& offsets);
|
||||
|
||||
//- Move construct from list of labels
|
||||
inline globalIndex(labelList&& offsets);
|
||||
inline explicit globalIndex(labelList&& offsets);
|
||||
|
||||
//- Construct from Istream
|
||||
globalIndex(Istream& is);
|
||||
@ -102,14 +102,38 @@ public:
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Edit
|
||||
//- Check for null constructed or global sum == 0
|
||||
inline bool empty() const;
|
||||
|
||||
//- Change after construction
|
||||
inline labelList& offsets();
|
||||
//- Const-access to the offsets
|
||||
inline const labelList& offsets() const;
|
||||
|
||||
|
||||
// Edit
|
||||
|
||||
//- Write-access to the offsets, for changing after construction
|
||||
inline labelList& offsets();
|
||||
|
||||
//- Reset from local size.
|
||||
// Does communication with default communicator and message tag.
|
||||
void reset(const label localSize);
|
||||
|
||||
//- Reset from local size.
|
||||
// Does communication with given communicator and message tag
|
||||
void reset
|
||||
(
|
||||
const label localSize,
|
||||
const int tag,
|
||||
const label comm,
|
||||
const bool parallel // use parallel comms
|
||||
);
|
||||
|
||||
|
||||
// Queries relating to my processor (using world communicator)
|
||||
|
||||
//- My local start
|
||||
inline label localStart() const;
|
||||
|
||||
//- My local size
|
||||
inline label localSize() const;
|
||||
|
||||
@ -132,6 +156,12 @@ public:
|
||||
//- Global sum of localSizes
|
||||
inline label size() const;
|
||||
|
||||
//- Start of proci data
|
||||
inline label offset(const label proci) const;
|
||||
|
||||
//- Start of proci data
|
||||
inline label localStart(const label proci) const;
|
||||
|
||||
//- Size of proci data
|
||||
inline label localSize(const label proci) const;
|
||||
|
||||
@ -150,9 +180,6 @@ public:
|
||||
//- Which processor does global come from? Binary search.
|
||||
inline label whichProcID(const label i) const;
|
||||
|
||||
//- Start of proci data
|
||||
inline label offset(const label proci) const;
|
||||
|
||||
|
||||
// Other
|
||||
|
||||
|
||||
@ -28,6 +28,28 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
inline Foam::globalIndex::globalIndex(const label localSize)
|
||||
:
|
||||
globalIndex()
|
||||
{
|
||||
reset(localSize);
|
||||
}
|
||||
|
||||
|
||||
inline Foam::globalIndex::globalIndex
|
||||
(
|
||||
const label localSize,
|
||||
const int tag,
|
||||
const label comm,
|
||||
const bool parallel
|
||||
)
|
||||
:
|
||||
globalIndex()
|
||||
{
|
||||
reset(localSize, tag, comm, parallel);
|
||||
}
|
||||
|
||||
|
||||
inline Foam::globalIndex::globalIndex(const labelUList& offsets)
|
||||
:
|
||||
offsets_(offsets)
|
||||
@ -42,6 +64,18 @@ inline Foam::globalIndex::globalIndex(labelList&& offsets)
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
inline bool Foam::globalIndex::empty() const
|
||||
{
|
||||
return offsets_.empty() || offsets_.last() == 0;
|
||||
}
|
||||
|
||||
|
||||
inline const Foam::labelList& Foam::globalIndex::offsets() const
|
||||
{
|
||||
return offsets_;
|
||||
}
|
||||
|
||||
|
||||
inline Foam::labelList& Foam::globalIndex::offsets()
|
||||
{
|
||||
return offsets_;
|
||||
@ -54,6 +88,18 @@ inline Foam::label Foam::globalIndex::offset(const label proci) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::label Foam::globalIndex::localStart(const label proci) const
|
||||
{
|
||||
return offsets_[proci];
|
||||
}
|
||||
|
||||
|
||||
inline Foam::label Foam::globalIndex::localStart() const
|
||||
{
|
||||
return localStart(Pstream::myProcNo());
|
||||
}
|
||||
|
||||
|
||||
inline Foam::label Foam::globalIndex::localSize(const label proci) const
|
||||
{
|
||||
return offsets_[proci+1] - offsets_[proci];
|
||||
|
||||
Reference in New Issue
Block a user