BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / OpenFOAM / fields / DimensionedFields / DimensionedField / DimensionedField.H
blobaba43c194f8e887584dbbe845b5a89efa4600c1c
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::DimensionedField
27 Description
28     Field with dimensions and associated with geometry type GeoMesh which is
29     used to size the field and a reference to it is maintained.
31 SourceFiles
32     DimensionedFieldI.H
33     DimensionedField.C
34     DimensionedFieldIO.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef DimensionedField_H
39 #define DimensionedField_H
41 #include "regIOobject.H"
42 #include "Field.H"
43 #include "dimensionedType.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 // Forward declaration of friend functions and operators
52 template<class Type, class GeoMesh> class DimensionedField;
54 template<class Type, class GeoMesh> Ostream& operator<<
56     Ostream&,
57     const DimensionedField<Type, GeoMesh>&
60 template<class Type, class GeoMesh> Ostream& operator<<
62     Ostream&,
63     const tmp<DimensionedField<Type, GeoMesh> >&
67 /*---------------------------------------------------------------------------*\
68                            Class DimensionedField Declaration
69 \*---------------------------------------------------------------------------*/
71 template<class Type, class GeoMesh>
72 class DimensionedField
74     public regIOobject,
75     public Field<Type>
78 public:
80     // Public typedefs
82         typedef typename GeoMesh::Mesh Mesh;
83         typedef typename Field<Type>::cmptType cmptType;
86 private:
88     // Private data
90         //- Reference to mesh
91         const Mesh& mesh_;
93         //- Dimension set for this field
94         dimensionSet dimensions_;
97     // Private Member Functions
99         void readIfPresent(const word& fieldDictEntry = "value");
102 public:
104     //- Runtime type information
105     TypeName("DimensionedField");
107     // Static Member Functions
109         //- Return a null DimensionedField
110         inline static const DimensionedField<Type, GeoMesh>& null();
113     // Constructors
115         //- Construct from components
116         DimensionedField
117         (
118             const IOobject&,
119             const Mesh& mesh,
120             const dimensionSet&,
121             const Field<Type>&
122         );
124         //- Construct from components
125         //  Used for temporary fields which are initialised after construction
126         DimensionedField
127         (
128             const IOobject&,
129             const Mesh& mesh,
130             const dimensionSet&,
131             const bool checkIOFlags = true
132         );
134         //- Construct from components
135         DimensionedField
136         (
137             const IOobject&,
138             const Mesh& mesh,
139             const dimensioned<Type>&,
140             const bool checkIOFlags = true
141         );
143         //- Construct from Istream
144         DimensionedField
145         (
146             const IOobject&,
147             const Mesh& mesh,
148             const word& fieldDictEntry="value"
149         );
151         //- Construct as copy
152         DimensionedField
153         (
154             const DimensionedField<Type, GeoMesh>&
155         );
157         //- Construct as copy or re-use as specified.
158         DimensionedField
159         (
160             DimensionedField<Type, GeoMesh>&,
161             bool reUse
162         );
164         //- Construct by transferring the DimensionedField
165         DimensionedField
166         (
167             const Xfer<DimensionedField<Type, GeoMesh> >&
168         );
170         //- Construct as copy of tmp<DimensionedField> deleting argument
171 #       ifdef ConstructFromTmp
172         DimensionedField
173         (
174             const tmp<DimensionedField<Type, GeoMesh> >&
175         );
176 #       endif
178         //- Construct as copy resetting IO parameters
179         DimensionedField
180         (
181             const IOobject&,
182             const DimensionedField<Type, GeoMesh>&
183         );
185         //- Construct as copy resetting name
186         DimensionedField
187         (
188             const word& newName,
189             const DimensionedField<Type, GeoMesh>&
190         );
192         //- Construct as copy resetting name and re-use as specified.
193         DimensionedField
194         (
195             const word& newName,
196             DimensionedField<Type, GeoMesh>&,
197             bool reUse
198         );
200         //- Construct by transferring the DimensionedField with a new name
201         DimensionedField
202         (
203             const word& newName,
204             const Xfer<DimensionedField<Type, GeoMesh> >&
205         );
207         //- Construct as copy resetting name
208 #       ifdef ConstructFromTmp
209         DimensionedField
210         (
211             const word& newName,
212             const tmp<DimensionedField<Type, GeoMesh> >&
213         );
214 #       endif
216         //- Clone
217         tmp<DimensionedField<Type, GeoMesh> > clone() const;
220     //- Destructor
221     virtual ~DimensionedField();
224     // Member Functions
226         void readField
227         (
228             const dictionary& fieldDict,
229             const word& fieldDictEntry = "value"
230         );
232         //- Return mesh
233         inline const Mesh& mesh() const;
235         //- Return dimensions
236         inline const dimensionSet& dimensions() const;
238         //- Return non-const access to dimensions
239         inline dimensionSet& dimensions();
241         inline const Field<Type>& field() const;
243         inline Field<Type>& field();
245         //- Return a component field of the field
246         tmp<DimensionedField<cmptType, GeoMesh> > component
247         (
248             const direction
249         ) const;
251         //- Replace a component field of the field
252         void replace
253         (
254             const direction,
255             const DimensionedField<cmptType, GeoMesh>&
256         );
258         //- Replace a component field of the field
259         void replace
260         (
261             const direction,
262             const tmp<DimensionedField<cmptType, GeoMesh> >&
263         );
265         //- Return the field transpose (only defined for second rank tensors)
266         tmp<DimensionedField<Type, GeoMesh> > T() const;
268         //- Calculate and return arithmetic average
269         dimensioned<Type> average() const;
271         //- Calculate and return weighted average
272         dimensioned<Type> weightedAverage
273         (
274             const DimensionedField<scalar, GeoMesh>&
275         ) const;
277         //- Calculate and return weighted average
278         dimensioned<Type> weightedAverage
279         (
280             const tmp<DimensionedField<scalar, GeoMesh> >&
281         ) const;
284         // Write
286             bool writeData(Ostream&, const word& fieldDictEntry) const;
288             bool writeData(Ostream&) const;
291     // Member Operators
293         void operator=(const DimensionedField<Type, GeoMesh>&);
294         void operator=(const tmp<DimensionedField<Type, GeoMesh> >&);
295         void operator=(const dimensioned<Type>&);
297         void operator+=(const DimensionedField<Type, GeoMesh>&);
298         void operator+=(const tmp<DimensionedField<Type, GeoMesh> >&);
300         void operator-=(const DimensionedField<Type, GeoMesh>&);
301         void operator-=(const tmp<DimensionedField<Type, GeoMesh> >&);
303         void operator*=(const DimensionedField<scalar, GeoMesh>&);
304         void operator*=(const tmp<DimensionedField<scalar, GeoMesh> >&);
306         void operator/=(const DimensionedField<scalar, GeoMesh>&);
307         void operator/=(const tmp<DimensionedField<scalar, GeoMesh> >&);
309         void operator+=(const dimensioned<Type>&);
310         void operator-=(const dimensioned<Type>&);
312         void operator*=(const dimensioned<scalar>&);
313         void operator/=(const dimensioned<scalar>&);
316     // Ostream Operators
318         friend Ostream& operator<< <Type, GeoMesh>
319         (
320             Ostream&,
321             const DimensionedField<Type, GeoMesh>&
322         );
324         friend Ostream& operator<< <Type, GeoMesh>
325         (
326             Ostream&,
327             const tmp<DimensionedField<Type, GeoMesh> >&
328         );
332 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
334 } // End namespace Foam
336 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
338 #include "DimensionedFieldI.H"
339 #include "DimensionedFieldFunctions.H"
341 #ifdef NoRepository
342 #   include "DimensionedField.C"
343 #endif
345 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
347 #endif
349 // ************************************************************************* //