distributionMapBase Class Reference

Class containing processor-to-processor mapping information. More...

Inheritance diagram for distributionMapBase:
Collaboration diagram for distributionMapBase:

Public Member Functions

 ClassName ("distributionMapBase")
 
 distributionMapBase ()
 Construct null. More...
 
 distributionMapBase (const label constructSize, const labelListList &&subMap, const labelListList &&constructMap, const bool subHasFlip=false, const bool constructHasFlip=false)
 Move construct from components. More...
 
 distributionMapBase (const labelList &sendProcs, const labelList &recvProcs)
 Construct from reverse addressing: per data item the send. More...
 
 distributionMapBase (const globalIndex &, labelList &elements, List< Map< label >> &compactMap, const int tag=Pstream::msgType())
 Construct from list of (possibly) remote elements in globalIndex. More...
 
 distributionMapBase (const globalIndex &, labelListList &cellCells, List< Map< label >> &compactMap, const int tag=Pstream::msgType())
 Special variant that works with the info sorted into bins. More...
 
 distributionMapBase (const distributionMapBase &)
 Construct copy. More...
 
 distributionMapBase (distributionMapBase &&)
 Move constructor. More...
 
 distributionMapBase (Istream &)
 Construct from Istream. More...
 
label constructSize () const
 Constructed data size. More...
 
labelconstructSize ()
 Constructed data size. More...
 
const labelListListsubMap () const
 From subsetted data back to original data. More...
 
labelListListsubMap ()
 From subsetted data back to original data. More...
 
const labelListListconstructMap () const
 From subsetted data to new reconstructed data. More...
 
labelListListconstructMap ()
 From subsetted data to new reconstructed data. More...
 
bool subHasFlip () const
 Does subMap include a sign. More...
 
boolsubHasFlip ()
 Does subMap include a sign. More...
 
bool constructHasFlip () const
 Does constructMap include a sign. More...
 
boolconstructHasFlip ()
 Does constructMap include a sign. More...
 
const List< labelPair > & schedule () const
 Return a schedule. Demand driven. See above. More...
 
void transfer (distributionMapBase &)
 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 operator= (const distributionMapBase &)
 
void operator= (distributionMapBase &&)
 

Static Public Member Functions

static List< labelPairschedule (const labelListList &subMap, const labelListList &constructMap, const int tag)
 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())
 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 CombineOp &cop, const negateOp &negOp, const T &nullValue, const int tag=UPstream::msgType())
 Distribute data. If multiple processors writing to same. More...
 

Protected Member Functions

void calcCompactAddressing (const globalIndex &globalNumbering, const labelList &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 Protected Member Functions

static void checkReceivedSize (const label proci, const label expectedSize, const label receivedSize)
 
template<class T , class CombineOp , class negateOp >
static void flipAndCombine (const UList< label > &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)
 

Protected Attributes

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...
 
autoPtr< List< labelPair > > schedulePtr_
 Schedule. More...
 

Friends

Istreamoperator>> (Istream &, distributionMapBase &)
 Read dictionary from Istream. More...
 
Ostreamoperator<< (Ostream &, const distributionMapBase &)
 Write dictionary to Ostream. More...
 

Detailed Description

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).

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.

Constructors using compact numbering: layout is

  • all my own elements first (whether used or not)
  • followed by used-only remote elements sorted by remote processor. So e.g 4 procs and on proc 1 the compact table will first have all globalIndex.localSize() elements from proc1 followed by used-only elements of proc0, proc2, proc3. The constructed distributionMapBase sends the local elements from and receives the remote elements into their compact position. compactMap[proci] is the position of elements from proci in the compact map. compactMap[myProcNo()] is empty since trivial addressing.

It rewrites the input global indices into indices into the constructed data.

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)

Source files

Definition at line 96 of file distributionMapBase.H.

Constructor & Destructor Documentation

◆ distributionMapBase() [1/8]

Construct null.

Definition at line 553 of file distributionMapBase.C.

Referenced by distributionMapBase::distributionMapBase().

Here is the caller graph for this function:

◆ distributionMapBase() [2/8]

distributionMapBase ( const label  constructSize,
const labelListList &&  subMap,
const labelListList &&  constructMap,
const bool  subHasFlip = false,
const bool  constructHasFlip = false 
)

