faMeshDecomposition.H
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2016-2017 Wikki Ltd
9 Copyright (C) 2021 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
12 This file is part of OpenFOAM.
13
14 OpenFOAM is free software: you can redistribute it and/or modify it
15 under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 3 of the License, or
17 (at your option) any later version.
18
19 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26
27Class
28 Foam::faMeshDecomposition
29
30Description
31 Automatic faMesh decomposition class
32
33Author
34 Zeljko Tukovic, FSB Zagreb
35 Hrvoje Jasak, Wikki Ltd.
36
37SourceFiles
38 faMeshDecomposition.C
39
40\*---------------------------------------------------------------------------*/
41
42#ifndef Foam_faMeshDecomposition_H
43#define Foam_faMeshDecomposition_H
44
45#include "polyMesh.H"
46#include "faMesh.H"
47#include "labelList.H"
48#include "PtrList.H"
49#include "point.H"
50
51namespace Foam
52{
53
54/*---------------------------------------------------------------------------*\
55 Class faMeshDecomposition Declaration
56\*---------------------------------------------------------------------------*/
59:
60 public faMesh
61{
62 // Private Data
63
64 //- Number of processors in decomposition
65 label nProcs_;
66
67 //- Is the decomposition data to be distributed for each processor
68 bool distributed_;
69
70 //- Are globalFaceZones being used
71 bool hasGlobalFaceZones_;
72
73 //- Processor label for each cell
74 labelList faceToProc_;
75
76 //- Face labels for each processor mesh
77 labelListList procFaceLabels_;
78
79 //-
80 List<Map<label>> procMeshEdgesMap_;
81
82 //- Number of internal edges for each processor mesh
83 labelList procNInternalEdges_;
84
85 //- Edge labels for patches of processor meshes
86 List<labelListList> procPatchEdgeLabels_;
87
88 //- Labels of points for each processor
89 labelListList procPatchPointAddressing_;
90
91 //- Labels of edges for each processor
92 labelListList procPatchEdgeAddressing_;
93
94 //- Labels of edges for each processor
95 labelListList procEdgeAddressing_;
96
97 //- Labels of faces for each processor
98 labelListList procFaceAddressing_;
99
100 //- Original patch index for every processor patch
101 labelListList procBoundaryAddressing_;
102
103 //- Sizes for processor mesh patches
104 // Excludes inter-processor boundaries
105 labelListList procPatchSize_;
106
107 //- Start indices for processor patches
108 // Excludes inter-processor boundaries
109 labelListList procPatchStartIndex_;
110
111 //- Neighbour processor ID for inter-processor boundaries
112 labelListList procNeighbourProcessors_;
113
114 //- Sizes for inter-processor patches
115 labelListList procProcessorPatchSize_;
116
117 //- Start indices for inter-processor patches
118 labelListList procProcessorPatchStartIndex_;
119
120 //- List of globally shared point labels
121 labelList globallySharedPoints_;
122
123 //- Are there cyclic-parallel faces
124 bool cyclicParallel_;
125
126
127 // Private Member Functions
128
129 void distributeFaces();
130
131
132public:
133
134 // Constructors
135
136 //- Construct from components.
137 //- Values will come from the volume decomposition
138 // \param mesh the fvMesh
139 // \param nProcessors the number of processors
140 // \param params additional parameters, sent to updateParameters
142 (
143 const polyMesh& mesh,
144 const label nProcessors,
145 const dictionary& params = dictionary::null
146 );
147
148
149 //- Destructor
150 ~faMeshDecomposition() = default;
151
152
153 // Member Functions
154
155 // Settings
156
157 //- Number of processor in decomposition
158 label nProcs() const noexcept
159 {
160 return nProcs_;
161 }
162
163 //- Is decomposition data to be distributed for each processor
164 bool distributed() const noexcept
165 {
166 return distributed_;
167 }
168
169 //- Change distributed flag
170 bool distributed(const bool on) noexcept
171 {
172 bool old(distributed_);
173 distributed_ = on;
174 return old;
175 }
176
177 //- Are global face zones used
178 bool useGlobalFaceZones() const noexcept
179 {
180 return distributed_;
181 }
182
183 //- Change global face zones flag
184 bool useGlobalFaceZones(const bool on) noexcept
185 {
186 bool old(hasGlobalFaceZones_);
187 hasGlobalFaceZones_ = on;
188 return old;
189 }
190
191 //- Update flags based on the decomposition model settings
192 // Sets "distributed", detects presence of "globalFaceZones"
193 void updateParameters(const dictionary& params);
194
195
196 // Mappings
197
198 //- Face-processor decomposition labels
199 const labelList& faceToProc() const noexcept
200 {
201 return faceToProc_;
202 }
203
204
205 // Decompose
206
207 //- Decompose mesh
208 void decomposeMesh();
209
210 //- Write decomposition
211 bool writeDecomposition();
212};
213
214
215// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
216
217} // End namespace Foam
218
219// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
220
221#endif
222
223// ************************************************************************* //
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
Automatic faMesh decomposition class.
bool useGlobalFaceZones(const bool on) noexcept
Change global face zones flag.
bool writeDecomposition()
Write decomposition.
bool useGlobalFaceZones() const noexcept
Are global face zones used.
bool distributed() const noexcept
Is decomposition data to be distributed for each processor.
void updateParameters(const dictionary &params)
Update flags based on the decomposition model settings.
const labelList & faceToProc() const noexcept
Face-processor decomposition labels.
~faMeshDecomposition()=default
Destructor.
label nProcs() const noexcept
Number of processor in decomposition.
bool distributed(const bool on) noexcept
Change distributed flag.
void decomposeMesh()
Decompose mesh.
Finite area mesh (used for 2-D non-Euclidian finite area method) defined using a patch of faces on a ...
Definition: faMesh.H:100
const polyMesh & mesh() const
Return access to polyMesh.
Definition: faMeshI.H:31
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:81
Namespace for OpenFOAM.
const direction noexcept
Definition: Scalar.H:223