46 if (names[fieldI].size())
59 resetFields(meanScalarFields_);
60 resetFields(meanVectorFields_);
61 resetFields(meanSphericalTensorFields_);
62 resetFields(meanSymmTensorFields_);
63 resetFields(meanTensorFields_);
65 resetFields(prime2MeanScalarFields_);
66 resetFields(prime2MeanSymmTensorFields_);
69 totalIter_.setSize(faItems_.size(), 1);
72 totalTime_.setSize(faItems_.size(), obr_.time().deltaT().value());
78 const word& fieldName = faItems_[fieldI].fieldName();
81 addMeanField<scalar>(fieldI, meanScalarFields_);
85 addMeanField<vector>(fieldI, meanVectorFields_);
89 addMeanField<sphericalTensor>(fieldI, meanSphericalTensorFields_);
93 addMeanField<symmTensor>(fieldI, meanSymmTensorFields_);
97 addMeanField<tensor>(fieldI, meanTensorFields_);
102 <<
"Requested field " << faItems_[fieldI].fieldName()
103 <<
" does not exist in the database" <<
nl
111 if (faItems_[fieldI].prime2Mean())
113 const word& fieldName = faItems_[fieldI].fieldName();
114 if (!faItems_[fieldI].mean())
117 <<
"To calculate the prime-squared average, the "
118 <<
"mean average must also be selected for field "
124 addPrime2MeanField<scalar, scalar>
128 prime2MeanScalarFields_
133 addPrime2MeanField<vector, symmTensor>
137 prime2MeanSymmTensorFields_
143 <<
"prime2Mean average can only be applied to "
144 <<
"volScalarFields and volVectorFields"
145 <<
nl <<
" Field: " << fieldName <<
nl
155 const label currentTimeIndex =
156 static_cast<const fvMesh&
>(obr_).time().timeIndex();
158 if (prevTimeIndex_ == currentTimeIndex)
164 prevTimeIndex_ = currentTimeIndex;
171 totalIter_[fieldI]++;
172 totalTime_[fieldI] += obr_.time().deltaT().value();
175 addMeanSqrToPrime2Mean<scalar, scalar>
178 prime2MeanScalarFields_
180 addMeanSqrToPrime2Mean<vector, symmTensor>
183 prime2MeanSymmTensorFields_
186 calculateMeanFields<scalar>(meanScalarFields_);
187 calculateMeanFields<vector>(meanVectorFields_);
188 calculateMeanFields<sphericalTensor>(meanSphericalTensorFields_);
189 calculateMeanFields<symmTensor>(meanSymmTensorFields_);
190 calculateMeanFields<tensor>(meanTensorFields_);
192 calculatePrime2MeanFields<scalar, scalar>
195 prime2MeanScalarFields_
197 calculatePrime2MeanFields<vector, symmTensor>
200 prime2MeanSymmTensorFields_
207 writeFieldList<scalar>(meanScalarFields_);
208 writeFieldList<vector>(meanVectorFields_);
209 writeFieldList<sphericalTensor>(meanSphericalTensorFields_);
210 writeFieldList<symmTensor>(meanSymmTensorFields_);
211 writeFieldList<tensor>(meanTensorFields_);
213 writeFieldList<scalar>(prime2MeanScalarFields_);
214 writeFieldList<symmTensor>(prime2MeanSymmTensorFields_);
224 "fieldAveragingProperties",
225 obr_.time().timeName(),
236 const word& fieldName = faItems_[fieldI].fieldName();
238 propsDict.
subDict(fieldName).
add(
"totalIter", totalIter_[fieldI]);
239 propsDict.
subDict(fieldName).
add(
"totalTime", totalTime_[fieldI]);
242 propsDict.regIOobject::write();
250 Info<<
"fieldAverage: starting averaging at time "
251 << obr_.time().timeName() <<
nl <<
endl;
257 "fieldAveragingProperties",
258 obr_.time().timeName(),
266 if (!propsDictHeader.headerOk())
268 Info<<
"fieldAverage: starting averaging at time "
269 << obr_.time().timeName() <<
nl <<
endl;
275 Info<<
"fieldAverage: restarting averaging for fields:" <<
endl;
278 const word& fieldName = faItems_[fieldI].fieldName();
279 if (propsDict.
found(fieldName))
283 totalIter_[fieldI] = readLabel(fieldDict.lookup(
"totalIter"));
284 totalTime_[fieldI] =
readScalar(fieldDict.lookup(
"totalTime"));
285 Info<<
" " << fieldName
286 <<
" iters = " << totalIter_[fieldI]
287 <<
" time = " << totalTime_[fieldI] <<
endl;
302 const bool loadFromFiles
309 cleanRestart_(
false),
310 resetOnOutput_(
false),
314 meanSphericalTensorFields_(),
315 meanSymmTensorFields_(),
317 prime2MeanScalarFields_(),
318 prime2MeanSymmTensorFields_(),
323 if (isA<fvMesh>(obr_))
332 "fieldAverage::fieldAverage\n"
335 "const objectRegistry&,\n"
336 "const dictionary&,\n"
339 ) <<
"No fvMesh available, deactivating."
359 dict.
lookup(
"fields") >> faItems_;
362 readAveragingProperties();
390 writeAveragingProperties();
394 Info<<
"fieldAverage: restarting averaging at time "
395 << obr_.time().timeName() <<
nl <<
endl;