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-2018 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 data
117 
118  //- Dictionary contents for the boundary condition
119  mutable dictionary dict_;
120 
121  const word name_;
122 
123  mutable autoPtr<mixedFvPatchField<Type>> redirectPatchFieldPtr_;
124 
125 
126  // Private Member Functions
127 
128  const IOdictionary& dict() const;
129 
130  //- Set the rewrite vars controlling the Type
131  static void setFieldTemplates(dynamicCode& dynCode);
132 
133  //- Get the loaded dynamic libraries
134  virtual dlLibraryTable& libs() const;
135 
136  //- Adapt the context for the current object
137  virtual void prepare(dynamicCode&, const dynamicCodeContext&) const;
138 
139  // Return a description (type + name) for the output
140  virtual string description() const;
141 
142  // Clear the ptr to the redirected object
143  virtual void clearRedirect() const;
144 
145  // Get the dictionary to initialize the codeContext
146  virtual const dictionary& codeDict() const;
147 
148 
149 public:
150 
151  // Static data members
152 
153  //- Name of the C code template to be used
154  static const word codeTemplateC;
155 
156  //- Name of the H code template to be used
157  static const word codeTemplateH;
158 
159 
160  //- Runtime type information
161  TypeName("codedMixed");
162 
163 
164  // Constructors
165 
166  //- Construct from patch and internal field
168  (
169  const fvPatch&,
171  );
172 
173  //- Construct from patch, internal field and dictionary
175  (
176  const fvPatch&,
178  const dictionary&
179  );
180 
181  //- Construct by mapping given codedMixedFvPatchField
182  // onto a new patch
184  (
186  const fvPatch&,
188  const fvPatchFieldMapper&
189  );
190 
191  //- Construct as copy
193  (
195  );
196 
197  //- Construct and return a clone
198  virtual tmp<fvPatchField<Type>> clone() const
199  {
200  return tmp<fvPatchField<Type>>
201  (
203  );
204  }
205 
206  //- Construct as copy setting internal field reference
208  (
211  );
212 
213  //- Construct and return a clone setting internal field reference
215  (
217  ) const
218  {
219  return tmp<fvPatchField<Type>>
220  (
221  new codedMixedFvPatchField<Type>(*this, iF)
222  );
223  }
224 
225 
226  // Member functions
227 
228  //- Get reference to the underlying patchField
230 
231  //- Update the coefficients associated with the patch field
232  virtual void updateCoeffs();
233 
234  //- Evaluate the patch field
235  // This is only needed to set the updated() flag of the name
236  // to false.
237  virtual void evaluate
238  (
240  );
241 
242  //- Write
243  virtual void write(Ostream&) const;
244 };
245 
246 
247 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
248 
249 } // End namespace Foam
250 
251 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
252 
253 #ifdef NoRepository
254  #include "codedMixedFvPatchField.C"
255 #endif
256 
257 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
258 
259 #endif
260 
261 // ************************************************************************* //
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:137
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.