38 namespace functionObjects
53 item.clear(
obr(),
false);
61 addMeanField<scalar>(item);
62 addMeanField<vector>(item);
63 addMeanField<sphericalTensor>(item);
64 addMeanField<symmTensor>(item);
65 addMeanField<tensor>(item);
71 addPrime2MeanField<scalar, scalar>(item);
72 addPrime2MeanField<vector, symmTensor>(item);
78 restoreWindowFields<scalar>(item);
79 restoreWindowFields<vector>(item);
80 restoreWindowFields<sphericalTensor>(item);
81 restoreWindowFields<symmTensor>(item);
82 restoreWindowFields<tensor>(item);
91 <<
"Field " << item.fieldName()
92 <<
" not found in database for averaging";
106 Log <<
" Restarting averaging at time "
107 << obr().time().timeOutputValue()
112 item.clear(obr(),
true);
126 const label currentTimeIndex = obr().time().timeIndex();
127 const scalar currentTime = obr().time().value();
129 if (prevTimeIndex_ == currentTimeIndex)
135 prevTimeIndex_ = currentTimeIndex;
138 bool doRestart =
false;
139 if (periodicRestart_ && currentTime > restartPeriod_*periodIndex_)
145 if (currentTime >= restartTime_)
148 restartTime_ = GREAT;
157 <<
" Calculating averages" <<
nl;
161 faItems_[fieldi].evolve(obr());
164 storeWindowFields<scalar>();
165 storeWindowFields<vector>();
166 storeWindowFields<sphericalTensor>();
167 storeWindowFields<symmTensor>();
168 storeWindowFields<tensor>();
170 addMeanSqrToPrime2Mean<scalar, scalar>();
171 addMeanSqrToPrime2Mean<vector, symmTensor>();
173 calculateMeanFields<scalar>();
174 calculateMeanFields<vector>();
175 calculateMeanFields<sphericalTensor>();
176 calculateMeanFields<symmTensor>();
177 calculateMeanFields<tensor>();
179 calculatePrime2MeanFields<scalar, scalar>();
180 calculatePrime2MeanFields<vector, symmTensor>();
188 Log <<
" Writing average fields" <<
endl;
190 writeFields<scalar>();
191 writeFields<vector>();
192 writeFields<sphericalTensor>();
193 writeFields<symmTensor>();
194 writeFields<tensor>();
206 setProperty(item.fieldName(),
propsDict);
213 if (restartOnRestart_ || restartOnOutput_)
215 Info<<
" Starting averaging at time "
216 << obr().time().timeOutputValue()
221 Info<<
" Restarting averaging for fields:" <<
nl;
226 const word& fieldName = item.fieldName();
227 if (foundProperty(fieldName))
230 getDict(fieldName, fieldDict);
231 item.readState(fieldDict);
233 if (item.allowRestart())
235 scalar userTotalTime =
236 obr().time().timeToUserTime(item.totalTime());
238 Info<<
" " << fieldName
239 <<
": iters = " << item.totalIter()
240 <<
" time = " << userTotalTime <<
nl;
244 item.clear(obr(),
true);
246 Info<<
" " << fieldName
247 <<
": starting averaging at time "
248 << obr().time().timeOutputValue() <<
endl;
253 Info<<
" " << fieldName
254 <<
": starting averaging at time "
255 << obr().time().timeOutputValue() <<
endl;
274 restartOnRestart_(
false),
275 restartOnOutput_(
false),
276 periodicRestart_(
false),
277 restartPeriod_(GREAT),
293 initialised_ =
false;
294 restartOnRestart_ =
false;
295 restartOnOutput_ =
false;
296 periodicRestart_ =
false;
297 restartPeriod_ = GREAT;
298 restartTime_ = GREAT;
302 dict.readIfPresent(
"restartOnRestart", restartOnRestart_);
303 dict.readIfPresent(
"restartOnOutput", restartOnOutput_);
304 dict.readIfPresent(
"periodicRestart", periodicRestart_);
305 dict.readEntry(
"fields", faItems_);
307 const scalar currentTime = obr().time().value();
309 if (periodicRestart_)
311 scalar userRestartPeriod =
dict.get<scalar>(
"restartPeriod");
312 restartPeriod_ = obr().time().userTimeToTime(userRestartPeriod);
314 if (restartPeriod_ > 0)
318 while (currentTime > restartPeriod_*periodIndex_)
323 Info<<
" Restart period " << userRestartPeriod
324 <<
" - next restart at " << (userRestartPeriod*periodIndex_)
329 periodicRestart_ =
false;
331 Info<<
" Restart period " << userRestartPeriod
337 scalar userRestartTime = 0;
338 if (
dict.readIfPresent(
"restartTime", userRestartTime))
340 restartTime_ = obr().time().userTimeToTime(userRestartTime);
342 if (currentTime > restartTime_)
345 restartTime_ = GREAT;
349 Info<<
" Restart scheduled at time " << userRestartTime
354 readAveragingProperties();
373 writeAveragingProperties();
375 if (restartOnOutput_)