codedFunctionObject.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::codedFunctionObject
26 
27 Description
28  Provides a general interface to enable dynamic code compilation.
29 
30  The entries are:
31  \plaintable
32  codeInclude | include files
33  codeOptions | include paths; inserted into EXE_INC in Make/options
34  codeLibs | link line; inserted into LIB_LIBS in Make/options
35  codeData | c++; local member data (null constructed);
36  localCode | c++; local static functions;
37  codeRead | c++; upon functionObject::read();
38  codeExecute | c++; upon functionObject::execute();
39  codeWrite | c++; upon functionObject::write()
40  codeEnd | c++; upon functionObject::end();
41  \endplaintable
42 
43  Example of function object specification:
44  \verbatim
45  difference
46  {
47  libs ("libutilityFunctionObjects.so");
48 
49  type coded;
50  // Name of on-the-fly generated functionObject
51  name writeMagU;
52  codeWrite
53  #{
54  // Lookup U
55  const volVectorField& U = mesh().lookupObject<volVectorField>("U");
56  // Write
57  mag(U)().write();
58  #};
59  }
60  \endverbatim
61 
62 See also
63  Foam::functionObject
64  Foam::codedBase
65 
66 SourceFiles
67  codedFunctionObject.C
68 
69 \*---------------------------------------------------------------------------*/
70 
71 #ifndef functionObjects_codedFunctionObject_H
72 #define functionObjects_codedFunctionObject_H
73 
74 #include "functionObject.H"
75 #include "codedBase.H"
76 
77 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
78 
79 namespace Foam
80 {
81 
82 /*---------------------------------------------------------------------------*\
83  Class codedFunctionObject Declaration
84 \*---------------------------------------------------------------------------*/
85 
86 class codedFunctionObject
87 :
88  public functionObject,
89  public codedBase
90 {
91 protected:
92 
93  // Protected data
94 
95  //- Reference to the time database
96  const Time& time_;
97 
98  //- Input dictionary
99  dictionary dict_;
100 
101  word name_;
102 
103  string codeData_;
104  string codeRead_;
105  string codeExecute_;
106  string codeWrite_;
107  string codeEnd_;
108 
109  //- Underlying functionObject
110  mutable autoPtr<functionObject> redirectFunctionObjectPtr_;
111 
112 
113  // Protected Member Functions
114 
115  //- Get the loaded dynamic libraries
116  virtual dlLibraryTable& libs() const;
117 
118  //- Adapt the context for the current object
119  virtual void prepare(dynamicCode&, const dynamicCodeContext&) const;
120 
121  // Return a description (type + name) for the output
122  virtual string description() const;
123 
124  // Clear any redirected objects
125  virtual void clearRedirect() const;
126 
127  // Get the dictionary to initialize the codeContext
128  virtual const dictionary& codeDict() const;
129 
130 
131 private:
132 
133  //- Disallow default bitwise copy construct
135 
136  //- Disallow default bitwise assignment
137  void operator=(const codedFunctionObject&);
140 public:
142  //- Runtime type information
143  TypeName("coded");
144 
146  // Constructors
147 
148  //- Construct from Time and dictionary
150  (
151  const word& name,
152  const Time& time,
153  const dictionary& dict
154  );
155 
156 
157  //- Destructor
158  virtual ~codedFunctionObject();
159 
160 
161  // Member Functions
162 
163  //- Dynamically compiled functionObject
165 
166  //- Called at each ++ or += of the time-loop.
167  // postProcess overrides the usual executeControl behaviour and
168  // forces execution (used in post-processing mode)
169  virtual bool execute();
170 
171  //- Called at each ++ or += of the time-loop.
172  // postProcess overrides the usual writeControl behaviour and
173  // forces writing always (used in post-processing mode)
174  virtual bool write();
175 
176  //- Called when Time::run() determines that the time-loop exits.
177  // By default it simply calls execute().
178  virtual bool end();
179 
180  //- Read and set the function object if its data have changed
181  virtual bool read(const dictionary&);
182 };
183 
184 
185 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
186 
187 } // End namespace Foam
188 
189 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
190 
191 #endif
192 
193 // ************************************************************************* //
functionObject & redirectFunctionObject() const
Dynamically compiled functionObject.
dictionary dict
virtual bool read(const dictionary &)
Read and set the function object if its data have changed.
const word & name() const
Return the name of this functionObject.
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:137
const Time & time_
Reference to the time database.
virtual void clearRedirect() const
Abstract base-class for Time/database function objects.
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:68
autoPtr< functionObject > redirectFunctionObjectPtr_
Underlying functionObject.
virtual const dictionary & codeDict() const
virtual dlLibraryTable & libs() const
Get the loaded dynamic libraries.
virtual void prepare(dynamicCode &, const dynamicCodeContext &) const
Adapt the context for the current object.
Provides a general interface to enable dynamic code compilation.
A class for handling words, derived from string.
Definition: word.H:59
virtual bool end()
Called when Time::run() determines that the time-loop exits.
virtual ~codedFunctionObject()
Destructor.
TypeName("coded")
Runtime type information.
dictionary dict_
Input dictionary.
virtual bool execute()
Called at each ++ or += of the time-loop.
virtual bool write()
Called at each ++ or += of the time-loop.
virtual string description() const
Namespace for OpenFOAM.