CodedFvSource.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) 2012-2016 OpenFOAM Foundation
9 Copyright (C) 2019-2021 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
12 This file is part of OpenFOAM.
13
14 OpenFOAM is free software: you can redistribute it and/or modify it
15 under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 3 of the License, or
17 (at your option) any later version.
18
19 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26
27Class
28 Foam::fv::codedSource
29
30Group
31 grpFvOptionsSources
32
33Description
34 Constructs on-the-fly fvOption source
35
36 The hook functions take the following arguments:
37
38 \verbatim
39 codeCorrect
40 (
41 GeometricField<Type, fvPatchField, volMesh>& field
42 )
43
44 codeAddSup
45 (
46 fvMatrix<Type>& eqn,
47 const label fieldi
48 )
49
50 codeAddSupRho
51 (
52 const volScalarField& rho,
53 fvMatrix<Type>& eqn,
54 const label fieldi
55 )
56
57 codeConstrain
58 (
59 fvMatrix<Type>& eqn,
60 const label fieldi
61 )
62 \endverbatim
63
64 where :
65 field is the name of the field in the fields list
66 eqn is the fvMatrix
67
68 These are in addition to the usual code entries:
69 \plaintable
70 codeInclude | include files
71 codeOptions | compiler line: added to EXE_INC (Make/options)
72 codeLibs | linker line: added to LIB_LIBS (Make/options)
73 localCode | c++; local static functions
74 \endplaintable
75
76Usage
77 Example usage in controlDict:
78 \verbatim
79 energySource
80 {
81 type scalarCodedSource;
82
83 scalarCodedSourceCoeffs
84 {
85 selectionMode all;
86
87 fields (h);
88 name sourceTime;
89
90 codeInclude
91 #{
92 #};
93
94 codeCorrect
95 #{
96 Pout<< "**codeCorrect**" << endl;
97 #};
98
99 codeAddSup
100 #{
101 const Time& time = mesh().time();
102 const scalarField& V = mesh_.V();
103 scalarField& heSource = eqn.source();
104 heSource -= 0.1*sqr(time.value())*V;
105 #};
106
107 codeConstrain
108 #{
109 Pout<< "**codeConstrain**" << endl;
110 #};
111 }
112 }
113 \endverbatim
114
115SourceFiles
116 codedSource.C
117
118\*---------------------------------------------------------------------------*/
119
120#ifndef fv_CodedFvSource_H
121#define fv_CodedFvSource_H
122
123#include "cellSetOption.H"
124#include "codedBase.H"
125
126// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
127
128namespace Foam
129{
130namespace fv
131{
132
133/*---------------------------------------------------------------------------*\
134 Class codedSource Declaration
135\*---------------------------------------------------------------------------*/
136
137template<class Type>
138class CodedSource
139:
140 public fv::cellSetOption,
141 protected codedBase
142{
143protected:
144
145 // Protected Data
146
147 word name_;
148
149 string codeCorrect_;
150 string codeAddSup_;
151 string codeAddSupRho_;
152 string codeConstrain_;
154 //- Underlying code
156
157
158 // Protected Member Functions
159
160 //- Mutable access to the loaded dynamic libraries
161 virtual dlLibraryTable& libs() const;
163 //- Description (type + name) for the output
164 virtual string description() const;
166 //- Clear redirected object(s)
167 virtual void clearRedirect() const;
168
169 //- Get the dictionary to initialize the code context
170 virtual const dictionary& codeDict() const;
171
172 //- Adapt the context for the current object
173 virtual void prepare(dynamicCode&, const dynamicCodeContext&) const;
174
175
176public:
177
178 // Static Data Members
179
180 //- Name of the C code template to be used
181 static constexpr const char* const codeTemplateC
182 = "codedFvOptionTemplate.C";
183
184 //- Name of the H code template to be used
185 static constexpr const char* const codeTemplateH
186 = "codedFvOptionTemplate.H";
187
188
189 //- Runtime type information
190 TypeName("coded");
191
192
193 // Constructors
194
195 //- Construct from components
197 (
198 const word& name,
199 const word& modelType,
201 const fvMesh& mesh
202 );
203
204
205 // Member Functions
206
207 //- Dynamically compiled fvOption
208 fv::option& redirectOption() const;
209
210
211 // Evaluation
212
213 //- Correct field
214 virtual void correct
215 (
217 );
218
219 //- Explicit/implicit matrix contributions
220 virtual void addSup
221 (
222 fvMatrix<Type>& eqn,
223 const label fieldi
224 );
225
226 //- Explicit/implicit matrix contributions to compressible equation
227 virtual void addSup
228 (
229 const volScalarField& rho,
230 fvMatrix<Type>& eqn,
231 const label fieldi
232 );
233
234 //- Set value
235 virtual void constrain
236 (
237 fvMatrix<Type>& eqn,
238 const label fieldi
239 );
240
241
242 // IO
243
244 //- Read source dictionary
245 virtual bool read(const dictionary& dict);
246};
247
248
249// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
250
251} // End namespace fv
252} // End namespace Foam
253
254// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
255
256#ifdef NoRepository
257 #include "CodedFvSource.C"
258#endif
259
260// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
261
262#endif
263
264// ************************************************************************* //
Generic GeometricField class.
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: autoPtr.H:66
Base class for function objects and boundary conditions using dynamic code that provides methods for ...
Definition: codedBase.H:67
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
A table of dynamically loaded libraries.
Encapsulation of dynamic code dictionaries.
Tools for handling dynamic code compilation.
Definition: dynamicCode.H:60
A special matrix type and solver, designed for finite volume solutions of scalar equations....
Definition: fvMatrix.H:121
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:91
autoPtr< fv::option > redirectOptionPtr_
Underlying code.
virtual void prepare(dynamicCode &, const dynamicCodeContext &) const
Adapt the context for the current object.
Definition: CodedFvSource.C:68
virtual void addSup(fvMatrix< Type > &eqn, const label fieldi)
Explicit/implicit matrix contributions.
TypeName("coded")
Runtime type information.
virtual bool read(const dictionary &dict)
Read source dictionary.
virtual void constrain(fvMatrix< Type > &eqn, const label fieldi)
Set value.
static constexpr const char *const codeTemplateC
Name of the C code template to be used.
virtual const dictionary & codeDict() const
Get the dictionary to initialize the code context.
Definition: CodedFvSource.C:60
fv::option & redirectOption() const
Dynamically compiled fvOption.
virtual void clearRedirect() const
Clear redirected object(s)
Definition: CodedFvSource.C:53
static constexpr const char *const codeTemplateH
Name of the H code template to be used.
virtual dlLibraryTable & libs() const
Mutable access to the loaded dynamic libraries.
Definition: CodedFvSource.C:39
virtual string description() const
Description (type + name) for the output.
Definition: CodedFvSource.C:46
Intermediate abstract class for handling cell-set options for the derived fvOptions.
Base abstract class for handling finite volume options (i.e. fvOption).
Definition: fvOption.H:127
const word & name() const noexcept
Return const access to the source name.
Definition: fvOptionI.H:31
const fvMesh & mesh() const noexcept
Return const access to the mesh database.
Definition: fvOptionI.H:37
A class for handling words, derived from Foam::string.
Definition: word.H:68
thermo correct()
Namespace for OpenFOAM.
labelList fv(nPoints)
dictionary dict
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition: typeInfo.H:73