Move construct from components.

Definition at line 563 of file distributionMapBase.C.

References distributionMapBase::distributionMapBase().

Here is the call graph for this function:

◆ distributionMapBase() [3/8]

distributionMapBase ( const labelList sendProcs,
const labelList recvProcs 
)

Construct from reverse addressing: per data item the send.

processor and the receive processor. (note: data is not stored sorted per processor so cannot use printLayout).

Definition at line 581 of file distributionMapBase.C.

References Foam::abort(), distributionMapBase::constructMap_, distributionMapBase::constructSize_, distributionMapBase::distributionMapBase(), Foam::FatalError, FatalErrorInFunction, forAll, UPstream::myProcNo(), UPstream::nProcs(), List< T >::setSize(), List< T >::size(), and distributionMapBase::subMap_.

Here is the call graph for this function:

◆ distributionMapBase() [4/8]

distributionMapBase ( const globalIndex globalNumbering,
labelList elements,
List< Map< label >> &  compactMap,
const int  tag = Pstream::msgType() 
)

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 655 of file distributionMapBase.C.

References distributionMapBase::calcCompactAddressing(), distributionMapBase::distributionMapBase(), distributionMapBase::exchangeAddressing(), Foam::Pout, and distributionMapBase::printLayout().

Here is the call graph for this function:

◆ distributionMapBase() [5/8]

distributionMapBase ( const globalIndex globalNumbering,
labelListList cellCells,
List< Map< label >> &  compactMap,
const int  tag = Pstream::msgType() 
)

Special variant that works with the info sorted into bins.

according to local indices. E.g. think cellCells where cellCells[localCellI] is a list of global cells

Definition at line 715 of file distributionMapBase.C.

References distributionMapBase::calcCompactAddressing(), distributionMapBase::exchangeAddressing(), Foam::Pout, and distributionMapBase::printLayout().

Here is the call graph for this function:

◆ distributionMapBase() [6/8]

Construct copy.

Definition at line 774 of file distributionMapBase.C.

◆ distributionMapBase() [7/8]

Move constructor.

Definition at line 785 of file distributionMapBase.C.

◆ distributionMapBase() [8/8]

Construct from Istream.

Definition at line 796 of file distributionMapBase.C.

Member Function Documentation

◆ checkReceivedSize()

void checkReceivedSize ( const label  proci,
const label  expectedSize,
const label  receivedSize 
)
staticprotected

Definition at line 191 of file distributionMapBase.C.

References Foam::abort(), Foam::FatalError, and FatalErrorInFunction.

Referenced by distributionMapBase::schedule().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ calcCompactAddressing() [1/2]

void calcCompactAddressing ( const globalIndex globalNumbering,
const labelList elements,
List< Map< label >> &  compactMap 
) const
protected

Construct per processor compact addressing of the global elements.

needed. The ones from the local processor are not included since these are always all needed.

Definition at line 283 of file distributionMapBase.C.

References forAll, globalIndex::isLocal(), UPstream::myProcNo(), UPstream::nProcs(), globalIndex::toLocal(), and globalIndex::whichProcID().

Referenced by distributionMap::distributionMap(), distributionMapBase::distributionMapBase(), and distributionMapBase::printLayout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ calcCompactAddressing() [2/2]

void calcCompactAddressing ( const globalIndex globalNumbering,
const labelListList elements,
List< Map< label >> &  compactMap 
) const
protected

◆ exchangeAddressing() [1/2]

void exchangeAddressing ( const int  tag,
const globalIndex globalNumbering,
labelList elements,
List< Map< label >> &  compactMap,
labelList compactStart 
)
protected

◆ exchangeAddressing() [2/2]

void exchangeAddressing ( const int  tag,
const globalIndex globalNumbering,
labelListList elements,
List< Map< label >> &  compactMap,
labelList compactStart 
)
protected

◆ flipAndCombine()

void flipAndCombine ( const UList< label > &  map,
const bool  hasFlip,
const UList< T > &  rhs,
const CombineOp &  cop,
const negateOp &  negOp,
List< T > &  lhs 
)
staticprotected

Definition at line 35 of file distributionMapBaseTemplates.C.

References distributionMapBase::accessAndFlip(), Foam::exit(), Foam::FatalError, FatalErrorInFunction, forAll, UList< T >::size(), and T.

