1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 1991-2008 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
25 \*---------------------------------------------------------------------------*/
27 #include "fieldAverageItem.H"
28 #include "volFields.H"
31 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
34 void Foam::fieldAverage::addMeanField
37 PtrList<GeometricField<Type, fvPatchField, volMesh> >& meanFieldList
40 if (faItems_[fieldi].mean())
42 typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
44 const word& fieldName = faItems_[fieldi].fieldName();
45 const fieldType& baseField = obr_.lookupObject<fieldType>(fieldName);
47 const word meanFieldName = fieldName + EXT_MEAN;
48 Info<< "Reading/calculating field " << meanFieldName << nl << endl;
57 obr_.time().timeName(),
59 IOobject::READ_IF_PRESENT,
69 template<class Type1, class Type2>
70 void Foam::fieldAverage::addPrime2MeanField
73 PtrList<GeometricField<Type1, fvPatchField, volMesh> >& meanFieldList,
74 PtrList<GeometricField<Type2, fvPatchField, volMesh> >& prime2MeanFieldList
77 if (faItems_[fieldi].mean() && meanFieldList.set(fieldi))
79 typedef GeometricField<Type1, fvPatchField, volMesh> fieldType1;
80 typedef GeometricField<Type2, fvPatchField, volMesh> fieldType2;
82 const word& fieldName = faItems_[fieldi].fieldName();
83 const fieldType1& baseField = obr_.lookupObject<fieldType1>(fieldName);
84 const fieldType1& meanField = meanFieldList[fieldi];
86 const word meanFieldName = fieldName + EXT_PRIME2MEAN;
87 Info<< "Reading/calculating field " << meanFieldName << nl << endl;
88 prime2MeanFieldList.set
96 obr_.time().timeName(),
98 IOobject::READ_IF_PRESENT,
101 sqr(baseField) - sqr(meanField)
109 void Foam::fieldAverage::calculateMeanFields
111 PtrList<GeometricField<Type, fvPatchField, volMesh> >& meanFieldList
114 typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
116 const scalar dt = obr_.time().deltaT().value();
120 if (faItems_[i].mean() && meanFieldList.set(i))
122 const word& fieldName = faItems_[i].fieldName();
123 const fieldType& baseField =
124 obr_.lookupObject<fieldType>(fieldName);
125 fieldType& meanField = meanFieldList[i];
129 if (faItems_[i].timeBase())
131 alpha = (totalTime_[i] - dt)/totalTime_[i];
132 beta = dt/totalTime_[i];
136 alpha = scalar(totalIter_[i] - 1)/scalar(totalIter_[i]);
137 beta = 1.0/scalar(totalIter_[i]);
140 meanField = alpha*meanField + beta*baseField;
146 template<class Type1, class Type2>
147 void Foam::fieldAverage::calculatePrime2MeanFields
149 PtrList<GeometricField<Type1, fvPatchField, volMesh> >& meanFieldList,
150 PtrList<GeometricField<Type2, fvPatchField, volMesh> >& prime2MeanFieldList
153 typedef GeometricField<Type1, fvPatchField, volMesh> fieldType1;
154 typedef GeometricField<Type2, fvPatchField, volMesh> fieldType2;
156 const scalar dt = obr_.time().deltaT().value();
162 faItems_[i].prime2Mean()
163 && meanFieldList.set(i)
164 && prime2MeanFieldList.set(i)
167 const word& fieldName = faItems_[i].fieldName();
168 const fieldType1& baseField =
169 obr_.lookupObject<fieldType1>(fieldName);
170 const fieldType1& meanField = meanFieldList[i];
171 fieldType2& prime2MeanField = prime2MeanFieldList[i];
175 if (faItems_[i].timeBase())
177 alpha = (totalTime_[i] - dt)/totalTime_[i];
178 beta = dt/totalTime_[i];
182 alpha = scalar(totalIter_[i] - 1)/scalar(totalIter_[i]);
183 beta = 1.0/scalar(totalIter_[i]);
187 alpha*prime2MeanField
188 + beta*sqr(baseField)
195 template<class Type1, class Type2>
196 void Foam::fieldAverage::addMeanSqrToPrime2Mean
198 PtrList<GeometricField<Type1, fvPatchField, volMesh> >& meanFieldList,
199 PtrList<GeometricField<Type2, fvPatchField, volMesh> >& prime2MeanFieldList
202 typedef GeometricField<Type1, fvPatchField, volMesh> fieldType1;
203 typedef GeometricField<Type2, fvPatchField, volMesh> fieldType2;
209 faItems_[i].prime2Mean()
210 && meanFieldList.set(i)
211 && prime2MeanFieldList.set(i)
214 const fieldType1& meanField = meanFieldList[i];
215 fieldType2& prime2MeanField = prime2MeanFieldList[i];
217 prime2MeanField += sqr(meanField);
224 void Foam::fieldAverage::writeFieldList
226 const PtrList<GeometricField<Type, fvPatchField, volMesh> >& fieldList
231 if (fieldList.set(i))
233 fieldList[i].write();
239 // ************************************************************************* //