Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions chapters/functions.tex
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ \section{Pure Modelica Functions}\label{pure-modelica-functions}
If a function is declared as \lstinline!impure! any function extending from it shall be declared as \lstinline!impure!.
\item
A deprecated semantics is that external functions (and functions defined in Modelica directly or indirectly calling them) without \lstinline!pure! or \lstinline!impure! keyword are assumed to be impure, but without any restriction on calling them.
Except for the function \lstinline!Modelica.Utilities.Streams.print!, a diagnostic must be given if called in a simulation model.
A diagnostic must be given if called in a simulation model.
\end{itemize}

Calls of pure functions used inside expression may be skipped if the resulting expression will not depend on the possible returned value; ignoring the possibility of the function generating an error.
Expand Down Expand Up @@ -279,11 +279,13 @@ \section{Pure Modelica Functions}\label{pure-modelica-functions}
Binding equations for external objects.
\end{itemize}

An exception is made for \lstinline!Modelica.Utilities.Streams.print!, for which none of the impure function restrictions apply.

It is an error if an impure function call is part of a systems of equations (including linear systems), even if called in agreement with the restrictions above.
The reason is that solving systems of equations generally requires expressions to be evaluated an unknown number of times.
This includes the special handling of \lstinline!when initial()! during initialization.

There are two ways in which an impure function could be called in a system of equations, namely in the deprecated case of external functions assumed to be impure, and when using \lstinline!pure($\ldots$)! to call an impure function from within a pure function.
There are three ways in which an impure function could be called in a system of equations, namely in the deprecated case of external functions assumed to be impure, when using \lstinline!pure($\ldots$)! to call an impure function from within a pure function, and the exception for \lstinline!Modelica.Utilities.Streams.print!.
The side-effect semantics of the function call are then undefined.
Specifically, the number of calls with external side-effects is unspecified.
However, for impure functions where the outputs only depend on the inputs the system of equations should be solved correctly.
Expand Down