Referenced by distributionMapBase::receive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ accessAndFlip()

T accessAndFlip ( const UList< T > &  fld,
const label  index,
const bool  hasFlip,
const negateOp &  negOp 
)
staticprotected

Definition at line 80 of file distributionMapBaseTemplates.C.

References distributionMapBase::distribute(), Foam::exit(), Foam::FatalError, FatalErrorInFunction, UList< T >::size(), and T.

Referenced by distributionMapBase::compact(), and distributionMapBase::flipAndCombine().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ClassName()

ClassName ( "distributionMapBase"  )

◆ constructSize() [1/2]

◆ constructSize() [2/2]

label& constructSize ( )
inline

Constructed data size.

Definition at line 259 of file distributionMapBase.H.

References distributionMapBase::constructSize_.

◆ subMap() [1/2]

◆ subMap() [2/2]

labelListList& subMap ( )
inline

From subsetted data back to original data.

Definition at line 271 of file distributionMapBase.H.

References distributionMapBase::subMap_.

◆ constructMap() [1/2]

◆ constructMap() [2/2]

labelListList& constructMap ( )
inline

From subsetted data to new reconstructed data.

Definition at line 283 of file distributionMapBase.H.

References distributionMapBase::constructMap_.

◆ subHasFlip() [1/2]

bool subHasFlip ( ) const
inline

Does subMap include a sign.

Definition at line 289 of file distributionMapBase.H.

References distributionMapBase::subHasFlip_.

Referenced by distributionMapBase::constructHasFlip(), and distributionMap::transformPosition::operator()().

Here is the caller graph for this function:

◆ subHasFlip() [2/2]

bool& subHasFlip ( )
inline

Does subMap include a sign.

Definition at line 295 of file distributionMapBase.H.

References distributionMapBase::subHasFlip_.

◆ constructHasFlip() [1/2]

bool constructHasFlip ( ) const
inline

Does constructMap include a sign.

Definition at line 301 of file distributionMapBase.H.

References distributionMapBase::constructHasFlip_.

Referenced by distributionMapBase::constructHasFlip(), and distributionMap::transformPosition::operator()().

Here is the caller graph for this function:

◆ constructHasFlip() [2/2]

◆ schedule() [1/2]

Foam::List< Foam::labelPair > schedule ( const labelListList subMap,
const labelListList constructMap,
const int  tag 
)
static

◆ schedule() [2/2]

const Foam::List< Foam::labelPair > & schedule ( ) const

Return a schedule. Demand driven. See above.

Definition at line 174 of file distributionMapBase.C.

References distributionMapBase::checkReceivedSize(), and UPstream::msgType().

Referenced by distributionMapBase::constructHasFlip(), distributionMapBase::distribute(), and distributionMapBase::reverseDistribute().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ transfer()

void transfer ( distributionMapBase rhs)

Transfer the contents of the argument and annul the argument.

Definition at line 804 of file distributionMapBase.C.

References distributionMapBase::constructHasFlip_, distributionMapBase::constructMap_, distributionMapBase::constructSize_, distributionMapBase::renumber(), distributionMapBase::schedulePtr_, distributionMapBase::subHasFlip_, distributionMapBase::subMap_, and List< T >::transfer().

Referenced by distributionMapBase::constructHasFlip(), and distributionMap::transfer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ renumber()

Foam::label renumber ( const globalIndex globalNumbering,
const List< Map< label >> &  compactMap,
const label  globalElement 
)
static

Helper for construct from globalIndex. Renumbers element.

(in globalIndex numbering) into compact indices.

Definition at line 816 of file distributionMapBase.C.

References distributionMapBase::compact(), globalIndex::isLocal(), globalIndex::toLocal(), and globalIndex::whichProcID().

Referenced by distributionMapBase::constructHasFlip(), and distributionMapBase::transfer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ compact() [1/2]

void compact ( const boolList elemIsUsed,
const int  tag = UPstream::msgType() 
)

Compact maps. Gets per field a bool whether it is used (locally)

and works out itself what this side and sender side can remove from maps. Only compacts non-local elements (i.e. the stuff that gets sent over), does not change the local layout

Definition at line 840 of file distributionMapBase.C.

