clipPlaneToFace.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) 2022 OpenCFD Ltd.
9 -------------------------------------------------------------------------------
10 License
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 "clipPlaneToFace.H"
29 #include "polyMesh.H"
31 
32 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
33 
34 namespace Foam
35 {
36  defineTypeNameAndDebug(clipPlaneToFace, 0);
37  addToRunTimeSelectionTable(topoSetSource, clipPlaneToFace, word);
38  addToRunTimeSelectionTable(topoSetSource, clipPlaneToFace, istream);
39  addToRunTimeSelectionTable(topoSetFaceSource, clipPlaneToFace, word);
40  addToRunTimeSelectionTable(topoSetFaceSource, clipPlaneToFace, istream);
42  (
43  topoSetFaceSource,
44  clipPlaneToFace,
45  word,
46  clipPlane
47  );
49  (
50  topoSetFaceSource,
51  clipPlaneToFace,
52  istream,
53  clipPlane
54  );
55 }
56 
57 
58 Foam::topoSetSource::addToUsageTable Foam::clipPlaneToFace::usage_
59 (
60  clipPlaneToFace::typeName,
61  "\n Usage: clipPlaneToFace (px py pz) (nx ny nz)\n\n"
62  " Select faces with centres above the plane\n\n"
63 );
64 
65 
66 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
67 
68 void Foam::clipPlaneToFace::combine(topoSet& set, const bool add) const
69 {
70  // Face centres above the plane
71 
72  const pointField& ctrs = mesh_.faceCentres();
73 
74  forAll(ctrs, elemi)
75  {
76  if (((ctrs[elemi] - point_) & normal_) > 0)
77  {
78  addOrDelete(set, elemi, add);
79  }
80  }
81 }
82 
83 
84 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
85 
87 (
88  const polyMesh& mesh,
89  const point& basePoint,
90  const vector& normal
91 )
92 :
94  point_(basePoint),
95  normal_(normal)
96 {}
97 
98 
100 (
101  const polyMesh& mesh,
102  const dictionary& dict
103 )
104 :
106  (
107  mesh,
108  dict.get<vector>("point"),
109  dict.get<vector>("normal")
110  )
111 {}
112 
113 
115 (
116  const polyMesh& mesh,
117  Istream& is
118 )
119 :
121  point_(checkIs(is)),
122  normal_(checkIs(is))
123 {}
124 
125 
126 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
127 
129 (
130  const topoSetSource::setAction action,
131  topoSet& set
132 ) const
133 {
134  if (action == topoSetSource::ADD || action == topoSetSource::NEW)
135  {
136  if (verbose_)
137  {
138  Info<< " Adding faces with centres above plane at "
139  << point_ << " with normal " << normal_ << endl;
140  }
141 
142  combine(set, true);
143  }
144  else if (action == topoSetSource::SUBTRACT)
145  {
146  if (verbose_)
147  {
148  Info<< " Removing faces with centres above plane at "
149  << point_ << " with normal " << normal_ << endl;
150  }
151 
152  combine(set, false);
153  }
154 }
155 
156 
157 // ************************************************************************* //
List< ReturnType > get(const UPtrList< T > &list, const AccessOp &aop)
List of values generated by applying the access operation to each list item.
dictionary dict
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
Create a new set and ADD elements to it.
Add elements to current set.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)...
Definition: Istream.H:57
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:531
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)
#define forAll(list, i)
Loop across all elements in list.
Definition: stdFoam.H:421
AccessType combine(const UList< T > &lists, AccessOp aop=accessOp< T >())
Combines sub-lists into a single list.
Definition: ListListOps.C:62
vectorField pointField
pointField is a vectorField.
Definition: pointFieldFwd.H:38
dynamicFvMesh & mesh
A topoSetFaceSource to select all faces whose face centre is above the specified plane.
The topoSetFaceSource is a intermediate class for handling topoSet sources for selecting faces...
setAction
Enumeration defining various actions.
Vector< scalar > vector
Definition: vector.H:57
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)
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
defineTypeNameAndDebug(combustionModel, 0)
clipPlaneToFace()=delete
No default construct.
General set of labels of mesh quantity (points, cells, faces).
Definition: topoSet.H:59
const vectorField & faceCentres() const
Subtract elements from current set.
vector point
Point is a vector.
Definition: point.H:37
Class with constructor to add usage string to table.
messageStream Info
Information stream (stdout output on master, null elsewhere)
virtual void applyToSet(const topoSetSource::setAction action, topoSet &set) const
Apply specified action to the topoSet.
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:74
Namespace for OpenFOAM.
addToRunTimeSelectionTable(functionObject, pointHistory, dictionary)