Loading...
Searching...
No Matches
cylinderToPoint.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) 2017 OpenFOAM Foundation
9 Copyright (C) 2018-2022 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
27\*---------------------------------------------------------------------------*/
28
29#include "cylinderToPoint.H"
30#include "polyMesh.H"
33// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
35namespace Foam
36{
43 (
46 word,
47 cylinder
48 );
50 (
53 istream,
54 cylinder
55 );
56}
57
58
59Foam::topoSetSource::addToUsageTable Foam::cylinderToPoint::usage_
60(
61 cylinderToPoint::typeName,
62 "\n Usage: cylinderToPoint (p1X p1Y p1Z) (p2X p2Y p2Z) radius\n\n"
63 " Select points within bounding cylinder\n\n"
64);
65
66
67// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
68
69void Foam::cylinderToPoint::combine(topoSet& set, const bool add) const
70{
71 const tmp<pointField> tctrs(this->transform(mesh_.points()));
72 const pointField& ctrs = tctrs();
73
74 const vector axis = (point2_ - point1_);
75 const scalar magAxis2 = magSqr(axis);
76 const scalar orad2 = sqr(radius_);
77 const scalar irad2 = innerRadius_ > 0 ? sqr(innerRadius_) : -1;
78
79 // Treat innerRadius == 0 like unspecified innerRadius (always accept)
80
81 forAll(ctrs, elemi)
82 {
83 const vector d = ctrs[elemi] - point1_;
84 const scalar magD = d & axis;
85
86 if ((magD > 0) && (magD < magAxis2))
87 {
88 const scalar d2 = (d & d) - sqr(magD)/magAxis2;
89 if ((d2 < orad2) && (d2 > irad2))
90 {
91 addOrDelete(set, elemi, add);
92 }
93 }
94 }
95}
96
97
98// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
99
101(
102 const polyMesh& mesh,
103 const point& point1,
104 const point& point2,
105 const scalar radius,
106 const scalar innerRadius
107)
108:
110 point1_(point1),
111 point2_(point2),
112 radius_(radius),
113 innerRadius_(innerRadius)
114{}
115
116
118(
119 const polyMesh& mesh,
120 const dictionary& dict
121)
122:
124 point1_(dict.getCompat<point>("point1", {{"p1", -2112}})),
125 point2_(dict.getCompat<point>("point2", {{"p2", -2112}})),
126 radius_(dict.getCompat<scalar>("radius", {{"outerRadius", -2112}})),
127 innerRadius_
128 (
129 dict.getCheckOrDefault<scalar>("innerRadius", 0, scalarMinMax::ge(0))
130 )
131{}
132
133
135(
136 const polyMesh& mesh,
137 Istream& is,
138 const bool mandatoryInnerRadius
139)
140:
142 point1_(checkIs(is)),
143 point2_(checkIs(is)),
144 radius_(readScalar(checkIs(is))),
145 innerRadius_(0)
146{
147 if (mandatoryInnerRadius)
148 {
149 innerRadius_ = readScalar(checkIs(is));
150 }
151}
152
153
155(
156 const polyMesh& mesh,
157 Istream& is
158)
160 cylinderToPoint(mesh, is, false)
161{}
162
163
164// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
165
167(
168 const topoSetSource::setAction action,
169 topoSet& set
170) const
171{
172 if (action == topoSetSource::ADD || action == topoSetSource::NEW)
173 {
174 if (verbose_)
175 {
176 Info<< " Adding points within cylinder"
177 << ", with point1 = " << point1_
178 << ", point2 = " << point2_
179 << ", radius = " << radius_;
180
181 if (innerRadius_ > 0)
182 {
183 Info<< ", inner radius = " << innerRadius_;
184 }
185
186 Info<< endl;
187 }
188
189 combine(set, true);
190 }
191 else if (action == topoSetSource::SUBTRACT)
192 {
193 if (verbose_)
194 {
195 Info<< " Removing points within cylinder"
196 << ", with point1 = " << point1_
197 << ", point2 = " << point2_
198 << ", radius = " << radius_;
199
200 if (innerRadius_ > 0)
201 {
202 Info<< ", inner radius = " << innerRadius_;
203 }
204
205 Info<< endl;
206 }
207
208 combine(set, false);
209 }
210}
211
212
213// ************************************************************************* //
Macros for easy insertion into run-time selection tables.
#define addNamedToRunTimeSelectionTable(baseType, thisType, argNames, lookupName)
Add to construction table with 'lookupName' as the key.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition Istream.H:60
static MinMax< scalar > ge(const scalar &minVal)
A topoSetPointSource to select all points which are inside a given bounding cylinder or cylinder annu...
cylinderToPoint(const polyMesh &mesh, Istream &is, const bool mandatoryInnerRadius)
Construct from Istream with mandatory inner radius.
virtual void applyToSet(const topoSetSource::setAction action, topoSet &set) const
Apply specified action to the topoSet.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
T getCompat(const word &keyword, std::initializer_list< std::pair< const char *, int > > compat, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a T using any compatibility names if needed. FatalIOError if not found,...
T getCheckOrDefault(const word &keyword, const T &deflt, const Predicate &pred, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a T, or return the given default value. FatalIOError if it is found and the number of...
Mesh consisting of general polyhedral cells.
Definition polyMesh.H:79
virtual const pointField & points() const
Return raw points.
Definition polyMesh.C:1063
The topoSetPointSource is a intermediate class for handling topoSet sources for selecting points.
topoSetPointSource(const polyMesh &mesh)
Construct from mesh.
Class with constructor to add usage string to table.
Base class of a source for a topoSet.
void addOrDelete(topoSet &set, const label id, const bool add) const
Add or delete id from set. Add when 'add' is true.
setAction
Enumeration defining various actions.
@ SUBTRACT
Subtract elements from current set.
@ ADD
Add elements to current set.
@ NEW
Create a new set and ADD elements to it.
bool verbose_
Output verbosity (default: true).
const polyMesh & mesh() const noexcept
Reference to the mesh.
const polyMesh & mesh_
Reference to the mesh.
static Istream & checkIs(Istream &is)
Check state of stream.
General set of labels of mesh quantity (points, cells, faces).
Definition topoSet.H:63
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
A class for handling words, derived from Foam::string.
Definition word.H:66
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
Definition className.H:142
dynamicFvMesh & mesh
Namespace for OpenFOAM.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
refinementData transform(const tensor &, const refinementData val)
No-op rotational transform for base types.
messageStream Info
Information stream (stdout output on master, null elsewhere).
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition Ostream.H:519
vector point
Point is a vector.
Definition point.H:37
vectorField pointField
pointField is a vectorField.
dimensioned< typename typeOfMag< Type >::type > magSqr(const dimensioned< Type > &dt)
dict add("bounds", meshBb)
dictionary dict
#define forAll(list, i)
Loop across all elements in list.
Definition stdFoam.H:299