83 startExpr_(
rhs.startExpr_),
84 settingResult_(
rhs.settingResult_),
85 storedValues_(
rhs.storedValues_),
86 storeInterval_(
rhs.storeInterval_),
98 startExpr_(
"startupValue",
dict),
99 storeInterval_(
dict.get<scalar>(
"storeInterval")),
100 delay_(
dict.get<scalar>(
"delay"))
106 storedValues_ = DLList<ValueAtTime>(eptr->stream());
115 const scalar& timeVal
118 if (storedValues_.empty())
123 if (storedValues_.front().first() > (timeVal-delay_))
129 if (storedValues_.size() <= 1)
132 <<
"Only one stored value at time " << timeVal
133 <<
" for delayedVariable " <<
name() <<
nl
134 <<
"Check the values for the interval " << storeInterval_
135 <<
" and delay " << delay_ <<
nl
136 <<
"Probably the interval is too large" <<
nl <<
endl
140 auto current = storedValues_.cbegin();
145 const scalar newTime = (timeVal - delay_);
147 while (next != storedValues_.end())
149 if (newTime >= current().first() && newTime <= next().first())
160 (newTime - current().first())
161 / (next().first() - current().first())
164 exprResult val((1-
f)*current().second() +
f*next().second());
183 const scalar& currTime
186 bool append = storedValues_.empty();
190 const scalar lastTime = storedValues_.back().first();
192 if (lastTime + SMALL >= currTime)
196 else if ((currTime - lastTime) >= 0.999*storeInterval_)
211 const scalar oldLastTime =
213 storedValues_.empty()
215 : storedValues_.back().first()
218 storedValues_.push_back(ValueAtTime(currTime, settingResult_));
222 storedValues_.size() > 1
223 && (oldLastTime - storedValues_.front().first()) >= delay_
227 storedValues_.pop_front();
234 storedValues_.back().second() = settingResult_;
243 os.writeEntry(
"name", name_);
245 os.writeEntry(
"startupValue", startExpr_);
247 if (!settingResult_.valueType().empty())
249 os.writeEntry(
"settingResult", settingResult_);
252 os.writeEntry(
"storedValues", storedValues_);
253 os.writeEntry(
"storeInterval", storeInterval_);
254 os.writeEntry(
"delay", delay_);
256 os.writeKeyword(
"value");
265void Foam::expressions::exprResultDelayed::operator=
278 startExpr_ =
rhs.startExpr_;
279 settingResult_ =
rhs.settingResult_;
280 storedValues_ =
rhs.storedValues_;
281 storeInterval_ =
rhs.storeInterval_;
286void Foam::expressions::exprResultDelayed::operator=
291 settingResult_ =
rhs;
295void Foam::expressions::exprResultDelayed::operator=
300 settingResult_ = std::move(
rhs);
309 expressions::exprResultDelayed& data
323 const expressions::exprResultDelayed& data
Macros for easy insertion into run-time selection tables.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
A keyword and a list of tokens is an 'entry'.
virtual bool isStream() const noexcept
True if this entry is a stream.
An exprResult with an additional delay before evaluation.
void storeValue(const scalar &timeVal)
Add a stored value.
bool updateReadValue(const scalar &timeVal)
Update the read-value.
exprResultDelayed()
Default construct.
void writeDict(Ostream &os) const
void setReadValue(const exprResult &val)
Set the readValue with a calculated value.
A polymorphic field/result from evaluating an expression.
virtual void operator=(const exprResult &rhs)
Copy assignment.
exprResult()
Default construct.
A class for handling words, derived from Foam::string.
#define defineTypeName(Type)
Define the typeName.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
OBJstream os(runTime.globalPath()/outputName)
rAUs append(new volScalarField(IOobject::groupName("rAU", phase1.name()), 1.0/(U1Eqn.A()+byDt(max(phase1.residualAlpha() - alpha1, scalar(0)) *rho1))))
A namespace for expression-related classes/traits etc.
Ostream & endl(Ostream &os)
Add newline and flush stream.
void rhs(fvMatrix< typename Expr::value_type > &m, const Expr &expression)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
errorManipArg< error, int > exit(error &err, const int errNo=1)
constexpr char nl
The newline '\n' character (0x0a).