ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / OpenFOAM / db / functionObjects / functionObject / functionObject.H
bloba9a026ea885e7a1f54a92b7af5737c3a830043a8
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
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.
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.
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/>.
24 Class
25     Foam::functionObject
27 Description
28     Abstract base-class for Time/database function objects.
30 See Also
31     Foam::OutputFilterFunctionObject
33 SourceFiles
34     functionObject.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef functionObject_H
39 #define functionObject_H
41 #include "typeInfo.H"
42 #include "autoPtr.H"
43 #include "runTimeSelectionTables.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 // Forward declaration of classes
51 class Time;
53 /*---------------------------------------------------------------------------*\
54                        Class functionObject Declaration
55 \*---------------------------------------------------------------------------*/
57 class functionObject
59     // Private data
61         //- Name
62         const word name_;
65     // Private Member Functions
67         //- Disallow default bitwise copy construct
68         functionObject(const functionObject&);
70         //- Disallow default bitwise assignment
71         void operator=(const functionObject&);
74 public:
76     //- Runtime type information
77     virtual const word& type() const = 0;
79     static int debug;
82     // Declare run-time constructor selection tables
84         declareRunTimeSelectionTable
85         (
86             autoPtr,
87             functionObject,
88             dictionary,
89             (const word& name, const Time& t, const dictionary& dict),
90             (name, t, dict)
91         );
94     // Constructors
96         //- Construct from components
97         functionObject(const word& name);
99         //- Return clone
100         autoPtr<functionObject> clone() const
101         {
102             notImplemented("functionObject::clone() const");
103             return autoPtr<functionObject>(NULL);
104         }
106         //- Return a pointer to a new functionObject created on freestore
107         //  from Istream
108         class iNew
109         {
110             const Time& time_;
112         public:
114             iNew(const Time& t)
115             :
116                 time_(t)
117             {}
119             autoPtr<functionObject> operator()
120             (
121                 const word& name,
122                 Istream& is
123             ) const;
124         };
127     // Selectors
129         //- Select from dictionary, based on its "type" entry
130         static autoPtr<functionObject> New
131         (
132             const word& name,
133             const Time&,
134             const dictionary&
135         );
138     //- Destructor
139     virtual ~functionObject();
142     // Member Functions
144         //- Name
145         virtual const word& name() const;
147         //- Called at the start of the time-loop
148         virtual bool start() = 0;
150         //- Called at each ++ or += of the time-loop. forceWrite overrides the
151         //  outputControl behaviour.
152         virtual bool execute(const bool forceWrite) = 0;
154         //- Called when Time::run() determines that the time-loop exits.
155         //  By default it simply calls execute().
156         virtual bool end();
158         //- Read and set the function object if its data have changed
159         virtual bool read(const dictionary&) = 0;
163 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
165 } // End namespace Foam
167 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
169 #endif
171 // ************************************************************************* //