decompositionMethod Class Referenceabstract

Abstract base class for domain decomposition. More...

Inheritance diagram for decompositionMethod:
Collaboration diagram for decompositionMethod:

Public Member Functions

 decompositionMethod (const decompositionMethod &)=delete
 No copy construct. More...
 
void operator= (const decompositionMethod &)=delete
 No copy assignment. More...
 
 TypeName ("decompositionMethod")
 Runtime type information. More...
 
 declareRunTimeSelectionTable (autoPtr, decompositionMethod, dictionary,(const dictionary &decompDict, const word &regionName),(decompDict, regionName))
 
 decompositionMethod (const dictionary &decompDict, const word &regionName="")
 Construct given the decomposition dictionary, optionally region-specific. More...
 
virtual ~decompositionMethod ()=default
 Destructor. More...
 
label nDomains () const noexcept
 Number of domains. More...
 
virtual bool geometric () const
 True if the method is purely geometric, often using cell centre points. More...
 
virtual bool parallelAware () const =0
 Is method parallel aware? More...
 
virtual labelList decompose (const pointField &points, const scalarField &pointWeights=scalarField::null()) const
 Return the wanted processor number for every coordinate, using uniform or specified point weights. More...
 
virtual labelList decompose (const polyMesh &mesh, const pointField &points, const scalarField &pointWeights=scalarField::null()) const =0
 Return for every coordinate the wanted processor number, using uniform or specified point weights. More...
 
virtual labelList decompose (const polyMesh &mesh, const labelList &cellToRegion, const pointField &regionPoints, const scalarField &regionWeights=scalarField::null()) const
 Return for every coordinate the wanted processor number. More...
 
virtual labelList decompose (const CompactListList< label > &globalCellCells, const pointField &cc, const scalarField &cWeights=scalarField::null()) const =0
 Return for every coordinate the wanted processor number. More...
 
virtual labelList decompose (const labelListList &globalCellCells, const pointField &cc, const scalarField &cWeights=scalarField::null()) const =0
 Return for every coordinate the wanted processor number. More...
 
void setConstraints (const polyMesh &mesh, boolList &blockedFace, PtrList< labelList > &specifiedProcessorFaces, labelList &specifiedProcessor, List< labelPair > &explicitConnections) const
 Helper: extract constraints: More...
 
void applyConstraints (const polyMesh &mesh, const boolList &blockedFace, const PtrList< labelList > &specifiedProcessorFaces, const labelList &specifiedProcessor, const List< labelPair > &explicitConnections, labelList &finalDecomp) const
 Helper: apply constraints to a decomposition. More...
 
virtual labelList decompose (const polyMesh &mesh, const scalarField &cellWeights, const boolList &blockedFace, const PtrList< labelList > &specifiedProcessorFaces, const labelList &specifiedProcessor, const List< labelPair > &explicitConnections) const
 
labelList decompose (const polyMesh &mesh, const scalarField &cWeights) const
 Decompose a mesh. More...
 

Static Public Member Functions

static label nDomains (const dictionary &decompDict, const word &regionName="")
 Return region-specific or top-level numberOfSubdomains entry. More...
 
static const dictionaryoptionalRegionDict (const dictionary &decompDict, const word &regionName)
 Return an optional region-specific dictionary from "regions" sub-dictionary, or dictionary::null on failure. More...
 
static autoPtr< decompositionMethodNew (const dictionary &decompDict, const word &regionName="")
 Return a reference to the selected decomposition method, optionally region-specific. More...
 
static void calcCellCells (const polyMesh &mesh, const labelList &agglom, const label nLocalCoarse, const bool parallel, CompactListList< label > &cellCells)
 Determine (local or global) cellCells from mesh agglomeration. More...
 
static void calcCellCells (const polyMesh &mesh, const labelList &agglom, const label nLocalCoarse, const bool parallel, CompactListList< label > &cellCells, CompactListList< scalar > &cellCellWeights)
 Determine (local or global) cellCells and face weights from mesh agglomeration. More...
 

Protected Types

enum  selectionType { DEFAULT = 0, EXACT = 1, MANDATORY = 2, NULL_DICT = 4 }
 Selection type when handling the coefficients dictionary. More...
 

Protected Member Functions

const dictionaryfindCoeffsDict (const word &coeffsName, int select=selectionType::DEFAULT) const
 Locate coeffsName dictionary or the fallback "coeffs" dictionary. More...
 
 decompositionMethod (const label numDomains)
 Construct with specified number of domains, no coefficients or constraints. More...
 

