clipPlaneToPoint.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 "clipPlaneToPoint.H"
29 #include "polyMesh.H"
31 
32 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
33 
34 namespace Foam
35 {
36  defineTypeNameAndDebug(clipPlaneToPoint, 0);
37  addToRunTimeSelectionTable(topoSetSource, clipPlaneToPoint, word);
38  addToRunTimeSelectionTable(topoSetSource, clipPlaneToPoint, istream);
39  addToRunTimeSelectionTable(topoSetPointSource, clipPlaneToPoint, word);
40  addToRunTimeSelectionTable(topoSetPointSource, clipPlaneToPoint, istream);
42  (
43  topoSetPointSource,
44  clipPlaneToPoint,
45  word,
46  clipPlane
47  );
49  (
50  topoSetPointSource,
51  clipPlaneToPoint,
52  istream,
53  clipPlane
54  );
55 }
56 
57 
58 Foam::topoSetSource::addToUsageTable Foam::clipPlaneToPoint::usage_
59 (
60  clipPlaneToPoint::typeName,
61  "\n Usage: clipPlaneToPoint (px py pz) (nx ny nz)\n\n"
62  " Select points above the plane\n\n"
63 );
64 
65 
66 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
67 
68 void Foam::clipPlaneToPoint::combine(topoSet& set, const bool add) const
69 {
70  // Mesh points above plane
71 
72  const tmp<pointField> tctrs(this->transform(mesh_.points()));
73  const pointField& ctrs = tctrs();
74 
75  forAll(ctrs, elemi)
76  {
77  if (((ctrs[elemi] - point_) & normal_) > 0)
78  {
79  addOrDelete(set, elemi, add);
80  }
81  }
82 }
83 
84 
85 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
86 
88 (
89  const polyMesh& mesh,
90  const point& basePoint,
91  const vector& normal
92 )
93 :
95  point_(basePoint),
96  normal_(normal)
97 {}
98 
99 
101 (
102  const polyMesh& mesh,
103  const dictionary& dict
104 )
105 :
107  point_(dict.get<vector>("point")),
108  normal_(dict.get<vector>("normal"))
109 {}
110 
111 
113 (
114  const polyMesh& mesh,
115  Istream& is
116 )
117 :
119  point_(checkIs(is)),
120  normal_(checkIs(is))
121 {}
122 
123 
124 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
125 
127 (
128  const topoSetSource::setAction action,
129  topoSet& set
130 ) const
131 {
132  if (action == topoSetSource::ADD || action == topoSetSource::NEW)
133  {
134  if (verbose_)
135  {
136  Info<< " Adding points above plane at "
137  << point_ << " with normal " << normal_ << endl;
138  }
139 
140  combine(set, true);
141  }
142  else if (action == topoSetSource::SUBTRACT)
143  {
144  if (verbose_)
145  {
146  Info<< " Removing points above plane at "
147  << point_ << " with normal " << normal_ << endl;
148  }
149 
150  combine(set, false);
151  }
152 }
153 
154 
155 // ************************************************************************* //
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
clipPlaneToPoint()=delete
No default construct.
The topoSetPointSource is a intermediate class for handling topoSet sources for selecting points...
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)
virtual const pointField & points() const
Return raw points.
Definition: polyMesh.C:1078
#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
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)
General set of labels of mesh quantity (points, cells, faces).
Definition: topoSet.H:59
Subtract elements from current set.
vector point
Point is a vector.
Definition: point.H:37
Class with constructor to add usage string to table.
tmp< pointField > transform(const pointField &points) const
Coordinate transform (optionally) coordinates. Returns reference to input data if no transform is act...
messageStream Info
Information stream (stdout output on master, null elsewhere)
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:75
virtual void applyToSet(const topoSetSource::setAction action, topoSet &set) const
Apply specified action to the topoSet.
Namespace for OpenFOAM.
addToRunTimeSelectionTable(functionObject, pointHistory, dictionary)