Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / postProcessing / functionObjects / field / fieldValues / cellSource / cellSource.H
blobd6c1cae9981ad5ab48e64caf82b1e24668843208
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2009-2010 OpenCFD Ltd.
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::fieldValues::cellSource
27 Description
28     Cell source variant of field value function object. Values of user-
29     specified fields reported for collections of cells.
31     cellObj1                        // Name also used to identify output folder
32     {
33         type            cellSource;
34         functionObjectLibs ("libfieldValueFunctionObjects.so");
35         enabled         true;
36         outputControl   outputTime;
37         log             true;       // log to screen?
38         valueOutput     true;       // Write values at run-time output times?
39         source          cellZone;   // Type of cell source
40         sourceName      c0;
41         operation       volAverage;
42         fields
43         (
44             p
45             U
46         );
47     }
49     where operation is one of:
50       - none
51       - sum
52       - volAverage
53       - volIntegrate
54       - weightedAverage
56 SourceFiles
57     cellSource.C
59 \*---------------------------------------------------------------------------*/
61 #ifndef cellSource_H
62 #define cellSource_H
64 #include "NamedEnum.H"
65 #include "fieldValue.H"
66 #include "labelList.H"
67 #include "volFieldsFwd.H"
69 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
71 namespace Foam
73 namespace fieldValues
76 /*---------------------------------------------------------------------------*\
77                          Class cellSource Declaration
78 \*---------------------------------------------------------------------------*/
80 class cellSource
82     public fieldValue
85 public:
87     // Public data types
89         //- Source type enumeration
90         enum sourceType
91         {
92             stCellZone,
93             stAll
94         };
96         //- Source type names
97         static const NamedEnum<sourceType, 2> sourceTypeNames_;
100         //- Operation type enumeration
101         enum operationType
102         {
103             opNone,
104             opSum,
105             opVolAverage,
106             opVolIntegrate,
107             opWeightedAverage,
108             opMin,
109             opMax
110         };
112         //- Operation type names
113         static const NamedEnum<operationType, 7> operationTypeNames_;
116 private:
118     // Private Member Functions
120         //- Set cells to evaluate based on a cell zone
121         void setCellZoneCells();
123         //- Set cells to evaluate based on a patch
124         void setPatchCells();
127 protected:
129     // Protected data
131         //- Source type
132         sourceType source_;
134         //- Operation to apply to values
135         operationType operation_;
137         //- Global number of cells
138         label nCells_;
140         //- Local list of cell IDs
141         labelList cellId_;
143         //- Weight field name - only used for opWeightedAverage mode
144         word weightFieldName_;
147     // Protected Member Functions
149         //- Initialise, e.g. cell addressing
150         void initialise(const dictionary& dict);
152         //- Return true if the field name is valid
153         template<class Type>
154         bool validField(const word& fieldName) const;
156         //- Insert field values into values list
157         template<class Type>
158         tmp<Field<Type> > setFieldValues
159         (
160             const word& fieldName
161         ) const;
163         //- Apply the 'operation' to the values
164         template<class Type>
165         Type processValues
166         (
167             const Field<Type>& values,
168             const scalarField& V,
169             const scalarField& weightField
170         ) const;
172         //- Output file header information
173         virtual void writeFileHeader();
176 public:
178     //- Run-time type information
179     TypeName("cellSource");
182     //- Construct from components
183     cellSource
184     (
185         const word& name,
186         const objectRegistry& obr,
187         const dictionary& dict,
188         const bool loadFromFiles = false
189     );
192     //- Destructor
193     virtual ~cellSource();
196     // Public Member Functions
198         // Access
200             //- Return the source type
201             inline const sourceType& source() const;
203             //- Return the local list of cell IDs
204             inline const labelList& cellId() const;
207         // Function object functions
209             //- Read from dictionary
210             virtual void read(const dictionary&);
212             //- Calculate and write
213             virtual void write();
215             //- Templated helper function to output field values
216             template<class Type>
217             bool writeValues(const word& fieldName);
219             //- Filter a field according to cellIds
220             template<class Type>
221             tmp<Field<Type> > filterField(const Field<Type>& field) const;
225 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
227 } // End namespace fieldValues
228 } // End namespace Foam
230 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
232 #include "cellSourceI.H"
234 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
236 #ifdef NoRepository
237     #include "cellSourceTemplates.C"
238 #endif
240 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
242 #endif
244 // ************************************************************************* //