References distributionMapBase::accessAndFlip(), UList< T >::begin(), distributionMapBase::constructHasFlip_, distributionMapBase::constructMap_, distributionMapBase::constructSize_, forAll, Foam::mag(), Foam::max(), UPstream::myProcNo(), UPstream::nonBlocking, UPstream::nProcs(), UPstream::nRequests(), UPstream::parRun(), UIPstream::read(), distributionMapBase::schedulePtr_, List< T >::setSize(), List< T >::size(), distributionMapBase::subMap_, List< T >::transfer(), UPstream::waitRequests(), and UOPstream::write().

Referenced by distributionMapBase::constructHasFlip(), and distributionMapBase::renumber().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ compact() [2/2]

◆ distribute() [1/5]

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 > &  field,
const negateOp &  negOp,
const int  tag = UPstream::msgType() 
)
static

◆ distribute() [2/5]

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 > &  field,
const CombineOp &  cop,
const negateOp &  negOp,
const T nullValue,
const int  tag = UPstream::msgType() 
)
static

Distribute data. If multiple processors writing to same.

position adds contributions using cop.

Definition at line 627 of file distributionMapBaseTemplates.C.

References Foam::abort(), UList< T >::begin(), Foam::FatalError, FatalErrorInFunction, PstreamBuffers::finishedSends(), forAll, Foam::blockMeshTools::read(), distributionMapBase::send(), List< T >::setSize(), List< T >::size(), T, List< T >::transfer(), and Foam::vtkWriteOps::write().

Here is the call graph for this function:

◆ distribute() [3/5]

void distribute ( List< T > &  fld,
const int  tag = UPstream::msgType() 
) const

Distribute data using default commsType.

Definition at line 1264 of file distributionMapBaseTemplates.C.

References distributionMapBase::distribute().

Here is the call graph for this function:

◆ distribute() [4/5]

◆ distribute() [5/5]

void distribute ( DynamicList< T > &  fld,
const int  tag = UPstream::msgType() 
) const

◆ reverseDistribute() [1/2]

void reverseDistribute ( const label  constructSize,
List< T > &  fld,
const int  tag = UPstream::msgType() 
) const

◆ reverseDistribute() [2/2]

void reverseDistribute ( const label  constructSize,
const T nullValue,
List< T > &  fld,
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 1356 of file distributionMapBaseTemplates.C.

References UPstream::blocking, distributionMapBase::constructHasFlip_, distributionMapBase::constructMap_, UPstream::defaultCommsType, distributionMapBase::distribute(), UPstream::nonBlocking, distributionMapBase::schedule(), UPstream::scheduled, distributionMapBase::subHasFlip_, and distributionMapBase::subMap_.

Here is the call graph for this function:

◆ send()

void send ( PstreamBuffers pBufs,
const List< T > &  field 
) const

Do all sends using PstreamBuffers.

Definition at line 1126 of file distributionMapBaseTemplates.C.

References PstreamBuffers::finishedSends(), forAll, and List< T >::size().

Referenced by distributionMapBase::constructHasFlip(), and distributionMapBase::distribute().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ receive()

◆ printLayout()

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 208 of file distributionMapBase.C.

References Foam::abort(), distributionMapBase::calcCompactAddressing(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, forAll, Foam::labelMax, Foam::labelMin, Foam::mag(), Foam::max(), Foam::min(), UPstream::myProcNo(), and UPstream::nProcs().

Referenced by distributionMapBase::constructHasFlip(), distributionMapBase::distributionMapBase(), and distributionMap::printLayout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=() [1/2]

◆ operator=() [2/2]

void operator= ( distributionMapBase &&  )

Friends And Related Function Documentation

◆ operator>>

Istream& operator>> ( Istream ,
distributionMapBase  
)
friend

Read dictionary from Istream.

Referenced by distributionMapBase::constructHasFlip().

◆ operator<<

Ostream& operator<< ( Ostream ,
const distributionMapBase  
)
friend

Write dictionary to Ostream.

Referenced by distributionMapBase::constructHasFlip().

Member Data Documentation

◆ constructSize_

◆ subMap_

◆ constructMap_

◆ subHasFlip_

◆ constructHasFlip_

◆ schedulePtr_

autoPtr<List<labelPair> > schedulePtr_
mutableprotected

The documentation for this class was generated from the following files: