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

globalPoints Class Reference

Calculates points shared by more than two processor patches or cyclic patches. More...

#include <OpenFOAM/globalPoints.H>


Detailed Description

Calculates points shared by more than two processor patches or cyclic patches.

Is used in globalMeshData. (this info is needed for point-edge communication where you do all but these shared points with patch to patch communication but need to do a reduce on these shared points)

Works purely topological and using local communication only. Needs:

  • domain to be one single domain (i.e. all faces can be reached through face-cell walk).
  • patch face ordering to be ok
  • f[0] ordering on patch faces to be ok.

Works by constructing equivalence lists for all the points on processor patches. These list are procPointList and give processor and meshPoint label on that processor. E.g.

  ((7 93)(4 731)(3 114))

means point 93 on proc7 is connected to point 731 on proc4 and 114 on proc3. It then gets the lowest numbered processor (the 'master') to request a sharedPoint label from processor0 and it redistributes this label back to the other processors in the equivalence list.

Algorithm:

  • get meshPoints of all my points on processor patches and initialize equivalence lists to this. loop
  • send to all neighbours in relative form:
  • patchFace
  • index in face
  • receive and convert into meshPoints. Add to to my equivalence lists.
  • mark meshPoints for which information changed.
  • send data for these meshPoints again endloop until nothing changes

At this point one will have complete point-point connectivity for all points on processor patches. Now

  • remove point equivalences of size 2. These are just normal points shared between two neighbouring procPatches.
  • collect on each processor points for which it is the master
  • request number of sharedPointLabels from the Pstream::master.

This information gets redistributed to all processors in a similar way as that in which the equivalence lists were collected:

  • initialize the indices of shared points I am the master for loop
  • send my known sharedPoints + meshPoints to all neighbours
  • receive from all neighbour. Find which meshPoint on my processor the sharedpoint is connected to
  • mark indices for which information has changed endloop until nothing changes.
Source files

Definition at line 117 of file globalPoints.H.

Collaboration diagram for globalPoints:

List of all members.

Public Member Functions

 ClassName ("globalPoints")
 Declare name of the class and its debug switch.
 globalPoints (const polyMesh &mesh)
 Construct from mesh.
label  nPatchPoints () const
const Map< label > &  meshToProcPoint () const
const labelList &  sharedPointAddr () const
 shared points used by this processor (= global point number)
const labelList &  sharedPointLabels () const
 my meshpoints corresponding to the shared points
label  nGlobalPoints () const

Constructor & Destructor Documentation


Member Function Documentation

ClassName ( "globalPoints"    )

Declare name of the class and its debug switch.

label nPatchPoints (  ) const [inline]

Definition at line 230 of file globalPoints.H.

const Map<label>& meshToProcPoint (  ) const [inline]

Definition at line 235 of file globalPoints.H.

const labelList& sharedPointAddr (  ) const [inline]

shared points used by this processor (= global point number)

Definition at line 241 of file globalPoints.H.

Referenced by globalMeshData::updateMesh().

const labelList& sharedPointLabels (  ) const [inline]

my meshpoints corresponding to the shared points

Definition at line 247 of file globalPoints.H.

Referenced by globalMeshData::updateMesh().

label nGlobalPoints (  ) const [inline]

Definition at line 252 of file globalPoints.H.

Referenced by globalMeshData::updateMesh().


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