OpenFOAM logo
Open Source CFD Toolkit

ListListOps.H File Reference


Detailed Description

View ListListOps.H
License
This file is part of OpenFOAM.

OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.

OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
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

Definition in file ListListOps.H.

Go to the source code of this file.

Namespaces

namespace  Foam
namespace  Foam::ListListOps

Classes

class  accessOp
class  offsetOp

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

AccessType combine const List< T > &  ,
AccessOp  aop = accessOp< T >()
 

Combines sublists into one big list.

Referenced by offsetOp::operator()().

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

Like combine but also offsets sublists based on passed sizes.

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

Gets sizes of sublists.

For further information go to www.openfoam.org