Loading...
Searching...
No Matches
randomDecomp.C
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) 2019-2023 OpenCFD Ltd.
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
28#include "randomDecomp.H"
29#include "Random.H"
31
32// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
33
34namespace Foam
35{
38 (
42 );
43}
44
45
46// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
47
48Foam::labelList Foam::randomDecomp::randomMap(const label nCells) const
49{
50 Random rndGen(0);
51
52 labelList finalDecomp(nCells);
53
54 if (agglom_ > 1)
55 {
56 label cached = 0;
57 label repeat = 0;
58
59 for (label& val : finalDecomp)
60 {
61 if (!repeat)
62 {
63 cached = rndGen.position<label>(0, nDomains_ - 1);
64 repeat = agglom_;
65 }
66 --repeat;
67
68 val = cached;
69 }
70 }
71 else
72 {
73 for (label& val : finalDecomp)
74 {
75 val = rndGen.position<label>(0, nDomains_ - 1);
76 }
77 }
79 return finalDecomp;
80}
81
82
83// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
84
85Foam::randomDecomp::randomDecomp(const label numDomains)
86:
87 decompositionMethod(numDomains),
88 agglom_(0)
89{}
90
91
93(
94 const dictionary& decompDict,
95 const word& regionName,
96 int select
97)
98:
100 agglom_(0)
101{
102 const dictionary& coeffs = findCoeffsDict(typeName + "Coeffs", select);
103
104 // No sanity check needed here (done in randomMap routine)
105 coeffs.readIfPresent("agglom", agglom_);
106}
107
108
109// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
110
112(
113 const pointField& points,
115) const
116{
117 return randomMap(points.size());
118}
119
120
122(
123 const polyMesh& mesh,
124 const pointField&,
126) const
127{
128 return randomMap(mesh.nCells());
129}
130
131
133(
134 const CompactListList<label>& globalCellCells,
135 const pointField&,
137) const
138{
139 return randomMap(globalCellCells.size());
140}
141
142
144(
145 const labelListList& globalCellCells,
146 const pointField&,
147 const scalarField&
148) const
149{
150 return randomMap(globalCellCells.size());
151}
152
153
154// ************************************************************************* //
Macros for easy insertion into run-time selection tables.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
A packed storage of objects of type <T> using an offset table for access.
label size() const noexcept
The primary size (the number of rows/sublists).
void size(const label n)
Older name for setAddressableSize.
Definition UList.H:118
Abstract base class for domain decomposition.
label nDomains_
Number of domains for the decomposition.
decompositionMethod(const label numDomains)
Construct with specified number of domains, no coefficients or constraints.
static FOAM_NO_DANGLING_REFERENCE const dictionary & findCoeffsDict(const dictionary &dict, const word &coeffsName, int select=selectionType::DEFAULT)
Locate coeffsName dictionary or the fallback "coeffs" dictionary within an enclosing dictionary.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
bool readIfPresent(const word &keyword, T &val, enum keyType::option matchOpt=keyType::REGEX) const
Find an entry if present, and assign to T val. FatalIOError if it is found and the number of tokens i...
Mesh consisting of general polyhedral cells.
Definition polyMesh.H:79
Decomposition according to pseudo-random number generator, which is useful for development and stress...
virtual labelList decompose(const pointField &points, const scalarField &pointWeights_unused=scalarField::null()) const
Return for every coordinate the wanted processor number.
randomDecomp(const randomDecomp &)=delete
No copy construct.
A class for handling words, derived from Foam::string.
Definition word.H:66
#define defineTypeName(Type)
Define the typeName.
Definition className.H:113
dynamicFvMesh & mesh
Foam::word regionName(args.getOrDefault< word >("region", Foam::polyMesh::defaultRegion))
const pointField & points
Namespace for OpenFOAM.
List< labelList > labelListList
List of labelList.
Definition labelList.H:38
List< label > labelList
A List of labels.
Definition List.H:62
labelList randomMap(const label nCells)
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
const word GlobalIOList< Tuple2< scalar, vector > >::typeName("scalarVectorTable")
vectorField pointField
pointField is a vectorField.
Random rndGen