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

lduAddressing Class Reference

The class contains the addressing required by the lduMatrix: upper, lower and losort. More...

#include <OpenFOAM/lduAddressing.H>


Detailed Description

The class contains the addressing required by the lduMatrix: upper, lower and losort.

The addressing can be created in two ways: either with references to upper and lower in which case it stores references or from labelLists, in which case it stores the addressing itself. Additionally, the losort addressing belongs to the class is as on lazy evaluation.

The ordering of owner addresses is such that the labels are in increasing order, with groups of identical labels for edges "owned" by the same point. The neighbour labels are also ordered in ascending order but only for groups of edges belonging to each point. An example is given below:

owner eighbour
0 1
0 20
1 2
1 21
2 3
2 22
3 4
3 23
4 5
4 24
5 6
5 25
6 7
6 26
7 8
7 27
8 9
8 28
9 10
9 29

There exists an alternative way of addressing the owner list: instead of repeating the same label in the owner list, it is possible to address the start of each point neighbours in the neighbour list. This reduces the size of owner addressing from a list over all edges to a list over all points + 1:

Owner start list: 0 2 4 6 8 10 12 14 16 18

We shall use the second form of the addressing for fast lookup of edge label from the known owner and neighbour, using the following algorithm:

  1. take the owner label and position the start of lookup using the owner start list
  2. loop through all neighbours of this owner (ending at the start of lookup of owner + 1) until the match with current neighbour is found. The index used on the neighbour list for the match is the edge index.

While owner start addressing allows us to find the edge owned by the points, it is also necessary to find the edges for which the point is a neighbour. Losort addressing lists the edges neighboured by the point and we shall use the same trick as above to address into this list. Thus, for every point the losort start gives the address of the first face to neighbour this point.

Source files

Definition at line 111 of file lduAddressing.H.

Inheritance diagram for lduAddressing:
Collaboration diagram for lduAddressing:

List of all members.

Public Member Functions

 lduAddressing (const label nEqns)
virtual  ~lduAddressing ()
label  size () const
 Return number of equations.
virtual const unallocLabelList &  lowerAddr () const =0
 Return lower addressing.
virtual const unallocLabelList &  upperAddr () const =0
 Return upper addressing.
virtual const unallocLabelList &  patchAddr (const label patchNo) const =0
 Return patch to internal addressing given patch number.
virtual const lduSchedule &  patchSchedule () const =0
const unallocLabelList &  losortAddr () const
 Return losort addressing.
const unallocLabelList &  ownerStartAddr () const
 Return owner start addressing.
const unallocLabelList &  losortStartAddr () const
 Return losort start addressing.
label  triIndex (const label a, const label b) const
 Return off-diagonal index given owner and neighbour label.

Constructor & Destructor Documentation

lduAddressing ( const label   nEqns  ) [inline]

Definition at line 152 of file lduAddressing.H.

~lduAddressing (  ) [virtual]

Definition at line 174 of file lduAddressing.C.

References Foam::deleteDemandDrivenData().


Member Function Documentation

label size (  ) const [inline]
virtual const unallocLabelList& patchAddr ( const label   patchNo  ) const [pure virtual]

Return patch to internal addressing given patch number.

Implemented in fvMeshLduAddressing, and lduPrimitiveMesh.

virtual const lduSchedule& patchSchedule (  ) const [pure virtual]
const Foam::unallocLabelList & losortAddr (  ) const

Return losort addressing.

Definition at line 184 of file lduAddressing.C.

const Foam::unallocLabelList & ownerStartAddr (  ) const

Return owner start addressing.

Definition at line 195 of file lduAddressing.C.

Referenced by GaussSeidelSmoother::smooth().

const Foam::unallocLabelList & losortStartAddr (  ) const

Return losort start addressing.

Definition at line 206 of file lduAddressing.C.

Foam::label triIndex ( const label   a,
const label   b  
) const

Return off-diagonal index given owner and neighbour label.

Definition at line 218 of file lduAddressing.C.

References Foam::abort(), Foam::FatalError, FatalErrorIn, Foam::max(), and Foam::min().


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