Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / parallel / decompose / decompositionMethods / multiLevelDecomp / multiLevelDecomp.H
bloba805bfacf8786362ec9b6332dc3731c5520fa048
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2010-2010 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::multiLevelDecomp
27 Description
28     Decomposition given using consecutive application of decomposers.
30 SourceFiles
31     multiLevelDecomp.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef multiLevelDecomp_H
36 #define multiLevelDecomp_H
38 #include "decompositionMethod.H"
40 namespace Foam
43 /*---------------------------------------------------------------------------*\
44                            Class multiLevelDecomp Declaration
45 \*---------------------------------------------------------------------------*/
47 class multiLevelDecomp
49     public decompositionMethod
51     // Private data
53         dictionary methodsDict_;
55         PtrList<decompositionMethod> methods_;
58     // Private Member Functions
60         //- Given connectivity across processors work out connectivity
61         //  for a (consistent) subset
62         void subsetGlobalCellCells
63         (
64             const label nDomains,
65             const label domainI,
66             const labelList& dist,
68             const labelListList& cellCells,
69             const labelList& set,
70             labelListList& subCellCells,
71             labelList& cutConnections
72         ) const;
74         //- Decompose level methodI without addressing
75         void decompose
76         (
77             const labelListList& pointPoints,
78             const pointField& points,
79             const scalarField& pointWeights,
80             const labelList& pointMap,  // map back to original points
81             const label levelI,
83             labelField& finalDecomp
84         );
86         //- Disallow default bitwise copy construct and assignment
87         void operator=(const multiLevelDecomp&);
88         multiLevelDecomp(const multiLevelDecomp&);
91 public:
93     //- Runtime type information
94     TypeName("multiLevel");
97     // Constructors
99         //- Construct given the decomposition dictionary
100         multiLevelDecomp(const dictionary& decompositionDict);
103     //- Destructor
104     virtual ~multiLevelDecomp()
105     {}
108     // Member Functions
110         //- Is method parallel aware (i.e. does it synchronize domains across
111         //  proc boundaries)
112         virtual bool parallelAware() const;
114         //- Return for every coordinate the wanted processor number. Use the
115         //  mesh connectivity (if needed)
116         virtual labelList decompose
117         (
118             const polyMesh& mesh,
119             const pointField& points,
120             const scalarField& pointWeights
121         );
123         //- Return for every coordinate the wanted processor number. Explicitly
124         //  provided connectivity - does not use mesh_.
125         virtual labelList decompose
126         (
127             const labelListList& globalCellCells,
128             const pointField& cc,
129             const scalarField& cWeights
130         );
134 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
136 } // End namespace Foam
138 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
140 #endif
142 // ************************************************************************* //