Static Protected Member Functions

static const dictionaryfindCoeffsDict (const dictionary &dict, const word &coeffsName, int select=selectionType::DEFAULT)
 Locate coeffsName dictionary or the fallback "coeffs" dictionary within an enclosing dictionary. More...
 

Protected Attributes

const dictionarydecompDict_
 Top-level decomposition dictionary (eg, decomposeParDict) More...
 
const dictionarydecompRegionDict_
 Region-specific decomposition dictionary information. More...
 
label nDomains_
 Number of domains for the decomposition. More...
 
PtrList< decompositionConstraintconstraints_
 Optional constraints. More...
 

Detailed Description

Abstract base class for domain decomposition.

Source files

Definition at line 47 of file decompositionMethod.H.

Member Enumeration Documentation

◆ selectionType

enum selectionType
protected

Selection type when handling the coefficients dictionary.

To be used as a bit-mask for findCoeffsDict

Enumerator
DEFAULT 

Default request.

EXACT 

No fallback to "coeffs" if main name not found.

MANDATORY 

Fatal if dictionary could not be found.

NULL_DICT 

On failure, return dictionary::null instead of the top-level enclosing dictionary.

Definition at line 74 of file decompositionMethod.H.

Constructor & Destructor Documentation

◆ decompositionMethod() [1/3]

decompositionMethod ( const label  numDomains)
explicitprotected

Construct with specified number of domains, no coefficients or constraints.

Definition at line 328 of file decompositionMethod.C.

◆ decompositionMethod() [2/3]

No copy construct.

◆ decompositionMethod() [3/3]

decompositionMethod ( const dictionary decompDict,
const word regionName = "" 
)
explicit

Construct given the decomposition dictionary, optionally region-specific.

Definition at line 337 of file decompositionMethod.C.

◆ ~decompositionMethod()

virtual ~decompositionMethod ( )
virtualdefault

Destructor.

Member Function Documentation

◆ findCoeffsDict() [1/2]

const Foam::dictionary & findCoeffsDict ( const dictionary dict,
const word coeffsName,
int  select = selectionType::DEFAULT 
)
staticprotected

Locate coeffsName dictionary or the fallback "coeffs" dictionary within an enclosing dictionary.

Parameters
selectchoose to include "coeffs" in the search, make failure a FatalError, return dictionary::null instead on failure.
Returns
the coefficients dictionary found. If nothing was found, return the enclosing dictionary or dictionary::null (depending on the select parameter).

Definition at line 248 of file decompositionMethod.C.

References Foam::abort(), Foam::cfindCoeffsDict(), dict, Foam::endl(), Foam::FatalIOError, dictionary::name(), dictionary::null, and Foam::BitOps::select().

Here is the call graph for this function:

◆ findCoeffsDict() [2/2]

const Foam::dictionary & findCoeffsDict ( const word coeffsName,
int  select = selectionType::DEFAULT 
) const
protected

Locate coeffsName dictionary or the fallback "coeffs" dictionary.

Searches both the region-specific decomposition dictionary and the top-level decomposition dictionary.

Parameters
selectchoose to include "coeffs" in the search, make failure a FatalError, return dictionary::null instead on failure.
Returns
the coefficients dictionary found. If nothing was found, return the top-level (non-region) dictionary or dictionary::null (depending on the select parameter).

Definition at line 283 of file decompositionMethod.C.

References Foam::abort(), Foam::cfindCoeffsDict(), Foam::endl(), Foam::FatalIOError, dictionary::null, and Foam::BitOps::select().

Here is the call graph for this function:

◆ operator=()

void operator= ( const decompositionMethod )
delete

No copy assignment.

◆ TypeName()

TypeName ( "decompositionMethod"  )

Runtime type information.

◆ declareRunTimeSelectionTable()

