codedMixedFvPatchField.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::codedMixedFvPatchField
26 
27 Description
28  Constructs on-the-fly a new boundary condition (derived from
29  mixedFvPatchField) which is then used to evaluate.
30 
31 Usage
32  Example:
33  \verbatim
34  <patchName>
35  {
36  type codedMixed;
37 
38  refValue uniform (0 0 0);
39  refGradient uniform (0 0 0);
40  valueFraction uniform 1;
41 
42  name rampedMixed; // name of generated BC
43 
44  code
45  #{
46  this->refValue() =
47  vector(1, 0, 0)
48  *min(10, 0.1*this->db().time().value());
49  this->refGrad() = Zero;
50  this->valueFraction() = 1.0;
51  #};
52 
53  // codeInclude
54  //#{
55  // #include "fvCFD.H"
56  //#};
57 
58  // codeOptions
59  //#{
60  // -I$(LIB_SRC)/finiteVolume/lnInclude
61  //#};
62  }
63  \endverbatim
64 
65  A special form is if the 'code' section is not supplied. In this case
66  the code gets read from a (runTimeModifiable!) dictionary system/codeDict
67  which would have a corresponding entry
68 
69  \verbatim
70  <patchName>
71  {
72  code
73  #{
74  this->refValue() = min(10, 0.1*this->db().time().value());
75  this->refGrad() = Zero;
76  this->valueFraction() = 1.0;
77  #};
78  }
79  \endverbatim
80 
81 See also
82  Foam::dynamicCode
83  Foam::functionEntries::codeStream
84 
85 SourceFiles
86  codedMixedFvPatchField.C
87 
88 \*---------------------------------------------------------------------------*/
89 
90 #ifndef codedMixedFvPatchField_H
91 #define codedMixedFvPatchField_H
92 
93 #include "mixedFvPatchFields.H"
94 #include "codedBase.H"
95 
96 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
97 
98 namespace Foam
99 {
100 
101 // Forward declaration of classes
102 class dynamicCode;
103 class dynamicCodeContext;
104 class IOdictionary;
105 
106 /*---------------------------------------------------------------------------*\
107  Class codedMixedFvPatchField Declaration
108 \*---------------------------------------------------------------------------*/
109 
110 template<class Type>
112 :
113  public mixedFvPatchField<Type>,
114  public codedBase
115 {
116  // Private static data
117 
118  //- The keywords associated with source code
119  static const wordList codeKeys_;
120 
121 
122  // Private Data
123 
124  //- Dictionary contents for the boundary condition
125  mutable dictionary dict_;
126 
127  const word name_;
128 
129  mutable autoPtr<mixedFvPatchField<Type>> redirectPatchFieldPtr_;
130 
131 
132  // Private Member Functions
133 
134  const IOdictionary& dict() const;
135 
136  //- Set the rewrite vars controlling the Type
137  static void setFieldTemplates(dynamicCode& dynCode);
138 
139  //- Get the loaded dynamic libraries
140  virtual dlLibraryTable& libs() const;
141 
142  //- Adapt the context for the current object
143  virtual void prepare(dynamicCode&, const dynamicCodeContext&) const;
144 
145  //- Return a description (type + name) for the output
146  virtual string description() const;
147 
148  //- Clear the ptr to the redirected object
149  virtual void clearRedirect() const;
150 
151  //- Get the dictionary to initialize the codeContext
152  virtual const dictionary& codeDict() const;
153 
154  //- Get the keywords associated with source code
155  virtual const wordList& codeKeys() const;
156 
157 
158 public:
159 
160  // Static Data Members
161 
162  //- Name of the C code template to be used
163  static const word codeTemplateC;
164 
165  //- Name of the H code template to be used
166  static const word codeTemplateH;
167 
168 
169  //- Runtime type information
170  TypeName("codedMixed");
171 
172 
173  // Constructors
174 
175  //- Construct from patch and internal field
177  (
178  const fvPatch&,
180  );
181 
182  //- Construct from patch, internal field and dictionary
184  (
185  const fvPatch&,
187  const dictionary&
188  );
189 
190  //- Construct by mapping given codedMixedFvPatchField
191  // onto a new patch
193  (
195  const fvPatch&,
197  const fvPatchFieldMapper&
198  );
199 
200  //- Copy constructor
202  (
204  );
205 
206  //- Construct and return a clone
207  virtual tmp<fvPatchField<Type>> clone() const
208  {
209  return tmp<fvPatchField<Type>>
210  (
212  );
213  }
214 
215  //- Copy constructor setting internal field reference
217  (
220  );
221 
222  //- Construct and return a clone setting internal field reference
224  (
226  ) const
227  {
228  return tmp<fvPatchField<Type>>
229  (
230  new codedMixedFvPatchField<Type>(*this, iF)
231  );
232  }
233 
234 
235  // Member Functions
236 
237  //- Get reference to the underlying patchField
239 
240  //- Update the coefficients associated with the patch field
241  virtual void updateCoeffs();
242 
243  //- Evaluate the patch field
244  // This is only needed to set the updated() flag of the name
245  // to false.
246  virtual void evaluate
247  (
249  );
250 
251  //- Write
252  virtual void write(Ostream&) const;
253 };
254 
255 
256 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
257 
258 } // End namespace Foam
259 
260 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
261 
262 #ifdef NoRepository
263  #include "codedMixedFvPatchField.C"
264 #endif
265 
266 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
267 
268 #endif
269 
270 // ************************************************************************* //
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:158
commsTypes
Types of communications.
Definition: UPstream.H:64
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:61
This boundary condition provides a base class for &#39;mixed&#39; type boundary conditions, i.e. conditions that mix fixed value and patch-normal gradient conditions.
static const word codeTemplateC
Name of the C code template to be used.
static const word codeTemplateH
Name of the H code template to be used.
const mixedFvPatchField< Type > & redirectPatchField() const
Get reference to the underlying patchField.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Definition: IOdictionary.H:52
A class for handling words, derived from string.
Definition: word.H:59
Foam::fvPatchFieldMapper.
Base class for function objects and boundary conditions using dynamic code.
Definition: codedBase.H:53
A table of dynamically loaded libraries.
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::commsTypes::blocking)
Evaluate the patch field.
codedMixedFvPatchField(const fvPatch &, const DimensionedField< Type, volMesh > &)
Construct from patch and internal field.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:53
virtual void write(Ostream &) const
Write.
Tools for handling dynamic code compilation.
Definition: dynamicCode.H:56
Encapsulation of dynamic code dictionaries.
Constructs on-the-fly a new boundary condition (derived from mixedFvPatchField) which is then used to...
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
TypeName("codedMixed")
Runtime type information.
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: PtrList.H:52
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
A class for managing temporary objects.
Definition: PtrList.H:53
virtual tmp< fvPatchField< Type > > clone() const
Construct and return a clone.
Namespace for OpenFOAM.