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 -------------------------------------------------------------------------------
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 Class
27  Foam::PatchFunction1
28 
29 Description
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 
37 SourceFiles
38  PatchFunction1.C
39  PatchFunction1New.C
40 
41 SeeAlso
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 
56 namespace Foam
57 {
58 
59 // Forward Declarations
60 class Time;
61 template<class Type> class PatchFunction1;
62 
63 template<class Type>
64 Ostream& operator<<(Ostream&, const PatchFunction1<Type>&);
65 
66 /*---------------------------------------------------------------------------*\
67  Class PatchFunction1 Declaration
68 \*---------------------------------------------------------------------------*/
69 
70 template<class Type>
71 class PatchFunction1
72 :
73  public patchFunction1Base
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 
89 protected:
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 
103 public:
104 
105  typedef Field<Type> returnType;
107  //- Runtime type information
108  TypeName("PatchFunction1")
109 
110  //- Declare runtime constructor selection table
112  (
113  autoPtr,
115  dictionary,
116  (
117  const polyPatch& pp,
118  const word& type,
119  const word& entryName,
120  const dictionary& dict,
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
187  static autoPtr<PatchFunction1<Type>> NewIfPresent
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
234  virtual tmp<Field<Type>> integrate
235  (
236  const scalar x1,
237  const scalar x2
238  ) const;
239 
240  //- Helper: optionally convert coordinates to local coordinates
241  virtual tmp<pointField> localPosition
242  (
243  const pointField& globalPos
244  ) const;
245 
246  //- Apply optional transformation
247  virtual tmp<Field<Type>> transform(const Field<Type>& fld) const;
249  //- Apply optional transformation
250  virtual tmp<Field<Type>> transform
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 // ************************************************************************* //
A class for handling keywords in dictionaries.
Definition: keyType.H:66
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:120
virtual bool uniform() const =0
Is value uniform (i.e. independent of coordinate)
virtual tmp< Field< Type > > integrate(const scalar x1, const scalar x2) const
Integrate between two (scalar) values.
virtual bool constant() const
Is value constant (i.e. independent of x)
#define declareRunTimeSelectionTable(ptrWrapper, baseType, argNames, argList, parList)
Declare a run-time selection (variables and adder classes)
coordinateScaling< Type > coordSys_
Optional local coordinate system and scaling.
A HashTable of pointers to objects of type <T>, with deallocation management of the pointers...
Definition: HashPtrTable.H:51
const polyPatch const word const word const dictionary & dict
virtual bool good() const
Can function be evaluated?
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:69
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.
A class for managing references or pointers (no reference counting)
Definition: HashPtrTable.H:49
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
vectorField pointField
pointField is a vectorField.
Definition: pointFieldFwd.H:38
Abstract base class to hold the Field mapping addressing and weights.
Definition: FieldMapper.H:43
Generic templated field type.
Definition: Field.H:61
A class for handling words, derived from Foam::string.
Definition: word.H:63
void operator=(const PatchFunction1< Type > &)=delete
No copy assignment.
const polyPatch const word & type
virtual tmp< pointField > localPosition(const pointField &globalPos) const
Helper: optionally convert coordinates to local coordinates.
virtual void autoMap(const FieldMapper &mapper)
Map (and resize as needed) from self given a mapping object.
const polyPatch const word const word & entryName
virtual void writeData(Ostream &os) const
Write in dictionary format.
bool faceValues() const noexcept
Generate face or point values on patch?
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:55
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
OBJstream os(runTime.globalPath()/outputName)
virtual tmp< Field< Type > > value(const scalar x) const
Return value as a function of (scalar) independent variable.
Helper class to wrap coordinate system and component-wise scaling.
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< ' ';}gmvFile<< nl;for(const word &name :lagrangianScalarNames){ IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
virtual tmp< PatchFunction1< Type > > clone() const =0
Return a clone.
virtual tmp< Field< Type > > transform(const Field< Type > &fld) const
Apply optional transformation.
static autoPtr< PatchFunction1< Type > > NewIfPresent(const polyPatch &pp, const word &entryName, const dictionary &dict, const bool faceValues=true)
An optional selector.
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
Definition: HashPtrTable.H:48
TypeName("PatchFunction1") declareRunTimeSelectionTable(autoPtr
Runtime type information.
A class for managing temporary objects.
Definition: HashPtrTable.H:50
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:69
virtual void rmap(const PatchFunction1< Type > &rhs, const labelList &addr)
Reverse map the given PatchFunction1 onto this PatchFunction1.
Namespace for OpenFOAM.
const polyPatch & pp
A keyword and a list of tokens is an &#39;entry&#39;.
Definition: entry.H:63
Field< Type > returnType