-
Notifications
You must be signed in to change notification settings - Fork 44
Unitful literals #3688
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Unitful literals #3688
Changes from 3 commits
7694426
2934636
d4c7b3c
27b5c74
f2f7838
33e933e
04261cd
df98a77
c2f5daf
b14d590
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -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 ambiguity interpreted as \lstinline[language=grammar]!description-string! in some contexts. | ||||||||||||||
henrikt-ma marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||||||||
|
|
||||||||||||||
| \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. */ | ||||||||||||||
henrikt-ma marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
| \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} | ||||||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am aiming for a rule that doesn't forbid this: So instead of speaking of inferring the unit of the unitful literal from the context, I am requiring that unit consistency can be verified. I find saying something about this model outside the scope of this PR: Similarly, I find statements regarding rotational frequencies to be a separate topic.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It wasn't for the case above, or even for: but to allow diagnostics for the subtly different: Similarly, for rotational frequencies.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Or more precisely to give strong warnings for: And rotational frequencies are still unresolved.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I would expect the above to equally valid as when using a helper variable: What sort of warnings that should be given for the above is a topic for unit checking, not a topic for this PR.
Just as with the |
||||||||||||||
| 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. | ||||||||||||||
HansOlsson marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
| 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} | ||||||||||||||
Uh oh!
There was an error while loading. Please reload this page.