Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Friends
mapDistributeBase Class Reference

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

Inheritance diagram for mapDistributeBase:
Inheritance graph
[legend]
Collaboration diagram for mapDistributeBase:
Collaboration graph
[legend]

Public Member Functions

 ClassName ("mapDistributeBase")
 
 mapDistributeBase ()
 Construct null. More...
 
 mapDistributeBase (const label constructSize, const Xfer< labelListList > &subMap, const Xfer< labelListList > &constructMap, const bool subHasFlip=false, const bool constructHasFlip=false)
 Construct from components. More...
 
 mapDistributeBase (const labelList &sendProcs, const labelList &recvProcs)
 Construct from reverse addressing: per data item the send. More...
 
 mapDistributeBase (const globalIndex &, labelList &elements, List< Map< label > > &compactMap, const int tag=Pstream::msgType())
 Construct from list of (possibly) remote elements in globalIndex. More...
 
 mapDistributeBase (const globalIndex &, labelListList &cellCells, List< Map< label > > &compactMap, const int tag=Pstream::msgType())
 Special variant that works with the info sorted into bins. More...
 
 mapDistributeBase (const Xfer< mapDistributeBase > &)
 Construct by transferring parameter content. More...
 
 mapDistributeBase (const mapDistributeBase &)
 Construct copy. More...
 
 mapDistributeBase (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 (mapDistributeBase &)
 Transfer the contents of the argument and annul the argument. More...
 
Xfer< mapDistributeBasexfer ()
 Transfer contents to the Xfer container. 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 &)
 

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 Pstream::scheduled. 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
 
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 &, mapDistributeBase &)
 Read dictionary from Istream. More...
 
Ostreamoperator<< (Ostream &, const mapDistributeBase &)
 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).

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.

Constructors using compact numbering: layout is

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 91 of file mapDistributeBase.H.

Constructor & Destructor Documentation

◆ mapDistributeBase() [1/8]

Construct null.

Definition at line 555 of file mapDistributeBase.C.

◆ mapDistributeBase() [2/8]

mapDistributeBase ( const label  constructSize,
const Xfer< labelListList > &  subMap,
const Xfer< labelListList > &  constructMap,
const bool  subHasFlip = false,
const bool  constructHasFlip = false 
)

Construct from components.

Definition at line 566 of file mapDistributeBase.C.

◆ mapDistributeBase() [3/8]

