Classes | Public Member Functions | Friends | List of all members
mapDistribute Class Reference

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

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

Classes

class  transform
 Default transformation behaviour. More...
 
class  transformPosition
 Default transformation behaviour for position. More...
 

Public Member Functions

 ClassName ("mapDistribute")
 
 mapDistribute ()
 Construct null. More...
 
 mapDistribute (const label constructSize, const Xfer< labelListList > &subMap, const Xfer< labelListList > &constructMap, const bool subHasFlip=false, const bool constructHasFlip=false)
 Construct from components. More...
 
 mapDistribute (const label constructSize, const Xfer< labelListList > &subMap, const Xfer< labelListList > &constructMap, const Xfer< labelListList > &transformElements, const Xfer< labelList > &transformStart, const bool subHasFlip=false, const bool constructHasFlip=false)
 Construct from components. More...
 
 mapDistribute (const labelList &sendProcs, const labelList &recvProcs)
 Construct from reverse addressing: per data item the send. More...
 
 mapDistribute (const globalIndex &, labelList &elements, List< Map< label >> &compactMap, const int tag=Pstream::msgType())
 Construct from list of (possibly) remote elements in globalIndex. More...
 
 mapDistribute (const globalIndex &, labelListList &cellCells, List< Map< label >> &compactMap, const int tag=Pstream::msgType())
 Special variant that works with the info sorted into bins. More...
 
 mapDistribute (const globalIndex &, labelList &untransformedElements, const globalIndexAndTransform &, const labelPairList &transformedElements, labelList &transformedIndices, List< Map< label >> &compactMap, const int tag=Pstream::msgType())
 Construct from list of (possibly remote) untransformed elements. More...
 
 mapDistribute (const globalIndex &, labelListList &cellCells, const globalIndexAndTransform &, const List< labelPairList > &transformedElements, labelListList &transformedIndices, List< Map< label >> &compactMap, const int tag=Pstream::msgType())
 As above but with ListLists. More...
 
 mapDistribute (const Xfer< mapDistribute > &)
 Construct by transferring parameter content. More...
 
 mapDistribute (const mapDistribute &)
 Construct copy. More...
 
 mapDistribute (Istream &)
 Construct from Istream. More...
 
autoPtr< mapDistributeclone () const
 Clone. More...
 
virtual ~mapDistribute ()
 Destructor. More...
 
const labelListListtransformElements () const
 For every globalIndexAndTransform::transformPermutations. More...
 
const labelListtransformStart () const
 Destination in constructMap for transformed elements. More...
 
label whichTransform (const label index) const
 Find transform from transformElements. More...
 
void transfer (mapDistribute &)
 Transfer the contents of the argument and annul the argument. More...
 
Xfer< mapDistributexfer ()
 Transfer contents to the Xfer container. 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 &)
 
- Public Member Functions inherited from mapDistributeBase
 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 &)
 

Friends

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

Additional Inherited Members

- Static Public Member Functions inherited from mapDistributeBase
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 inherited from mapDistributeBase
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 inherited from mapDistributeBase
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 inherited from mapDistributeBase
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...
 

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.

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

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 160 of file mapDistribute.H.

Constructor & Destructor Documentation

◆ mapDistribute() [1/11]

Construct null.

Definition at line 150 of file mapDistribute.C.

Referenced by mapDistribute::clone(), mapDistribute::mapDistribute(), and mapDistribute::transformPosition::operator()().

Here is the caller graph for this function:

◆ mapDistribute() [2/11]

