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-2021 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 PatchFunction1_H
47 #define 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>
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;
106 
107  //- Runtime type information
108  TypeName("PatchFunction1")
109 
110  //- Declare runtime constructor selection table
112  (
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  //- Is value uniform (i.e. independent of coordinate)
222  virtual bool uniform() const = 0;
223 
224 
225  // Evaluation
226 
227  //- Return value as a function of (scalar) independent variable
228  virtual tmp<Field<Type>> value(const scalar x) const;
229 
230  //- Integrate between two (scalar) values
231  virtual tmp<Field<Type>> integrate
232  (
233  const scalar x1,
234  const scalar x2
235  ) const;
236 
237  //- Helper: optionally convert coordinates to local coordinates
239  (
240  const pointField& globalPos
241  ) const;
242 
243  //- Apply optional transformation
244  virtual tmp<Field<Type>> transform(const Field<Type>& fld) const;
245 
246  //- Apply optional transformation
247  virtual tmp<Field<Type>> transform
248  (
249  const tmp<Field<Type>>& tfld
250  ) const;
251 
252 
253  // Mapping
254 
255  //- Map (and resize as needed) from self given a mapping object
256  virtual void autoMap(const FieldMapper& mapper);
257 
258  //- Reverse map the given PatchFunction1 onto this PatchFunction1
259  virtual void rmap
260  (
261  const PatchFunction1<Type>& rhs,
262  const labelList& addr
263  );
264 
265 
266  // I/O
267 
268  //- Ostream Operator
269  friend Ostream& operator<< <Type>
270  (
271  Ostream& os,
272  const PatchFunction1<Type>& rhs
273  );
274 
275  //- Write in dictionary format
276  virtual void writeData(Ostream& os) const;
277 };
278 
279 
280 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
281 
282 } // End namespace Foam
283 
284 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
285 
286 // Define PatchFunction1 run-time selection
287 #define makePatchFunction1(Type) \
288  \
289  defineNamedTemplateTypeNameAndDebug(PatchFunction1<Type>, 0); \
290  \
291  defineTemplateRunTimeSelectionTable \
292  ( \
293  PatchFunction1<Type>, \
294  dictionary \
295  );
296 
297 
298 // Define (templated) PatchFunction1, add to (templated) run-time selection
299 #define makePatchFunction1Type(SS, Type) \
300  \
301  defineNamedTemplateTypeNameAndDebug(PatchFunction1Types::SS<Type>, 0); \
302  \
303  PatchFunction1<Type>::adddictionaryConstructorToTable \
304  <PatchFunction1Types::SS<Type>> \
305  add##SS##Type##ConstructorToTable_;
306 
307 
308 // Define (non-templated) PatchFunction1, add to (templated) run-time selection
309 #define makeConcretePatchFunction1Type(SS, Type) \
310  \
311  defineTypeNameAndDebug(SS, 0); \
312  \
313  PatchFunction1<Type>::adddictionaryConstructorToTable \
314  <PatchFunction1Types::SS> \
315  add##SS##Type##ConstructorToTable_;
316 
317 
318 // Define scalar PatchFunction1 and add to (templated) run-time selection
319 #define makeScalarPatchFunction1(SS) \
320  \
321  makeConcretePatchFunction1Type(SS, scalar);
322 
323 
324 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
325 
326 #ifdef NoRepository
327  #include "PatchFunction1.C"
328  #include "PatchFunction1New.C"
329 #endif
330 
331 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
332 
333 #endif
334 
335 // ************************************************************************* //
Foam::entry
A keyword and a list of tokens is an 'entry'.
Definition: entry.H:67
Foam::PatchFunction1::TypeName
TypeName("PatchFunction1") declareRunTimeSelectionTable(autoPtr
Runtime type information.
Foam::Time
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:73
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:65
Foam::PatchFunction1::localPosition
virtual tmp< pointField > localPosition(const pointField &globalPos) const
Helper: optionally convert coordinates to local coordinates.
Definition: PatchFunction1.C:114
coordinateScaling.H
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:61
Foam::PatchFunction1::writeData
virtual void writeData(Ostream &os) const
Write in dictionary format.
Definition: PatchFunction1.C:185
Foam::PatchFunction1::operator=
void operator=(const PatchFunction1< Type > &)=delete
No copy assignment.
Foam::coordinateScaling
Helper class to wrap coordinate system and component-wise scaling.
Definition: coordinateScaling.H:55
Foam::FieldMapper
Abstract base class to hold the Field mapping addressing and weights.
Definition: FieldMapper.H:49
Foam::PatchFunction1::returnType
Field< Type > returnType
Definition: PatchFunction1.H:104
Foam::PatchFunction1::clone
virtual tmp< PatchFunction1< Type > > clone() const =0
Return a clone.
Foam::PatchFunction1::entryName
const polyPatch const word const word & entryName
Definition: PatchFunction1.H:118
patchFunction1Base.H
Foam::PatchFunction1::type
const polyPatch const word & type
Definition: PatchFunction1.H:117
Foam::operator<<
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
Definition: boundaryPatch.C:83
declareRunTimeSelectionTable
#define declareRunTimeSelectionTable(ptrWrapper, baseType, argNames, argList, parList)
Declare a run-time selection (variables and adder classes)
Definition: runTimeSelectionTables.H:174
Foam::keyType
A class for handling keywords in dictionaries.
Definition: keyType.H:68
Foam::Field
Generic templated field type.
Definition: Field.H:63
Foam::PatchFunction1::integrate
virtual tmp< Field< Type > > integrate(const scalar x1, const scalar x2) const
Integrate between two (scalar) values.
Definition: PatchFunction1.C:102
Foam::polyPatch
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:68
Field.H
PatchFunction1.C
fld
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))
Definition: gmvOutputLagrangian.H:23
Foam::PatchFunction1::transform
virtual tmp< Field< Type > > transform(const Field< Type > &fld) const
Apply optional transformation.
Definition: PatchFunction1.C:150
Foam::PatchFunction1::uniform
virtual bool uniform() const =0
Is value uniform (i.e. independent of coordinate)
Definition: PatchFunction1.C:83
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:123
os
OBJstream os(runTime.globalPath()/outputName)
Foam::PatchFunction1
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
Definition: PatchFunction1.H:60
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
PatchFunction1New.C
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
Foam::PatchFunction1::pp
const polyPatch & pp
Definition: PatchFunction1.H:116
Foam::HashPtrTable
A HashTable of pointers to objects of type <T>, with deallocation management of the pointers.
Definition: HashPtrTable.H:54
Foam::PatchFunction1::dict
const polyPatch const word const word const dictionary & dict
Definition: PatchFunction1.H:119
Foam::List< label >
HashPtrTable.H
Foam::PatchFunction1::rmap
virtual void rmap(const PatchFunction1< Type > &rhs, const labelList &addr)
Reverse map the given PatchFunction1 onto this PatchFunction1.
Definition: PatchFunction1.C:177
Foam::PatchFunction1::faceValues
const polyPatch const word const word const dictionary const bool faceValues
Definition: PatchFunction1.H:121
x
x
Definition: LISASMDCalcMethod2.H:52
Foam::PatchFunction1::value
virtual tmp< Field< Type > > value(const scalar x) const
Return value as a function of (scalar) independent variable.
Definition: PatchFunction1.C:91
Foam::PatchFunction1::NewCompat
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.
Definition: PatchFunction1New.C:190
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
Foam::patchFunction1Base
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
Definition: patchFunction1Base.H:60
constant
constant condensation/saturation model.
Foam::PatchFunction1::coordSys_
coordinateScaling< Type > coordSys_
Optional local coordinate system and scaling.
Definition: PatchFunction1.H:93
Foam::PatchFunction1::autoMap
virtual void autoMap(const FieldMapper &mapper)
Map (and resize as needed) from self given a mapping object.
Definition: PatchFunction1.C:171
Foam::refPtr
A class for managing references or pointers (no reference counting)
Definition: PtrList.H:60
Foam::PatchFunction1::NewIfPresent
static autoPtr< PatchFunction1< Type > > NewIfPresent(const polyPatch &pp, const word &entryName, const dictionary &dict, const bool faceValues=true)
An optional selector.
Definition: PatchFunction1New.C:214