declareRunTimeSelectionTable ( autoPtr  ,
decompositionMethod  ,
dictionary  ,
(const dictionary &decompDict, const word &regionName ,
(decompDict, regionName  
)

◆ nDomains() [1/2]

Foam::label nDomains ( const dictionary decompDict,
const word regionName = "" 
)
static

Return region-specific or top-level numberOfSubdomains entry.

The region-specific version is found within the "regions" sub-dictionary.

Definition at line 76 of file decompositionMethod.C.

References Foam::endl(), Foam::nl, dictionary::readEntry(), dictionary::readIfPresent(), regionName, and WarningInFunction.

Here is the call graph for this function:

◆ optionalRegionDict()

const Foam::dictionary & optionalRegionDict ( const dictionary decompDict,
const word regionName 
)
static

Return an optional region-specific dictionary from "regions" sub-dictionary, or dictionary::null on failure.

Definition at line 120 of file decompositionMethod.C.

References dictionary::findDict(), and regionName.

Here is the call graph for this function:

◆ New()

Foam::autoPtr< Foam::decompositionMethod > New ( const dictionary decompDict,
const word regionName = "" 
)
static

Return a reference to the selected decomposition method, optionally region-specific.

Definition at line 356 of file decompositionMethod.C.

References Foam::endl(), Foam::exit(), Foam::FatalIOError, FatalIOErrorInLookup, dictionary::get(), Foam::Info, dictionary::readIfPresent(), and regionName.

Referenced by decompositionModel::decomposer().

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

◆ nDomains() [2/2]

label nDomains ( ) const
inlinenoexcept

Number of domains.

Definition at line 258 of file decompositionMethod.H.

References decompositionMethod::nDomains_.

◆ geometric()

virtual bool geometric ( ) const
inlinevirtual

True if the method is purely geometric, often using cell centre points.

Reimplemented in geomDecomp.

Definition at line 267 of file decompositionMethod.H.

◆ parallelAware()

virtual bool parallelAware ( ) const
pure virtual

Is method parallel aware?

(i.e. does it synchronize domains across proc boundaries)

Implemented in scotchDecomp, hierarchGeomDecomp, kahipDecomp, metisDecomp, multiLevelDecomp, simpleGeomDecomp, ptscotchDecomp, randomDecomp, manualDecomp, structuredDecomp, and noDecomp.

◆ decompose() [1/7]

Foam::labelList decompose ( const pointField points,
const scalarField pointWeights = scalarField::null() 
) const
virtual

Return the wanted processor number for every coordinate, using uniform or specified point weights.

Reimplemented in hierarchGeomDecomp, geomDecomp, simpleGeomDecomp, randomDecomp, and noDecomp.

Definition at line 941 of file decompositionMethod.C.

References NotImplemented.

Referenced by meshRefinement::balance().

Here is the caller graph for this function:

◆ decompose() [2/7]

virtual labelList decompose ( const polyMesh mesh,
const pointField points,
const scalarField pointWeights = scalarField::null() 
) const
pure virtual

Return for every coordinate the wanted processor number, using uniform or specified point weights.

Use the mesh connectivity (if needed)

Implemented in scotchDecomp, hierarchGeomDecomp, multiLevelDecomp, simpleGeomDecomp, ptscotchDecomp, metisLikeDecomp, randomDecomp, manualDecomp, noDecomp, and structuredDecomp.

◆ decompose() [3/7]

Foam::labelList decompose ( const polyMesh mesh,
const labelList cellToRegion,
const pointField regionPoints,
const scalarField regionWeights = scalarField::null() 
) const
virtual

Return for every coordinate the wanted processor number.

Gets passed agglomeration map (from fine to coarse cells) and coarse cell location. Can be overridden by decomposers that provide this functionality natively. Coarse cells are local to the processor (if in parallel). If you want to have coarse cells spanning processors use the globalCellCells instead.

Reimplemented in scotchDecomp, ptscotchDecomp, and metisLikeDecomp.

Definition at line 396 of file decompositionMethod.C.

References globalMeshData::calcCellCells(), mesh, and UList< T >::size().

Here is the call graph for this function:

◆ decompose() [4/7]

virtual labelList decompose ( const CompactListList< label > &  globalCellCells,
const pointField cc,
const scalarField cWeights = scalarField::null() 
) const
pure virtual

Return for every coordinate the wanted processor number.

The connectivity is equal to mesh.cellCells() except for

  • in parallel the cell numbers are global cell numbers (starting from 0 at processor0 and then incrementing all through the processors)
  • the connections are across coupled patches

Implemented in scotchDecomp, hierarchGeomDecomp, metisLikeDecomp, ptscotchDecomp, multiLevelDecomp, simpleGeomDecomp, randomDecomp, manualDecomp, noDecomp, and structuredDecomp.

◆ decompose() [5/7]

virtual labelList decompose ( const labelListList globalCellCells,
const pointField cc,
const scalarField cWeights = scalarField::null() 
) const
pure virtual

Return for every coordinate the wanted processor number.

The connectivity is equal to mesh.cellCells() except for

  • in parallel the cell numbers are global cell numbers (starting from 0 at processor0 and then incrementing all through the processors)
  • the connections are across coupled patches

Implemented in scotchDecomp, hierarchGeomDecomp, metisLikeDecomp, ptscotchDecomp, multiLevelDecomp, simpleGeomDecomp, randomDecomp, manualDecomp, structuredDecomp, and noDecomp.

◆ setConstraints()

void setConstraints ( const polyMesh mesh,
boolList blockedFace,
PtrList< labelList > &  specifiedProcessorFaces,
labelList specifiedProcessor,
List< labelPair > &  explicitConnections 
) const

Helper: extract constraints:

blockedface: existing faces where owner and neighbour on same proc explicitConnections: sets of boundary faces ,, ,, specifiedProcessorFaces: groups of faces with all cells on same processor.

Definition at line 833 of file decompositionMethod.C.

References PtrList< T >::clear(), List< T >::clear(), mesh, primitiveMesh::nFaces(), and List< T >::resize_nocopy().

Referenced by meshRefinement::balance().

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

◆ applyConstraints()

void applyConstraints ( const polyMesh mesh,
const boolList blockedFace,
const PtrList< labelList > &  specifiedProcessorFaces,
const labelList specifiedProcessor,
const List< labelPair > &  explicitConnections,
labelList finalDecomp 
) const

Helper: apply constraints to a decomposition.

This gives constraints opportunity to modify decomposition in case the native decomposition method has not obeyed all constraints

Definition at line 862 of file decompositionMethod.C.

References mesh.

◆ decompose() [6/7]

Foam::labelList decompose ( const polyMesh mesh,
const scalarField cellWeights,
const boolList blockedFace,
const PtrList< labelList > &  specifiedProcessorFaces,
const labelList specifiedProcessor,
const List< labelPair > &  explicitConnections 
) const
virtual

◆ decompose() [7/7]

Foam::labelList decompose ( const polyMesh mesh,
const scalarField cWeights 
) const

Decompose a mesh.

Apply all constraints from decomposeParDict ('preserveFaceZones' etc). Calls either

  • no constraints, empty weights: decompose(mesh, cellCentres())
  • no constraints, set weights: decompose(mesh, cellCentres(), cellWeights)
  • valid constraints: decompose(mesh, cellToRegion, regionPoints, regionWeights)

Definition at line 887 of file decompositionMethod.C.

References mesh.

◆ calcCellCells() [1/2]

void calcCellCells ( const polyMesh mesh,
const labelList agglom,
const label  nLocalCoarse,
const bool  parallel,
CompactListList< label > &  cellCells 
)
static

Determine (local or global) cellCells from mesh agglomeration.

Agglomeration is local to the processor. local : connections are in local indices. Coupled across cyclics but not processor patches. global : connections are in global indices. Coupled across cyclics and processor patches.

Parameters
parallelUse global cell ids in parallel

Definition at line 430 of file decompositionMethod.C.

References globalMeshData::calcCellCells(), and mesh.

Here is the call graph for this function:

◆ calcCellCells() [2/2]

void calcCellCells ( const polyMesh mesh,
const labelList agglom,
const label  nLocalCoarse,
const bool  parallel,
CompactListList< label > &  cellCells,
CompactListList< scalar > &  cellCellWeights 
)
static

Determine (local or global) cellCells and face weights from mesh agglomeration.

Uses mag of faceArea as weights

Parameters
parallelUse global cell ids in parallel

Definition at line 450 of file decompositionMethod.C.

References globalMeshData::calcCellCells(), and mesh.

Here is the call graph for this function:

Member Data Documentation

◆ decompDict_

const dictionary& decompDict_
protected

Top-level decomposition dictionary (eg, decomposeParDict)

Definition at line 89 of file decompositionMethod.H.

◆ decompRegionDict_

const dictionary& decompRegionDict_
protected

Region-specific decomposition dictionary information.

Definition at line 94 of file decompositionMethod.H.

◆ nDomains_

label nDomains_
protected

Number of domains for the decomposition.

Definition at line 99 of file decompositionMethod.H.

Referenced by decompositionMethod::nDomains().

◆ constraints_

PtrList<decompositionConstraint> constraints_
protected

Optional constraints.

Definition at line 104 of file decompositionMethod.H.


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