1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
7 -------------------------------------------------------------------------------
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 the
13 Free Software Foundation; either version 2 of the License, or (at your
14 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
21 You should have received a copy of the GNU General Public License
22 along with OpenFOAM; if not, write to the Free Software Foundation,
23 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
26 Foam::DimensionedField
29 Field with dimensions and associated with geometry type GeoMesh which is
30 used to size the field and a reference to it is maintained.
37 \*---------------------------------------------------------------------------*/
39 #ifndef DimensionedField_H
40 #define DimensionedField_H
42 #include "regIOobject.H"
44 #include "dimensionedType.H"
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 // Forward declaration of friend functions and operators
53 template<class Type, class GeoMesh> class DimensionedField;
55 template<class Type, class GeoMesh> Ostream& operator<<
58 const DimensionedField<Type, GeoMesh>&
61 template<class Type, class GeoMesh> Ostream& operator<<
64 const tmp<DimensionedField<Type, GeoMesh> >&
68 /*---------------------------------------------------------------------------*\
69 Class DimensionedField Declaration
70 \*---------------------------------------------------------------------------*/
72 template<class Type, class GeoMesh>
73 class DimensionedField
83 typedef typename GeoMesh::Mesh Mesh;
84 typedef typename Field<Type>::cmptType cmptType;
94 //- Dimension set for this field
95 dimensionSet dimensions_;
100 //- Runtime type information
101 TypeName("DimensionedField");
103 // Static Member Functions
105 //- Return a null DimensionedField
106 inline static const DimensionedField<Type, GeoMesh>& null();
111 //- Construct from components
120 //- Construct from components
121 // Used for temporary fields which are initialised after construction
129 //- Construct from components
134 const dimensioned<Type>&
137 //- Construct from Istream
142 const word& fieldDictEntry="value"
147 const dictionary& fieldDict,
148 const word& fieldDictEntry="value"
151 //- Construct as copy
154 const DimensionedField<Type, GeoMesh>&
157 //- Construct as copy or re-use as specified.
160 DimensionedField<Type, GeoMesh>&,
164 //- Construct by transferring the DimensionedField
167 const Xfer<DimensionedField<Type, GeoMesh> >&
170 //- Construct as copy of tmp<DimensionedField> deleting argument
171 # ifdef ConstructFromTmp
174 const tmp<DimensionedField<Type, GeoMesh> >&
178 //- Construct as copy resetting IO parameters
182 const DimensionedField<Type, GeoMesh>&
185 //- Construct as copy resetting name
189 const DimensionedField<Type, GeoMesh>&
192 //- Construct as copy resetting name and re-use as specified.
196 DimensionedField<Type, GeoMesh>&,
200 //- Construct by transferring the DimensionedField with a new name
204 const Xfer<DimensionedField<Type, GeoMesh> >&
207 //- Construct as copy resetting name
208 # ifdef ConstructFromTmp
212 const tmp<DimensionedField<Type, GeoMesh> >&
217 tmp<DimensionedField<Type, GeoMesh> > clone() const;
221 virtual ~DimensionedField();
227 inline const Mesh& mesh() const;
229 //- Return dimensions
230 inline const dimensionSet& dimensions() const;
232 //- Return non-const access to dimensions
233 inline dimensionSet& dimensions();
235 inline const Field<Type>& field() const;
237 inline Field<Type>& field();
239 //- Return a component field of the field
240 tmp<DimensionedField<cmptType, GeoMesh> > component
245 //- Replace a component field of the field
249 const DimensionedField<cmptType, GeoMesh>&
252 //- Replace a component field of the field
256 const tmp<DimensionedField<cmptType, GeoMesh> >&
259 //- Return the field transpose (only defined for second rank tensors)
260 tmp<DimensionedField<Type, GeoMesh> > T() const;
262 //- Calculate and return arithmetic average
263 dimensioned<Type> average() const;
265 //- Calculate and return weighted average
266 dimensioned<Type> weightedAverage
268 const DimensionedField<scalar, GeoMesh>&
271 //- Calculate and return weighted average
272 dimensioned<Type> weightedAverage
274 const tmp<DimensionedField<scalar, GeoMesh> >&
280 bool writeData(Ostream&, const word& fieldDictEntry) const;
282 bool writeData(Ostream&) const;
287 void operator=(const DimensionedField<Type, GeoMesh>&);
288 void operator=(const tmp<DimensionedField<Type, GeoMesh> >&);
289 void operator=(const dimensioned<Type>&);
291 void operator+=(const DimensionedField<Type, GeoMesh>&);
292 void operator+=(const tmp<DimensionedField<Type, GeoMesh> >&);
294 void operator-=(const DimensionedField<Type, GeoMesh>&);
295 void operator-=(const tmp<DimensionedField<Type, GeoMesh> >&);
297 void operator*=(const DimensionedField<scalar, GeoMesh>&);
298 void operator*=(const tmp<DimensionedField<scalar, GeoMesh> >&);
300 void operator/=(const DimensionedField<scalar, GeoMesh>&);
301 void operator/=(const tmp<DimensionedField<scalar, GeoMesh> >&);
303 void operator+=(const dimensioned<Type>&);
304 void operator-=(const dimensioned<Type>&);
306 void operator*=(const dimensioned<scalar>&);
307 void operator/=(const dimensioned<scalar>&);
312 friend Ostream& operator<< <Type, GeoMesh>
315 const DimensionedField<Type, GeoMesh>&
318 friend Ostream& operator<< <Type, GeoMesh>
321 const tmp<DimensionedField<Type, GeoMesh> >&
326 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
328 } // End namespace Foam
330 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
332 #include "DimensionedFieldI.H"
333 #include "DimensionedFieldFunctions.H"
336 # include "DimensionedField.C"
339 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
343 // ************************************************************************* //