patchToFace.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) 2011-2016 OpenFOAM Foundation
9  Copyright (C) 2018-2020 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
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 
27 \*---------------------------------------------------------------------------*/
28 
29 #include "patchToFace.H"
30 #include "polyMesh.H"
32 
33 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
34 
35 namespace Foam
36 {
37  defineTypeNameAndDebug(patchToFace, 0);
38  addToRunTimeSelectionTable(topoSetSource, patchToFace, word);
39  addToRunTimeSelectionTable(topoSetSource, patchToFace, istream);
40  addToRunTimeSelectionTable(topoSetFaceSource, patchToFace, word);
41  addToRunTimeSelectionTable(topoSetFaceSource, patchToFace, istream);
43  (
44  topoSetFaceSource,
45  patchToFace,
46  word,
47  patch
48  );
50  (
51  topoSetFaceSource,
52  patchToFace,
53  istream,
54  patch
55  );
56 }
57 
58 
59 Foam::topoSetSource::addToUsageTable Foam::patchToFace::usage_
60 (
61  patchToFace::typeName,
62  "\n Usage: patchToFace patch\n\n"
63  " Select all faces in the patch. Note:accepts wildcards for patch.\n\n"
64 );
65 
66 
67 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
68 
69 void Foam::patchToFace::combine(topoSet& set, const bool add) const
70 {
72  (
73  selectedPatches_,
74  true, // warn if not found
75  true // use patch groups if available
76  );
77 
78  for (const label patchi : patchIDs)
79  {
80  const polyPatch& pp = mesh_.boundaryMesh()[patchi];
81 
82  if (verbose_)
83  {
84  Info<< " Found matching patch " << pp.name() << " with "
85  << returnReduce(pp.size(), sumOp<label>()) << " faces" << endl;
86  }
87 
88  for (const label facei : pp.range())
89  {
90  addOrDelete(set, facei, add);
91  }
92  }
93 
94  if (patchIDs.empty())
95  {
97  << "Cannot find any patches matching "
98  << flatOutput(selectedPatches_) << nl
99  << "Valid names: " << flatOutput(mesh_.boundaryMesh().names())
100  << endl;
101  }
102 }
103 
104 
105 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
106 
108 (
109  const polyMesh& mesh,
110  const wordRe& patchName
111 )
112 :
114  selectedPatches_(one{}, patchName)
115 {}
116 
117 
119 (
120  const polyMesh& mesh,
121  const dictionary& dict
122 )
123 :
124  topoSetFaceSource(mesh),
125  selectedPatches_()
126 {
127  // Look for 'patches' and 'patch', but accept 'name' as well
128  if (!dict.readIfPresent("patches", selectedPatches_))
129  {
130  selectedPatches_.resize(1);
131  selectedPatches_.front() =
132  dict.getCompat<wordRe>("patch", {{"name", 1806}});
133  }
134 }
135 
136 
138 (
139  const polyMesh& mesh,
140  Istream& is
141 )
142 :
143  topoSetFaceSource(mesh),
144  selectedPatches_(one{}, wordRe(checkIs(is)))
145 {}
146 
147 
148 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
149 
151 (
152  const topoSetSource::setAction action,
153  topoSet& set
154 ) const
155 {
156  if (action == topoSetSource::ADD || action == topoSetSource::NEW)
157  {
158  if (verbose_)
159  {
160  Info<< " Adding all faces of patches: "
161  << flatOutput(selectedPatches_) << " ..." << endl;
162  }
163 
164  combine(set, true);
165  }
166  else if (action == topoSetSource::SUBTRACT)
167  {
168  if (verbose_)
169  {
170  Info<< " Removing all faces of patches: "
171  << flatOutput(selectedPatches_) << " ..." << endl;
172  }
173 
174  combine(set, false);
175  }
176 }
177 
178 
179 // ************************************************************************* //
const labelList patchIDs(pbm.indices(polyPatchNames, true))
dictionary dict
void resize(const label len)
Adjust allocated size of list.
Definition: ListI.H:160
bool verbose_
Output verbosity (default: true)
Create a new set and ADD elements to it.
labelHashSet patchSet(const UList< wordRe > &select, const bool warnNotFound=true, const bool useGroups=true) const
Return the set of patch IDs corresponding to the given names.
Add elements to current set.
constexpr char nl
The newline &#39;\n&#39; character (0x0a)
Definition: Ostream.H:50
T & front()
Access first element of the list, position [0].
Definition: UListI.H:237
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:531
patchToFace(const polyMesh &mesh, const wordRe &patchName)
Construct from components.
Definition: patchToFace.C:101
T returnReduce(const T &value, const BinaryOp &bop, const int tag=UPstream::msgType(), const label comm=UPstream::worldComm)
Perform reduction on a copy, using specified binary operation.
void addOrDelete(topoSet &set, const label id, const bool add) const
Add or delete id from set. Add when &#39;add&#39; is true.
Macros for easy insertion into run-time selection tables.
addNamedToRunTimeSelectionTable(topoSetCellSource, badQualityToCell, word, badQuality)
HashSet< label, Hash< label > > labelHashSet
A HashSet of labels, uses label hasher.
Definition: HashSet.H:85
AccessType combine(const UList< T > &lists, AccessOp aop=accessOp< T >())
Combines sub-lists into a single list.
Definition: ListListOps.C:62
dynamicFvMesh & mesh
const polyBoundaryMesh & boundaryMesh() const noexcept
Return boundary mesh.
Definition: polyMesh.H:608
The topoSetFaceSource is a intermediate class for handling topoSet sources for selecting faces...
wordList names() const
Return a list of patch names.
setAction
Enumeration defining various actions.
A wordRe is a Foam::word, but can contain a regular expression for matching words or strings...
Definition: wordRe.H:78
virtual void applyToSet(const topoSetSource::setAction action, topoSet &set) const
Apply specified action to the topoSet.
Definition: patchToFace.C:144
const polyMesh & mesh_
Reference to the mesh.
void add(FieldField< Field1, typename typeOfSum< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
defineTypeNameAndDebug(combustionModel, 0)
Subtract elements from current set.
#define WarningInFunction
Report a warning using Foam::Warning.
Class with constructor to add usage string to table.
const std::string patch
OpenFOAM patch number as a std::string.
messageStream Info
Information stream (stdout output on master, null elsewhere)
uindirectPrimitivePatch pp(UIndirectList< face >(mesh.faces(), faceLabels), mesh.points())
Namespace for OpenFOAM.
addToRunTimeSelectionTable(functionObject, pointHistory, dictionary)
A class representing the concept of 1 (one) that can be used to avoid manipulating objects known to b...
Definition: one.H:56
FlatOutput::OutputAdaptor< Container, Delimiters > flatOutput(const Container &obj, Delimiters delim)
Global flatOutput() function with specified output delimiters.
Definition: FlatOutput.H:225