mapDistribute ( 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 157 of file mapDistribute.C.

References mapDistribute::mapDistribute().

Here is the call graph for this function:

◆ mapDistribute() [3/11]

mapDistribute ( const label  constructSize,
const Xfer< labelListList > &  subMap,
const Xfer< labelListList > &  constructMap,
const Xfer< labelListList > &  transformElements,
const Xfer< labelList > &  transformStart,
const bool  subHasFlip = false,
const bool  constructHasFlip = false 
)

Construct from components.

Definition at line 177 of file mapDistribute.C.

References mapDistribute::mapDistribute().

Here is the call graph for this function:

◆ mapDistribute() [4/11]

mapDistribute ( 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 201 of file mapDistribute.C.

References mapDistribute::mapDistribute().

Here is the call graph for this function:

◆ mapDistribute() [5/11]

mapDistribute ( 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 211 of file mapDistribute.C.

References mapDistribute::mapDistribute().

Here is the call graph for this function:

◆ mapDistribute() [6/11]

mapDistribute ( 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 229 of file mapDistribute.C.

References mapDistribute::mapDistribute().

Here is the call graph for this function:

◆ mapDistribute() [7/11]

mapDistribute ( const globalIndex globalNumbering,
labelList untransformedElements,
const globalIndexAndTransform globalTransforms,
const labelPairList transformedElements,
labelList transformedIndices,
List< Map< label >> &  compactMap,
const int  tag = Pstream::msgType() 
)

Construct from list of (possibly remote) untransformed elements.

in globalIndex numbering (or -1) and (possibly remote) transformded 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 247 of file mapDistribute.C.

References mapDistributeBase::calcCompactAddressing(), mapDistributeBase::constructSize_, mapDistributeBase::exchangeAddressing(), forAll, globalIndexAndTransform::index(), mapDistribute::mapDistribute(), UPstream::myProcNo(), n, Foam::Pout, mapDistribute::printLayout(), globalIndexAndTransform::processor(), List< T >::setSize(), List< T >::size(), globalIndexAndTransform::transformIndex(), and globalIndexAndTransform::transformPermutations().

Here is the call graph for this function:

◆ mapDistribute() [8/11]

mapDistribute ( const globalIndex globalNumbering,
labelListList cellCells,
const globalIndexAndTransform globalTransforms,
const List< labelPairList > &  transformedElements,
labelListList transformedIndices,
List< Map< label >> &  compactMap,
const int  tag = Pstream::msgType() 
)

◆ mapDistribute() [9/11]

mapDistribute ( const Xfer< mapDistribute > &  map)

Construct by transferring parameter content.

Definition at line 477 of file mapDistribute.C.

◆ mapDistribute() [10/11]

mapDistribute ( const mapDistribute map)

Construct copy.

Definition at line 469 of file mapDistribute.C.

◆ mapDistribute() [11/11]

Construct from Istream.

Definition at line 492 of file mapDistribute.C.

◆ ~mapDistribute()

virtual ~mapDistribute ( )
inlinevirtual

Destructor.

Definition at line 421 of file mapDistribute.H.

References mapDistribute::transformElements().

Here is the call graph for this function:

Member Function Documentation

◆ ClassName()

ClassName ( "mapDistribute"  )

Referenced by mapDistribute::transformPosition::operator()().

Here is the caller graph for this function:

◆ clone()

Foam::autoPtr< Foam::mapDistribute > clone ( ) const

Clone.

Definition at line 498 of file mapDistribute.C.

References mapDistribute::mapDistribute().

Referenced by mapDistribute::transformPosition::operator()().

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

◆ transformElements()

const labelListList& transformElements ( ) const
inline

For every globalIndexAndTransform::transformPermutations.

gives the elements that need to be transformed

Definition at line 431 of file mapDistribute.H.

Referenced by mapDistribute::transformPosition::operator()(), and mapDistribute::~mapDistribute().

Here is the caller graph for this function:

◆ transformStart()

const labelList& transformStart ( ) const
inline

Destination in constructMap for transformed elements.

Definition at line 437 of file mapDistribute.H.

References mapDistributeBase::constructSize(), mapDistribute::distribute(), fld(), UPstream::msgType(), mapDistribute::printLayout(), mapDistribute::reverseDistribute(), Foam::T(), mapDistribute::transfer(), mapDistribute::whichTransform(), and mapDistribute::xfer().

Referenced by mapDistribute::transformPosition::operator()().

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

◆ whichTransform()

Foam::label whichTransform ( const label  index) const

Find transform from transformElements.

Definition at line 506 of file mapDistribute.C.

References Foam::findLower().

Referenced by mapDistribute::transformStart().

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

◆ transfer()

void transfer ( mapDistribute rhs)

Transfer the contents of the argument and annul the argument.

Definition at line 513 of file mapDistribute.C.

References List< T >::transfer(), and mapDistributeBase::transfer().

Referenced by IOmapDistribute::IOmapDistribute(), mapDistributePolyMesh::transfer(), and mapDistribute::transformStart().

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

◆ xfer()

Transfer contents to the Xfer container.

Definition at line 521 of file mapDistribute.C.

References Foam::xferMove().

Referenced by minEqOp< labelPair >::operator()(), and mapDistribute::transformStart().

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

◆ distribute() [1/4]

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

◆ distribute() [2/4]

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 130 of file mapDistributeTemplates.C.

References mapDistributeBase::distribute(), and mapDistribute::distribute().

Here is the call graph for this function:

◆ distribute() [3/4]

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

◆ reverseDistribute() [1/4]

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

◆ reverseDistribute() [2/4]

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 197 of file mapDistributeTemplates.C.

References mapDistribute::distribute(), and mapDistributeBase::reverseDistribute().

Here is the call graph for this function:

◆ distribute() [4/4]

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

Distribute with transforms.

Definition at line 216 of file mapDistributeTemplates.C.

References mapDistribute::distribute(), and mapDistribute::reverseDistribute().

Here is the call graph for this function:

◆ reverseDistribute() [3/4]

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 232 of file mapDistributeTemplates.C.

References mapDistribute::reverseDistribute().

Here is the call graph for this function:

◆ reverseDistribute() [4/4]

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 252 of file mapDistributeTemplates.C.

References mapDistribute::reverseDistribute().

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 132 of file mapDistribute.C.

References Foam::endl(), forAll, and mapDistributeBase::printLayout().

Referenced by mapDistribute::mapDistribute(), and mapDistribute::transformStart().

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 544 of file mapDistribute.H.

References fld(), notImplemented, mapDistribute::operator<<, mapDistribute::operator=(), and mapDistribute::operator>>.

Here is the call graph for this function:

◆ operator=()

void operator= ( const mapDistribute rhs)

Definition at line 529 of file mapDistribute.C.

References Foam::abort(), Foam::FatalError, FatalErrorInFunction, and mapDistributeBase::operator=().

Referenced by IOmapDistribute::IOmapDistribute(), and mapDistribute::updateMesh().

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

Friends And Related Function Documentation

◆ operator>>

Istream& operator>> ( Istream ,
mapDistribute  
)
friend

Read dictionary from Istream.

Referenced by mapDistribute::updateMesh().

◆ operator<<

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

Write dictionary to Ostream.

Referenced by mapDistribute::updateMesh().


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