42 const word& fieldName = fieldNames_[fieldi];
44 const word valueType =
45 state_.objectResultType(functionObjectName_, fieldName);
52 const scalar dt = obr_.time().deltaTValue();
54 const Type currentValue =
55 state_.getObjectResult<Type>(functionObjectName_, fieldName);
56 const word meanName(fieldName +
"Mean");
59 Type meanValue = state_.getResult<Type>(meanName);
63 case windowType::NONE:
65 const scalar Dt = totalTime_[fieldi];
66 const scalar
alpha = (Dt - dt)/Dt;
67 const scalar
beta = dt/Dt;
68 meanValue =
alpha*meanValue +
beta*currentValue;
72 case windowType::APPROXIMATE:
74 const scalar Dt = totalTime_[fieldi];
75 scalar
alpha = (Dt - dt)/Dt;
77 if (Dt - dt >= window_)
79 alpha = (window_ - dt)/window_;
89 meanValue =
alpha*meanValue +
beta*currentValue;
90 totalTime_[fieldi] += dt;
93 case windowType::EXACT:
98 dict.readIfPresent(
"windowTimes", windowTimes);
99 dict.readIfPresent(
"windowValues", windowValues);
102 for (scalar& dti : windowTimes)
108 bool removeValue =
true;
109 while (removeValue && windowTimes.size())
111 removeValue = windowTimes.first() > window_;
121 windowTimes.push(dt);
122 windowValues.
push(currentValue);
125 auto timeIter = windowTimes.cbegin();
126 auto valueIter = windowValues.
cbegin();
135 ++i, ++timeIter, ++valueIter
138 const Type& value = valueIter();
139 const scalar dt = timeIter();
141 meanValue += dt*value;
145 meanValue -= dt*valueOld;
151 meanValue /= windowTimes.first();
154 dict.set(
"windowTimes", windowTimes);
155 dict.set(
"windowValues", windowValues);
161 scalar
delta =
mag(meanValue - currentValue);
163 Log <<
" " << meanName <<
": " << meanValue
168 state_.setResult(meanName, meanValue);
170 if (
delta > tolerance_)