mapDistributeBase ( 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 584 of file mapDistributeBase.C.

References Foam::abort(), Foam::FatalError, FatalErrorInFunction, forAll, UPstream::myProcNo(), UPstream::nProcs(), List::setSize(), and List::size().

Here is the call graph for this function:

◆ mapDistributeBase() [4/8]

mapDistributeBase ( 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 658 of file mapDistributeBase.C.

References Foam::Pout.

◆ mapDistributeBase() [5/8]

mapDistributeBase ( 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 718 of file mapDistributeBase.C.

References Foam::Pout.

◆ mapDistributeBase() [6/8]

Construct by transferring parameter content.

Definition at line 788 of file mapDistributeBase.C.

◆ mapDistributeBase() [7/8]

Construct copy.

Definition at line 777 of file mapDistributeBase.C.

◆ mapDistributeBase() [8/8]

Construct from Istream.

Definition at line 799 of file mapDistributeBase.C.

Member Function Documentation

◆ checkReceivedSize()

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

Definition at line 185 of file mapDistributeBase.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

Definition at line 280 of file mapDistributeBase.C.

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

Here is the call graph for this function:

◆ calcCompactAddressing() [2/2]

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

Definition at line 329 of file mapDistributeBase.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 35 of file mapDistributeBaseTemplates.C.

References Foam::exit(), Foam::FatalError, FatalErrorInFunction, forAll, and UList::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 80 of file mapDistributeBaseTemplates.C.

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

Referenced by mapDistributeBase::send().

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

◆ ClassName()

ClassName ( "mapDistributeBase"  )

◆ constructSize() [1/2]

label constructSize ( ) const
inline

◆ constructSize() [2/2]

label& constructSize ( )
inline

Constructed data size.

Definition at line 250 of file mapDistributeBase.H.

References mapDistributeBase::constructSize_.

◆ subMap() [1/2]

const labelListList& subMap ( ) const
inline

◆ subMap() [2/2]

labelListList& subMap ( )
inline

From subsetted data back to original data.

Definition at line 262 of file mapDistributeBase.H.

References mapDistributeBase::subMap_.

◆ constructMap() [1/2]

const labelListList& constructMap ( ) const
inline

◆ constructMap() [2/2]

labelListList& constructMap ( )
inline

From subsetted data to new reconstructed data.

Definition at line 274 of file mapDistributeBase.H.

References mapDistributeBase::constructMap_.

◆ subHasFlip() [1/2]

bool subHasFlip ( ) const
inline

Does subMap include a sign.

Definition at line 280 of file mapDistributeBase.H.

References mapDistributeBase::subHasFlip_.

Referenced by writeProcAddressing().

Here is the caller graph for this function:

◆ subHasFlip() [2/2]

bool& subHasFlip ( )
inline

Does subMap include a sign.

Definition at line 286 of file mapDistributeBase.H.

References mapDistributeBase::subHasFlip_.

◆ constructHasFlip() [1/2]

bool constructHasFlip ( ) const
inline

Does constructMap include a sign.

Definition at line 292 of file mapDistributeBase.H.

References mapDistributeBase::constructHasFlip_.

Referenced by writeProcAddressing().

Here is the caller graph for this function:

◆ constructHasFlip() [2/2]

bool& constructHasFlip ( )
inline

Does constructMap include a sign.

Definition at line 298 of file mapDistributeBase.H.

References mapDistributeBase::constructHasFlip_.

◆ schedule() [1/2]

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

Calculate a schedule. See above.

Definition at line 43 of file mapDistributeBase.C.

References Foam::findIndex(), forAll, HashSet< Key, Hash >::insert(), List::setSize(), List::size(), and HashTable< nil, word, string::hash >::toc().

Referenced by streamLineBase::write().

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

◆ schedule() [2/2]

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

Return a schedule. Demand driven. See above.

Definition at line 168 of file mapDistributeBase.C.

References mapDistributeBase::constructMap_, UPstream::msgType(), mapDistributeBase::schedulePtr_, and mapDistributeBase::subMap_.

Here is the call graph for this function:

◆ transfer()

void transfer ( mapDistributeBase rhs)

Transfer the contents of the argument and annul the argument.

Definition at line 807 of file mapDistributeBase.C.

References mapDistributeBase::constructHasFlip_, mapDistributeBase::constructMap_, mapDistributeBase::constructSize_, mapDistributeBase::subHasFlip_, and mapDistributeBase::subMap_.

Referenced by mapDistribute::transfer().

Here is the caller graph for this function:

◆ xfer()

Transfer contents to the Xfer container.

Definition at line 818 of file mapDistributeBase.C.

References Foam::xferMove().

Here is the call 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 825 of file mapDistributeBase.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 848 of file mapDistributeBase.C.

References forAll, Foam::mag(), Foam::max(), UPstream::myProcNo(), UPstream::nonBlocking, UPstream::nProcs(), UPstream::nRequests(), UPstream::parRun(), UIPstream::read(), List::setSize(), List::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 1009 of file mapDistributeBase.C.

References forAll, Foam::mag(), UPstream::myProcNo(), UPstream::nonBlocking, UPstream::nProcs(), UPstream::nRequests(), UPstream::parRun(), UIPstream::read(), List::setSize(), Foam::sign(), List::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 data. If multiple processors writing to same.

position adds contributions using cop.

Definition at line 603 of file mapDistributeBaseTemplates.C.

References Foam::abort(), Foam::FatalError, FatalErrorInFunction, PstreamBuffers::finishedSends(), forAll, Foam::read(), List::setSize(), List::size(), T, List::transfer(), and 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 1212 of file mapDistributeBaseTemplates.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 1152 of file mapDistributeBaseTemplates.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 1224 of file mapDistributeBaseTemplates.C.

References fld(), and List::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 1242 of file mapDistributeBaseTemplates.C.

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

Referenced by mapDistribute::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 1304 of file mapDistributeBaseTemplates.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

◆ receive()

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

Do all receives using PstreamBuffers.

Definition at line 1111 of file mapDistributeBaseTemplates.C.

References Foam::abort(), Foam::FatalError, FatalErrorInFunction, UPstream::nProcs(), List::setSize(), and List::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 202 of file mapDistributeBase.C.

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

Referenced by mapDistribute::printLayout().

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

◆ updateMesh()

void updateMesh ( const mapPolyMesh )
inline

Correct for topo change.

Definition at line 447 of file mapDistributeBase.H.

References NotImplemented.

◆ operator=()

void operator= ( const mapDistributeBase rhs)

Friends And Related Function Documentation

◆ operator>>

Istream& operator>> ( Istream ,
mapDistributeBase  
)
friend

Read dictionary from Istream.

◆ operator<<

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

Write dictionary to Ostream.

Field Documentation

◆ constructSize_

label constructSize_
protected

Size of reconstructed data.

Definition at line 98 of file mapDistributeBase.H.

Referenced by mapDistributeBase::constructSize(), mapDistributeBase::operator=(), and mapDistributeBase::transfer().

◆ subMap_

labelListList subMap_
protected

◆ constructMap_

labelListList constructMap_
protected

Maps from subsetted data to new reconstructed data.

Definition at line 104 of file mapDistributeBase.H.

Referenced by mapDistributeBase::constructMap(), mapDistributeBase::operator=(), mapDistributeBase::schedule(), and mapDistributeBase::transfer().

◆ subHasFlip_

bool subHasFlip_
protected

Whether subMap includes flip or not.

Definition at line 107 of file mapDistributeBase.H.

Referenced by mapDistributeBase::operator=(), mapDistributeBase::send(), mapDistributeBase::subHasFlip(), and mapDistributeBase::transfer().

◆ constructHasFlip_

bool constructHasFlip_
protected

Whether constructMap includes flip or not.

Definition at line 110 of file mapDistributeBase.H.

Referenced by mapDistributeBase::constructHasFlip(), mapDistributeBase::operator=(), and mapDistributeBase::transfer().

◆ schedulePtr_

autoPtr<List<labelPair> > schedulePtr_
mutableprotected

Schedule.

Definition at line 114 of file mapDistributeBase.H.

Referenced by mapDistributeBase::schedule().


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