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

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

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

References Foam::abort(), distributionMapBase::constructMap_, distributionMapBase::constructSize_, 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 654 of file distributionMapBase.C.

References distributionMapBase::calcCompactAddressing(), 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 714 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 190 of file distributionMapBase.C.

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

Here is the call 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 282 of file distributionMapBase.C.

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

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

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

Definition at line 331 of file distributionMapBase.C.

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

Here is the call graph for this function:

◆ 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 34 of file distributionMapBaseTemplates.C.

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

Here is the call graph for this function:

◆ accessAndFlip()

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

Definition at line 79 of file distributionMapBaseTemplates.C.

References Foam::exit(), Foam::FatalError, FatalErrorInFunction, fld(), and Foam::T().

Here is the call 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_.

◆ 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_.

◆ constructHasFlip() [2/2]

bool& constructHasFlip ( )
inline

Does constructMap include a sign.

Definition at line 307 of file distributionMapBase.H.

References distributionMapBase::constructHasFlip_.

◆ schedule() [1/2]

◆ 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 UPstream::msgType().

Here is the call 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::subHasFlip_, and distributionMapBase::subMap_.

Referenced by distributionMap::transfer().

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

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

Here is the call 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 839 of file distributionMapBase.C.

References UList< T >::begin(), forAll, Foam::mag(), Foam::max(), UPstream::myProcNo(), UPstream::nonBlocking, UPstream::nProcs(), UPstream::nRequests(), UPstream::parRun(), UIPstream::read(), List< T >::setSize(), List< T >::size(), UPstream::waitRequests(), and UOPstream::write().

Here is the call graph for this function:

◆ compact() [2/2]

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.

subMap and constructMap

Definition at line 991 of file distributionMapBase.C.

References UList< T >::begin(), forAll, Foam::mag(), UPstream::myProcNo(), UPstream::nonBlocking, UPstream::nProcs(), UPstream::nRequests(), UPstream::parRun(), UIPstream::read(), List< T >::setSize(), Foam::sign(), List< T >::size(), UPstream::waitRequests(), and UOPstream::write().

Here is the call graph for this function:

◆ 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() [3/5]

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

Distribute data using default commsType.

Definition at line 1263 of file distributionMapBaseTemplates.C.

References fld().

Here is the call graph for this function:

◆ distribute() [4/5]

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

Distribute data using default commsType.

Definition at line 1203 of file distributionMapBaseTemplates.C.

References UPstream::blocking, UPstream::defaultCommsType, fld(), UPstream::nonBlocking, and UPstream::scheduled.

Here is the call graph for this function:

◆ distribute() [5/5]

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

Distribute data using default commsType.

Definition at line 1275 of file distributionMapBaseTemplates.C.

References fld(), and List< T >::size().

Here is the call graph for this function:

◆ reverseDistribute() [1/2]

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

Reverse distribute data using default commsType.

Definition at line 1293 of file distributionMapBaseTemplates.C.

References UPstream::blocking, UPstream::defaultCommsType, fld(), UPstream::nonBlocking, and UPstream::scheduled.

Referenced by distributionMap::reverseDistribute().

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

◆ 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 1355 of file distributionMapBaseTemplates.C.

References UPstream::blocking, UPstream::defaultCommsType, fld(), UPstream::nonBlocking, and UPstream::scheduled.

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 1125 of file distributionMapBaseTemplates.C.

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

Here is the call graph for this function:

◆ receive()

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

Do all receives using PstreamBuffers.

Definition at line 1163 of file distributionMapBaseTemplates.C.

References Foam::abort(), Foam::FatalError, FatalErrorInFunction, UPstream::nProcs(), List< T >::setSize(), and List< T >::size().

Here is the call graph for this function:

◆ 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(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, forAll, Foam::labelMax, Foam::labelMin, Foam::mag(), Foam::max(), Foam::min(), UPstream::myProcNo(), UPstream::nProcs(), and Foam::offset().

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

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

◆ operator=() [1/2]

void operator= ( const distributionMapBase rhs)

◆ operator=() [2/2]

void operator= ( distributionMapBase &&  )

Friends And Related Function Documentation

◆ operator>>

Istream& operator>> ( Istream ,
distributionMapBase  
)
friend

Read dictionary from Istream.

◆ operator<<

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

Write dictionary to Ostream.

Member Data Documentation

◆ constructSize_

◆ subMap_

◆ constructMap_

◆ subHasFlip_

bool subHasFlip_
protected

◆ constructHasFlip_

bool constructHasFlip_
protected

◆ schedulePtr_

autoPtr<List<labelPair> > schedulePtr_
mutableprotected

Schedule.

Definition at line 119 of file distributionMapBase.H.


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