PatchFunction1.H
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) 2018-2022 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
26Class
27 Foam::PatchFunction1
28
29Description
30 Top level data entry class for use in dictionaries. Provides a mechanism
31 to specify a variable as a certain type, e.g. constant or time varying, and
32 provide functions to return the (interpolated) value, and integral between
33 limits.
34
35 Extends the Function1 class by adding autoMap and rMap functions
36
37SourceFiles
38 PatchFunction1.C
39 PatchFunction1New.C
40
41SeeAlso
42 Foam::Function1
43
44\*---------------------------------------------------------------------------*/
45
46#ifndef Foam_PatchFunction1_H
47#define Foam_PatchFunction1_H
48
49#include "patchFunction1Base.H"
50#include "coordinateScaling.H"
51#include "Field.H"
52#include "HashPtrTable.H"
53
54// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
55
56namespace Foam
57{
58
59// Forward Declarations
60class Time;
61template<class Type> class PatchFunction1;
62
63template<class Type>
65
66/*---------------------------------------------------------------------------*\
67 Class PatchFunction1 Declaration
68\*---------------------------------------------------------------------------*/
69
70template<class Type>
72:
74{
75 // Private Member Functions
76
77 //- Selector, with alternative entry etc
79 (
80 const polyPatch& pp,
81 const word& entryName,
82 const entry* eptr,
83 const dictionary& dict,
84 const bool faceValues,
85 const bool mandatory
86 );
87
88
89protected:
90
91 // Protected Data
92
93 //- Optional local coordinate system and scaling
95
96
97 // Protected Member Functions
98
99 //- No copy assignment
100 void operator=(const PatchFunction1<Type>&) = delete;
101
102
103public:
105 typedef Field<Type> returnType;
106
107 //- Runtime type information
108 TypeName("PatchFunction1")
109
110 //- Declare runtime constructor selection table
112 (
117 const polyPatch& pp,
118 const word& type,
121 const bool faceValues
122 ),
124 );
125
126
127 // Constructors
128
129 //- Construct from polyPatch and entry name
131 (
132 const polyPatch& pp,
133 const word& entryName,
134 const bool faceValues = true
135 );
136
137 //- Construct from polyPatch, dictionary and entry name
139 (
140 const polyPatch& pp,
141 const word& entryName,
142 const dictionary& dict,
143 const bool faceValues = true
144 );
145
146 //- Copy construct
147 explicit PatchFunction1(const PatchFunction1<Type>& rhs);
148
149 //- Copy construct setting patch
150 explicit PatchFunction1
151 (
152 const PatchFunction1<Type>& rhs,
153 const polyPatch& pp
154 );
155
156 //- Return a clone
157 virtual tmp<PatchFunction1<Type>> clone() const = 0;
158
159 //- Return a clone, setting patch
160 virtual tmp<PatchFunction1<Type>> clone(const polyPatch& pp) const = 0;
161
162
163 // Selectors
164
165 //- Selector
166 static autoPtr<PatchFunction1<Type>> New
167 (
168 const polyPatch& pp,
169 const word& entryName,
170 const dictionary& dict,
171 const bool faceValues = true,
172 const bool mandatory = true
173 );
174
175 //- Compatibility selector
176 static autoPtr<PatchFunction1<Type>> NewCompat
177 (
178 const polyPatch& pp,
179 const word& entryName,
180 std::initializer_list<std::pair<const char*,int>> compat,
181 const dictionary& dict,
182 const bool faceValues = true,
183 const bool mandatory = true
184 );
185
186 //- An optional selector
188 (
189 const polyPatch& pp,
190 const word& entryName,
191 const dictionary& dict,
192 const bool faceValues = true
193 );
194
195
196 // Caching Selectors - accept wildcards in dictionary
197
198 //- Selector with external storage.
199 //- This also allows wildcard matches in a dictionary
200 static refPtr<PatchFunction1<Type>> New
201 (
202 HashPtrTable<PatchFunction1<Type>>& cache,
203 const polyPatch& pp,
204 const word& entryName,
205 const dictionary& dict,
206 enum keyType::option matchOpt = keyType::LITERAL,
207 const bool faceValues = true,
208 const bool mandatory = true
209 );
210
211
212 //- Destructor
213 virtual ~PatchFunction1() = default;
214
215
216 // Member Functions
217
218 //- Is value constant (i.e. independent of x)
219 virtual bool constant() const { return false; }
220
221 //- Can function be evaluated?
222 virtual bool good() const { return true; }
223
224 //- Is value uniform (i.e. independent of coordinate)
225 virtual bool uniform() const = 0;
226
227
228 // Evaluation
229
230 //- Return value as a function of (scalar) independent variable
231 virtual tmp<Field<Type>> value(const scalar x) const;
232
233 //- Integrate between two (scalar) values
235 (
236 const scalar x1,
237 const scalar x2
238 ) const;
239
240 //- Helper: optionally convert coordinates to local coordinates
242 (
243 const pointField& globalPos
244 ) const;
245
246 //- Apply optional transformation
247 virtual tmp<Field<Type>> transform(const Field<Type>& fld) const;
248
249 //- Apply optional transformation
251 (
252 const tmp<Field<Type>>& tfld
253 ) const;
254
255
256 // Mapping
257
258 //- Map (and resize as needed) from self given a mapping object
259 virtual void autoMap(const FieldMapper& mapper);
260
261 //- Reverse map the given PatchFunction1 onto this PatchFunction1
262 virtual void rmap
263 (
264 const PatchFunction1<Type>& rhs,
265 const labelList& addr
266 );
267
268
269 // I/O
270
271 //- Ostream Operator
272 friend Ostream& operator<< <Type>
273 (
274 Ostream& os,
275 const PatchFunction1<Type>& rhs
276 );
277
278 //- Write in dictionary format
279 virtual void writeData(Ostream& os) const;
280};
281
282
283// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
284
285} // End namespace Foam
286
287// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
288
289// Define PatchFunction1 run-time selection
290#define makePatchFunction1(Type) \
291 \
292 defineNamedTemplateTypeNameAndDebug(PatchFunction1<Type>, 0); \
293 \
294 defineTemplateRunTimeSelectionTable \
295 ( \
296 PatchFunction1<Type>, \
297 dictionary \
298 );
299
300
301// Define (templated) PatchFunction1, add to (templated) run-time selection
302#define makePatchFunction1Type(SS, Type) \
303 \
304 defineNamedTemplateTypeNameAndDebug(PatchFunction1Types::SS<Type>, 0); \
305 \
306 PatchFunction1<Type>::adddictionaryConstructorToTable \
307 <PatchFunction1Types::SS<Type>> \
308 add##SS##Type##ConstructorToTable_;
309
310
311// Define (non-templated) PatchFunction1, add to (templated) run-time selection
312#define makeConcretePatchFunction1Type(SS, Type) \
313 \
314 defineTypeNameAndDebug(SS, 0); \
315 \
316 PatchFunction1<Type>::adddictionaryConstructorToTable \
317 <PatchFunction1Types::SS> \
318 add##SS##Type##ConstructorToTable_;
319
320
321// Define scalar PatchFunction1 and add to (templated) run-time selection
322#define makeScalarPatchFunction1(SS) \
323 \
324 makeConcretePatchFunction1Type(SS, scalar);
325
326
327// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
328
329#ifdef NoRepository
330 #include "PatchFunction1.C"
331 #include "PatchFunction1New.C"
332#endif
333
334// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
335
336#endif
337
338// ************************************************************************* //
Info<< nl<< "Wrote faMesh in vtk format: "<< writer.output().name()<< nl;}{ vtk::lineWriter writer(aMesh.points(), aMesh.edges(), fileName(aMesh.mesh().time().globalPath()/"finiteArea-edges"));writer.writeGeometry();writer.beginCellData(4);writer.writeProcIDs();{ Field< scalar > fld(faMeshTools::flattenEdgeField(aMesh.magLe(), true))
Abstract base class to hold the Field mapping addressing and weights.
Definition: FieldMapper.H:50
Generic templated field type.
Definition: Field.H:82
A HashTable of pointers to objects of type <T>, with deallocation management of the pointers.
Definition: HashPtrTable.H:68
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
virtual tmp< Field< Type > > integrate(const scalar x1, const scalar x2) const
Integrate between two (scalar) values.
const polyPatch const word const word & entryName
virtual bool uniform() const =0
Is value uniform (i.e. independent of coordinate)
virtual void rmap(const PatchFunction1< Type > &rhs, const labelList &addr)
Reverse map the given PatchFunction1 onto this PatchFunction1.
const polyPatch const word & type
virtual void autoMap(const FieldMapper &mapper)
Map (and resize as needed) from self given a mapping object.
Field< Type > returnType
virtual void writeData(Ostream &os) const
Write in dictionary format.
coordinateScaling< Type > coordSys_
Optional local coordinate system and scaling.
virtual tmp< Field< Type > > value(const scalar x) const
Return value as a function of (scalar) independent variable.
const polyPatch const word const word const dictionary & dict
virtual tmp< pointField > localPosition(const pointField &globalPos) const
Helper: optionally convert coordinates to local coordinates.
void operator=(const PatchFunction1< Type > &)=delete
No copy assignment.
virtual bool good() const
Can function be evaluated?
virtual tmp< Field< Type > > transform(const Field< Type > &fld) const
Apply optional transformation.
const polyPatch & pp
TypeName("PatchFunction1") declareRunTimeSelectionTable(autoPtr
Runtime type information.
static autoPtr< PatchFunction1< Type > > NewCompat(const polyPatch &pp, const word &entryName, std::initializer_list< std::pair< const char *, int > > compat, const dictionary &dict, const bool faceValues=true, const bool mandatory=true)
Compatibility selector.
virtual tmp< PatchFunction1< Type > > clone() const =0
Return a clone.
static autoPtr< PatchFunction1< Type > > NewIfPresent(const polyPatch &pp, const word &entryName, const dictionary &dict, const bool faceValues=true)
An optional selector.
const polyPatch const word const word const dictionary const bool faceValues
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: autoPtr.H:66
Helper class to wrap coordinate system and component-wise scaling.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
A keyword and a list of tokens is an 'entry'.
Definition: entry.H:70
A class for handling keywords in dictionaries.
Definition: keyType.H:71
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
constant condensation/saturation model.
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:75
A class for managing references or pointers (no reference counting)
Definition: refPtr.H:58
A class for managing temporary objects.
Definition: tmp.H:65
A class for handling words, derived from Foam::string.
Definition: word.H:68
OBJstream os(runTime.globalPath()/outputName)
Namespace for OpenFOAM.
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
Definition: boundaryPatch.C:83
#define declareRunTimeSelectionTable(ptrWrapper, baseType, argNames, argList, parList)
Declare a run-time selection (variables and adder classes)
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition: typeInfo.H:73