Skip to content
Open
Show file tree
Hide file tree
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: 3 additions & 3 deletions chapters/functions.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1093,13 +1093,13 @@ \section{Derivatives and Inverses of Functions}\label{derivatives-and-inverses-o

\begin{annotationdefinition}[smoothOrder]
\begin{synopsis}[grammar]\begin{lstlisting}
"smoothOrder" "=" UNSIGNED-NUMBER
"smoothOrder" "=" UNSIGNED-INTEGER
"smoothOrder"
"("
"normallyConstant" "=" IDENT
{ "," "normallyConstant" "=" IDENT }
")"
"=" UNSIGNED-NUMBER
"=" UNSIGNED-INTEGER
\end{lstlisting}\end{synopsis}
\begin{semantics}
This annotation has only an effect within a function declaration.
Expand Down Expand Up @@ -1137,7 +1137,7 @@ \section{Derivatives and Inverses of Functions}\label{derivatives-and-inverses-o
"(" derivative-constraint { "," derivative-constraint } ")"

derivative-constraint :
"order" = UNSIGNED-NUMBER
"order" = UNSIGNED-INTEGER
| "noDerivative" = IDENT
| "zeroDerivative" = IDENT
\end{lstlisting}\end{synopsis}
Expand Down
9 changes: 6 additions & 3 deletions chapters/syntax.tex
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ \subsection{Expressions}\label{expressions1}
primary [ ( "^" | ".^" ) primary ]

primary :
UNSIGNED-NUMBER
numeric
| STRING
| false
| true
Expand All @@ -405,8 +405,11 @@ \subsection{Expressions}\label{expressions1}
| "{" array-arguments "}"
| end

UNSIGNED-NUMBER :
UNSIGNED-INTEGER | UNSIGNED-REAL
numeric :
( UNSIGNED-INTEGER | UNSIGNED-REAL ) [ unit-of-measurement ]

unit-of-measurement :
Q-IDENT

type-specifier :
["."] name
Expand Down
31 changes: 31 additions & 0 deletions chapters/unitexpressions.tex
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,34 @@ \section{The Syntax of Unit Expressions}\label{the-syntax-of-unit-expressions}

The unit expression \lstinline!"T"! means tesla, but note that the letter \lstinline!T! is also the symbol for the prefix tera which has a multiplier value of 10\textsuperscript{12}.
\end{example}


\section{Unitful Literals}

The \lstinline[language=grammar]!numeric! in the grammar allows a unit to be attached to a numeric value.
In this case, the unit is given as a \lstinline[language=grammar]!Q-IDENT! rather than a string, since the use of a string could be ambiguously interpreted as \lstinline[language=grammar]!description-string! in some contexts.

\begin{example}
An acceleration of 9.8 meters per square second can be expressed as \lstinline!9.8'm/s2'!.
\end{example}

\begin{example}
Adding 2~centimeters to a length.
A user has set \lstinline!x! to 10~centimeters with the use of \lstinline!displayUnit!, and intends to make \lstinline!y! 2~centimeters bigger than \lstinline!x!:
\begin{lstlisting}[language=modelica]
parameter Real x(unit = "m", displayUnit = "cm") = 0.1;
equation
y = x + 2; /* Intention: Add 2 centimeters to x. */
\end{lstlisting}
The result is that 2~meters instead of 2~centimeters is being added to \lstinline!x!.

Using a unitful literal makes the intention clear:
\begin{lstlisting}[language=modelica]
y = x + 2'cm';
\end{lstlisting}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
\end{lstlisting}
\end{lstlisting}
Tools must infer the unit information of the unitful literal, including absolueValue when applicable, from the rest of the model, and verify that the given unit is compatible.
It is an error if the needed unit information cannot be inferred.
Diagnostics may be given for consistent units that shouldn't be mixed (like \lstinline!"N.m"! and \lstinline!"J"!).
Special care is needed to handle rotational frequencies.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To make it clearer that it is just adding lines to clarify, and that the following lines are unchanged.

It is currently not expected that tools will perform an implicit unit conversion to make the addition possible, in which case the addition should be rejected as a unit inconsistency.
The unit inconsistency can then be resolved by using a unit compatible with the unit of \lstinline!x!:
\begin{lstlisting}[language=modelica]
y = x + 0.02'm';
\end{lstlisting}
\end{example}