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-2024 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 ".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 /*---------------------------------------------------------------------------*\
102  Class codedMixedFvPatchField Declaration
103 \*---------------------------------------------------------------------------*/
104 
105 template<class Type>
107 :
108  public mixedFvPatchField<Type>,
109  public codedBase
110 {
111  // Private Data
112 
113  mutable autoPtr<mixedFvPatchField<Type>> redirectPatchFieldPtr_;
114 
115 
116  // Private Member Functions
117 
118  //- Get the keywords associated with source code
119  virtual wordList codeKeys() const;
120 
121  //- Get the name of the dictionary variables in the source code
122  virtual wordList codeDictVars() const;
123 
124  //- Adapt the context for the current object
125  virtual void prepare(dynamicCode&, const dynamicCodeContext&) const;
126 
127  //- Clear the ptr to the redirected object
128  virtual void clearRedirect() const;
129 
130 
131 public:
132 
133  //- Runtime type information
134  TypeName("codedMixed");
135 
136 
137  // Constructors
138 
139  //- Construct from patch, internal field and dictionary
141  (
142  const fvPatch&,
144  const dictionary&
145  );
146 
147  //- Construct by mapping given codedMixedFvPatchField
148  // onto a new patch
150  (
152  const fvPatch&,
154  const fieldMapper&
155  );
156 
157 
158  //- Disallow copy without setting internal field reference
160 
161  //- Copy constructor setting internal field reference
163  (
166  );
167 
168  //- Construct and return a clone setting internal field reference
170  (
172  ) const
173  {
174  return tmp<fvPatchField<Type>>
175  (
176  new codedMixedFvPatchField<Type>(*this, iF)
177  );
178  }
179 
180 
181  // Member Functions
182 
183  //- Get reference to the underlying patchField
185 
186  //- Update the coefficients associated with the patch field
187  virtual void updateCoeffs();
188 
189  //- Evaluate the patch field
190  // This is only needed to set the updated() flag of the name
191  // to false.
192  virtual void evaluate
193  (
195  );
196 
197  //- Write
198  virtual void write(Ostream&) const;
199 };
200 
201 
202 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
203 
204 } // End namespace Foam
205 
206 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
207 
208 #ifdef NoRepository
209  #include "codedMixedFvPatchField.C"
210 #endif
211 
212 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
213 
214 #endif
215 
216 // ************************************************************************* //
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:57
commsTypes
Types of communications.
Definition: UPstream.H:65
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: autoPtr.H:51
Base class for function objects and boundary conditions using dynamic code.
Definition: codedBase.H:54
Constructs on-the-fly a new boundary condition (derived from mixedFvPatchField) which is then used to...
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::commsTypes::blocking)
Evaluate the patch field.
virtual void write(Ostream &) const
Write.
codedMixedFvPatchField(const fvPatch &, const DimensionedField< Type, volMesh > &, const dictionary &)
Construct from patch, internal field and dictionary.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
TypeName("codedMixed")
Runtime type information.
const mixedFvPatchField< Type > & redirectPatchField() const
Get reference to the underlying patchField.
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:162
Encapsulation of dynamic code dictionaries.
Tools for handling dynamic code compilation.
Definition: dynamicCode.H:57
Abstract base class for field mapping.
Definition: fieldMapper.H:48
tmp< fvPatchField< Type > > clone() const
Disallow clone without setting internal field reference.
Definition: fvPatchField.H:204
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:64
This boundary condition provides a base class for 'mixed' type boundary conditions,...
A class for managing temporary objects.
Definition: tmp.H:55
Namespace for OpenFOAM.