Class containing processor-to-processor mapping information. More...
Classes | |
class | transform |
Default transformation behaviour. More... | |
class | transformPosition |
Default transformation behaviour for position. More... | |
Public Member Functions | |
ClassName ("mapDistribute") | |
mapDistribute (const label comm=UPstream::worldComm) | |
Construct null. More... | |
mapDistribute (const mapDistribute &map) | |
Copy construct. More... | |
mapDistribute (mapDistribute &&map) | |
Move construct. More... | |
mapDistribute (const label constructSize, labelListList &&subMap, labelListList &&constructMap, const bool subHasFlip=false, const bool constructHasFlip=false, const label comm=UPstream::worldComm) | |
Move construct from components. More... | |
mapDistribute (const label constructSize, labelListList &&subMap, labelListList &&constructMap, labelListList &&transformElements, labelList &&transformStart, const bool subHasFlip=false, const bool constructHasFlip=false, const label comm=UPstream::worldComm) | |
Move construct from components. More... | |
mapDistribute (const labelUList &sendProcs, const labelUList &recvProcs, const label comm=UPstream::worldComm) | |
mapDistribute (const globalIndex &, labelList &elements, List< Map< label >> &compactMap, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm) | |
mapDistribute (const globalIndex &, labelListList &cellCells, List< Map< label >> &compactMap, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm) | |
mapDistribute (const globalIndex &, labelList &untransformedElements, const globalIndexAndTransform &, const labelPairList &transformedElements, labelList &transformedIndices, List< Map< label >> &compactMap, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm) | |
mapDistribute (const globalIndex &, labelListList &cellCells, const globalIndexAndTransform &, const List< labelPairList > &transformedElements, labelListList &transformedIndices, List< Map< label >> &compactMap, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm) | |
As above but with ListLists. More... | |
mapDistribute (labelListList &&subMap, const bool subHasFlip=false, const bool constructHasFlip=false, const label comm=UPstream::worldComm) | |
Construct from my elements to send. Assumes layout is my elements. More... | |
mapDistribute (Istream &is) | |
Construct from Istream. More... | |
autoPtr< mapDistribute > | clone () const |
Clone. More... | |
virtual | ~mapDistribute ()=default |
Destructor. More... | |
const labelListList & | transformElements () const |
For every globalIndexAndTransform::transformPermutations. More... | |
const labelList & | transformStart () const |
Destination in constructMap for transformed elements. More... | |
label | whichTransform (const label index) const |
Find transform from transformElements. More... | |
void | transfer (mapDistribute &map) |
Transfer the contents of the argument and annul the argument. More... | |
template<class T > | |
void | distribute (List< T > &fld, const bool dummyTransform=true, const int tag=UPstream::msgType()) const |
Distribute data using default commsType. More... | |
template<class T , class negateOp > | |
void | distribute (List< T > &fld, const negateOp &negOp, const bool dummyTransform=true, const int tag=UPstream::msgType()) const |
Distribute data using default commsType. More... | |
template<class T > | |
void | distribute (DynamicList< T > &fld, const bool dummyTransform=true, const int tag=UPstream::msgType()) const |
Distribute data using default commsType. More... | |
template<class T > | |
void | reverseDistribute (const label constructSize, List< T > &, const bool dummyTransform=true, const int tag=UPstream::msgType()) const |
Reverse distribute data using default commsType. More... | |
template<class T > | |
void | reverseDistribute (const label constructSize, const T &nullValue, List< T > &fld, const bool dummyTransform=true, const int tag=UPstream::msgType()) const |
Reverse distribute data using default commsType. More... | |
template<class T , class TransformOp > | |
void | distribute (const globalIndexAndTransform &, List< T > &fld, const TransformOp &top, const int tag=UPstream::msgType()) const |
Distribute with transforms. More... | |
template<class T , class TransformOp > | |
void | reverseDistribute (const globalIndexAndTransform &, const label constructSize, List< T > &fld, const TransformOp &top, const int tag=UPstream::msgType()) const |
Reverse distribute with transforms. More... | |
template<class T , class TransformOp > | |
void | reverseDistribute (const globalIndexAndTransform &, const label constructSize, const T &nullValue, List< T > &fld, const TransformOp &top, const int tag=UPstream::msgType()) const |
Reverse distribute with transforms. More... | |
void | printLayout (Ostream &os) const |
Debug: print layout. Can only be used on maps with sorted. More... | |
void | updateMesh (const mapPolyMesh &) |
Correct for topo change. More... | |
void | operator= (const mapDistribute &rhs) |
Copy assignment. More... | |
void | operator= (mapDistribute &&rhs) |
Move assignment. More... | |
![]() | |
ClassName ("mapDistributeBase") | |
mapDistributeBase (const label comm=UPstream::worldComm) | |
Construct null. More... | |
mapDistributeBase (const mapDistributeBase &map) | |
Copy construct. More... | |
mapDistributeBase (mapDistributeBase &&map) | |
Move construct. More... | |
mapDistributeBase (const label constructSize, labelListList &&subMap, labelListList &&constructMap, const bool subHasFlip=false, const bool constructHasFlip=false, const label comm=UPstream::worldComm) | |
Construct from components. More... | |
mapDistributeBase (const labelUList &sendProcs, const labelUList &recvProcs, const label comm=UPstream::worldComm) | |
Construct from reverse addressing: per data item the send. More... | |
mapDistributeBase (const globalIndex &, labelList &elements, List< Map< label >> &compactMap, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm) | |
Construct from list of (possibly) remote elements in globalIndex. More... | |
mapDistributeBase (const globalIndex &, labelListList &cellCells, List< Map< label >> &compactMap, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm) | |
Special variant that works with the info sorted into bins. More... | |
mapDistributeBase (labelListList &&subMap, const bool subHasFlip=false, const bool constructHasFlip=false, const label comm=UPstream::worldComm) | |
Construct from my elements to send. Assumes layout is my elements. More... | |
mapDistributeBase (Istream &is) | |
Construct from Istream. More... | |
label | constructSize () const |
Constructed data size. More... | |
label & | constructSize () |
Constructed data size. More... | |
const labelListList & | subMap () const |
From subsetted data back to original data. More... | |
labelListList & | subMap () |
From subsetted data back to original data. More... | |
const labelListList & | constructMap () const |
From subsetted data to new reconstructed data. More... | |
labelListList & | constructMap () |
From subsetted data to new reconstructed data. More... | |
bool | subHasFlip () const |
Does subMap include a sign. More... | |
bool & | subHasFlip () |
Does subMap include a sign. More... | |
bool | constructHasFlip () const |
Does constructMap include a sign. More... | |
bool & | constructHasFlip () |
Does constructMap include a sign. More... | |
label | comm () const |
const List< labelPair > & | schedule () const |
Return a schedule. Demand driven. See above. More... | |
void | transfer (mapDistributeBase &rhs) |
Transfer the contents of the argument and annul the argument. More... | |
void | compact (const boolList &elemIsUsed, const int tag=UPstream::msgType()) |
Compact maps. Gets per field a bool whether it is used (locally) More... | |
void | compact (const boolList &elemIsUsed, const label localSize, labelList &oldToNewSub, labelList &oldToNewConstruct, const int tag=UPstream::msgType()) |
Compact all maps and layout. Returns compaction maps for. More... | |
template<class T > | |
void | distribute (List< T > &fld, const int tag=UPstream::msgType()) const |
Distribute data using default commsType. More... | |
template<class T , class negateOp > | |
void | distribute (List< T > &fld, const negateOp &negOp, const int tag=UPstream::msgType()) const |
Distribute data using default commsType. More... | |
template<class T > | |
void | distribute (DynamicList< T > &fld, const int tag=UPstream::msgType()) const |
Distribute data using default commsType. More... | |
template<class T > | |
void | reverseDistribute (const label constructSize, List< T > &, const int tag=UPstream::msgType()) const |
Reverse distribute data using default commsType. More... | |
template<class T > | |
void | reverseDistribute (const label constructSize, const T &nullValue, List< T > &fld, const int tag=UPstream::msgType()) const |
Reverse distribute data using default commsType. More... | |
template<class T > | |
void | send (PstreamBuffers &, const List< T > &) const |
Do all sends using PstreamBuffers. More... | |
template<class T > | |
void | receive (PstreamBuffers &, List< T > &) const |
Do all receives using PstreamBuffers. More... | |
void | printLayout (Ostream &os) const |
Debug: print layout. Can only be used on maps with sorted. More... | |
void | updateMesh (const mapPolyMesh &) |
Correct for topo change. More... | |
void | operator= (const mapDistributeBase &rhs) |
Copy assignment. More... | |
void | operator= (mapDistributeBase &&rhs) |
Move assignment. More... | |
Friends | |
Istream & | operator>> (Istream &, mapDistribute &) |
Read dictionary from Istream. More... | |
Ostream & | operator<< (Ostream &, const mapDistribute &) |
Write dictionary to Ostream. More... | |
Additional Inherited Members | |
![]() | |
static List< labelPair > | schedule (const labelListList &subMap, const labelListList &constructMap, const int tag, const label comm=UPstream::worldComm) |
Calculate a schedule. See above. More... | |
static label | renumber (const globalIndex &, const List< Map< label >> &compactMap, const label globalElement) |
Helper for construct from globalIndex. Renumbers element. More... | |
template<class T , class negateOp > | |
static void | distribute (const Pstream::commsTypes commsType, const List< labelPair > &schedule, const label constructSize, const labelListList &subMap, const bool subHasFlip, const labelListList &constructMap, const bool constructHasFlip, List< T > &, const negateOp &negOp, const int tag=UPstream::msgType(), const label comm=UPstream::worldComm) |
Distribute data. Note:schedule only used for. More... | |
template<class T , class CombineOp , class negateOp > | |
static void | distribute (const Pstream::commsTypes commsType, const List< labelPair > &schedule, const label constructSize, const labelListList &subMap, const bool subHasFlip, const labelListList &constructMap, const bool constructHasFlip, List< T > &, const T &nullValue, const CombineOp &cop, const negateOp &negOp, const int tag=UPstream::msgType(), const label comm=UPstream::worldComm) |
Distribute data. If multiple processors writing to same. More... | |
![]() | |
void | calcCompactAddressing (const globalIndex &globalNumbering, const labelUList &elements, List< Map< label >> &compactMap) const |
Construct per processor compact addressing of the global elements. More... | |
void | calcCompactAddressing (const globalIndex &globalNumbering, const labelListList &elements, List< Map< label >> &compactMap) const |
void | exchangeAddressing (const int tag, const globalIndex &globalNumbering, labelList &elements, List< Map< label >> &compactMap, labelList &compactStart) |
void | exchangeAddressing (const int tag, const globalIndex &globalNumbering, labelListList &elements, List< Map< label >> &compactMap, labelList &compactStart) |
![]() | |
static void | checkReceivedSize (const label proci, const label expectedSize, const label receivedSize) |
template<class T , class CombineOp , class negateOp > | |
static void | flipAndCombine (const labelUList &map, const bool hasFlip, const UList< T > &rhs, const CombineOp &cop, const negateOp &negOp, List< T > &lhs) |
template<class T , class negateOp > | |
static T | accessAndFlip (const UList< T > &fld, const label index, const bool hasFlip, const negateOp &negOp) |
![]() | |
label | constructSize_ |
Size of reconstructed data. More... | |
labelListList | subMap_ |
Maps from subsetted data back to original data. More... | |
labelListList | constructMap_ |
Maps from subsetted data to new reconstructed data. More... | |
bool | subHasFlip_ |
Whether subMap includes flip or not. More... | |
bool | constructHasFlip_ |
Whether constructMap includes flip or not. More... | |
label | comm_ |
Communicator to use for parallel operations. More... | |
autoPtr< List< labelPair > > | schedulePtr_ |
Schedule. More... | |
Class containing processor-to-processor mapping information.
We store mapping from the bits-to-send to the complete starting list (subXXXMap) and from the received bits to their location in the new list (constructXXXMap).
Note: Schedule is a list of processor pairs (one send, one receive. One of them will be myself) which forms a scheduled (i.e. non-buffered) exchange. See distribute on how to use it. Note2: number of items sent on one processor have to equal the number of items received on the other processor.
To aid constructing these maps there are the constructors from global numbering, either with or without transforms.
It rewrites the input global indices into indices into the constructed data.
Any distribute with transforms is now done as: 1. exchange data with other processors and receive these into the slots for that processor 2. for all transformations transform a subset of the data according to transformElements_[transformI] and store this starting from transformStart_[transformI]
In the same way a reverse distribute will 1. apply the inverse transform to the data starting at transformStart_[transformI] and copy the result back into the transformElements_[transformI]. These might be local or remote slots. 2. the data in the remote slots will now be sent back to the correct location in the originating processor.
E.g. a map to handle
on e.g. processor 1 out of 2:
+——+ <- transformStart[2] | | | | <- transform2 applied to data in local or remote slots | | +——+ <- transformStart[1] | | | | <- transform1 applied to data in local or remote slots | | +——+ <- transformStart[1] | | | | <- transform0 applied to data in local or remote slots | | +——+ <- transformStart[0] | | | | <- data from proc2 | | +——+ | | | | <- data from proc0 | | +——+ <- mesh.nPoints() | | | | | | +——+ 0
When constructing from components optionally a 'flip' on the maps can be specified. This will interpret the map values as index+flip, similar to e.g. faceProcAddressing. The flip will only be applied to fieldTypes (scalar, vector, .. triad)
Definition at line 163 of file mapDistribute.H.
mapDistribute | ( | const label | comm = UPstream::worldComm | ) |
Construct null.
Definition at line 151 of file mapDistribute.C.
|
explicit |
Copy construct.
Definition at line 157 of file mapDistribute.C.
|
explicit |
Move construct.
Definition at line 165 of file mapDistribute.C.
References mapDistribute::transfer().
mapDistribute | ( | const label | constructSize, |
labelListList && | subMap, | ||
labelListList && | constructMap, | ||
const bool | subHasFlip = false , |
||
const bool | constructHasFlip = false , |
||
const label | comm = UPstream::worldComm |
||
) |
Move construct from components.
Definition at line 174 of file mapDistribute.C.
mapDistribute | ( | const label | constructSize, |
labelListList && | subMap, | ||
labelListList && | constructMap, | ||
labelListList && | transformElements, | ||
labelList && | transformStart, | ||
const bool | subHasFlip = false , |
||
const bool | constructHasFlip = false , |
||
const label | comm = UPstream::worldComm |
||
) |
Move construct from components.
Definition at line 196 of file mapDistribute.C.
mapDistribute | ( | const labelUList & | sendProcs, |
const labelUList & | recvProcs, | ||
const label | comm = UPstream::worldComm |
||
) |
Construct from reverse addressing: per data item the send processor and the receive processor.
Definition at line 222 of file mapDistribute.C.
mapDistribute | ( | const globalIndex & | globalNumbering, |
labelList & | elements, | ||
List< Map< label >> & | compactMap, | ||
const int | tag = Pstream::msgType() , |
||
const label | comm = UPstream::worldComm |
||
) |
Construct from list of (possibly) remote elements in globalIndex numbering (or -1).
Determines compact numbering (see above) and distribute map to get data into this ordering and renumbers the elements to be in compact numbering.
Definition at line 233 of file mapDistribute.C.
mapDistribute | ( | const globalIndex & | globalNumbering, |
labelListList & | cellCells, | ||
List< Map< label >> & | compactMap, | ||
const int | tag = Pstream::msgType() , |
||
const label | comm = UPstream::worldComm |
||
) |
Special variant that works with the info sorted into bins according to local indices.
For example, cellCells where cellCells[localCelli] is a list of global cells.
Definition at line 253 of file mapDistribute.C.
mapDistribute | ( | const globalIndex & | globalNumbering, |
labelList & | untransformedElements, | ||
const globalIndexAndTransform & | globalTransforms, | ||
const labelPairList & | transformedElements, | ||
labelList & | transformedIndices, | ||
List< Map< label >> & | compactMap, | ||
const int | tag = Pstream::msgType() , |
||
const label | comm = UPstream::worldComm |
||
) |
Construct from list of (possibly remote) untransformed elements in globalIndex numbering (or -1) and (possibly remote) transformed elements in globalIndexAndTransform numbering.
Determines compact numbering (see above) and distribute map to get data into this ordering and renumbers the elements to be in compact numbering.
Definition at line 273 of file mapDistribute.C.
References Foam::expressions::patchExpr::debug, forAll, globalIndexAndTransform::index(), UPstream::myProcNo(), n, Foam::Pout, globalIndexAndTransform::processor(), List< T >::setSize(), globalIndexAndTransform::transformIndex(), globalIndexAndTransform::transformPermutations(), and Foam::Zero.
mapDistribute | ( | const globalIndex & | globalNumbering, |
labelListList & | cellCells, | ||
const globalIndexAndTransform & | globalTransforms, | ||
const List< labelPairList > & | transformedElements, | ||
labelListList & | transformedIndices, | ||
List< Map< label >> & | compactMap, | ||
const int | tag = Pstream::msgType() , |
||
const label | comm = UPstream::worldComm |
||
) |
As above but with ListLists.
Definition at line 381 of file mapDistribute.C.
References Foam::expressions::patchExpr::debug, forAll, globalIndexAndTransform::index(), UPstream::myProcNo(), n, Foam::Pout, globalIndexAndTransform::processor(), List< T >::setSize(), globalIndexAndTransform::transformIndex(), globalIndexAndTransform::transformPermutations(), and Foam::Zero.
|
explicit |
Construct from my elements to send. Assumes layout is my elements.
first followed by elements from all other processors in consecutive order
Definition at line 502 of file mapDistribute.C.
|
explicit |
Construct from Istream.
Definition at line 513 of file mapDistribute.C.
|
virtualdefault |
Destructor.
ClassName | ( | "mapDistribute" | ) |
Foam::autoPtr< Foam::mapDistribute > clone | ( | ) | const |
Clone.
Definition at line 519 of file mapDistribute.C.
References autoPtr< T >::New().
|
inline |
For every globalIndexAndTransform::transformPermutations.
gives the elements that need to be transformed
Definition at line 459 of file mapDistribute.H.
|
inline |
Destination in constructMap for transformed elements.
Definition at line 465 of file mapDistribute.H.
Foam::label whichTransform | ( | const label | index | ) | const |
Find transform from transformElements.
Definition at line 527 of file mapDistribute.C.
References Foam::findLower().
void transfer | ( | mapDistribute & | map | ) |
Transfer the contents of the argument and annul the argument.
Definition at line 533 of file mapDistribute.C.
References mapDistributeBase::transfer().
Referenced by IOmapDistribute::IOmapDistribute(), and mapDistribute::mapDistribute().
void distribute | ( | List< T > & | fld, |
const bool | dummyTransform = true , |
||
const int | tag = UPstream::msgType() |
||
) | const |
Distribute data using default commsType.
Definition at line 152 of file mapDistributeTemplates.C.
References fld.
Referenced by AMIInterpolation::agglomerate(), extendedFaceToCellStencil::collectData(), extendedCellToFaceStencil::collectData(), hexRef8Data::distribute(), mappedPatchBase::distribute(), mapDistributePolyMesh::distributeCellData(), mapDistributePolyMesh::distributeFaceData(), mapDistributeLagrangian::distributeLagrangianData(), mapDistributePolyMesh::distributePatchData(), mapDistributePolyMesh::distributePointData(), cellVolumeWeight::findHoles(), inverseDistance::findHoles(), distributedTriSurfaceMesh::findNearest(), distributedTriSurfaceMesh::getVolumeType(), globalIndexAndTransform::globalIndexAndTransform(), AMIInterpolation::interpolateToSource(), AMIInterpolation::interpolateToTarget(), distributedTriSurfaceMesh::localQueries(), meshToMesh::mapSrcToTgt(), meshToMesh::mapTgtToSrc(), globalMeshData::mergePoints(), semiPermeableBaffleMassFractionFvPatchScalarField::phiY(), PatchTools::pointNormals(), sampledPatchInternalField::sampleOnPoints(), globalMeshData::syncData(), pointConstraints::syncUntransformedData(), thermalBaffle1DFvPatchScalarField< solidType >::updateCoeffs(), Sampled< Type >::value(), and dynamicOversetFvMesh::writeObject().
void distribute | ( | List< T > & | fld, |
const negateOp & | negOp, | ||
const bool | dummyTransform = true , |
||
const int | tag = UPstream::msgType() |
||
) | const |
Distribute data using default commsType.
Fill in transformed slots with copies
Definition at line 132 of file mapDistributeTemplates.C.
References mapDistributeBase::distribute(), and fld.
void distribute | ( | DynamicList< T > & | fld, |
const bool | dummyTransform = true , |
||
const int | tag = UPstream::msgType() |
||
) | const |
Distribute data using default commsType.
Definition at line 164 of file mapDistributeTemplates.C.
References fld.
void reverseDistribute | ( | const label | constructSize, |
List< T > & | fld, | ||
const bool | dummyTransform = true , |
||
const int | tag = UPstream::msgType() |
||
) | const |
Reverse distribute data using default commsType.
Definition at line 182 of file mapDistributeTemplates.C.
References fld, and mapDistributeBase::reverseDistribute().
Referenced by distributedTriSurfaceMesh::findNearest(), distributedTriSurfaceMesh::getField(), distributedTriSurfaceMesh::getNormal(), distributedTriSurfaceMesh::getRegion(), mappedPatchFieldBase< scalar >::mappedField(), globalMeshData::mergePoints(), PatchTools::pointNormals(), sampledPatchInternalField::sampleOnPoints(), globalMeshData::syncData(), pointConstraints::syncUntransformedData(), and Sampled< Type >::value().
void reverseDistribute | ( | const label | constructSize, |
const T & | nullValue, | ||
List< T > & | fld, | ||
const bool | dummyTransform = true , |
||
const int | tag = UPstream::msgType() |
||
) | const |
Reverse distribute data using default commsType.
Since constructSize might be larger than supplied size supply a nullValue
Definition at line 200 of file mapDistributeTemplates.C.
References fld, and mapDistributeBase::reverseDistribute().
void distribute | ( | const globalIndexAndTransform & | git, |
List< T > & | fld, | ||
const TransformOp & | top, | ||
const int | tag = UPstream::msgType() |
||
) | const |
Distribute with transforms.
Definition at line 219 of file mapDistributeTemplates.C.
References fld.
void reverseDistribute | ( | const globalIndexAndTransform & | git, |
const label | constructSize, | ||
List< T > & | fld, | ||
const TransformOp & | top, | ||
const int | tag = UPstream::msgType() |
||
) | const |
Reverse distribute with transforms.
Definition at line 235 of file mapDistributeTemplates.C.
References fld.
void reverseDistribute | ( | const globalIndexAndTransform & | git, |
const label | constructSize, | ||
const T & | nullValue, | ||
List< T > & | fld, | ||
const TransformOp & | top, | ||
const int | tag = UPstream::msgType() |
||
) | const |
Reverse distribute with transforms.
Definition at line 255 of file mapDistributeTemplates.C.
References fld.
void printLayout | ( | Ostream & | os | ) | const |
Debug: print layout. Can only be used on maps with sorted.
storage (local data first, then non-local data)
Definition at line 133 of file mapDistribute.C.
References Foam::endl(), forAll, os(), and mapDistributeBase::printLayout().
|
inline |
void operator= | ( | const mapDistribute & | rhs | ) |
Copy assignment.
Definition at line 548 of file mapDistribute.C.
References mapDistributeBase::operator=().
Referenced by IOmapDistribute::IOmapDistribute().
void operator= | ( | mapDistribute && | rhs | ) |
Move assignment.
Definition at line 561 of file mapDistribute.C.
|
friend |
Read dictionary from Istream.
|
friend |
Write dictionary to Ostream.