FreeFOAM The Cross-Platform CFD Toolkit
Hosted by SourceForge:
Get FreeFOAM at SourceForge.net.
            Fast, secure and Free Open Source software downloads

Foam::ListListOps Namespace Reference

Various utility functions to work on Lists of Lists (usually resulting from 'gather'ing and combining information from individual processors) More...


Detailed Description

Various utility functions to work on Lists of Lists (usually resulting from 'gather'ing and combining information from individual processors)

- combine :
takes (elements of) sublists and appends them into one big list.

  • combineOffset :
    similar and also adds offset.

The access of data is through an AccessOp so that data can be 'gather'ed in one go, minimizing communication, and then picked apart and recombined.

Example:

// Assuming myContainer defined which holds all the data I want to
// transfer (say a pointField and a faceList). myContainer also defines
// access operators to
// access the individual elements, say myContainerPoints::operator(),
// and myContainerFaces::operator()

List<myContainer> gatheredData(Pstream::nProcs());
gatheredData[Pstream::myProcNo()] = myContainer(points, faces);

// Gather data onto master
Pstream::gatherList(gatheredData);

// Combine
pointField combinedPoints
(
ListListOps::combine<pointField>
(
gatheredData,
myContainerPoints()
)
);

// Combine and renumber (so combinedFaces indexes combinedPoints)

// Extract sizes of individual lists
labelList sizes
(
ListListOps::subSizes(gatheredData, myContainerPoints())
);

// Renumber using user-defined operator offsetOp<face>()
faceList combinedFaces
(
ListListOps::combineOffset<faceList>
(
gatheredData, sizes, myContainerFaces(), offsetOp<face>()
)
);
Source files

Functions

template<class AccessType , class T , class AccessOp >
AccessType  combine (const List< T > &, AccessOp aop=accessOp< T >())
 Combines sublists into one big list.
template<class T , class AccessOp >
labelList  subSizes (const List< T > &, AccessOp aop=accessOp< T >())
 Gets sizes of sublists.
template<class AccessType , class T , class AccessOp , class OffsetOp >
AccessType  combineOffset (const List< T > &, const labelList &sizes, AccessOp aop, OffsetOp oop=offsetOp< T >())
 Like combine but also offsets sublists based on passed sizes.

Function Documentation

labelList subSizes ( const List< T > &   lst,
AccessOp   aop = accessOp<T>()  
)

Gets sizes of sublists.

Definition at line 61 of file ListListOps.C.

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

Referenced by sampledSurfaces::update().

AccessType combineOffset ( const List< T > &   lst,
const labelList &   sizes,
AccessOp   aop,
OffsetOp   oop = offsetOp<T>()  
)

Like combine but also offsets sublists based on passed sizes.

Definition at line 75 of file ListListOps.C.

References forAll, Foam::sum(), and Foam::T().