From 115c849d3d267322f9caa1c1f90161e5188edd5c Mon Sep 17 00:00:00 2001 From: OLSSON Hans Date: Wed, 9 Feb 2022 14:04:51 +0100 Subject: [PATCH] Test --- .CI/Jenkinsfile | 61 +- .CI/index.py | 143 +- .CI/latexml/Dockerfile | 2 +- .CI/latexml/Dockerfile.2.incremental | 5 - .CI/latexml/Dockerfile.incremental | 10 - .CI/latexml/README.md | 24 - .gitignore | 19 +- .scripts/patch-body-ios-hover.sh | 4 - .scripts/patch-viewport.sh | 5 - LICENSE.md | 6 - MLS.tex | 113 +- Makefile | 17 +- README.md | 20 +- RationaleMCP/0014/MCP-0014_Conversion.pdf | Bin 172159 -> 0 bytes .../0014/MCP_0014_Conversion_SpecChanges.pdf | Bin 70148 -> 0 bytes RationaleMCP/0033/ReadMe.md | 42 - RationaleMCP/0033/example-figure.png | Bin 139334 -> 0 bytes RationaleMCP/0033/predefined-plots.md | 127 - RationaleMCP/0035/POT_Header.png | Bin 20616 -> 0 bytes RationaleMCP/0035/Readme.md | 130 +- RationaleMCP/0035/SpecificationText.md | 65 - RationaleMCP/NewRelease.md | 5 - RationaleMCP/ReadMe.md | 84 +- chapters/abstract.tex | 70 +- chapters/annotations.tex | 1934 ++++++------- chapters/arrays.tex | 2005 +++++++------- chapters/classes.tex | 1070 ++++---- chapters/connectors.tex | 738 ++--- chapters/copyright.tex | 9 - chapters/dae.tex | 218 +- chapters/derivationofstream.tex | 208 +- chapters/equations.tex | 711 ++--- chapters/functions.tex | 1960 ++++++-------- chapters/inheritance.tex | 791 +++--- chapters/interface.tex | 369 ++- chapters/introduction.tex | 116 +- chapters/lexicalstructure.tex | 230 +- chapters/library.tex | 9 +- chapters/operatorsandexpressions.tex | 1624 ++++++----- chapters/overloaded.tex | 293 +- chapters/packages.tex | 350 +-- chapters/preface.tex | 17 +- chapters/revisions.tex | 1692 +++++------- chapters/scoping.tex | 324 ++- chapters/statemachines.tex | 497 ++-- chapters/statements.tex | 391 +-- chapters/stream.tex | 436 +-- chapters/synchronous.tex | 1906 ++++++------- chapters/syntax.tex | 246 +- chapters/titlepage.tex | 37 - chapters/unitexpressions.tex | 9 +- css/MLS-navbar-left.css | 236 -- css/MLS.css | 94 - css/Magnifying_glass_icon.svg | 11 - edit/Sublime/.gitignore | 1 - edit/Sublime/config.sublime-project | 37 - media/Modelica_Language.svg | 75 - media/bezierpoints.pdf | Bin 31271 -> 0 bytes media/bezierpoints.svg | 270 -- media/clock.pdf | Bin 58308 -> 298123 bytes media/clock.svg | 286 -- media/clocked.pdf | Bin 60359 -> 10581 bytes media/clocked.svg | 355 --- media/diagram_examples.png | Bin 115826 -> 0 bytes media/fluidmix.pdf | Bin 63378 -> 0 bytes media/fluidmix.svg | 342 --- media/fluidmix3.pdf | Bin 84812 -> 0 bytes media/fluidmix3.svg | 526 ---- media/fluidmix4.pdf | Bin 95204 -> 0 bytes media/fluidmix4.svg | 1163 -------- media/fluidsystem.pdf | Bin 45273 -> 83570 bytes media/fluidsystem.svg | 240 -- media/hierarchical-statemachine.pdf | Bin 118755 -> 0 bytes media/hierarchical-statemachine.svg | 2381 ----------------- media/innerouterconnector.pdf | Bin 53824 -> 10101 bytes media/innerouterconnector.svg | 374 --- media/modelicapath.pdf | Bin 56064 -> 148554 bytes media/modelicapath.svg | 917 ------- media/overdetermined.pdf | Bin 63671 -> 96683 bytes media/overdetermined.svg | 869 ------ media/piecewise-constant.pdf | Bin 60242 -> 0 bytes media/piecewise-constant.svg | 368 --- media/plantmodel.pdf | Bin 171520 -> 130345 bytes media/plantmodel.svg | 1655 ------------ media/statemachine.pdf | Bin 36276 -> 0 bytes media/statemachine.svg | 226 -- media/statemachineplot.pdf | Bin 213543 -> 0 bytes media/statemachineplot.svg | 344 --- media/subtype.pdf | Bin 51247 -> 87279 bytes media/subtype.svg | 509 ---- mls.bib | 84 - mlsshared.sty | 214 -- preamble.tex | 442 ++- styleguide.md | 232 -- 94 files changed, 9366 insertions(+), 22027 deletions(-) delete mode 100644 .CI/latexml/Dockerfile.2.incremental delete mode 100644 .CI/latexml/Dockerfile.incremental delete mode 100644 .CI/latexml/README.md delete mode 100755 .scripts/patch-body-ios-hover.sh delete mode 100755 .scripts/patch-viewport.sh delete mode 100644 LICENSE.md delete mode 100644 RationaleMCP/0014/MCP-0014_Conversion.pdf delete mode 100644 RationaleMCP/0014/MCP_0014_Conversion_SpecChanges.pdf delete mode 100644 RationaleMCP/0033/ReadMe.md delete mode 100644 RationaleMCP/0033/example-figure.png delete mode 100644 RationaleMCP/0033/predefined-plots.md delete mode 100644 RationaleMCP/0035/POT_Header.png delete mode 100644 RationaleMCP/0035/SpecificationText.md delete mode 100644 RationaleMCP/NewRelease.md delete mode 100644 chapters/copyright.tex delete mode 100644 chapters/titlepage.tex delete mode 100644 css/MLS-navbar-left.css delete mode 100644 css/MLS.css delete mode 100644 css/Magnifying_glass_icon.svg delete mode 100644 edit/Sublime/.gitignore delete mode 100644 edit/Sublime/config.sublime-project delete mode 100644 media/Modelica_Language.svg delete mode 100644 media/bezierpoints.pdf delete mode 100644 media/bezierpoints.svg delete mode 100644 media/clock.svg delete mode 100644 media/clocked.svg delete mode 100644 media/diagram_examples.png delete mode 100644 media/fluidmix.pdf delete mode 100644 media/fluidmix.svg delete mode 100644 media/fluidmix3.pdf delete mode 100644 media/fluidmix3.svg delete mode 100644 media/fluidmix4.pdf delete mode 100644 media/fluidmix4.svg delete mode 100644 media/fluidsystem.svg delete mode 100644 media/hierarchical-statemachine.pdf delete mode 100644 media/hierarchical-statemachine.svg delete mode 100644 media/innerouterconnector.svg delete mode 100644 media/modelicapath.svg delete mode 100644 media/overdetermined.svg delete mode 100644 media/piecewise-constant.pdf delete mode 100644 media/piecewise-constant.svg delete mode 100644 media/plantmodel.svg delete mode 100644 media/statemachine.pdf delete mode 100644 media/statemachine.svg delete mode 100644 media/statemachineplot.pdf delete mode 100644 media/statemachineplot.svg delete mode 100644 media/subtype.svg delete mode 100644 mls.bib delete mode 100644 mlsshared.sty delete mode 100644 styleguide.md diff --git a/.CI/Jenkinsfile b/.CI/Jenkinsfile index 8b4c91b8e..8656e5ac5 100644 --- a/.CI/Jenkinsfile +++ b/.CI/Jenkinsfile @@ -18,7 +18,7 @@ pipeline { stage('build') { agent { docker { - image 'modelicaspec/latexml:20210330' + image 'modelicaspec/latexml:20200415' label 'linux' alwaysPull true } @@ -29,10 +29,8 @@ pipeline { steps { sh 'mkdir -p /tmp/jenkins' sh 'latexmk -pdf MLS.tex' - sh 'latexml MLS.tex --includestyles --path=media --dest MLS.xml' - sh 'latexmlpost MLS.xml -format html -pmml --splitat=chapter --splitnaming=labelrelative --javascript=LaTeXML-maybeMathjax.js --navigationtoc=context --css=css/MLS.css --css=css/MLS-navbar-left.css --dest MLS.html' - sh '.scripts/patch-viewport.sh' - sh '.scripts/patch-body-ios-hover.sh' + sh 'latexml --path=media MLS.tex --dest MLS.xml' + sh 'latexmlpost MLS.xml -format html -pmml --splitat=chapter --splitnaming=labelrelative --javascript=css/LaTeXML-maybeMathJax.js --navigationtoc=context --css=css/LaTeXML-navbar-left.css --dest MLS.html' sh 'ln -s preface.html Chx1.html' sh 'ln -s lexical-structure.html Ch2.html' sh 'ln -s operators-and-expressions.html Ch3.html' @@ -53,17 +51,17 @@ pipeline { sh 'ln -s annotations.html Ch18.html' sh 'ln -s unit-expressions.html Ch19.html' sh 'ln -s the-modelica-standard-library.html Ch20.html' + sh 'ln -s glossary.html A1.html' sh 'ln -s modelica-concrete-syntax.html A2.html' sh 'ln -s modelica-dae-representation.html A3.html' sh 'ln -s derivation-of-stream-equations.html A4.html' sh 'ln -s modelica-revision-history.html A5.html' - sh 'ln -s bib.html A6.html' - sh 'ln -s bib.html literature.html' + sh 'ln -s literature.html A6.html' sh script: '! (find . -type l -xtype l | egrep \'.*\')', label: 'Verify symbolic links work' - sh 'tar czf MLS.tar.gz *.html *.css *.js media/ css/' + sh 'tar czf MLS.tar.gz *.html *.css media css/' archiveArtifacts artifacts: 'MLS.tar.gz', fingerprint: true archiveArtifacts artifacts: 'MLS.pdf', fingerprint: true - stash name: 'MLS', includes: '*.html,*.css,*.js,MLS.pdf,media/**,css/**,MLS.tar.gz' + stash name: 'MLS', includes: '*.html,*.css,MLS.pdf,media/**,css/**,MLS.tar.gz' } } stage('upload') { @@ -75,9 +73,7 @@ pipeline { anyOf { buildingTag() anyOf { - branch 'jenkins' branch 'master' - branch 'maint/**' } } } @@ -89,26 +85,16 @@ pipeline { steps { unstash name: 'MLS' sh "test ! -z ${env.GIT_BRANCH}" - sshagent (credentials: ['Hudson-SSH-Key']) { - sh 'ssh-keyscan github.com >> ~/.ssh/known_hosts' - sh "test -d specification.modelica.org || git clone git@github.com:modelica/specification.modelica.org" - sh "cd specification.modelica.org/ && git fetch && git reset --hard origin/master" - sh "rm -rf 'specification.modelica.org/${env.GIT_BRANCH}' && mkdir -p 'specification.modelica.org/${env.GIT_BRANCH}'" - sh "cp -a *.html *.css *.js MLS.pdf media css 'specification.modelica.org/${env.GIT_BRANCH}'" - sh """ - cd specification.modelica.org - git add '${env.GIT_BRANCH}' - if ! git diff-index --quiet origin/master --; then - git commit --amend -m "Initial commit" - git push -f - fi - """ - } + sshPublisher(publishers: [sshPublisherDesc(configName: 'ModelicaSpecification', transfers: [sshTransfer(remoteDirectory: "${env.GIT_BRANCH}", sourceFiles: '*.html,*.css,MLS.pdf,media/**,css/**')])]) } } stage('index') { agent { - label 'linux' + docker { + image 'modelicaspec/markdown:20190307' + label 'linux' + alwaysPull true + } } when { allOf { @@ -120,25 +106,8 @@ pipeline { beforeAgent true } steps { - script { - docker.image('modelicaspec/markdown:20190307').inside { - sh 'python3 .CI/index.py' - } - } - sshagent (credentials: ['Hudson-SSH-Key']) { - sh 'ssh-keyscan github.com >> ~/.ssh/known_hosts' - sh "test -d specification.modelica.org || git clone git@github.com:modelica/specification.modelica.org" - sh "cd specification.modelica.org/ && git fetch && git reset --hard origin/master" - sh "cp -a index.html specification.modelica.org/" - sh """ - cd specification.modelica.org - git add index.html - if ! git diff-index --quiet origin/master --; then - git commit --amend -m "Initial commit" - git push -f - fi - """ - } + sh 'python3 .CI/index.py' + sshPublisher(publishers: [sshPublisherDesc(configName: 'ModelicaSpecification', transfers: [sshTransfer(sourceFiles: 'index.html')])]) } } } diff --git a/.CI/index.py b/.CI/index.py index eda6d1a1d..c102dc325 100644 --- a/.CI/index.py +++ b/.CI/index.py @@ -2,145 +2,10 @@ import xml.etree.ElementTree as ET xml = "" + markdown.markdown(open('README.md', encoding="utf-8").read(), extensions=['markdown.extensions.tables']) + "" root = ET.fromstring(xml) -head = """ - - - - - Modelica Specification - - - - - - -
-

Modelica Specification

-""" -tail = """
- -
- - - -
-
- - - - - - - - -""" for elem in root.findall('.//table'): - with open("index.html", "w") as f: - f.write(head) - f.write(ET.tostring(elem).decode('utf-8')) - f.write(tail) + f = open("index.html", "w") + f.write("") + f.write(ET.tostring(elem).decode('utf-8')) + f.write("") sys.exit(0) sys.exit(1) diff --git a/.CI/latexml/Dockerfile b/.CI/latexml/Dockerfile index ea3f6426d..0db5c0fc0 100644 --- a/.CI/latexml/Dockerfile +++ b/.CI/latexml/Dockerfile @@ -23,7 +23,7 @@ RUN sed -i s,http://archive.ubuntu.com/ubuntu/,mirror://mirrors.ubuntu.com/mirro && $INSTALL/install-tl --profile texlive.profile \ && rm texlive.profile \ && tlmgr update --self --all --reinstall-forcibly-removed \ - && tlmgr install latexmk listings caption cleveref xcolor float multirow tocloft parskip etoolbox index biblatex biber newtxtt \ + && tlmgr install latexmk listings xcolor float multirow tocloft parskip etoolbox \ && cpanm JSON \ && cpanm LaTeXML \ && apt-get autoremove -qy make gcc curl wget git cpanminus libxml2-dev libxslt-dev \ diff --git a/.CI/latexml/Dockerfile.2.incremental b/.CI/latexml/Dockerfile.2.incremental deleted file mode 100644 index 1dfe04bf8..000000000 --- a/.CI/latexml/Dockerfile.2.incremental +++ /dev/null @@ -1,5 +0,0 @@ -FROM modelicaspec/latexml:20201119 - -RUN tlmgr update --self \ - && tlmgr install index biblatex biber newtxtt \ - && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/ /root/.cpanm/work* diff --git a/.CI/latexml/Dockerfile.incremental b/.CI/latexml/Dockerfile.incremental deleted file mode 100644 index 1bb9af52a..000000000 --- a/.CI/latexml/Dockerfile.incremental +++ /dev/null @@ -1,10 +0,0 @@ -FROM modelicaspec/latexml:20200415 - -RUN apt-get update \ - && export DEBIAN_FRONTEND=noninteractive \ - && apt-get install -qy perl ca-certificates make libxslt1.1 libxslt-dev libxml2 libxml2-dev gcc wget curl git unzip cpanminus --no-install-recommends --no-install-suggests \ - && tlmgr update --self \ - && tlmgr install cleveref caption \ - && cpanm LaTeXML \ - && apt-get autoremove -qy make gcc curl wget git cpanminus libxml2-dev libxslt-dev \ - && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/ /root/.cpanm/work* diff --git a/.CI/latexml/README.md b/.CI/latexml/README.md deleted file mode 100644 index 92b4431bd..000000000 --- a/.CI/latexml/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Updating the docker image - -The docker image is stored at the [docker hub](https://hub.docker.com/r/modelicaspec/latexml). -If you need write access to the organization, contact @sjoelund. - -To update the image, update the Dockerfile . -Then build and tag the image and upload it. - -```sh -docker build -t modelicaspec/latexml:`date +%Y%m%d` . -docker push modelicaspec/latexml:`date +%Y%m%d` -``` - -If the change is small you can base it on the old image instead of creating a new one from scratch. -Modify Dockerfile.incremental to be based on the image you want to update. -Make sure that the regular Dockerfile is also updated (so future builds incorporates these additions). - -```sh -docker build -t modelicaspec/latexml:`date +%Y%m%d` - < Dockerfile.incremental -docker push modelicaspec/latexml:`date +%Y%m%d` -``` - -Once the docker image is updated, modify `../Jenkinsfile` to use this image. -Put all of this in the same commit and see if the CI build accepts it. diff --git a/.gitignore b/.gitignore index 2c65a355a..7f899cdfd 100644 --- a/.gitignore +++ b/.gitignore @@ -148,23 +148,6 @@ sympy-plots-for-*.tex/ MLS\.pdf LaTeXML.css -ltx-article.css +MLS.tar.gz ltx-listings.css ltx-report.css -LaTeXML-maybeMathjax.js - -MLS.tar.gz - -# Directories belonging to the LaTeXML build -/annotations/ -/connectors-and-connections/ -/interface-or-type-relationships/ -/modelica-dae-representation/ -/overloaded-operators/ -/packages/ -/preface/ -/state-machines/ -/stream-connectors/ -/synchronous-language-elements/ -/the-modelica-standard-library/ -/unit-expressions/ diff --git a/.scripts/patch-body-ios-hover.sh b/.scripts/patch-body-ios-hover.sh deleted file mode 100755 index 88ac8464c..000000000 --- a/.scripts/patch-body-ios-hover.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -xe - -sed -i.bak 's///' *.html -rm *.html.bak # MacOS sed does not support -i without extension diff --git a/.scripts/patch-viewport.sh b/.scripts/patch-viewport.sh deleted file mode 100755 index 1f25a7afa..000000000 --- a/.scripts/patch-viewport.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -xe - -sed -i.bak 's;;\ -;' *.html -rm *.html.bak # MacOS sed does not support -i without extension diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 0d1959860..000000000 --- a/LICENSE.md +++ /dev/null @@ -1,6 +0,0 @@ -Copyright (C) 1998-2020 Modelica Association Project "Modelica Language" - All rights reserved. - -![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png) - -The Modelica Specification is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/). diff --git a/MLS.tex b/MLS.tex index 4a3c28548..05c1ad9e9 100644 --- a/MLS.tex +++ b/MLS.tex @@ -1,33 +1,12 @@ \documentclass[10pt,a4paper]{report} -\NeedsTeXFormat{LaTeX2e} \usepackage[utf8]{inputenc} - -% Define title for use by LaTeXML. -% An extended title is defined separately in the 'titlepage'. -\newcommand{\mlsversion}{3.6-dev} -\newcommand{\mlsdate}{\today} -\title{Modelica\textsuperscript{\textregistered} Language Specification version~\mlsversion} - -\date{\mlsdate} - -\author{Modelica Association} - +\NeedsTeXFormat{LaTeX2e} \input{preamble.tex} -\ifpdf -\addbibresource{mls.bib} -\fi +% The other parts start on new page and could be optionally included \begin{document} - -% Setting pageanchor false for these unnumbered pages -% Changed back after title page. -% The downside is that you cannot go to them in acrobat -% This is from https://tex.stackexchange.com/questions/18924/pdftex-warning-ext4-destination-with-the-same-identifier-nam-epage-1-has -% The accepted solution did not seem to work -\hypersetup{pageanchor=false,bookmarksdepth=2,destlabel=true,bookmarksopenlevel=0} - -\include{chapters/titlepage} - +% Title +\maketitle % Add new Modelica Language logotype % The header ruler looks odd as Modelica Language define a natural line that is further up % We also need to fill the vertical space on the right @@ -35,112 +14,96 @@ % % Using nouppercase since it is seems more normal for the sections, and is also % needed for over-determined connectors (as it would otherwise overflow) -\cleardoublepage \pagestyle{fancy} -\rhead{Modelica Language Specification \mlsversion\\ \nouppercase{\rightmark} \vspace{1mm}} -\lhead{\includegraphics[height=6.5mm]{Modelica_Language}} +\rhead{Modelica Language Specification 3.5-dev\\ \nouppercase{\rightmark} \vspace{1mm}} +\lhead{\includegraphics[scale=0.1]{Modelica_Language}} \renewcommand{\headrulewidth}{0.0pt} -\hypersetup{pageanchor=true} - -% Copyright -\include{chapters/copyright} - -\cleardoublepage -\tableofcontents +% Abstract +\input{chapters/abstract} % Preface -\include{chapters/preface} +\input{chapters/preface} % Introduction -\include{chapters/introduction} +\input{chapters/introduction} % Lexical Structure -\include{chapters/lexicalstructure} +\input{chapters/lexicalstructure} % Operators and Expressions -\include{chapters/operatorsandexpressions} +\input{chapters/operatorsandexpressions} % Classes, Predefined Types, and Declarations -\include{chapters/classes} +\input{chapters/classes} % Scoping, Name Lookup, and Flattening -\include{chapters/scoping} +\input{chapters/scoping} % Interface or Type Relationships -\include{chapters/interface} +\input{chapters/interface} % Inheritance, Modification, and Redeclaration -\include{chapters/inheritance} +\input{chapters/inheritance} % Equations -\include{chapters/equations} +\input{chapters/equations} % Connectors and Connections -\include{chapters/connectors} +\input{chapters/connectors} % Arrays -\include{chapters/arrays} +\input{chapters/arrays} % Statements and Algorithm Chapters -\include{chapters/statements} +\input{chapters/statements} % Functions -\include{chapters/functions} +\input{chapters/functions} % Packages -\include{chapters/packages} +\input{chapters/packages} % Overloaded Operators -\include{chapters/overloaded} +\input{chapters/overloaded} % Stream Connectors -\include{chapters/stream} +\input{chapters/stream} % Synchronous Language Elements -\include{chapters/synchronous} +\input{chapters/synchronous} % State Machines -\include{chapters/statemachines} +\input{chapters/statemachines} % Annotations -\include{chapters/annotations} +\input{chapters/annotations} % Unit Expressions -\include{chapters/unitexpressions} +\input{chapters/unitexpressions} % The Modelica Standard Library -\include{chapters/library} +\input{chapters/library} \appendix % https://tex.stackexchange.com/questions/370384/change-toc-depth-mid-document \addtocontents{toc}{\setcounter{tocdepth}{0}} +% Glossary +\input{chapters/glossary} + % Modelica Concrete Syntax -\include{chapters/syntax} +\input{chapters/syntax} % Modelica DAE Representation} -\include{chapters/dae} +\input{chapters/dae} % Derivation of Stream Equations -\include{chapters/derivationofstream} +\input{chapters/derivationofstream} % Modelica Revision History -\include{chapters/revisions} - -\clearpage% get the \phantomsection below on the correct page -\phantomsection -\addcontentsline{toc}{chapter}{\bibname}% -\ifpdf -\printbibliography -\else -\bibliography{mls} -\fi - -\clearpage% get the \phantomsection below on the correct page -\phantomsection -\addcontentsline{toc}{chapter}{\indexname}% -\label{document-index} -\printindex +\input{chapters/revisions} +% Literature +\input{chapters/literature} \end{document} diff --git a/Makefile b/Makefile index 2cf40c158..371c5770f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# Note: Using latexmk, since it automatically runs pdflatex as many times as needed. +# Note: You should really repeat pdflatex run 1-3 times depending on status, I did not manage to make that conditional for nmake # # If you have latexml source (preferably with UseLabal patch) set: # LATEXMLPREFIX=perl @@ -8,22 +8,19 @@ all: MLS.pdf MLS.html .PHONY: clean-pdf clean-pdf: - -rm *.aux MLS.log MLS.toc MLS.pdf + rm *.aux MLS.log MLS.toc MLS.pdf .PHONY: clean-html clean-html: - -rm MLS.xml LaTeXML.cache *.html *.css *.js + rm MLS.xml LaTeXML.cache *.html .PHONY: clean clean: clean-pdf clean-html MLS.pdf: *.tex chapters/*.tex - latexmk -pdf MLS.tex + pdflatex MLS.tex # Seems to be some issue with graphicpath, so set path here as well -# Not using %.html since nmake does not support it (instead using old-style suffix rules) -MLS.html: MLS.tex chapters/*.tex - $(LATEXMLPREFIX)latexml MLS.tex --includestyles --path=media --dest MLS.xml - $(LATEXMLPREFIX)latexmlpost MLS.xml -format html -pmml --splitat=chapter --splitnaming=labelrelative --javascript=LaTeXML-maybeMathjax.js --navigationtoc=context --css=css/MLS.css --css=css/MLS-navbar-left.css --dest $@ - .scripts/patch-viewport.sh - .scripts/patch-body-ios-hover.sh +%.html: %.tex chapters/*.tex + $(LATEXMLPREFIX)latexml $*.tex --path=media --dest $*.xml + $(LATEXMLPREFIX)latexmlpost $*.xml -format html -pmml --splitat=chapter --splitnaming=labelrelative --javascript=css/LaTeXML-maybeMathJax.js --navigationtoc=context --css=css/LaTeXML-navbar-left.css --dest $@ diff --git a/README.md b/README.md index 82e7980c9..ae3bd89fa 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ - - # ModelicaSpecification -This repository contains the Modelica Language Specification, hosted at https://github.com/modelica/ModelicaSpecification. Development is organized within the [Modelica Association Project Language (MAP-LANG)](https://modelica.org/projects). +This repository contains the Modelica Language Specification, hosted at https://github.com/modelica/ModelicaSpecification. + +## Build status +[![Build Status](https://travis-ci.org/modelica/ModelicaSpecification.svg)](https://travis-ci.org/modelica/ModelicaSpecification) ## Description @@ -11,9 +12,8 @@ Modelica® https://modelica.org is a non-proprietary, object-oriented, equation Version | Link | Published | ------- | ----------------------------------------------------------------- | --------| -3.6-dev | [Master branch](https://github.com/modelica/ModelicaSpecification/tree/master) [HTML](https://specification.modelica.org/master/MLS.html) [PDF](https://specification.modelica.org/master/MLS.pdf)| not yet | -3.5 | [3.5 branch](https://github.com/modelica/ModelicaSpecification/tree/maint/3.5) [HTML](https://specification.modelica.org/maint/3.5/MLS.html) [PDF](https://specification.modelica.org/maint/3.5/MLS.pdf)| 2021 | -3.4 | [3.4 branch](https://github.com/modelica/ModelicaSpecification/tree/maint/3.4) [HTML](https://specification.modelica.org/maint/3.4/MLS.html) [PDF](https://modelica.org/documents/ModelicaSpec34.pdf) | 2017 | +3.5-dev | [Master branch](https://github.com/modelica/ModelicaSpecification/tree/master) [HTML](https://specification.modelica.org/master/MLS.html) [PDF](https://specification.modelica.org/master/MLS.pdf)| not yet | +3.4 | [Tagged release](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.4) [HTML](https://specification.modelica.org/v3.4/MLS.html) [PDF](https://modelica.org/documents/ModelicaSpec34.pdf) | 2017 | 3.3rev1 | [PDF](https://modelica.org/documents/ModelicaSpec33Revision1.pdf) | 2014 | 3.2rev2 | [PDF](https://modelica.org/documents/ModelicaSpec32Revision2.pdf) | 2013 | 3.2rev1 | [PDF](https://modelica.org/documents/ModelicaSpec32Revision1.pdf) | 2012 | @@ -35,20 +35,16 @@ More Info on released versions: https://www.modelica.org/documents ## Contribution 1. If you find an error and are not certain that you can correct it, first check that it is not already reported and then open an [issue](https://github.com/modelica/ModelicaSpecification/issues) describing it in detail - focusing on why it should be changed. 2. If you are confident that you can correct the issue, fork this repository and create a pull-request and in the pull-request explain the issue and the correction; you will also have to sign a CLA. -3. Significant extensions are handled as Modelica Change Proposals (MCPs). This can start as a simple description of the proposed extension. It will then be worked on to have a rationale explaining how the change help users, and demonstrating that it can be implemented efficiently; and finally a pull-request with the changes. - -For more details, see the [Development Process](https://github.com/modelica/ModelicaSpecification/blob/master/RationaleMCP/DevelopmentProcess.md). -A list of MCPs can be found here: [RationaleMCP](https://github.com/modelica/ModelicaSpecification/tree/master/RationaleMCP). +3. Significant extensions are handled as Modelica Change Proposals. (Template to follow.) This can start as a simple description of the proposed extension. It will then be worked on to have a rationale explaining how the change help users, and demonstrating that it can be implemented efficiently; and finally a pull-request with the changes. CLA: Contributor's license agreement. (Details to follow.) How to edit and generate final documents -* Read the [style guide](styleguide.md). * For online editing you can use www.overleaf.com (details to follow) * The pdf-documents are generated with pdflatex, which is part of most LaTeX installations, we used http://miktex.org/download * The HTML-documents are generated with LaTeXML. That is more complicated to install - and can optionally be skipped: 1. First you need perl, we used http://strawberryperl.com/ -2. And then the official LaTeXML package (0.8.5 or later): http://dlmf.nist.gov/LaTeXML/get.html#SS4.SSS0.Px1 or https://github.com/brucemiller/LaTeXML +2. And then the official LaTeXML package (0.8.4 or later): http://dlmf.nist.gov/LaTeXML/get.html#SS4.SSS0.Px1 or https://github.com/brucemiller/LaTeXML 3. The exact commands are in the Makefile It is also possible to get a preview in the pull request. diff --git a/RationaleMCP/0014/MCP-0014_Conversion.pdf b/RationaleMCP/0014/MCP-0014_Conversion.pdf deleted file mode 100644 index b08df2d76c54cf493bbe26d951691931ef8c0aa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172159 zcmc$^b#z@j(kE)RV`hw*@tB!nW~P{#nVH!!Gc(&UbIi=l%osD{bMEba)8DK+)9=4` z*3wb!EvY1xs(xFg5~-Y!2rUC03moar?&K^SGz$YO0X>0@zBwE>H$ckF+DOmd%-zV4 zfB_&yz`(}Hz`_BLC17D-2M7~zFfy~V0b~dm7ywG2WuK)i05Jj$0#;@g0wy+kEnZ$Y zBWuGytO)+|_t^&%$N%a>$jHFP&`3_t-pb*#M?o7)Co5|Q0v3Rry^*1rfuoH*0Rtm1 zFF?f1($UBsAY!TKX!LgzfVhwbHwO!wkT5GV11mc_(>FF|1`aj`CJqKRK_OuwCLuOK zW?pVV4rX=%0ValT-`GB@Ff+5W3xAf;vx~3`eiPvMCd8`+5Vtloa@F`Va}I_-PsTQ% zGi3Q3q5?q5$lAow^mB?#e+K0I_cU1n3N|*5pLN*&s-yTRAOco;Hh_|wtr0*?!N?e( zs=+|OM8NPV0tZKXBRwlPXwwaSeM4PDU0r=$U2k|IELA_TA~%9K4+u4G1fkj`|9+-! zqSnd5TwZ&=(7g{ZA}j$v5(6wX(tO6yy>O6NZ$96>k5m`T z6iloXvH)d9`lvWisdp3Il2rsmU7$WN6h1iUPvQTo_kS&egQK3kqpQ7Bx@)ghqm?NXvdC`iS^3`F-gTkz_#HIOsZO*4RyA1s0R zRE3K#5|;m<3V-YFzs+3F+Jxf$14tN128b3&8Ay>5AgyO_@y8H8P4W-<2>_1vPDY=0 zC~f4ZXQ=0>_qi5-DZi|fqva<`I1n(f(Es&9PS3K342!zcaMc>mzr=T!bwVAT0j<8NS5Qu;&xHBx|*(r0b9zgsFP zF@Dm2ccrAn^hy6qfJ)4t^uOD(eA54J%Syn){_nPIpY*@mvVYQlwdMW%eWIGO@cFEyr|$qz{2Sl?EaiW$&VNApKVY1I89&7eIQ4C|TQpyoIY5A5}v-a3zkAy7_t2 z1uw2`rBFp()WcM9j^5Nh1aM=^&XtjxIGtf$T}B$;EmxV60U|IO)e40zbtb&~_sUO1ZDtm}jXo z5L$ker)J*<&6?sa*}Fr@3Be?&O}~k1TtmQ(SAZ!Bm^tzHGMdn~es#cu$~5s4G^DF0 z;291p=@!VjMfC5|CxPqUttEjcB;@X)EFdfB3s*;9YbWJ!4@we*Au7a$Mk7$fpYoRj z-NU6Pj_G1K%n`3=Hif2z#J-y9i&lrAg-a724G`gG&ID@UR*wND%tyCt%5XI$C2i;u z#G2|71piEupGo60&6Z)v(N1iL&Pz0mG)y!MH;gxoHcUE+HEg#`oTmQD8vft^mYX;B zW%(iz^6QWFJRL=%O>SM@ZP{?~X_FRb_a9Mq0XhdEFj70oyKK9&S1-r&C;kOoJC17- zFGzz=5?n;Wb>;<;Enl-MlQw^Q*!L!F33-M9%P(xZ}F(nhtXfG!u6QN9rSEVgZ@n3F>liDIwt7Ko)s zqwoYk^PmPn6IW9G9{c2;ixGqs4zf0UVu<=h(X7E00Lz6MEJw_!g7yQfEO6R_r&sQj zk^}$y+Ta%v5apgDmTbL}C)8W_Yjr-9B4pvJCs@I8ayJ8FX(#_!`b3K7G4ih=eiRj7 zITTZW{3s37bJv4y$le=@0;{TUg;4IPZl@2%mb1SVBc*1_`j$wq3HXtVo{$n%QMC~d zTNb$Op$E&7>(?l2?Ey~gN2M32jVWkV!a~g0mv}XjBav+p0@se2jfamfeO|mcRswZU zD_onH{>;{uGTzC})n3G6QXX;$wl{j_-Qel!?Ardw?Ik01er{dVq&qwdaZwcqcWCVC z>2A+TY9m;9!EB7y410d(u||rhO~9@u1ja<+vVz01oQRb&C)lJw4Xma zqBd!hn&Q*No)a$R5Se(jq^*rrLv8?UiXuH4(l&gICUINzsIJL%ZS(pZ?<_XGm-Qx4 z@Pe$(0ze24^>fFs_z{@QA{-f68366H{4!L!rW_I%qT{gS?DKQ_tA^B9u6smlMHSRM5?&RTqh1W@|*GaJr z@B7=`a0IvGq~L?+VXnpLN{BXnCHSKmD__Rupt#$M8N}!-7L| zKl?jgStCQ!;ts8bQJPNY7hhmV&=UIOe}142D+}X{VIf0@>!bFqqVB{)w~3;O0~vvp z=C>g^u+tq{9KAL6&`aB8M0Nj6q_RVFodH|GAz`4YLoLVI)`t-5pT@rOhMo6PBX)k` zYbK4tUL&!KrJ5H~Hk52Yx%xf=0N?}$8*I$gvrf8Y3d#h zZS~?QfV<(cMrc_RU1f?z2W0gP`RG8BUmywq{G`WCH{}j9VbV0~ac}($>CxGoIhI}J z#CI9))8W?}h?oJVwy(l^=FM5>_nlL){cXIaZ!}q1 z)8w8ff?-}_Xa`p%g&LE`)R;Jf8d@0ARoXHB90kJ_5u}Ylp)C~k@ zI5)+t_o`lg3soyQqHBSK=NKGvSr70i{J)L0E?UBPnzRNxsDDVO3VF6fvak#*=KWTD zR!ik(8?DCL&m3_x&B= z)Uzokw5!WBwUcRC|3aSNX1V;5#(HDZ&u!!2DI=TV-o2Xm9_Zp7=%7_Q$)@Lm-_FgA zt9G~BRUv$xKCvNqUums>di7QxZdTAscc0}2o*i$!RK@k;6 zsK)F@au9k{PT}b%;Q-T4?03I$)6I6__Pe&O+`zYd&-=lX`?^4)UDdnP2@+~OenY%n zh*&)!;$9G7e)GybZl8`yAG^eZGSM9jI?zn@Cq}S>??+u_+rl6vIq6X!w zImbXs7~aP~TP?r7rNQ&}ce>p;aRNO~tn35rt>$mwTQ80P=X9JvlrG*}MPLLtg@tJh za^d&y1#rqA6`dqyYoYN_f-KwId-`a>BMy7|8w6y%Q zJ|L0zUKuI*l2+1F?BPVZ_kG~d^rB;RW1;C+ZQG3mQGKOV#G&`X{JD{qw8rZDY#}_` zk$s6wN3FI(Wu=AZ%dek|Mz)K@>rei*y^A*z9X`Dftb~LR<+QN%>9!X=`?#*aqjcD&Df3#3txp1G8;vs`fn zoJW{=#JJ(ulwPEkj9XCe`d#Qu9FKbV-W`GRBZoQau{f0=nmox1!+Q7!WUvTA?~+gQ)${`hvR(w3wbb;y05Q?w|Ena zuazJ$HQQJ`NTp5g!}C;b=Q}Z~-=FDR?Aj(nJ9bq>oRaqan_xXXc677X!JsUWUyDk zeR_?w0co4#JFH+mI=z4zF3Zv+LAgG)>12xF2){yVDKObxjJWBajVUJNJBsmvp$7uL z6lVA*|BmsGWAiVs=^ysx|2o%TVfhcwSu9L*Zrpl>9~FG7JzGC%n26E!d<{nu9obJv ze;PmW9{2~3oMeCFkGiejT!Z8ig+#!RV`FdZGwhqV_aPnWTJK)iX$BeVEvKuL8^I5y zVdtm-t?WveMd$I?D>FB%pLZ$yW>;6<>AQDR*&!8Wn(xF~zs6_Rc`R4AQSs|uSLX&w zPXXuKi|3C=*Sjz5?_rBelh*sJIEw=gD@T$%-j!9;`=hnRg6Th9Zr&&>pB^Hz9~fHo zpMH@QVXe60oRY~n`GkFMkcf^f-LanqQ_9>xKNVH(evKy(-JEfn|vmIZVXFhju#d}e3TQ|VI#5q|Ao+)?hyj%cf! zd^bR>fE)QWd}*i9bz$nkmq1>=9FbpkLcTt9wE#PS9zu-4W#G`OE{Elz>}&RG{%0~G z50^=R2>P}horiD47w(<#M)54qi6&#D8vZlEIOw~XN=l+}(DG7ZE_MFq7TYtN_x~k( zN3IK>$KFiN!g^Oo*#;yo10Zj9!FEE6xWZnzKgM5}3-deItdp3cXE*MyZlajs^CinK z$KIjof&7(lB>z#{{y3NaRofWo8JPZ;t0xu~s3K{z%8uCaqB<7K9eSXc7oNwzi*AYm zrQ6jC&Oy-_=en)tN6R(dxrr4QXGGfOVfXlWa5p|EZ(X+h`jWfKyKoBM;hpJo(dz!T zX1Qgp-B4xA*V$tB(WONgG?`1$Kw((gbu1uu(KV{M*FuZf#L44$Q3W^V!*W-|(e(?u z&FHOueQ~{Uy|>ARjSrnZ9iW1|AQ}TSc<0SpMfC-`Y%n!0?>0vKSJ)`8X;e*)dn&`$ z{AQgLG$o6Yg;)feKhELQ&y}(BCEDbknxsutpK-%3@E`OWw=vQIDgM73xgGKhPkrH{ z(6DZ)YpIN;HRiczLxaI5e+(@%iE7FeYhyM>w-rMqIaV(DnLr!VbJsO{L@t`Skc9rm zJtr$g?>SZ)?@XczVqF9W3^f>xVs1b56{C+l?J*H&FZN^itTAxc>aZ)Ig)8|DNEui` z*YOM@W3Rb7vk$yj5pm^EklZWwdq*{kj!mgSqWeTdN4_DDvhN2y7{Dab%;_>jZPlaQ z8w6%I6?E!^2YR~SeZ%oQQh}B7}naWYtHVY}B6y7qA8Fq77!chXwB|$u#(^34g6b?3Nb6J$_f0X{w_k3Nj7@xTa8~<+v(dE4Zmy z&n|(8U@|*lAnmPh9x~z-B3s^~VC8`z_BMxUuk6TbEKy-Axm&yZI$t1fHh9@)Wq={) zyky2+t|r4bSbbV34IJ1C|KnyLX?M#E`N+?lCvT-FRi6%&fF>fNL$u{eK+70W;e2d~ z<>X4CFMNa6>S$#HYp0p4%fkUUku{@T`xGqri_?BXx8w-gpL^>{)Z<+yeaO z2DQB(a0_?V4|rSr(;=)V&tKWb{btFVBCvK{Rtd8auA+Y0=85!qRQoF_O2j6B;jX|c z2lI#h;1qF}h#i?7QfO9T=o^(&&< z*<`X9)Qf+fD(I+Kygz@yob;Blq5g6V;ra-=l200cs6z$p^emsLC6mL+scP%#>B!NN z;_nw9KWpZl5(n&m+dvel@Qv6_hwTnN0Q8h+1nAg=R4F*lw34odR6=`fO*-qC#&=5N zWMQnY;DA>DJI?LS;wEPv%0t5dg|%D#&guhX2i3sH=!O%5%|QcN1RBE4vjbH-_^ndy zL&0mSiOmWN93j@G_@f$Iu>4{4(@9E-j(W{Xs|MpbtFnA+of2;QChFvU|BDuQ7?=tc zEU+g(bPmk`(8J9M3QgH;0*sWFADcvkK+U1k@C^;S5^zPV=}P!yU>wWt7sg7~q$@qy z8C-}syaq}Nq1m)GeAk@IHcf5_W&2pp7)y-rNaifT5#(LJ%KH+Dx6M-#*KpIOV zHPv>V$=`h@TRTi1NIjhwsiFrOu<^bO*kKqnDicKCr55%aNo)y%v!&l^$Yy1MnAH@d zg;5U19&EY2kwrR{IrWtUzn(Sv0akr!$O}(78j?9KvQM2Z`?vz8Ey0(boLEo$i9)Q# zQqz0Uf1W>TS4ez>l;mo|!Ij7>H2DT$7bR;x87-iy&2HbW`tYy`$?9>Lo9v)z&OMC+ zYGL1jdDrY)J?y+5KnU9^$l&|CBXHpx8fyc8IzoMbVFDp*_qG3{qWwAc{O^j!@fmOW zci2WO?AM=<6g}+cN9vLSckIM$R8T(0iqjG_+$q2hHx19fubZ)6eARG$6Q6XsX12Ba zx{J=AWagEZSL!4Q4r?)`2CFHhjzbn4-Exen@ls$96LE) z5?I$K3)xkWAUV0HVehp!KQ`MIw&|YrTJhT_jzB%;eQ@(ee^Bn*CHHZGhngvnJBTn0 zXrFGXEEEJm?xel}IRz4pv8&MO3Fd>JfECrnWPTtwKP;nOh`Mi-G=}c2$_HR0A_-gx zTB*eqYh3uO??QUNWvLs@VUASv##sj_HLLRH6i$*^onH#c*=*h2?Y*AdfZ!)4=pay= zi!p%|+2^Ez;3*N4!QB-MV*5eliIhU?*Y%gcZ_)e<@V}+QgGq9ItkVV0HgH|I5t})c zMUc*C=~mHFhpE4j13Wn__k=Fz4hwv}9IhvW2n^TBNbE;&;yncK6TZQ81xpx-j{HzE zt!vO@C!sA9m(&qWj)M@x$?bN@dKU41ui;h+mGWC?zan8ClL1hqX-^%`uxv#+NZz}p zV$qC=+h3;^SC-{2-nG=R*#?O#U+_>K=#}kA+jvIK1 z=X-OfJL5qbU;_O0;hvGwjs1V9rLtu7EIne!q3YN)@7x`G z)Nanagrmln7%F~7TmG*SY!Utv$wAOyomp4J(JEh7R6--zPHl`kZ18Z~FqTJ*s_H^u zVW=fQTWg8fVv-fqK+6ylgKV7c;qRAwj2sRT5!bYW6;SEp2?#xpL4xGvbm^!-&m{+Z z+a`JM&AmW{}IUjFoa@Dv9Py0{oYTKIwJFh>f#N`{poB1s*Tz|l;b$mabP7;mnD zg1QpdQMz!E8kfP@U%iE|xj5~>E(;}>M6}2QnqFv~h2ye7%9IE*V>a&#y&t4m?1vVv z`Ii0FbR_E8&-36#zN_%f^%gc^MOK&K&Cg$P6;peRlK~ueu%9&J$PFKp4)&}(Kr7SM zvBN%hTs{{)qXJID&ZpIu_f3^_Rxve*hkXrx$vR~FKCJZ1?^S2U6%b5k>XtWU#ZHNIsUfXb}$?!X*?}!N)~cr_&F$Mvkdg%I}%)LD5L- zLJw)_3-kHA9_d_wxYe!4@X?5C;<}~F zR-O;F-wT`wqKwTNG5Q(%kX+J6*Sd^f==6%S*U^&mP!ymKz_LyqrI(Z|sBt}0keTi% ze|0(AxB`-CkJ#-Hmm6#JS&`|!U%!Fm1v&GU4ZLe1L41dz2g>&EI{8OM{1XcLuZqa@ zKk-pBZZyiDA5r+hQyAc+Cl^R19U3;-*U!y3;Rz&g9PwsIu5 zZRgIr?!oDB=V2-V@_4QEUOC3X0j97yKf?lF8d-JT=;84sd%w^$Uo8UR!Gb)wosUI6 ztL;$`qe`o}t-IDdit)!zlbm?T+cI3oLP%}|LQ~^gY{cV4<&&i6hK8N^2aliBvXZ@3go42KB=WvNJ38IwaYJaI>c>KHVC`<{E1f_B zIXYhSUEwcan;%VEmDi3lbsY&Pw))(llL?B33Zn&zmvgT0SvdJV=5MpOYNR)?JWQvl zxvX_7G~mS}f$xTIU)*ZB31ySW_ev*Cw#HJr499d?gZWbVy5q;i_2>01lS_v9Iz}mj2_DwSW3# z8$$t@VFf~16wsFOAXa`r{VGjoc$(j98pMoxYf;WRH=hVd`Qcvhusf9xDl=$kk*YjX8e5da%?GW`&Ch7BG?bosEWw=m=zetGDb}?< z!Q=C;t!;X@2lVs|MrWT}>p9IbgQHFnG_57X?8ks!1f~Nd72Qm|D^ZUQF6IwCTI+!9 zVRAHmYuEN#f)0Xw7w!VXR-sO4X`!BTI!?#Z1hl+)?r_m%QgWUHCcdUY zW+p;wJE~w6yVv}F`SvmIsj-hriFqhbZ`v4pBt^uwATlc$xK8{v&l&qThs#^(1TSBe zYG74?n-S8fAI2L$%&ye+>KNpSpe~FXZ-L3gJWC4%uH#<8{(D$xmYF5^i3?f zl5)hB<;sw~44E^xROB?s=!48fQoMc>AGE3H7;7~mN7oWOiD8TBvH#`F`TBu#ZqfAa zfptk4{A#5AX~CK8UKPrny;z8qCFZlbqQ!I%>)B+iW;^EuMS~{PF$k5xEU$o7^|VzQ zQEGZXl)C}G2tbdlV{RCG4^;tu4DhkrR^^`wZY*{T$Sh&4wx3bX5he&ejyUBm z4$Y($M7IJ=((sU}2<*<#V&(Xh1Ypvmc_#25SZY56u*RZii7-gygHlFq7$GMXY(gxj z8Rqj0?9VZe6P_A|EzLBMZ1+hcVcP9v8Q1O32T7RO`o%}601CHD0-k91(_xB8GCq#c z>!mm=)(7YtyvMVcd?k6TYcO^-z6QrFJ$R*lbZ$l5?WVmBgXt)pp*vGIFV2{{y+y!p zc6kUU(i~86XYs_^inh6%+K^*WBDFt&G>V(1fBR|UCSa}oEei~I zCe!45+wlw`g9DTOU=#g*vNSaAI#Dil-qjj;UKPty4Rt*d(SVn6t=1mfJKzTp&8R{-b)V~eBlj^yDDgRGU^QFH_b4VyROy< zX=_Q!L{lrDA-Lfkj=`DI1@ZL3cct+>!`p<)c*GX2v;E5fWV1$D`3<^ z)tYU&puTIJ(Vjw@Rh6ClX=zvfSoMC$PlVl5yOsFJTKpJ?yZ{!B8P4^q z;naLldM2V{w@f7l&)yx$SoW@gG*r>;;U+zudq%v|P?Cs}6X`tv8__%k$%pJ`5X4p| ziS3~`zggNy%I@LcT>T!B1{gp6_!XR)}ts`;Wr;KqOg6@395iEOcHYv)41arw z&C94;eMSt*a}CAk8`&@R3$6vx)FxPvX!GB@;`gQTfu8`#>e2-Ple{hUze0phjPYU&wU2|1)iC=U`LjcGgo7>*Qe=C zy;#ngDxry77FA+ixx-Fj-9H3rsV=4Ob`!doHvQA;K9^|RF%T=QEzM9jguylBK48+g zULtN!YiNL{7Sbpc1cVa{bz~p5G#R91r6iF4P4<^#u_886zSLJiH&#UDRqn<0-U=&S z3f-9oht~@h(Mxv+@3;M(o5YZy439wPR_n@vD zVTR}K9SwnFm~68qB+i$sr6{!7cAz*@u!1_Y2!=IqH;P_}%%FxAtos^L=%EM|+uzV} zqFFdHdRChDgP~T)hB=^83=lbt6{XfjK|ZYAbf%3^s9-UIfB&h^r!q3Fi#Brp16{^B z)=DO6;i^_WJB@5iuRuiP3ojV6DSA_ZqyK)YPHeP;cmPQj9tl1NFbSQxjpkEgBzd#( z4n}`H$VmeVJV&LGpR8y|dVp8&)$YnJGX#Qt-xBgue2Pw45!^j~VRsq3Hx7MU>>R6mF8w)9 z>63jf_9N1WTaQJxUURRUyK2K*a9(Zo1)6+K>OWfO|NXMjzk(VZ4F6+Clc4gs zqoIdwKm2syf$OM-ooNh&5iC5Ge6=AqTlH-9i;t&PwASlaJMk$c-o-R@+k}#Cg%tKY zl5B7$8k59-{#XjeUAq3&K`cbr1JuL~ zf7yp`s8^ZMoNSR8QN3CdiOmpHn`dQu4)*KutpUp9LC?)}dT~bJa)XJ8{bJd2Fhat+ zs-r@t%p4A)Y+XXI0bKfl7HxxRn*BL0x`S$|xli_OvdfGW%}b;gk=ru%8?L(Td&(ozTmL zPSJl&a^&kf1dJAFD9X#b?V%qWL032&4hRJB%l4PuBMi1@+$goj4hx<@j0KP{a&mC1 z$FK69;QeeOAu{VwI0huaZgpCMx~3)PLzoB#qLw+kg%CZco_FNNhmp>M4i`~{{I2w_po^N?oj6^!p$<=4Zy@F3L0ANu!Q~iu@L8g9~4-iR-Pv^=14XB@x{ke(jyb<|_r;R7I*1N^wmf zxOBf^g18kM=DW{Cr|xf~kE8~LB5$aF!L%vkorG4c{{1GqH1(mRrce$8J9x@V;8FCb zco#wy0kn`F0}^6GlF6yo2(o;4`**GIn_%4Z!gL{uMdGZ(^%mUaiOnsnl&t(f*7jYm z<3(>X>Y<L0;+R z;$l2@R-ra4f;k95QRBvx876dAp4u2eE=bH2sgK%n+Y~zyui@~R%kIm&&e1%XBofFA zC5#?A#KF5+!a|dG)Kqvzg3Cc?8(SMrVk9QdWVU+uGl*!c9oT+BAyF3Zr(J+yNGvc_ zSB0w~rAnQ<^K&wL_YO#$tQr^A)h$J|RIsyWw$-AoD9erUA{;Vf+yY-8Y!Q8Tst#)8 z6bHANU|&d|x2z8G*I=*Uf}x8`RbODBB@UX>e=_aAE@J-Ioyz}q2>e4y+J=Y$wtced zk|EZ4#&F2fQ29=7Yf3^>r6m{7SWm5Fm zbpaHkcG1!mZ&~y!TJOCQ4Q-*R5njaosV%WXe#R4itfWU_7@_pQA#EJzb6!+O$!-PJ z_pg8(0n6P|Y$O~8ySRN z{^_i|jD%qBce&xDo5esVJ_Bv1==b=gV)-3)&zQyFOHi&z6RpToyunIM6V>Fi$Ds-+ zfReu8QlD#+mT`t?H3yS(>=X$L^|T!kk%iK;)M!4EIP_~s%C?o4YH3GhedrU7jo{9_ zKg;G83Y*E{X3&qqr>u>QDHp8O&TU9M2cLXJs&EkJSnGcbCtqaW@LQwU6?Ca0ZziH zNLZYkC`);gQT(AjOocD|Y3#${+$6hwQQM-b&Br7A4ji~T7YHP5JwA=qXRnS}Y%*hp zmXwx@<)MwzsSS7z8!9c9m2A>{Wq+BD|I*u+hsi#~xT?&w2?>fC_?LgMapb3W@XG=o z(GA`-AvraRb8o?F7Z!0-%pzMYrLNz?kRTJHDihuokBu|nOfo!O=17C#TaXF@s?r_F6fMq5{I0G-cy$?aM& zSJ`!g7Zwy{aEw-@mfWRM#Qdzfu#giVO1~Ib7V{l1I7R{Un&wAYm!pILGU%=s&*g(N&IB;8(|d9yN}PM(5%xQC&x5AQNn z=xOC&wS{UV8)#4ZaVf;v814NO)2fDHKkhP5USU$9vH+vvLA{J^HeQ3Srcsf(V0~JzwH$Dk z>pXg1ExMY%l)j2`Hhf=t-+zAx-`frEBbr0phjc)X8~HU7Hxsus>Q;=HkzfXoh4Z8l zMW*-o6xJ4k>y%xUgU=Sv8P87JlAe;4+SxLG%1Q6^48h3A&`4Q1@#Urd7@LAM7%Tlw zTn16GA&cXAAZp}T9iitTSk;`TpKOe?$jF%$#p0GE9sEGWq0?=K+iHXH;)D@q&OJ?i zyfR6}qS7QL(PIC*uu4tC`igRX@jZ(B&TsL1%KJQ>ySW+n6HX%Y+XD9B<~uccN_jMS z<<8lI)(Q7eiP6fCvh!w=QX9WAvY+z%_k;aviB9{psy+@U@ucqi z(r?tSHvJk!UmV8ED{AmEI~RIc99p27dA~Nd);c;YJMf$79T(IN7~KJGy?-50B@QGy z(^^&C(7Bk{sAIdyFkNVV7v2nS4qrgC(5%}B9rZ|jppd1ArbeK80H*uAdGvWj0wHpy zZ%d-fr(x3%+x=^vnYwKCfg=)N=3@ReNHp*eHhI({b>0>vITQqh_u|NBAYN!}+Fdxn-A`L98e+05cTzg|V(- z*Hcj<`NWaJ7-_yT%u(8+s%fEk%-}p`RB=br7~>4S#s&oA{nX5m!^{Yj%=iIjzzWB> zXgTJDnMwK-w4&(0yP%%IIO<_qZYf1(tbgS3U`oDRLf{JULLX71&LBw@A*+wsl<%H^ zP0DRvN;xTbjn>U|&UMbaaHk)ZT+CBCsb_AtoIpAyMa*$1myNjccJ{)|xjFe^lttKQ zt>x2QwUuRTDkdv~0~AyrX#gs!Zegut7^9#kt*yD%*9v#U0L7*`*{|a`RDdEt;OdzRCoMuW99RL+WB}_>Ua3>b!B@G%4k&vm+oZmFgU;b_;kB* zzF&t_JQ5pk^x^$V<$0<)>-RCRdFOh$9Q+mJwLGA)9NkpI2Wd;Y0gv-U;QKn2zOlo< z(f#dLe83Y5{I-^6I^VwB#<-I!!s34W*MV$1p7)H?8$R}o2f|2nqJShju#b4@jY)KT zT`r$)c;2B{&(QowN#|?5sDr9z;AC4t-k!)u3jE!wC-(Lc@<*Jg?E%kgjHJ`+&eK!q zEq0EF_ldU+he@7h#kI^p-EPWrYyvT;FY+|OU`+&s%^H;F=Rf;%{TmBU@hU{Dv=%E* zwQ&*dRXsQGDX_rAW}(guHD zW5v6%6IT~<Q-F2rm3aR5h_x1+LNVnJJD9${A+5X}o2vbWQ0; zmG^oRNQv(3nHtwbR1?aXP`WjfWzl%;vNN(7G*VoyFAWlh{xykG479u+m4I+5CR#DF zQk;bRadmc&H{1)ZfSedn4*MJ!Ia)5P68wuIQDG@_GKCqbRY9hsZ?#;poXIgoWWCn23He(=Cv1!#qgb9%HEe7yGI6h=D+L`YJ~oO(Tr4tm zK8cKoqyPm^0@g?p*EM$I5RQ0)p?Iv4c)T6sw;57mW*tUS4YE6Xd3wUYNkyir9;68SaNxU4ZDZMvsrqPeSym4_AkX-Uo`_wY$2k0X`3Or z^f1nXd8+Z@yY$#WM7J?Bg6nMY=(42f!F-nZ1M5B1YN>X{c7AU1R&u+=eR1;o$-7bKegS0kO|!FS z@`n1&vvUM+S-xFc2HvC`IC*FBD$uzAxITT=@7w@f;do|k9y#nmKFND0>AX7f1sJ&E zAnZQ4vfG4sl|e;sJ-CrvY^iMw=euGIURmRfd$4Cc*n?bnl*hki3_-GoA=oqG@1XLI zm3juwK2k*Q8*oQO-?;L2qdbzx?kQ$W6mtYjeuiTAX(kRFxWguI3_H3MABkl5B{O=H z-LQ4G%egbFu3$SRn4Taechb4jZLYp{j5|DmW(~Ty@^0>fdqz7v@dEZBe}&>-?=-2a z_e66Q2Z--vjR zr$54MjQMQSzLMJPca8vapth2U?v;E^j<;8z7;$T%NZx~H?XRlF@{Sz8!m;$*)JOFW zp}m4@?7666dH1!t6t#@t)8l%@THW2O0e$zs*x{=teh<&Q%wEFs>7{!FoP~c3SU++( z4}Rz(yn=e{_|#y$hqX%spWQf5J!5xyi|F~}+xdRk<_};W!u-Js49|)lg4vThp!Y-X zt1&k`n?JGCx36Zw#&-SzT7!_@lQ@c-bs0hP0obeS$YXgPK(}YdPz;r4&Hfs2>_*-gSE?TPMn^T zw5x1RBcG!-3NB8@pR+ddE>0_-zxicUbGfH`mo%LYKJ&Z{`3V+lZ6z?#?a}PdAgc>W zni1|#>yNk?X}LW_l^>0?K-Wjy&)}`dwwYy@@0d56|4b@BF>gKj$%>n2@CQ)zIAuhS z3oN$P+me1(M%Y_vQZGiG&j_~4MjzwxP)-b!g*a}5UVaL+dFCDE)F|6 zdTHTfoQky8(2b+n_iG}l_MkcUYsss|sm!{oOX8TpS>-s@53|@J{fv!pgwry>I8U4U z-YWKC(7w`}U-I*@g^8_gbgli&AIeXe=`<#V`HLU2SSZ8yhgit%SPVuS?KZc|po`N0 z1>x{#qzGuO`keau74+w7HR|Z^B`KFb8W$R&(E52%HNxczk%f`!3B)Hem$l-2-|}@_ zk~42!-X=I4&N*BFsp})&g_6s~XY%mX{bw?bfwV?C1}-&Kb!~|Vi8mu0`zZUw`~KH8 z*OWLT>^S3^G?^UBnEMR-@_}zq6F<10R?q(v*Bv)>hP3j$$|AG-0>+4r5__v!tmqiLI6}t|~)Gp4gO#GNLiz zZjxD-<`v+TNNb>@H=1ZLl0E`C@-p(>B(W}Tv!~7t{sUxk-;FyvdKcW2JKJ|s6~&Ek zv!`i9@{#08#;x?%4~#4Q7V#`%wj0W8PdC4{9?89iYtARUj>x1-#+IbyQ4Ckj4ho$( zzIecByFEU*M2V1*#IRkOh}E17t|OE(MZV0)vD`_XHRlib;>D}gmTXAZn2^hspK+>J z=DdlEQ>uI8p4izFCYPzdk`}MrH@a}Nnwo1hm#^vEP&#|HMI4S@(`3n~!W@xtMagGD z)Wsr98OCdP3_Bw?zBzHG2OoR3`cC9ZJJMx};+Um+0y4#mua@T~d+CM~&#`}F?_M`s z+pZtA4kvCaXlZxEPZrl5#nu!4inuuNc+~EQzBq(*W%Jo!8ENd{U0%>@+q{?dh;3hL zoZ;=i_igXH&v{evD79*6UppsmG5lIe(q914)q#}b;??;n#;Z3$SBR{j^-JzoVC?`0 zAwMW?D9A0VM+{G}WT-90>AO9MIM9zK)r*mO0BCaCRjCy!|7L&3Y`g43=I4E_mFVx$ zrl{ksJ-2Wdr&wcmKQDft@mThD_KmAGIU+9C6%=3ODbd+(8u}F~_plOAtgzi%U#v6d zWb{{qo%Q>U75TWKTPE;CX&GFs2czu+A=@*#P5B7Eqoe=O)Wy0-Gti?E z`^4}Hwmd!r4d}KSYy!4h0_NIQWoLpRmnV1ZrE`U^(qbRysm8eP_RcV1leq_vN0CDI z=_tN?vv`F21=SgpyybG~v4#b?ZNv^1vK{>qf2|*mbcDtZQnjPa1zpvfy)}8M>WcCX z;S;iJ3*xe#T7KJ^Gl+9^qtbJVf8+!$lW&6HuI`;Q$)M=9IA)7#5Zx=j<9j3IFF6&G zl(GTgAP}AIfI5pZ>o#*%mon(wr!OE|Xk3Tp@eA#cGNw9POv(V~d7vg>_+6{bA_Qf& z=D8iiO9&8XPca>lj2w^Xc3-TIkhTKPbRML%K#kj=^61`q{`GXRSMgG|j!ET#=1$@v za8UdfNei6=;{G0NKz$vf#{UAJxSkC$dti1O)>&P1lZpHa?^k^7ruY%hC9fyY;rK<} zC1Do%;g&%kMhr*9k-0Pd&6f_oAfI00j4cz}7W`Iju@=~Nb_0SyF`?iM>IJlgS5a~7 zn(fpB0>My$jKKKZKH;??SS2+HEa$|XU%{+>hQaZtLr~lR(O5^uVAspFU$JXKjG@VE zYqB_*3Q9`Mj7f%M^|8i#M@p6u?mtcr(*+0O+paV+PQXoN34#ofDTx$ghDBe6`$$V7 z*{Zxtf{Y)LHKjaM-LY<>yA(;!%hl+8Hr6<#^}JLJ1iiF=k73Og&r4PQEUSP52Yp}l z+Ba%S+)!sMY&N|v@V9$%TmGJE(2&kFBMR%##;zF5e%8oLB?)#d@Oj?FQcDCeK2uh9 z4Ze^kCiH@YBq&^_pA(%cBE{yEQ;fia0e^k_J*y*u+^)P(E-kw_n0cNZb#6{(MyWXe zO-v4^TqN2|mdz^72qdcOv>%EkVFOPI4q0AMq<`jKjRLvP)2;}toF_?EmcyB#5|bAoV$wa z-nJMgjksk(rILkHm2Hm#qJK}0rf~!_$zsp+8?njLu%o7ZdTcScpvceQVe=D3HUbg# zA`L}@L*R%-_X$|Tye|Vu$GiwVsFG3*U+xOv)NoWnPjB3XY5yMpSU{)0YdU?2AlHb!WE%K-^h%wSQ2 zZiXbnj1d6?A}xt1qaYL%b*Z6PBxn^Va%pvX7fkFs9xqfqJ10URghd_3$N&x{D-_dP z7aAE6Pb==vg{toH8on^LFRbZpVKF7mZR8xs+j-49no+p6LEcGcv2uH+L)9gZ92V0; zLao3r&0mUw8^>irF;Rc1suK?+-S9364`B_+gFwyy$(<5;w*OhZtv7Qj#=L zk?Tp0)x?!1PQj`{a&=NxV-BsRAtsV*iG-lyF9;WH%c_p9DIQ*kKg|j}-L#6Rrn=RN zShTaRqd6A$`C^Mhk@gaiL#u9$X$^X*$E>wpzt6K=+-f+~keWt+ejc7Z{grCHN8s(@R_V6SV0P)3LrAoBXF4ho-Q9ihpAGNFmX#K z0h4niIRY)6lEt}`oP->;IG@Rh7Y-@C9b1gYZAfhu>%K3E5UXVm4wzqb1zWPH%!lI+R$jz9O;1GVK&L>GqvQcBXtS`RSI$rMpbK7Qk zSW)Z|DC+|N9e6ZA)&jrduvF6Z*Tl`RhDN04Kv~G5Yo3hoct(s4Oo908<9V=1J&nO8 zq7i)E$GmPelE?+XosN!a)$`KP&?BGD6%u(l5MmL?^SF|H|&K}s@Zb+?mk+{1}VC^Vd33jdCC$Nho0n}d76 z5BH_(tYzVEtYvW<)4zC)x?7m&ix`fIJjI$#XWN4RmqDw0Q5m$AA`3>8Q!YGFBKo&nW4zJlr_3j*R#enT zTSQK5amIK~3UjE9k+5BgMKzpIgDQ^%?4Si99*9U%kQ1Fq3cHPtz=&g<9Y^kBvFLCW zdhCiFkcA_x;w@FO*pu2h>2=@CDlZ(LpU3X`os)VslSZ=adwdy}NacT-Et8hza@6V6 z_bpC`j22o7$71I7=e|5mEYE}o%JL6 z9qPBpg4}otg;1;>VobxkW}8MCI1yjzO1p_Et>N9Xs`)bzkGHfW->MWzfq{zvknh?j zb&yGyqsO3V3ZfOougwO;MMxYIxv$*|G|4Z+k9-4UL_DlIa!PGr461D4nV<;8%fzEhy1oAfjHmq;j?qeLHaqb`XNT*f8ip z=(%ODCszx8RSah1F(oL9t=U*S8x$j)jWZaaU~V*O_4y13KrdFIKj`zRyqHeAQYkL! zc6&8y&s-!U2pm+dph$k$Bk=C4xD!+;S^aprP7(Cp|yRu zb^HMl2@_@b5DI3q5Xr4d)~?t{VK1ysDT-Zzz%G5dvpfcmgbC4s@>sGz#EhsGa2_j! z{WbUu2lzlb8cF*FYWZ7?qct54r&}HL@@a|>robNH^PN9Su1&WI*v;Uu*xJz(z2J*` z9zi*<_@QX$XqLC}jDPXZ5A0u8@>Z#kxW7c>L~q1ufl;u-XsCLR^{`RYgyQIcz7xMh z&D3>J{UDSa^3=)g(eMt{Y#o){x*XuiS(Vj!U6G3w8S4TKlJVb;0EF-p;>_kAPXN|4 z^v1o{&fGb@8SbyYeCJGQ`LAuIW4oqa9167!9-AU}>hzD6FHCMdxA4=mi!(d7ocrhH zedmv?8Tjg(+rRLW=ZYJje+!}nwlO7OTOReJvwD$hn*dQnwfs~d*Z8t%BPhK5~@EhmA1yjA1^M4!C{0D#&R0E7#l%*!L3iPK41 zdYmkwtkV^wiB1@Uw9Dmm;#@2qi$N~}6;m<=d$WmbKwzG2Y0s#Mk$NTyogutcS?k;K z!nR~c-MK2DbhbBr*~%^dymxK0(s}rsJ!3uoFmL4;hPMkilo?dK%S{h>b7n=Hq51r_ zBc(N89P4Ycv=;`F)tE%@Q70U%VflN$Oh3uzV)Y(<5_mL#t~T^z4Rz*HBpb;JK8^ap zEE19=wYm|9J1^V2;p<%0fMk`1J5^zgkL?(B*2v=2@Wi8J0aPopy--M{Y!zFDB(Q@t zDm4*KeoAg1@{wuqQ9o5A4fXbuB5j~g4!-#I^iu~XR(g5HY~?J<&@%(+!7hKgw0r;V zQhME?AC{9lhWeU~EJYhdo=>me(JiZTOKR(${d=~g@i+Fp{<)m9HSEnKTN7SB)E;sr z`eG}J89BXr{Mq5jQiiQH#izNI5fO{P7MqTHNKI^vp6-sbdwPEKlW-M5_-tPP$OGI)WVUMkKd+{y5##_Bi*Qu7% zZu)SuoapSZcc1zf?^P1p#(75nSxAaQibHBN-1mJE#hoH0N*qx#MUF&CmSnrGR!fZ? zyGiYMiEOzs8lX`U7eRppPSR7-q?e+H7?Pt9Q4$~QO91EM25uUl1%l?1q5_(tXkn+K z`_BxArY$FS9iSJEW;DzHzwdqTdvEX1^1f*AnM=$2G`{|5erY73R%jGb!d#p?+H?5A zLdU-sdiSOcL;2MHPMbSawu z^+=ZQ)@&7FVYgPqZp}kX;Ed(Ezg~=uM}0@r=<(4zOpHb_qv9}S*;81-0AnfeY?Z09U>;_1Q6ASuQ z-$&?4-nZI-tzpgGRm8SNvH1H)3B({96$+#h>)^NFQALW-epW>L8EP2VtMR&l{eEw{ z%gKrwDHSAA+H7OtRwOcgH@mO%&>K&54V?bXqQ5eb(#j=RyISK-mg0+#8xxg8aya8{ zl`CcVMWahk>KsNj^US4_t5<&32W3!8>RpEJ2&CR?FPDD8dTd@BVd8aU80yG1$&)ZY zWx<6yS_)Hk6P<(8J%S!*2+C1ZWPK)F6%@$=d$r8S^=y*gUlN{OVpJ8$h^T%7Q}Vp8 z5n5mVsPAa@g3Ub(2YQ2anAh9ve7dk}gg#)k`wfa+ugx5MX}>?Q`11VlN>0I3&aAwZ zUP{M?LUdbTFlme>(srjvuO)T@GHQvVU2hNa7m;h*$-z==;;~fb$Yh*!cKJEnScuyO z)ZY+DA`$_&b&7IyRMCO8P!g|l$T_eMsslB3T){c1)3qWMfU9wIWE@|>(KqpnIEv%u z2t;I^L@L~ovBP^JUwT>nzko`uLN%C5u2&)zxgOpizsZ6mMzm z{^7~O^7`qXzNdeComEQ_n%q5 z{9Lhc>diU(ku&bz$q4Ly!|hw>>ypzj9i6CGMXLtTM$NBBgC3%aSk}`+MsM{_?zC+% z(UN^cU1~VWcpkR-)x`GI#8uvv6A$@NlQi;tqy-eD&1Mu1A93dJsNm@9cncwwX$(%C z$!Ao)%?TRVt?sms4ienTdftQZDE6clmMZZdpPxF@*Eb`!w-}!c~aIJvi1%&+0 z@6X*?!CecO6(<-hidHMkFRxDu^;WB^Cj^nQUC<>Y)BLZXH!wuN*wAnVeJBM(ginRl z&#cd(pdEmvV&?v2>5}kh>S>7G$KKah6(Kw>EP$V641-lksmBb^G2Yjx@^61$;VM5+fyIC4HgtE55F@3OWdv7?3N+_4zs*Wdh-UydA z&Oz6E9r}wncv4Io3Uq!g9&E3o3+vEeHpj0DBWJ>_yJ#2@gjq~nLS}=dTzk0tn^j!H zdjrV$o#r8(7WDkO(j0SpVrC`f&U&MZDbXv4$NuNb)6Z0#PLcG;c0Zf46bH875wA4+ z1SX$*{1;1{X8-v1E#xK1C^S+IuuIteWuQeb12dqZzaoGQIr}bSP?v?(-++tfXBe*n zJO6k0uIihhxEand2T}%Exp(DM-_)L--aS*f#@ewJICtPm;Vz;h-I?-8PqtpAO<1KQ zSQOV8gDZ3bCH&O_7rLQrsM|TH_G-`L*#r zALq*BK;6^;Ys0L&ddCx1V0rr4zG6624v!d`aTiSvBv|&-Ee$MFmZ#bGdf5Z|?AscT z78*}iFSS&zG)Fz&s70Z1r99!8G{nix;iPe<-JLUyb|j1en?0x_*jL88ey}U9@mGe2 zefw92?F~FpP57S1+<682src8S@o`-!=Lz-ssNA9Rm4;fu8pOe~^%?{z4sQ@6rj0-7IzEQTs#WaK34;?1?IikO>|98bEssy*xzP2NWI zb7II7eK(HhR;p*0FP_ZwuDo~l^u-gI+BO}Z%x9+3CT(o0FFTbsB3~W<;03mDuKM)x z51(iI&sCo-9G&P4j2#_<$8ccuDBR__+65fIT?Rofc(tBL9BG0pI}JkUbBr9&- z>ap)kuL1%1OtSH)?`VR;cOMD}O(cRN(`b2jfCCsp=6wCVIeUW(hJei)Fc7}s(aFf- z`F;M{Elpq`Zh(oznp#N4c6HFm*7D`m5^3wS)n-Ix!v8E1^~; zzxMe+IllX#&^PEN#4rJl)%(UvLd9g1z(^7{B0^xT7{Qr;*a6TKPcj4(V!b47FVj5l zMNOIKQpMGJ#}E&`{~il`zZT)~k)oT>@e}{0z1m}&IpTh(-rPMuaQu&1hNf2^7&{$bKsfYg*#LK|CK zm1wB&Pdl}$rb-nXppA8#G-i9}yS9^%B8^U)uYbPxe!h?IobUY3`5m)E3p6>~+JPu* z2ol-Y+v~FgLaN9z6g}3G_6S7sw)CaS*FQ;-BiX^2Oq+N?a<+l>h3XCJ4p?76HyRpe zkV>C#$+l!AXazRwP)C_GPJft#aw2@B z?yfXfKj)mQI}-;iz@7Y|6FahdM>|{+W0rU^sqgG*?v6X6{o~um`=i;JZ%nsM=qbCI zp=pz3=41J>j^=F07TY+nePUw_2ey7;TU>Ul&i0f);xuUikJZ!a2_!?l=9Io?KtH^- zO=@z=vNP!RHakpC)oJxa9Kp7bFPzeM!z#I}H>nfMFVK4Qz1k|hq9~RP2^483)zxij zZ!ohR`mM8(QNN`zV1a=J_vpG39$C;$b>{#%myFcbSH%ZzOg4pn-AL^BrG2j{k1CaE5YdMex2Un2x*Fm6FK&oRK^a%FE;VT zDg0)wXL}te&ay!9*K1u}rC2DKc$3N50^a&k^#*-~{w-9(!*xcBAU|dx^#`e0UADIu z;v%aRTGWPEIHz03YemdRUWB1W+BZ5d>w{dry5@Cr+!|qMWc{Ap@&J8>B(!ish2l2# z@Z5OVFdit~6onGFKPMUt_pOL6Qr8ZB^E1@)K*hYpD1y}X#t7K$0tIju>`tMb^;%#H z2TRn~7jVbN0%>*;6!YZ;IFo}qv}w)Z@@NE70HWz9u(-k7kJ zt_k3k>gKk)bM{&;r_W-VWhx)DN_?oNdnl%`m5)IUi@tTyMAk1cZ*klkw8fW+MKd0O z{xNG+T-JZRqc|mom7F#@?g&{qFot1yMJgZFH0q?JfG8GZqHtW5AJFH(z7}+-X5S*_ zc`Ncjp4zmiw|GK=M=epuby>H1f(1>m7lbip0*y7aA2C$DzS>TR{3Wu+(tR%nlf!gv zF?04T1C%VDCPf1IBjZ|zVi)6*6wTUoNG`AjnFvzp$fFLCx%E}8e5 zE0;Bw$)+ke$!S))D-v~@X-RXJPgDCnirMUnYQ(-_XuNLImrxS@q^{%zIf`wvj1|sS zqAn~39k8KTiF$2;k17pzDkbdK1#MK08xb0ZQz*q_^-`P#j%Fd6mq-@0L5f9?8fS{o z;w(S=Q$5P)9A=8Oa1R6DNfhL8xX%2rL3$%l$RTx`6Kq2Hg4a*;vV^x)F5BHKaF+^O z9TpQ~hDbh#_wi7#KkHAZd`lwT)pcE17GL1HssIQ$9y8GGHx!bPu z+U{Y)_roRZ1mDlD=t`qey>*>bwpzV}AKNXmq{XCHFYrT{--P)=Y}T>BU~U9+TQE0_ zxy_i%VXg;r-I(jbTqow!m~Y2?3iCZhu?>#a& zm!_AC0tt@*jcdID(Zuea9y^@Ht+bO=i5~iD|I=rVKXK~wz2U+A1D#Xr1G&%r^zp+# zJdg?YPIdL~+Z3t1???_Lr>C5$Eggl4fYv?Po!*jmKXUNEe!O?ri?i!eJLk6N_U|Z! zeS_l<_iX!eF`J%#awM~Ra>O4R-7!P;M|$Iq@y(&0jH*mm&dk2RKv5RPJ72|v21^yWjMytl5wy^Z+v z!hgD@)5WEC*p|DH-78*!d}Rp0q>?980k#{|Sx$uD^BE&ly}JFL*}<%2`hWT66`J6+ z3zN%j1YXp%W}PbBGDl1#A%P=F3RPVp2hZ6w#|J}GX~mh?*tTKsaN5FK%q-0b+R%Zg z^haJgxK7>r;<1--MNlN}us`7u&F)kroQX!9f8KI@cCsbBA*BVPLCKeCb_d;x8jYx( zd*?<6o|!*=^hc7Gs8$;pj^gMmi0}X*_O+vnzmIFPa^K&OW=7<5@lVf^f6?3WbCY-9 zEzk2eO}~L_dFV-T?Jf>g5WXzDeD~ddzQEr!Mpu301Y=z}!@om_c?Y>46kJ#J8Ugbx znrHgZ#QngEXx@My$prLAXdW=IYTpMK2kZnqSs$OLe+KtxsPG9$FitRpY*aIvr<$vK zU>}41X22+58(=TsD=^*+2rzHLb*B(bovQwv*#~n4&<6}0qmR~)pF&RNIW*5z;Mv3X zK^X8Tn*5JARs%d|lGz0B0R1s$3%%s@yL-;Px!hdG%=C}X{C0nL_ndQgfBXA=7q#R$ z^L0F|kQ+I6BT_uu-6M(gCBr;_tt{re9Vm`Kt>!2m7adV6Iy%#7AD}HHBgiB&lPssd z8|h-s=eXHabhDk^rp38L_%+YVd)>B-L8{pqwf1QKej)-}$VC+WC|6zV-i+ltd@eCB z)7O*Mr9@ddADJEov4j2PNFY(3O)&RiO`92j1bZDG4aYRO?(gHCR&2yjk1pDNi<~e9 zM(}CupSqZNsFqVO+GB7?d$eyQiNa{Ry$i?YneUPHBoAXvA9CA*s6(863~}w+AxV_Y1E7JqxJ*!S7re#)jdMY~!*&&O!806t zi`+!Io~P!3HUmS9+nmQa;x)!z0=kR6G1h|SZ-aGF)x!Ij=iB4KU@c>A4c4vi zP~_GvYL|}AL|u=P(J4@ORX&^fL%z#c@65W8 zjI3Zzcop5vp_pO*9HZn2p7Rt4vkZ$o7Ls1pR*WQBjIVaqXQ;A{Py-V2g5FD0-q3rU zCQ`66$N-+3jwn><{akC*6T>%|&7F`wG?|6Q{ju*y9t@&%x9}{fqB73ubPB-fu zZ5-!+imCG7)Gu{nyNugg}I0MO4YlN z8g6|;eK!Xg<|4-4B2+5t)xauM*VJBeQ&)>T+)G5=dtK-37p*Oz3u*4~fbDwr#0TgTDgy1*Q9m}~CmU8NC2 z=if8sIO!20_ip5X=*63ZTd^r&gf6@Dc8hB1~0 zBA#(MPF$v5yUuafkjea?EI;QRbtLQe5%e*KBcJUYJ~N$cBE_VL#FOcykW3&?kdchx zVzHlVzY7!O^SrwP%4r>I0FG&*y+dgWzH<875mQ{&V>+g(*YNT5$Fv|B8_r#CK$v{#_9wL*x_5>AU zq?}}vA{E=DkM%k4i0OF9ew*iTEMw3>d!DIgr8krgP&LyY$$T)2WFw7duAZzVjSBk^ zs_a8XRKP|rN4@wrN#@vTB3Ts_tLbYT| z+^LxRfw($~a^AtTPPWphaSk%49w)R)GpReBs$J^dYR>03df1IE$otVvMq`QW!gDqk zOT-~k&;AOYu~}GR9AMuJFhWoV#JocNF3c)tWY?b7@cmpi{#c<+tn z^H!AKa;GN-^24YRa$Wc!V%v0}G1lP;;pH#?iaPoho zmwRwm#TCcT@7}$?UlOPWNI?+ML7qwyN_Yma5MGgJfD8y~1dJ4cAUKA~qa#*FGf0P` z$e>se+MyK`bX2TX9Tk;gs}_q^8tLGRYAb}c3J9Xve$L)|;g=sFcBX%PX7Am*cOPeW z&-tGCdz`OPzrlY(?uh?SRmu>M41Sp0jRx4=sBT!|1G&KQnRHR)m=r2rN;*5TWq^`c zhtCA+E_7teAjQunmO^5h40TjUuH#inI$n}2#qUmhPD8}5B3}~IA)>9_@8}>c8j-Lz z9UUXKk=i1d!nxPnL5F+nMAo zv!s=oL2l6zpE-(e>R0FRe<%JWkMVb*SII}o-P-G&bGawJ)%*zGNuKK;AXod3j3)M% zXYG>}S%YLnvM2YI{3LY%#&d7+_vA+-oZpUob2@QMNcOew1U>1$J@cC`HL;&(49VIN z_O0JidGz^d=od_#tqG;Qzzk~$eCFi-kY^lEo-*OxI%ziWn@94Es zS6_^VsOQ`fBTPrh^9#^bf5FBJq#Je`np#X>9@^;&+7j2v39ohWI*P%KNTJUnoscX- z11zxn$a&9Y?2f6L7I^jXZDW6g0=PekLP0lbaGt8ZBUF7D1cDNC+r>?-?_%TaZ`OSt9cd9Sm5Ca1KJQmQ3! zvVFY%i0e%mev4<;-Y;Ud?ps7P@%tv~ZiuK#s-}%dpNAvE4sktpRBGUR*!62?gH!lg z>RAY}`;=&ZFOSNr+#dV^eFec$v^@A*$p;nHT?LYGb}c|}=$OB^n_L_HhRwWIjG<@y zOX=VpxA&Q4%q^ca4&|T2_?YX+X%0zuznpWrma}t|J?SXR%*E)kH)NRU$sE>8`(T`_ zAC4ZYGQ08FYtSxJ>^t18DYVV=7D=u54Sp|>+T`7GyV=P%bXl@98ti%g?TS8{@Aki( zeGOD2nU6w!<{w9Yt>hjo=PWFz?>l99mM^tgE4hbH(O)}!$1bT&&Eo!{7rk6N#yoOL z+chH6o{fR7aS%YNyvC)N~^|Miv)jIqINmKn6!<<>cnaY7c+?^Wg=o-?4&o=^bep%aYu zr|>PbO>G+4TC(0tV3O`*4D(e4dO)XSDSHy(?3PaEy1!)(p!*+D8J&d@5xxBR_AB?S zHc6w&{l!j7a=Bcr7$e;jr{P!1+3p;zBqv}k^pT@&V%s~rPqGg(AJI7kg}UdoyPJPF z>)55-EFt_1~4&{)g0s{^b_uGpZ%m zF;*7i_m-jq+xP>ejb~`{sPlP?Bk*f>r}J;K;8JqL?eMUS4DOc_{M>ntI#-7NZ-Xp` zw*KeztKjnzhwLlfXnV+&>+NIszk$%rJb|{^Divn9EQtM`^JClOEas!Ja+Jm+|1m)G zK&dN<1wlUN`v`LyfDfC9ZLVSLjrMVTc}IVUs6Hu+|4D8mE`2LysjH1(zEyEns<7vD&JZ@oc5}QN z81G~5%hz&2@U&cJ7SPuwnN0hUW;y5UE-4RsNLKPisqlYCT^u|2y8N*()cTV+q91e2k16RR*eEx#&*!*&upRT%JhMCZ zKF%|r;r@SDp1C5*HIK_>F5lE#Gs-hvj`@=GC&wJ)9pQ}i;`xYNrO)0@cvcF$pRk_` z;Xyeku|&psFJr5@v^nnD4f00HMc${B3jZd)MyH(M+g{eH?S3uoy@#p$g6E~2%fHD0 z|Ihg2SESJOC)A&a+Qn_^v1imK`3uhN2XYqvr_9fnvr;vZ7gUgkydWumCc0}V9E5zh z5mYzj%MA9df08@t&E@Q`lQ!&K!hDP-uiC!Rn#PPm{ zxO}NU*S>`&YQ4{T7tHI#`k%=#@9$EM zjRt!2;6rS*Q2Hj`mX3+-_JrD0*UnkXOFStR*rPIWjQE>R?)3uCPf4X$ijSQe+T8Dj z&+A3mnYe-N{b%T}7=4u^Exk6J)ydqi-ZI=fAQj$z*v|TkrLXr8{1JYI_HE0YPJ}j3 z++pj~{)waHpe zsN#Eazn*bNm#|H$wY;l1zxpgbRDGnLP7|e1Fp=j4G5}rW zG_0w!t4&=)Idp@1-XEg85_-cy-p2#q&=V(d|4fP6)JN|p|4D8{b8NJ$lN%eRKyRpz z-mi?_5Bi@qJZC;{_%HkQ9$ZCr#{vAe?+`)~B>}^$HxWVtH9#Z?LW3lM@XiB49-%`X zH_3&Y+<0>d79lWVQ^lf%A_7%m#@Z65PukL!N^7MKGnT+uMXariXbtW3;ZP_Ra(y30A6Fg*%nbgCa0N)lo4hC>g4y$wl3u~dw&fq zm(#3euu=1vr}YUq#{@Hv=Nq8_`ES9O)jV8NhFPI)H3RUxw$-{DWr87U2I4``{FbKY znp>^Jo2YBoN1WeRo^7?jCh(#h%gc-h zlDHM{2|Nnfd|z!SX6;rkRoN;j@EKyDPsFwb@G#3`UMT7*Y(3Z$^f(xBV_2WIz!I2t zoxG2&U2i9SHY~X@#A+ktMC&Q=!=oq<3M)52JS4yx?CXPcFXTZrtB+WF;f=64)Ye9Q z?YXvxQ}qnadmHIHVDF7ZGv`M$4_`Bn`OU&E^O)b95zV(Fn)y7M`7ko}PJ(cw;fe+V_7s+D1L2 z2r2(o>*KArl(RHl%co+79fQ8~RsK%7+I=|YJ||uYQHu~ylw!!ZP6?F^&BOa zT1%;F9cAcG(iEL2Q=LGWMk2);NoXq_&$vIuDd%XRR)D$VAm(NR*MN1TqEn*sU24{I zvG!u?M7H*v3Jn+xpu zU@4_*MTj5WxRz`vL;W-4VlbDrXz$WE^#L5apA>t}YzNfSzloI3>)JEchnSn^=^V#Q8r`!@*~t^*j#tYp|oQzdWQyvpuPD@D$aF^T@U)b4C6T1=p|x-@|R_7ZJrkD3yN*NTr3?7LW85*aZ~&v;GVtux~h{{E>DkrgaI| zyAt=NO8PlvDEXA3z77YdT?ty3>$QcJgv|l!*kq3E~5P*4=pex zdIjkswNyH#meQ|P!rF+W!;Vnix@g=%n=vk?;yhc>kE!Z+Fn$-~ID_KRr?04!FlI(u zL8Xjxl;fnUCHRiskFge7UxEB!g#DJAQ9qy=#s$2KA6lOpJFSn5ZL~aRy;*d>v!$U8+|bXi&^r z)ES9y%Mph?u8-R5(i6BJ%baIymPjXXT}$X?=_sE6T0FNnYfkK5`l))7w#g@H6NCH# zqz!EQXCVsCbjDEUz|d&2=ltDa>%`$*%krYI@4#W_K5NC&@30oE4Ao_I@ckHu=H7YL+IA}$ z>s1w!owX}O#(LZ}@fN4FS^scg9tw{q!r}(p=e1A-OC231o&jFv4m{tE_ndM^Ff6qk z$ac}u>FC^ta+aer))8C}&Dj5uBltaTKeY1mGvm2?xk9dqn+_`?u==>`!OckP`T5Rq z&%rL|9JU5{iT7^|)HymAIQ8vz&ckW08r<+cm*rds>xQhn=5!1{OrXhzjoHLfd|WW8GW@*Upu2mE1cg+1KF2%+sS@v&FvoHzLG2(A2i?dKxeVPnM}FMF;Y)2VU&9Kn1B?{Edy1+m;P z=~MEvSfmRdrRWDKC7L<1C*fPdzIS)Qcu0oP+6R=aZKWyBY$r|WO5S~IlvjJ7I`;O{ ze$hSs#aqWBt#ExFxxUy5g3$Zo;%{ERQlj|g=p-EM>W=x*xwGQ`TT*>=l2=|eAnDc( z47c<8QV_ik8r8kQi8p7+gI5hL?P}P6qvJ~NJ*mTPg4w;a)7Kg<3xXgBLKG(UlE;MJ zkna8bjoe3+S=EhzAP9mW2!bF8f*=TjAP9mW2!bF8f*=TjAP9mW2!bF8!skXJO30L4 zlt_okAQ|ZxT0s=&PTor@+e`8E1NmN%#gC5fEBYrRRoeFI8poYh;R}KNY%_`KZL+Ynh*v8Jw_S9nQ^?Oufmsg`tq1u&5>rgI7 z&ph_|vszu*W5?yV=6NdpzD8elz?JXwH~9SJ0gtaf%QemGb(MN*Y6Fd~Qg@@<-{h{! zS~PcNNnye0{Bp0S!tc2!&*!a*ZWGVDJdLh$SHNFh<*qCDuX6dSU4dG6SPyFazSRwE zbEU7Yp}gMXZp`YH`@e|h(o8C$LMouq5l`bD%0qiz)MLlh;I4Y@C-FaG>omNHY7fA8 zW~K;Tk~Fm`w6u-Nq6mf^(V_&E5Gk|;ItUaf$W}#2i9{5vEt@M?L|j=4h=K-aIaDe8 zj_kV&B2W-q!B%B)CHEiR`|*CbAMW#99^U*qlQU-~b0*OL?wJ4OsQ=4T^6zh{CEURB zyyZXqSru(m>3^v7G*^}WyGm~^TvO>SgsX4`F7w`RZ2bzqKrPh3&y2hT7uop}{0Kk5 z_wXHj3m4$LN{<%4Ve1^6RcQ%AwMt7C&ZxAO!f7}KU&Bd;e8tuY_!7Q=&*3vT4#(gq z9D&1d2o7=)2Vg(!gT0(~4#qb;y!Lu+4Cc-oDG)#b}APD2(NeI9=C1E(8QcN4LsMv?>SqXzp^>T|d7y7o_3ssKW#=v6f^k(kPHo=J|uyYGbD0` zo7tHF4u}Uk*uV;L5DPI7&7Ae1E<106IuHd0=%9h+23i=d!$0sh`~`o)AMiU|yK!3W z>WxpNU18^C_zixAU!WFh;Agl57vU%P5q^O0;XBUvtx9SnT!8Z`Nggom8#t$uItpi@ zS|vRwoKZ;+38&!{e65nY3MW;PSNIA}z?V$@1$@qApE22SI0i?V>`un9K823Qa4n0hT!S26V(rv3yz zhDuJf8WgPJv=vYeE17x)EQb($1RpA={JX0yQ_e2JQushQdkXI>XO^%;IkScLl(V<6 zSUEkyB8DtvNEt&GFl0XO&12+Tw%%prJMcCKyajJ6XO8d&htGl6VK$fa8Y5>hvJ_rb z&R)VyM$Uj&;ANHAPk2cs_7`4Mi35cfRN^4vd6n2*n647@glW7tm61~zGTBou*4n$e zYHU7NbzGKfo3vHhB5jWC>r&DxsX{83R!S?R@B{-_RtR6 zLK|g|Jg2Rp6(oQI;=v9!uqs)UDlHCTAqJwM9@JIV$Wq_r$rFE;E=d=qpQIn9A7nYt zNT;P!($~^S=_~1kEX$YD7t$taqqIRlu8SaPs_{dI3gqtI*H4H;n9@mmhhHj~pc1VU{;aVm^A6C6LSJn%1ARDrv zC-i_!=nfBq54wRDy23+n8{Epp-vTa3hcrlqhL8fu(14FwACf$C#ebx~rN5*sbXHdPfV5xQC+(H?NV}y^rCriaX@|63 zs*={oihm+~ELBRYrMZ#S*Z<)j7s0dem~zOkLRtZg;E?8a)_wr$(CZQJ&0 zyI0$`ZQHhOn}2`%=sywr;zZ1tkymw7QJFbLjrl%J7SPeTu)+a=oaWv{G}%Lj>g}{X zbZpN~XG~|U&eEKeIPtJjp@l(?1uK#Z(WKQDAsZ|zP94Rsl9OY3hz+Z1#=K~hj7E`+ z5sZ;htN9`Qh57PxWBD1`PcqD8!KCR5NJwPo3^T8!sdAyDsdY$=ttH+9OlhjTO@tsyD_;6DBJrI;I5Om$$!j1o`gO0TK=$j8NXEZsb{!#(&_VJ zK&C1LxB~JVIPzD(ntN9GCnKRF&YCQq^B-_^#?M^=OHgdT@>lqi=|?^M)`f99lg}St zL*I-)rhZw5er0-eDLKxueCy{p7g$Ew7zG-vrv_4;jUsSVM8iG0J+^byEblII>R2>v zyAEv#v29{$AbASM;xG12!se|UlV7DAi#&sqZg7lXp`dBNTfmc@vj7b}9XW4dQ8yRU zEK~B;Ya?3|mpJDprX3BF)N4BnSr*UWCh1#SybpVEGn01~TbsHK6?1(gKSApAM|K9D z5}r1m%9nAC{mfnTRh(6WBGE0$Imd}a%iSx(L>t+5HFcp^3P-M0o6T#kqo&3i_cp#6 z1}!4Z(eANRTkBRW?UmWKG*zM{$;;Er))fktOWdk%ST!T-uda3{t(UEz>;=@a4}&Z= z$5r7FBd6Ku9tEVF*j1qgERlIz`4*@&y7cE`>&lk0DJ!ew9n{I3s4^KQV>a0uDr}ov z4f(pVy1~zeBL8^fSNz5Z=q-V@MnFSmOHae1qoRD`u`tpyg;>Mf!9)dKtGc?N>t(mG zjDv_+8R*pUFObi=@&E^2?ExBof>xpVN#fTXhKh!UNY;ne`GLX?A_53WiunH&qX!Vj z(b52pB_cBcB$*!o;G+!Tmm^n}wla4kn}f;&k!wSvg5K@-O4_FhsQE9DJpx1lTfB{e zBHlRw0D=M_e3n-IxADdQPgo)o8#BZINiXJL_`kx7qg1_|k&jS*wr(14Q5+fE}HiCP;|<^dOLhh8g{N`}c90u-;OfPOXU)>+C*K8jF0L1wihy%qca6YR) z7j(sShj89A;8ogrN1YyCJp5gNDjKuuJ;t_sDiEvh4BJXS!V7^a>ri4IfkxIl^YUnw zUl&x@W&wqs!v&b?ah+=4sdtf4V64;{b)G6ig^0ssfDR|&WI}z5`-_J7Z!XVut`hbx z1>z0Spo+iq3(d@}g|sITMpOqQYug*GmDLWzdBBwy4R~=A0^=I%kSMS&C7gj~qv!4u zUF!IrWD+VQ0p=6{LeWm(+L7u(RQW%~fSnT}YE0glPC zUW!t8I;&|zaJ7te(Gw?!#kg)_sKTfx2lSi@#sxsuC!N6i$W#e(j%N1U%m>8C zMQHxaTfi_spsoJ3t{l*fQkb7IN)4=tF@7B2N1p#zn@4wEmqDwKIPMWcDBatjK0G6t zyi*9Y439{k(q%V5i#?Ka>sELdC1js{>AdjC!(Doeo-Ihlt2k1DH3!BwG{OG&-zykQ z-j}nCuPrXqOzO{}LJ$LX0X^13TK0&P^$X)Sx$~P8)0X%6XVM!iBggwd=95IGsoqYU zC=)p`?0E62-(=CTLA4O#$mAST^nrD;AqZ^kk;i5+uC!G!>2QQR_0T087bw3F?Fbu= z)UA+puj#ZQ+4C-V^}M=eZo^~SDMk7aL{mTS5^vK;`18vo#4+0?5d>|FD=DfGORP68 z-+(Lb8{&uOzcbKv3uF`p2$_6J&lq1pu+tqvHE(>|30+2wV~HNRd7!#E|5 zF%XFZ%u!`wo6Kp&3kS+_6Bb}yq6(a{C1;pEB%%=thEb`c<-%R&$W()>24P|B1hnCP z4vE3@R4Eg9V*~ez-eTQUJ8HSos)6HzM<3&?L-N~7w&Z#g3@GK(%)&6`UK=k%<3!w z!&>a2FC0B^4hU=xk&#A6D=FHEaszGMvGae5H9BRfEMQm`P}j#?VrChNS=)OxhS>)& z`st3tlMJI*sa?Z#@>LqcA370>8}B3w$06#qrxP2FxZ4D6Q|Lx>Cbk@7qsCd^k_i(9 ziv%@_E0vllKN5+?H^%i6q0Z@>#9^2)&KaIup6aVwXa-p4Rc#{IZDL4AP{g2X_HBgi zFTb!%e zqYa@|=N*230-6+3(5PgWJw@b_m#iG3sGJEHS1CD;sY@}&?IF3HqaPGR#yUv`cuZK3mnBDp+8KAE@nBQk7y2qSkO zu7kD|cn7Vo01Iyw2oX1#bRIWV`*c&#n+QA}d@2uag>zTc7+Uw{4hnmzfpf7@*mt+L z2122SCr8K7-`Ba9l>zT=+Ux$IxRaCOa#B}2H8;RMo+a%6yqEFZ&rBykUNqXdsJC>I4;Ld8GIL5i zT&CEy%B>XARnCljoyx9PqAnc1>)30IM+D?RY0+Y5JIi2-(ggsgtP-oN!M%Wsxb=t` z`Umu-lTaoVK83G=#*;EWBZCSJ*&Q7FSS>e?94dbs>iFK zf~VA7$Y>AUTSj++*QPl; zyH{t3w;wTJ#m)(W~zRM@ho#Ro9Fy!i_u<6#-B$}{&(oNwOk zdBZD&;_g5PU-1Ez4^5W-T(l@Uicl7)f*cM5&ER6%Npt6*=?9u5v|$JGiSQ{L*W=)M zrKfQm2aMhKZ>PU1RFUpc1MN>2S{vRw-J1#;(hy4UOjcSJMsJSE);?t(S1V930(>J- zeY}qLV12!aI?aWgiJJ~WBrO7Qp0d%#s%4aMba;BPM8>l6P_c%5#?Wdq?^Br^F>@Im z=FhvL4W<>+?=c6isHNuN(B~ovv-_=^O{eR&lj$zE>&f^ea#)>6WE2XeW?>P9)QmiF z1yQHPealeX+HD6mK6|iAx2>sVFxzq`K6@u+YVE|V9G$qFtR0Fu9~tbPo4Q%MLWu)o z>wge?39lIQL7xnWYaBCC(80&DDJRkyzFawO6=2mGcJew8u_#b!I<8Yx-VS#OB1s(m zMPo)IWMr{;8OWVV+!l`^d)b>zcF)CW*LsWGORv~|o%e<`CpB1B)Mt+aCa=zB7!VK{ z@0v(u8gTLSrB-;^ZFatoSk9OqWqRd$fpTGH{lVdZQ~~V(DuOZJk=eoZ*j`Skar0ei zwYmv9OlYQnHwrJ9)!HRR9BHc(Nk>6+2=?jfr3(NKfhKJ0sXR8xzJSjw4uKlmf*Bqa z^PJ<$_q43m#5mBsh^&{A4a-y5@V8aQ1^CF0GOV#$$M%C_=37V*d&G7GqKp943AXb< zU%QFV7Rg!n-bhQ8U&E4vu=M?4OXIdjn9d%7jCsE)M+xlF*8l8Q3~YzJJsMWh?9Vjf zYRCAlMDEP}@rsr8C!6!Fb51d>^Ago&8?fv%gE)>bP8&8(qxtg#xv8?ESm&7adFppS zgo-wY%Io%8cg}d?4DhW5KN9)XGL>l*^Tv((JPl(ZSgJtb13ptdCRTUcQHJdFQ0|!3 z72F1i&Ms+S&jj{f0b1^_i6ljHqD~qI;)QiC<47gKflQ{--vV71=xx{A41e%Dvz4DoP9S|j9>vy#{(_jll=c=FWan8hT(v{t5=TCis;kz^E1MkBU?v3rJ`xr z(}?TCC(-rddVc1;D6aON@(opFZ#J_g;w855jPYTuD*D1K?MY{t51 z&T-LI@Yn?XowgttREF(y0{;!#=N0eeP(*HPSJj+zZ%eF8lm;{=&xUV&3OUzhw0BuQ zFQ|}+4Kw!&SpaS;44GNeZJu_q|JL1g!_NQ*V!hKf58N$JUfdx$XsdRNT#t2}vw-@f zNS;^o+PU~|{Tv(z4f+%n=+uj`PTEB!c|FILNGI=x(uU4uCpY(q2MD{8^4aE1wR1O2 zBJfw~gR98E(6qaPx7TOZYlkAr(V@Q3dcBHVgwB_DG|xb`LXvo04L6JAJ`{|;63Q3)y1hoR9iKL(!B8a46x1pL%xk^@^tP;~N385l^qO5pT_Gl72tq0y=eMBtP znFzf`d8?S}srRQCa#46pBVX^fWr@kpkz4XREV*;zSh7y~b3{Y?iQ3}fAD{Y-xa!4s zVuG!V>e+YUe0{gi-?}{bMhOGH@0!3Xisa*RpEhn2OrqiW57?u0Y)A!JzpR4kX6g>p z;2R2&P>u6gy3p^#BRh;%aoJ`lK2zCcH&qAR-`qi%^}l&C_BQ>qoc9T0Up7}`d!6$2 z2~cO9@LU%>HyDQ+s-YDGpw7f_&vq`vFQUvggHGGhJ&;_4b5)rGb%!2mlPQm_-s@p* zw-m<$w$JU}M9i!3)_53?gWd(Yu`PWl&%wjwy@W(0LVl2Ly9%uglm_uVFR6wI+a?gP z=;)r3g9Ns)w_!ru`|z>ozx~%R7#(jwt#vWwa=5*f?cD}JRnp~rA~rtd9HT1@Q)+3O zZX>yCknmNCalvAyDV3Z|SbL?imcS4DxR~hSt@1nQ>vu9eIrd&3%G37JbqE4ZA>XJ> zE~)$+SNq2pDFGf4h?tn)nC!2AsXqZezQGP9a_y`tD#EWS6^O1nM@ddh%}`lSl*)cX zLhj4^_4u>>k;dg@I-SYYlg6P34}f(~Fx#bN*nkQ*WBa4{k~v4h!9qoHa&hL;0kjAT zo}I+Wy0YHx`~!i12#||ecmh4u?nbwbR;mT*zJ!&|LGbljSRe*4VuVl2N5Kfa6RFH_ajML=cZ9n)o{ zY_wY+17~F{sj7LZRzU}R1d2a=WE?w&qm=3c*UH$(lFh_PbMjrVD6~$yyeEWjj6@k2 zSVE~fV~(=7)WjZ=2Fh*lN;N=VNPozIu2Q$ET~yHe415=!9IT#OAE5xTepA;UR?knR zV`Lb5@AM^egRZaqA@nn`#Ms{#!d5<@9Q*km_sqIU1N`$*mQ5jyc2~Vhz&fgGSf@^W zKd7ug{vQL#{MP`A_}>N)n1j?Ns@tH>oLDE}#u%E37Xn?fAR)X!X%J|bpwM70hGqeb zElW6Y_fv&!QI-jul(jX})|vg;(r5lw~#tJKHg62ArzYQ-RAUAip>?mfwCLCPg1 z*XXYTv`XkT?!G2PirHWSgi~-(54L7rEDrBb-*7qXbTm=lF$zB*%;zKd&YFv*o5vdK%RAd5oyd67$siNj9`;03e6J&J-NtB!r8KVWh0awZ(xnEw$I{|+%WhXwvjlR zM!8yJv$|b7uqQR3_Lq-YXo|j}3&ZZ2;Uf)rGT<2b0r)?Z&gby20mSe>3?PlEDzmEP zUjvAXY7El^MH8yhW|`J1)@8Z+vhR8QzYL(YjCHM5q)UlsjAz3S(9k{o&>o^ug!9sq zUjqn720IIzBBl|Xh!DRYmxJ^^=6@PMA?&{f5EmOqEPE^`9ZM$WKMba7i>s%nC z@v!moa>|#l#xrbn6KJO9^Q=sAQ*)l+_raJkwkF)aS5Os;o~mi|7pci>W0$%GWMh+T zEg4{w3&$D{$sRL-D1}eV4Vvmzm8_aG_*5g~O%atU%d%E((b<}EXW=bm>m?hJzH>;W zPm3;pS575dp&c&j2>%gL5mxvXm=!$KYR#;s9;Rwnl{|Z1AW+h@;Fh;vBos1#l&80A zCUNBu8>t*8v1va|VaS!7CapYa-R>l`NFyDmt7#x@wcA&PR-Akg?!JTXo{!I0naltd zffOlCq$jepu6~SVRw!ettrsCgtIi+kKVOb6;;kJ7p+qu?!D!mHGY0;aq%wGIC!A2&WmZ@{;PkMWR zhN}yV35Q%KygzGDz?8Nbi12?*w5?Hnn`e zw!ce(oui%-w!8le=g}AIjUXKWo`=7f5C2z@{#?;#u>jOwo|tenTs$K1A7(!x7^VUo zb8&W9u`qLvHxKJo&Fj? zK=Gnd42j7^|9A(*-@(@!u{a(XMCWj$io4LoJ{W>wiQwKIIUrBTixnVH9<R*dVoORFoe&PnN1_-+|pq_&QaIs<1axH=Q0JaAL) zK)Od$7Ij==)yh830c%v@mSQ_adG?#m8ETaH?s8N}dP>UOd4kyJ@AOu8qdUVv>`cdQ z8uoh_A5font1id^y^lUWH(f zb+G&K9LR5uH9r|vj(N00UmSI|N1k4hs%L%Uo5-S#DINJ@!rVkREEynfh>=ttO8&e zvWxCgMGeX^K=O^4dq+p#M&^3T6P02tLRx~k1hxxw<@(Ozo1^~)Ll7{AM-c{#4jdNv zmuoRg9R`sOMiZFaTySN~wL#llab?=Ef!kaXdpBi+x3Tiv@O1^iH49rGbOq0~2n+Q= z^V@XA?!++=TUX~AA6}bd-6mZX&M^LG6Cu-N@xKM2D|D{qn1+L^KN$vO>(X3frfb&o z$b`f~fEt93gNG8O_$c}P%6}si87O5*N{N&5=MDIRzc8P<{^rIB3p$iS$WjVolwv=Z z2um4RP%_L5YD!>PfEnb$=EcnGa*B)f=y6J+ol$NTc09&qBNB8Kwj_pf%FDfr>z$E( znfOB|3NWgNjLKt>4hT8qy~-PsYluo#MkTOg&_Lux$(xc(U5{F=650_42m^b`*AIf|Ih!kmx7Kl$pbI5W9;Y-}P+B2Z zc0o7)!tKIt27lZF;Pw-_L(A<7y`u9fRCZF9LY5hp|D~)NFRd@nEH5lCwJdKhFSD#@ zFVD8j?N>>RP>ohbT2f|FVkmF3%+oAiE{~=xlPqg4ueB^XuedJ{EH5oD$1Kk(uiREZ zD6h*oOX+uds?Irj__FS~tO7~?X!8xuIZ=Cm^G(v*RU0r-fwHX-&$(E64fd_lJ6w4i z^6k>wXM5%DnL8PUyD#{p?s+})1%*4Z;f~rl*z3f3E+ga)+&PKw3^MW{i{0139_jF4 zzS(o%o`C4QsgiwmLd4rO<{hQ*4pVxgFS$dIJt^Q0iM>H0LCl2Z&&0q4y|Wt9?^Hw)sG77Xx=Of2cg(eYi8nt zqw4g8NE@+QErV~c%&nDm#Ew4GC#umcmvxL?Er@R{%^jF^FrT5-C&b3?%qr?n%+)QL zH`-6Y)t%a<|Ic8|E0$}&pMlvYn`_@r9o08j#~$7)&QB!It=y#rq<&3H(DDYrGXvxY zX7rad_y^V?;P5U#(k{M{LoETeAvP>a)Iik8o~Zp_iZCJ>f+&_?heV1%hhp*=)*A73G|<2PYP3v)ojB!kR-~RlvTEqgP2Ll9 ztLZM1-ph51YR;D4+jR@OH1A?U<>JV2OPp=Es6((im1RfW(Qd7># zg6KcDxfs?qP}=$64)c{+kv8y^u<3ab&L6(z3g+K{O~{_Lv#li0=Cvd6_%4amDR&c! z1bEn#I1`ICA+Y_~;4}n$*Cs>+6^LYxL4#V8S{PmFUQ+f@2zE4LhT$&wpg+g8|JX~A zddu$N$W)XCeG4h$*kNTO{@CcgTtZ5iye4I3rM>vvJYBdwI;$)=ImcxenVou6scDr| z&Am5@H9f6s+5ms~Z|CC8`_1{y#-8$>^)xwPE?m!bY6cw7T^G^Ko}B5nhh9H4dL+AB z@;q=?X$G^ZWK<) zY|TWdGkjoE85C7U$(S5jV|oG1s4c8PyC!y(R~s-bxmf13$4{A}Sa!54Ul}_s!ny>f z8z-IPy41X*bBR)FG_4O>F2<^Bc9ngLebsnM;V3fw2@}K?CJ}BE%>1=Xh+_|tB$@XK zqN0d&_lXY1{xHT*nHZoND4-5F>EKkD!C2#35u+^)So3Q2qSlL4hO;!FE|0HwzIZ`( ziJVJ3!F#Rh$ViSdD~jUcFN{euCQT9^8H1+DP>R=GV7v$&8W<*!3=-lPgJ?*uk1^I~ zHpW}JKxqgcH;@odQr8S>EjqPv>i^G1zj?84Q%V1 zt#P*(8g@|}71^Gqz=c+NLX@oebqtzTy!c#i9wd9Huuc8oVI=p4XOkc=xA$(G4u z0&aoF5N`C#nK`db0Xb0l-n5`E-3QaLRs z5ZRk1_r~CmdmV+rZGwgBVsSDSgHE|O>p)KEa|{v$yhSQi`v`s#W+SLcHDbEx^`1xy zQ_WI_s|t48Jb^#%cY!YVd7chbpdB@75Ie_8cH*+`HX*R~nYu&IYk753c-L-1MSgq*lCxA3a_!0)uiQ3~%$4WikZ z9u@sC`EFT@S82n_s2B-ANb-;%B#1V-A?^X+`3(=#dPP=2nQu{OE)r729mB(J_R-kC z>2=%lT8$)99PhF@rXLsE{dl$cf!7TvaNkN6lYIU_@1*1!A%Gd#`|}CT<$);M=YM!p z{K5V$oXp2N3H>`)8bo!7t=*e-Ow;K&sc|@Mww5D4J#5z(ivUH1)dj;hfODR5OZCd~ ziRv41%69+eB#gGl*a>w*0bL~Z`z+fIjGV5Zhdl;jmov(O;|Fv8d)}_dfqqAfzn_$MV+Ims;P|LIrDm%7$|Yzqgy=p z$=xy`p&SZS#8ALm{m{=&7A)%Hlh!K=6g~(}IPFqsDYjwHLp$|2mrT&8%`wbqtQ8VM zgOZ~QqGD3yIXU~rr67bSzn&qJ=q3gub+S^}$v<8w4-|qA-;3Z`nM+pgL{dHCZlfnh zi5i>V(#!r@so7?t}aE0OBWlv3s|BKtX zNs+qG8{9tL6Q>%~LDm@Vovd?7l=)({R>qi+0iiqhq7oAVauHKJ*kR9h>JH zF_ASEeqJPQr6tQz+$B9PML$9IWX%3iU1^w9Y|*{~7ysUbIV+ff=dq+`$Tc4Wj;TM% z{_a1b)x>`F@k`CIlEE*XR$jI9V!mD>)Z`h)Nn0uBvD>?SDs~u_GTcb*+VL~T2 zdO0>6-zCH?LBX1#P=sp1V7LvEyi@a5Nj4O|!%6$(%HTNBH-TJGq9?(kh`e}Dzh21I zo{qnVGsB0__nipc-r~?B#xqVMv({D!@^!cuF)`rwiArXyy_GGou?qy2@mc6%hvBZv zC(4%aJ=%xZr=p7akszF*q+87GFcZBj$d-&Ew)xBTJ<(O7Mot|R9a%agHU)82HMIz# z0Od}-2z@N-TKh9iD*K$_p$1>*E<&Dl)C0rt*?wBWu#mM3u~y9r2TCq zS*-EtV`uTTwRKzAcYwz%n`4L2{jk9S)py>-v>;A?@p{-kNJRi0fW0yhf$YW?xDbH% zqGWNw{X>7Cgoz0UNMbN-){_Yb*u$`?U}7@g)xtnrY6jaDhAyc_v&f}?5nB5Pfn%$Z zpH$im>#!Z<5xs(75)VEQZha%QNDLL7l1Ne-VuiXC!fjf7IH87wk5nxK z?>ydY_DlGKxCW{4jDl1bOh3UL7$;~GHiF{GV3bJ?I8`(F>rqnLyMBidrkoFwf7z2? zGFyWrtZ^}Sn0)33???sfV9+7N%ynhE$!%r(>H6L1>x!o)wxRB3`UPXxdR&dx9@`AI zf2B;OEIqln=x?(H6rsWrA_Rm&S*azZ0*j?k0Xfih3>9hP8NybqstQH4yk8+CilXLS zL8v&&6WDG?cLOdS*rAx!8dHs#>B!B){kZ`(NUleT;shR|v;qy{cA1p>FhxN7a&@(7U*H;el@2L|J^g2*Y zI4EMVFz48|V{*ATsa~!OoEp0C@poCzH7k=o!W3Wx(gvX}jrbs+5k<)NS02@mF-S%90wtFd8>9 zbXB`(Xof>B(;dIsP#l}qG$U0Lv$Z7pul7qOG*uOBnU z487I3H-EJQQF>hXzx>?hgDTy3Y$-R}Jv!YV7r(RCIi_0`&noMyIqo1KP8}EF_Ju|& zp6(@jO6&?si@CjE%4I%Z-NOzB~v$>LD#mN|G|0*JB!t+wu3~Stq7_3BwiHky<(#VI2_@ki$9b zzNX(BhBOmMK=zw@VOL<4%annFf{Nw`|6*b)_bE?|d$(wU4nH7yoCM#$S<|1olF!sx zERSenY+PTA$Ycw34i&fAL8_0D{?nKmz_I>(0JvDHROh}J0m|M#6sL_pr}x=J_;mZ+ zPS;-?sp~xKt3dtUjpxanK!b5q%9qpE=%dTF#umseYeCqjFQxiT>Z#Fe1* zogbb3OJc6*&!S-#vE;f?+TW=V>@ffjW$X|@O&d1^Qs2stineXgj-Z*D1&Fm~qVI{R zD(L67F6Xs&_QOQO@pWYp{}`p1)(H(DxNuN0b$7+MG^5US%Y4lRg<8#DZYX;9lroO3UOf5xXxQv^QEejiU&Bxqn zPuplH0=}`s-qpjEs<$!MVJGwSSL4ymx@bV` zwE5yV*8l1z7IBaP3behwzJjj3K98l9TB{n(%Ij^pa(>v)U)cl7w&E1 )UPyYSs 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

x#XG^cF}8FACzQsrbC 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 Qhb;_L8X5^jsQcId2j=u9TmS$7 diff --git a/RationaleMCP/0014/MCP_0014_Conversion_SpecChanges.pdf b/RationaleMCP/0014/MCP_0014_Conversion_SpecChanges.pdf deleted file mode 100644 index c96f73a590347b0296f75d57a83b666af67b6d88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70148 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

QC7)JktxAG5EtABFE{{h+Z z??2?<3=IG0O%VUn{_rm*h<~*|{8z>YCbs`V`S9QB)$EM_0Yp=+`mbcC?gv!9OjSm< z)(B$Nl+5BP*OsjslpO_l8baDmS`kRajXyh>GC*0ykM+DHY{So9_Qz8QdbJlu8D^}U z{P6S_TvK=tpprt`HKRTp87g%obCEGi?jmBw(<&gyH6X|dWTDih!#cgwZ_nyqt>cpJ zIb~7avO*g?TP5(K8Ox%oiBVBwHd0*?PyJ`vNjAb9gjv;(Le`v!gLJ%om~j%ldofv7 zl$zB57!Kh+&*hI-_V5}2kaCy(MIh+4)n%+vSb+_M;{bc%y==szTra8HOSVzovj3p6jl zLm&uUzjt`Hbt2KF%%b1Ic>ZpMM&>q>5Zdj_FEZAm8%B(PHSfPm=X*z#RlimLz=04% z8U$AcjVE-m{{_Dzr?)H9X%6PjZW=RgT9mB@%^xo_XM5Z~*Ap~|?=U+l z!CB6aHH+VNfS^e%<~}01HTQGM7jW)Um4N(>n}5I3Kf+>urp%n!9_NG`^n~VW!VyO) zxAG>*C*FVL@6fZt!(F54n|pkq^J61Iq}L;dYZB7WMlQ&GLZG2t0V$iqJPz7^4;(#J zrL7SVz@kAuGLmk$X~pdy;7I^RhsPF&#S|AGJ%XPh?&Cyog+A!WCdr<)nO1&1xmMc8 zrDz#Brklco8~Pj9482&Co6b?8nZoVj!!;U>>eEwEd#zv-_L2q8i~V=b5v)wQdP0T z_ht5P_3;j5#<@?GZ}H5V7eS*ln@f7-J20!@?<%@1NqTh%+L!ii-GtdX`HBN|ZtcZa z$Vkhq`$h_UI3eOeMW$WtcXfY2fcem=n|~7b{{U+K_qhMJc>BLC?*Dq7{!`V}Z!@3iN@pp6VI@uVucKVR1^l29bl zzr%VAf@Z${jvJBm>^7`Yj%eH4Am}&PCRR)ZQwuEF4hgfTGIvZWP_xP}DE=0wzV+3f?A2z7#ZzRAYLyG>A&M?S1ZYkzt@0$;_%VfkQUK6KRd_|gI zd9?5;flUt-Yw7r>+ETxQIinJbe*h;^K{${*;?B#6t5v)vQ3wBkl9JST-Kp0PvrJ4R zS%QFvf&0z!P_0SFQHknig}=b0E#^xk_7s#uZbf$sqd93zITCEYyx=aSuJWDUP&!*j zL5J@w{v}q_R!!NVP?%|v6XPui66a6*Bn;^tBF}>fF(&|AM3xXaX5_@Pys=9HznGHj zL6S|PC)et^Eoo0vm+SUPkBH=SJ_$Th&)wkApQ$$r_!r75)^IHg5Upq6-dX+~#TbS2 z##rid6v(q=ph_5h_QM4*`30)Z*<`h}_ECMT14uu;+F7BEjA=?1Iwy+s%ay^CNb(CO zTC>0Sc1NEI&)1WN5fTbg&MZ^TES*jAQ#jvanoe(RS)X^f#Kgmo|6(@Ksln6l>Ur57 z+J3PYd^X%Xe3h=Z>a`vZ=9nnw^2#9n4CgOaxlPI*4qD&;!5(~c>YUnkMRUKUHf+X0 z1^%hv|BJQ**Vz#NC#m3H%uxRWd-(6E;NN6R|F@+Aj{hPR{I@v4Y^?tw6;vl{|4S

Bic6?7TGRbt) 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 ZyL0!!)fKSN{||OqCnx{_ diff --git a/RationaleMCP/0033/ReadMe.md b/RationaleMCP/0033/ReadMe.md deleted file mode 100644 index 7ca8e3c72..000000000 --- a/RationaleMCP/0033/ReadMe.md +++ /dev/null @@ -1,42 +0,0 @@ -# Modelica Change Proposal MCP-0033
Annotations for Predefined Plots -Henrik Tidefelt, Otto Tronarp - -**(Under Evaluation)** - -![Example generated with the prototype implementation](example-figure.png) - -## Summary -This is not about defining plotting functions to be used in scripting environments. This is about declarative descriptions of predefined plots, stored in the model's class annotation. It makes it completely agnostic to scripting environments, but scripting environments can still take advantage of the predefined plots. For instance, the Wolfram SystemModeler environment allows users to request a predefined plot with a given title in the scripting environment, where it is then possible to apply further customization that is beyond the scope of what is reasonable to include in an MCP. - -The use of predefined plots has been proven to greatly enhance the value of example models for users of a library, since they don't need to read documentation of the examples in one place, and then find the relevant things to plot in another place. To be given a preferred plot immediately after simulation is generally a much faster way of getting an idea of what the example is all about, compared to reading the example's documentation. - -The declarative style makes it straight-forward to extract the signals that are used in plots, so that these can be used as a default selection of comparison signals for regression testing (and this is what we at Wolfram MathCore use for our own libraries). - -## Revisions -| Date | Description | -| --- | --- | -| 2019-03-27 | Henrik Tidefelt. Filling this document with initial content. | -| 2019-10-01 | Henrik Tidefelt. Updates after demonstration of prototype. | - -## Contributor License Agreement -All authors of this MCP or their organizations have signed the "Modelica Contributor License Agreement". - -## Rationale -The structure of the plot annotations is currently being developed in a [separate document](predefined-plots.md), for later incorporation as changesets for the Modelica Specification document. - -## Backwards Compatibility -By only specifying new standard annotations, this MCP is fully backwards compatible. - -## Tool Implementation -This MCP is based on an existing solution using vendor specific annoations in Wolfram SystemModeler, and Wolfram MathCore is maintaining a rich collection of predefined plots for the MSL. - -Wolfram MathCore is willing to convert these vendor specific annotations to the form standardized by this MCP, and provide the plots for free to the MSL. - -### Experience with Prototype -See Summary above. The greatly enhanced user experience was observed even though the existing collection of predefined plots does not make use of captions. The use of captions have been tested with very nice results on a smaller number of plots. - -## Required Patents -To the best of our knowledge, there are no patents that would conflict with the incorporation of this MCP. - -## References -- Additional examples are provided in a separate repository: https://github.com/otronarp/MCP033Examples/tree/master/MCP0033 diff --git a/RationaleMCP/0033/example-figure.png b/RationaleMCP/0033/example-figure.png deleted file mode 100644 index 6722b38eda6da73880c52805ff742981d5da2bd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139334 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 diff --git a/RationaleMCP/0033/predefined-plots.md b/RationaleMCP/0033/predefined-plots.md deleted file mode 100644 index 59d3d9aed..000000000 --- a/RationaleMCP/0033/predefined-plots.md +++ /dev/null @@ -1,127 +0,0 @@ -# Structure of annotations -The purpose of this document is to facilitate discussion around the actual structure and scope of standardized annotations for predefined plots. - -## Figures in the class Documentation -A class' `Documentation` annotation might look like this: - -``` -annotation( - Documentation( - figures = { - Figure(title = "Battery Voltage", identifier = "voltage", preferred = true, plots = {Plot(curves = {Curve(x = time, y = battery.p.v, legend = "Battery voltage")}, y=Axis(label = "Voltage"))}), - Figure(title = "Battery Limit Controller", identifier = "limit", caption = "...", plots = {Plot(title = "Battery Limits", curves = {Curve(x = time, y = battery.LimitController.threshold, legend = "Threshold for terminating simulation"), Curve(x = time, y = battery.LimitController.u, legend = "Limit controller input signal"), Curve(x = time, y = battery.LimitController.y, legend = "Limit controller output signal")})}), - Figure(title = "Load Current", identifier = "load", plots = {Plot(curves = {Curve(x = time, y = load.i, legend = "Load current")})}) - } - ) -) -``` - -Since the use of HTML is not supported in the predefined plots, introduction of `figure` in `Documentation` means that the suport for the `...` construct needs to be restricted to `info` and `revisions`. - -## A figure -As seen in the example above, the pseudo code type of `figures` is `Figure[:]`. Inserting some line breaks into one of the `Figure` objects, it looks like this: -``` -Figure( - title = "Battery Limit Controller", - caption = "Overshoot when using a PI-controller with anti-windup." - identifier = "limit", - plots = { - Plot( - title = "Battery Limits", - identifier = "battery", - curves = { - Curve(x = time, y = battery.LimitController.threshold, legend = "Threshold for terminating simulation"), - Curve(x = time, y = battery.LimitController.u, legend = "Limit controller input signal"), - Curve(x = time, y = battery.LimitController.y, legend = "Limit controller output signal") - } - ) - } -) -``` - -Pseudo code definition of `Figure`: -``` -record Figure - String title "Title meant for display"; - String identifier "Identifier meant for programmatic access"; - String group = "" "Name of plot group"; - Boolean preferred = false "Automatically display figure after simulation"; - Plot[:] plots "Plots"; - String caption "Figure caption"; -end Figure; -``` - -Pseudo code definition of `Plot`: -``` -record Plot - String title "Title meant for display"; - String identifier "Identifier meant for programmatic access"; - Curve[:] curves "Plot curves"; - Axis x "X axis properties"; - Axis y "Y axis properties"; -end Plot; -``` - -The `title` of a `Figure` shall be non-empty and is mandatory, as every figure needs a title for presentation in contexts such as a list of figures, and as it is generally hard for tools to automatically generate a meaningful title. On the other hand, when the `title` of a `Plot` isn't provided, the tool produces a default, but the default is allowed to be empty. Providing the empty string as `title` of a `Plot` means that no title should be shown. The plot title is not to be confused with the plot _label_ which is never empty, see below. - -The `identifier` in `Figure` and `Plot` is optional, and is intended for programmatic access. An `identifier` must be unique within the class containing the `figures` annotation, without considering whether it belongs to `Figure` or `Plot`. As an example for `Figure`, a small extension to the Modelica URI scheme would make it possible to reference the plot from the class documentation. For `Plot`, this makes it possible to reference the plot in the figure caption, which becomes useful when the `Figure` contains more than one `Plot`. - -Every `Plot` has an automatically generated _label_ which is required to be shown as soon as at least one `Plot` in the `Figure` has an `identifier`. A tool is free to choose both labeling scheme (such as _a_, _b_, …, or _i_, _ii_, …) placement in the plot, and styling in the plot itself as well as in other contexts. - -When a `Figure` defines a non-empty `group`, it is used to organize figures similar to how `group` is used in the `Dialog` annotation. However, leaving `group` at the default of an empty string does not mean that a group will be created automatically, but that the figure resides outside of any group. The `group` is both the key used for grouping, and the name of the group for diaplay purposes. - -## Plot curves -The actual data to plot is specified in the `curves` of a `Plot`: -``` -record Curve - expression x = time "X coordinate values"; - expression y "Y coordinate values"; - String legend "Legend"; -end Curve; -``` - -The mandatory `x` and `y` expressions are currently restricted to be component references refering to a scalar variable or `time`. - -When `legend` isn't provided, the tool produces a default based on `x` and/or `y`. Providing the empty string as `legend` means that the curve shall be omitted from the plot legend. - -## Axis properties -Properties may be defined for each `Plot` axis: -``` -record Axis - Real min "Axis lower bound"; - Real max "Axis upper bound"; - String unit "Unit of min and max"; - String label "Axis label"; -end Axis; -``` - -When an axis bound isn't provided, the tool computes one automatically. - -The Modelica tool is responsible for showing the unit used for values at the axis tick marks, so the axis `label` shall not be used to convey this information. - -When an axis label isn't provided, the tool produces a default label. Providing the empty string as axis label means that no label should be shown. - -## Variable replacements -In most places where text is displayed (`title`, `caption`, `legend`, `label`), the final value of a result variable can be embedded by refering to the variable as `%{inertia1.w}`. This is similar to the `Text` graphical in 18.6.5.5 _Text_,. - -Note that expansion to the final value means that expansion is not restricted to parameters and constants, so that values to be shown in a caption can be determined during simulation. - -The percent character is encoded `%%`. Neither `%class` nor `%name` is supported in this context, as this information is expected to already be easily accessible (when applicable) in tool-specific ways. (Titles making use of `%class` or `%name` would then only lead to ugly duplication of this information.) - -## Text markup in captions -In addition to variable replacements, a very restricted form of text markup is used for the `caption`. - -### Links -Links take the form `%[]()`, where the `[]` part is optional. The `` can be in either of the following forms: -- A URI, such as `https://github.com/modelica/ModelicaSpecification` or `modelica:///Modelica.Blocks`. -- A `variable:`, where `` is a component reference such as `inertia1.w`. -- A `plot:`, where `` is the identifier of a `Plot` in the current `Figure`. - -When `[]` is omitted, a Modelica tool is free to derive a default based on the ``. - -The styling of the link text and the link action is left for each Modelica tool to decide. - -For example, `%(inertia1.w)` could be displayed as the text `inertia1.w` formatted with upright monospaced font, and have a pop-up menu attached with menu items for plotting the variable, setting its start value, or investigating the equation system from which it is solved. On the other hand, `%[angular velocity](inertia1.w)` could be formatted in the same style as the surrounding text, except some non-intrusive visual clue about it being linked. - -### Paragraph break -A sequence of one or more newlines (encoded either literally or using the `\n` escape sequence) means a paragraph break. (A line break within a paragraph is not supported.) diff --git a/RationaleMCP/0035/POT_Header.png b/RationaleMCP/0035/POT_Header.png deleted file mode 100644 index 36365b907e9d955eaaaac2c3ef8c39d26b6c32ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20616 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 diff --git a/RationaleMCP/0035/Readme.md b/RationaleMCP/0035/Readme.md index 40ac16d4e..d696a93b3 100644 --- a/RationaleMCP/0035/Readme.md +++ b/RationaleMCP/0035/Readme.md @@ -1,129 +1,3 @@ -# Modelica Change Proposal MCP-0035 -# Multilingual support of Modelica -## Authors: Anett Kloß, Gerd Kurzbach, Olaf Oelsner, Thomas Beutlich +Modelica currently supports only one language for description texts. This is usually English. In order to better support users from other language areas and to make Modelica libraries more attractive and easier to understand for them, it should be possible to provide translations of the texts in any language in a standardized form, so that tools can find, read and display them to the user in his or her preferred language. The definition of the interface to the translated texts is the subject of the MCP. --- - -# Summary -Modelica currently supports only one language for description texts. This is usually English. In order to better support users from other language areas and to make Modelica libraries more attractive and easier to understand for them, it should be possible to provide translations of the texts in any language in a standardized form, so that tools can find, read and display them to the user in his or her preferred language. -The definition of the interface to the translated texts is the subject of the MCP. - -In the discussion in [#302](https://github.com/modelica/ModelicaSpecification/issues/302) it was decided to provide the translation externally of the Modelica files using the [GNU gettext](https://www.gnu.org/software/gettext/) format. The use of this format in the Modelica context is described in the MCP. - -# Revisions -| Date | Description | -| ------------ | --- | -| 2021-06-14 | Anett Kloß: Prepared document based on ticket #302 | -| 2022-01-07 | Gerd Kurzbach: add SpecificationText.md, some reformulations, discussion of design choices added | - -# Contributor License Agreement -All authors of this MCP or their organizations have signed the "Modelica Contributor License Agreement". - -# Rationale -Why should this feature be included? -* A better understanding of the libraries by users with different language background will make the libraries more attractive. -* Support cases might occur less often, due to better understanding of the description. -* A new translation is additionally a review of the current state and can result in a better quality of both language versions. -* Users can even write their own translation, when having a template *.pot-File for the library. - -The use case for the proposal is the MSL 4.0. -* POT-File of current MSL 4.0 library --> this translation template is provided and filled for the Hydraulics Pump. -(*add pictures*) - -Proposed changes to the specification are described in SpecificationText.md. It consists of a new section **13.6 Multilingual Descriptions** which contains: -* Where the translation files to be stored -* How does a GNU gettext translation template for a library look like and which kind of descriptive texts shall be included? -* Which strings should be translated: - -The precise updated text of the specification is part of this branch/pull-request: Yes. - -# Backwards Compatibility -The proposal is backwards compatible. All multilingual text changes can be applied without effect at existing Modelica code. -After the introduction of translation files for libraries, this files need to be adjusted with every library change which adds new commented parts or changes existing comments. - -# Tool Implementation - -## Experience with Prototype -### Implementation steps -#### 1. Read out a translation template file -Create at first a translation template file \*.pot for a Modelica library. Means a (tool dependent) readout of all needed text strings into a *LibraryName*.pot-File. It contains: -- a header which concludes all necessary information -![Header of a *.pot file](POT_Header.png) - -- for all original strings entries with following structure: -``` - msgctxt "Hydraulics.Basics.TankOverflow" - msgid "Volume Flow Port A" - msgstr "" -``` - -Where *msgctxt* contains the name of the Modelica Class and *msgid* contains the textstring which is situated in this name space and shall be translated. Please regard that if a *msgid* string (in this example "Volume Flow Port A") is given more than once in a namespace, all occurrences are translated with the same translation! - -It shall be mandatory to use for *msgctxt* the full name of a class: -- so a specific translation depending on the content in this namespace is possible, as every textstring may differ depending on the context, -- using the class makes it easier for the Modelica tool to copy and re-arrange models and packages without loosing the already existing language information. - -The following Modelica constructs shall be read out / translated: -* syntactical comments -* strings in following annotations: - * Text.string, Text.textString - * missingInnerMessage, obsolete, unassignedMessage - * Dialog.[group|tab] - * Dialog.[load|save]Selector.[caption|filter] - * Documentation.[info|revisions] - * Figure.title, Plot.title, Curve.legend - -Having read out the file it just needs to be changed, if the library is changed (e.g. commented parts are added or changed or when having changed the Modelica name of the text strings containing element). - -#### 2. Translation of the template file into a language file -Starting from the template file create a \*.po file for each needed language (e.g. german: *LibraryName*.de.po-File). - -Edit the *msgstr* with the translation in the wanted language (here for german: `` Hydraulics.de.po``) : -``` - msgctxt "Hydraulics.Basics.TankOverflow" - msgid "Volume Flow Port A" - msgstr "Volumenstrom an Anschluss A" -``` - -Hereby no error shall occur if there is one comment not having a translation. In this case the not translated text (the content of *msgid*) shall be used. -Again the file needs to be adjusted if there are changes at the library (e.g. commented parts are added or changed or when having changed the Modelica name of the text strings containing element). - ---- -**Note:** One may use the tool POedit for the translation, as it can be coupled with commercial translation tools for a faster translation. - ---- -#### 3. File storage -Both files need to be situated in the language directory ``Resources\Language`` of the top-level library e.g.: - ``C:\...\\\Resources\Language`` -#### 4. Read in the translation -The tool dependent language setting enables the reading of the current needed *LibraryName*.*Language*.po-file. - -### Tool implementation effort -1. Readout of any comment / annotation without loosing content and with handling of exceptions, e.g. ``/"`` in comments. This can e.g. be created by the command: -``xgettext --language=EmacsLisp --sort-output --extract-all --from-code=UTF-8 --output=TranslationTest.pot TranslationTest.mo`` -Certainly, the string extraction based on the EmacsLisp language can only be considered as proof of concept, since there is no Modelica language available in xgettext. It is recommended to create the POT file directly from the Modelica tool. - -2. When reading in a library read corresponding the *LibraryName*.*Language*.po-file into an internal table and lookup the translated strings just before presenting them to the user. - -## Discussion of the "One File per Library" design -There is a design choice how to structure the files for translation information either -* one file per library, or -* one file per class. - -In this proposal the design "One file per library" is chosen, because it simplifies the handling of the translation data, the translation process and the generation of the template. The information of the header need to be stored only once. - -If after finishing a library one wants to translate them into another language, he can use the preferred tool and feed the file as a whole into it. After translating the strings, he can then save the file them and is done. - -One file per class, possibly stored in a directory structure that corresponds to the class hierarchy, result in a large number of files, with each file having to be translated separately. While this has the advantage of allowing parallel translations, it can also lead to undesirably different translations of the same texts, as different people translate things differently. - -Also a Modelica tool only has to take care of one file per library. Normally, for performance reasons, the information from the files is stored internally in one big table anyway, so there is no need to split the information. - -Multiple files have an advantage when renaming or moving classes, then the files only need to be renamed. The keyword msgctxt can then be omitted. In the case of only one file this can be realized by a search and replace of the msgctext information, which is not too complicated. The use case of moving classes in a finished library does not occur so often, because then also the models which use them must be adapted. - - -# Required Patents -None. -# References -[GNU gettext](https://www.gnu.org/software/gettext/) - -[Poedit](https://poedit.net/) - useful editor +In the discussion in [#302](https://github.com/modelica/ModelicaSpecification/issues/302) it was decided to provide the translation externally the Modelica files using the GNU gettext format. The exact use of this format in the Modelica context is described in the MCP. diff --git a/RationaleMCP/0035/SpecificationText.md b/RationaleMCP/0035/SpecificationText.md deleted file mode 100644 index 314e07ad7..000000000 --- a/RationaleMCP/0035/SpecificationText.md +++ /dev/null @@ -1,65 +0,0 @@ -# 13.6 Multilingual Descriptions - -[*Descriptive texts in a model or library are usually formulated in English. To support users who are not so familiar with this, a Modelica tool can support the translation of these texts into any language. This should be done using external files, so that no modification of the actual Modelica text is required.*] - -The files to support translation must be provided by the developer of the library. They must be stored in a subdirectory of the Resources directory of the library with the name `Language`. - -Two kind of files have to be provided: -* a template file `.pot`. -It contains all necessary information to translate all descriptions, but no translations. The pattern `` denotes the toplevel class name of the library. -* one file for each supported language with the name `..po`. This file is a copy of the associated template file, but extended with the translations in the specified language. The pattern `` stands for the ISO 639 language code, e.g. de or en. - -The files consist of a header and a body. All text strings are in double quotes and encoded with UTF-8 characters. Comments start with an `#` and are continued until the end of line. Spaces outside strings are ignored and used as separators. The detailed format of these files is described in [GNU gettext](https://www.gnu.org/software/gettext/manual/gettext.pdf). - -The header looks like this: -``` -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-15 10:52+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -``` -All general terms in the header should be replaced by specific information. - -In the body, directly following the header, for each descriptive text there is an entry of the form -``` -#: : -msgctxt "" -msgid "" -msgstr "" -``` -Only the keywords `msgctxt`, `msgid` and `msgstr` are used. - -At first there can be an optional comment describing the location (file name and line number) of the text to translate. Multiple occurences of the same string can be listed here, separated by space. - -Then, the `` behind the keyword `msgctxt` is the full name of the Modelica class (e.g. `Modelica.Blocks.Math.Sin` ) where the text appears in. Short class definitions do not appear here. Texts in such classes belong to the enclosing full class definition. - -After the `msgid` keyword the text string which shall be translated follows. [*Please regard that if a `msgid` string is given more than once in the same context, all occurrences are translated with the same (last) translation!*] - -The keyword `msgstr` is followed by the translation of `msgid`. In the template file this string is empty by definition. If this is empty in a language specific file the contents of `msgid` may be used instead. - -The texts in following Modelica constructs should be translated: -* syntactical comments -* strings in following annotations: - * Text.string, Text.textString - * missingInnerMessage, obsolete, unassignedMessage - * Dialog.[group|tab] - * Dialog.[load|save]Selector.[caption|filter] - * Documentation.[info|revisions] - * Figure.title, Plot.title, Curve.legend - -[*To support the translation of that strings a number of free and commercial tools exist in context of GNU gettext. -A Modelica tool should provide a function to create the initial template file from an existing Modelica library.*] \ No newline at end of file diff --git a/RationaleMCP/NewRelease.md b/RationaleMCP/NewRelease.md deleted file mode 100644 index 142728586..000000000 --- a/RationaleMCP/NewRelease.md +++ /dev/null @@ -1,5 +0,0 @@ -After a new release is accepted the following steps are currently suggested. - -1. Update https://github.com/modelica/ModelicaSpecification/blob/master/README.md with new date. This should automatically update specification.modelica.org -1. Update modelica.org/documents and modelica.org/modelicalanguage -1. Announce in Modelica-design mailing list and similar channels. diff --git a/RationaleMCP/ReadMe.md b/RationaleMCP/ReadMe.md index 53530533f..63c0162a7 100644 --- a/RationaleMCP/ReadMe.md +++ b/RationaleMCP/ReadMe.md @@ -1,6 +1,7 @@ + # MCP Rationale This directory should contain the rationale behind Modelica Change Proposals, MCPs, -(and possibly rationale behind other decisions as well). +(and possibly rationale behind other decisions as well). Each MCP should use a separate sub-directory based on the MCP-number. @@ -11,53 +12,44 @@ A template for the rationale of the MCP is found as either [Markdown](MCPTemplat ## Workflow The workflow for all changes (including MCPs), and releases is described as part of the [Development Process](DevelopmentProcess.md). -After a release is accepted, follow the [check-list for a new release](NewRelease.md). New MCP should be added to the following list - on the main branch to keep track of them, but the rest of the development on a branch/pull-request before being accepted. ## List of existing MCPs - -|Status|Number|Name|Link| -|------|------|----|----| -|Active|0039|Licensing and encryption|([MCP/0039](https://github.com/modelica/ModelicaSpecification/tree/MCP/0039/RationaleMCP/0039))| -|Active|0038|Initialization of Clocked Partitions|([MCP/0038](https://github.com/modelica/ModelicaSpecification/tree/MCP/0038/RationaleMCP/0038))| -|Active|0037|Generalized Modelica URIs|([MCP/0037](https://github.com/modelica/ModelicaSpecification/tree/MCP/0037/RationaleMCP/0037))| -|Active|0036|Setting states|([MCP/0036](https://github.com/modelica/ModelicaSpecification/tree/MCP/0036/RationaleMCP/0036))| -|Active|0035|Multilingual support of Modelica|([MCP/0035](https://github.com/modelica/ModelicaSpecification/tree/MCP/0035/RationaleMCP/0035))| -|Active|0034|Ternary|([MCP/0034](https://github.com/modelica/ModelicaSpecification/tree/MCP/0034/RationaleMCP/0034))| -|Added in [3.5](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.5)|0033|Annotations for Predefined Plots|([MCP/0033](https://github.com/modelica/ModelicaSpecification/tree/MCP/0033/RationaleMCP/0033))| -|Active|0032|Selective Model Extension|([MCP/0032](https://github.com/modelica/ModelicaSpecification/tree/MCP/0032/RationaleMCP/0032))| -|Active|0031|Flat Modelica and MLS modularization|([MCP/0031](https://github.com/modelica/ModelicaSpecification/tree/MCP/0031/RationaleMCP/0031))| -|On hold|0030|IsClocked Operator|([#2238](https://github.com/modelica/ModelicaSpecification/issues/2238))| -|Active|0029|License Export|([MCP/0029](https://github.com/modelica/ModelicaSpecification/tree/MCP/0029/RationaleMCP/0029))| -|Added in [3.4](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.4)|0028|Record Derivatives mixing Real and non-Real|([#2137](https://github.com/modelica/ModelicaSpecification/issues/2137))| -|Active|0027|Units of Literal Constants|([#2127](https://github.com/modelica/ModelicaSpecification/issues/2127))| -|Added in [3.4](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.4)|0026|Arc-only Ellipse|([#2045](https://github.com/modelica/ModelicaSpecification/issues/2045))| -|On hold|0025|Functions with input output|([#2012](https://github.com/modelica/ModelicaSpecification/issues/2012))| -|Added in [3.4](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.4)|0024|Initialization of Clocked States|([#2007](https://github.com/modelica/ModelicaSpecification/issues/2007))| -|Added in [3.4](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.4)|0023|Model to Record|([#1953](https://github.com/modelica/ModelicaSpecification/issues/1953))| -|Added in [3.4](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.4)|0022|Integer to Enumeration|([#1842](https://github.com/modelica/ModelicaSpecification/issues/1842))| -|Active|0021|Component iterators|([MCP/0021](https://github.com/modelica/ModelicaSpecification/tree/MCP/0021/RationaleMCP/0021))| -|Added in [3.4](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.4)|0020|Model as Arguments to Functions|| -|Added in [3.4](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.4)|0019|Improvement of Flattening Description|([#1829](https://github.com/modelica/ModelicaSpecification/issues/1829))| -|Added for [3.5](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.5)|0018|Change specification format|| -|Active|0017|Portable import of FMUs|| -|Active|0016|Semantic Versions|| -|Active|0015|Language Version Header|([MCP/0015](https://github.com/modelica/ModelicaSpecification/tree/MCP/0015/RationaleMCP/0015))| -|Added in [3.4](https://github.com/modelica/ModelicaSpecification/releases/tag/v3.4)|0014|Conversion|([#1622](https://github.com/modelica/ModelicaSpecification/issues/1622))| -|On hold|0013|Introducing polymorphic functions|| -|Active|0012|Calling blocks as functions|([MCP/0012](https://github.com/modelica/ModelicaSpecification/tree/MCP/0012/RationaleMCP/0012))| -|On hold|0011|Allow user-defined functions in reductions|| -|On hold|0010|Adding guards to reductions|| -|Active|0009|Undefined modification|([MCP/0009](https://github.com/modelica/ModelicaSpecification/tree/MCP/0009/RationaleMCP/0009))| -|On hold|0008|Custom annotations|| -|On hold|0007|Match expressions|| -|On hold|0006|Atomic blocks|| -|On hold|0005|Equivalent parameters|| -|On hold|0004|Handling uncertainties (need to consider MCP0008)|| -|On hold|0003|User defined annotations (superseded by MCP0008)|| -|On hold|0002|Improved class generation|| -|On hold|0001|Improved parametrization|| - -Note that the documents for older issues (especially the ones on hold) have not been transferred to GitHub, but are found on an older svn-server. +- MCP0036 Setting states ([MCP/0036]) (https://github.com/modelica/ModelicaSpecification/tree/MCP/0036/RationaleMCP/0036)) +- MCP0035 Multilingual support of Modelica([MCP/0035](https://github.com/modelica/ModelicaSpecification/tree/MCP/0035/RationaleMCP/0035)) +- MCP0034 Ternary ([MCP/0034](https://github.com/modelica/ModelicaSpecification/tree/MCP/0034/RationaleMCP/0034)) +- MCP0033 Annotations for Predefined Plots ([MCP/0033](https://github.com/modelica/ModelicaSpecification/tree/MCP/0033/RationaleMCP/0033)) +- MCP0032 Selective Model Extension ([MCP/0032](https://github.com/modelica/ModelicaSpecification/tree/MCP/0032/RationaleMCP/0032)) +- MCP0031 Flat Modelica and MLS modularization ([MCP/0031](https://github.com/modelica/ModelicaSpecification/tree/MCP/0031/RationaleMCP/0031)) +- MCP0030 IsClocked Operator ([#2238](https://github.com/modelica/ModelicaSpecification/issues/2238)) +- MCP0029 License Export ([#2217](https://github.com/modelica/ModelicaSpecification/issues/2217)) +- ~~MCP0028~~ Record Derivatives mixing Real and non-Real (added in Modelica 3.4) ([#2137](https://github.com/modelica/ModelicaSpecification/issues/2137)) +- MCP0027 Units of Literal Constants (active) ([#2127](https://github.com/modelica/ModelicaSpecification/issues/2127)) +- ~~MCP0026~~ Arc-only Ellipse (added in Modelica 3.4) ([#2045](https://github.com/modelica/ModelicaSpecification/issues/2045)) +- MCP0025 Functions with input output +- ~~MCP0024~~ Initialization of Clocked States (added in Modelica 3.4) ([#2007](https://github.com/modelica/ModelicaSpecification/issues/2007)) +- ~~MCP0023~~ Model to Record (added in Modelica 3.4) ([#1953](https://github.com/modelica/ModelicaSpecification/issues/1953)) +- ~~MCP0022~~ Integer to Enumeration (added in Modelica 3.4) ([#1842](https://github.com/modelica/ModelicaSpecification/issues/1842)) +- MCP0021 Component iterators ([MCP/0021](https://github.com/modelica/ModelicaSpecification/tree/MCP/0021/RationaleMCP/0021)) +- ~~MCP0020~~ Model as Arguments to Functions (added in Modelica 3.4) +- ~~MCP0019~~ Improvement of Flattening Description (added in Modelica 3.4) ([#1829](https://github.com/modelica/ModelicaSpecification/issues/1829)) +- ~~MCP0018~~ Change specification format (done post Modelica 3.4) +- MCP0017 Portable import of FMUs +- MCP0016 Semantic Versions +- MCP0015 Language Version Header ([MCP/0015](https://github.com/modelica/ModelicaSpecification/tree/MCP/0015/RationaleMCP/0015)) +- ~~MCP0014~~ Conversion (added in Modelica 3.4) ([#1622](https://github.com/modelica/ModelicaSpecification/issues/1622)) +- MCP0013 Introducing polymorphic functions +- MCP0012 Calling blocks as functions +- MCP0011 Allow user-defined functions in reductions +- MCP0010 Adding guards to reductions +- MCP0009 Undefined modification +- MCP0008 Custom annotations +- MCP0007 Match expressions +- MCP0006 Atomic blocks +- MCP0005 Equivalent parameters +- MCP0004 Handling uncertainties (need to consider MCP0008) +- ~~MCP0003~~ User defined annotations (superseded by MCP0008) +- MCP0002 Improved class generation +- MCP0001 Improved parametrization diff --git a/chapters/abstract.tex b/chapters/abstract.tex index be9e214d0..829b07a0a 100644 --- a/chapters/abstract.tex +++ b/chapters/abstract.tex @@ -1,19 +1,53 @@ -% Can't use the 'abstract' environment as long as LaTeXML puts the abstract before the title page, see LaTeXML issue: -% - https://github.com/brucemiller/LaTeXML/issues/1395 -\begin{center} -\large\bfseries\sffamily -\abstractname -\end{center} +% Setting pageanhor false for these unnumbered pages +% Changed back after abstract +% The downside is that you cannot go to them in acrobat +% This is from https://tex.stackexchange.com/questions/18924/pdftex-warning-ext4-destination-with-the-same-identifier-nam-epage-1-has +% The accepted solution did not seem to work +\hypersetup{pageanchor=false,bookmarksdepth=2,destlabel=true,bookmarksopenlevel=0} +\begin{abstract} + \ifpdf + \else + ~\bigskip + \begin{center} + \includegraphics[width=8cm]{Modelica_Language} + \end{center} + \bigskip + \fi -This document defines the Modelica\footnote{% -\firstuse{Modelica}\index{Modelica} is a registered trademark of the Modelica Association. -} -language, version~\mlsversion, which is developed by the Modelica Association, a non-profit organization with seat in Linköping, Sweden. -Modelica is a freely available, object-oriented language for modeling of large, complex, and heterogeneous systems. -It is suited for multi-domain modeling, for example, mechatronic models in robotics, automotive and aerospace applications involving mechanical, electrical, hydraulic control and state machine subsystems, process oriented applications and generation and distribution of electric power. -Models in Modelica are mathematically described by differential, algebraic and discrete equations. -No particular variable needs to be solved for manually. -A Modelica tool will have enough information to decide that automatically. -Modelica is designed such that available, specialized algorithms can be utilized to enable efficient handling of large models having more than one hundred thousand equations. -Modelica is suited and used for hardware-in-the-loop simulations and for embedded control systems. -More information is available at \url{https://www.modelica.org}. +This document defines the Modelica\footnote{Modelica is a registered + trademark of the Modelica Association} language, version 3.5, which is +developed by the Modelica Association, a non-profit organization with +seat in Linköping, Sweden. Modelica is a freely available, +object-oriented language for modeling of large, complex, and +heterogeneous systems. It is suited for multi-domain modeling, for +example, mechatronic models in robotics, automotive and aerospace +applications involving mechanical, electrical, hydraulic control and +state machine subsystems, process oriented applications and generation +and distribution of electric power. Models in Modelica are +mathematically described by differential, algebraic and discrete +equations. No particular variable needs to be solved for manually. A +Modelica tool will have enough information to decide that automatically. +Modelica is designed such that available, specialized algorithms can be +utilized to enable efficient handling of large models having more than +one hundred thousand equations. Modelica is suited and used for +hardware-in-the-loop simulations and for embedded control systems. More +information is available at +\url{https://www.modelica.org} +\end{abstract} + +\hypersetup{pageanchor=true} +Copyright \textcopyright{} 1998-2020, Modelica Association (\url{https://www.modelica.org}) + +All rights reserved. Reproduction or use of editorial or pictorial +content is permitted, i.e., this document can be freely distributed +especially electronically, provided the copyright notice and these +conditions are retained. No patent liability is assumed with respect to +the use of information contained herein. While every precaution has been +taken in the preparation of this document no responsibility for errors +or omissions is assumed. + +The contributors to this and to previous versions of this document are +listed in \autoref{modelica-revision-history}. All contributors worked voluntarily and without +compensation. + +\tableofcontents diff --git a/chapters/annotations.tex b/chapters/annotations.tex index e5706cff8..996aab7da 100644 --- a/chapters/annotations.tex +++ b/chapters/annotations.tex @@ -1,65 +1,69 @@ -\chapter{Annotations}\label{annotations} -Annotations are intended for storing extra information about a model, such as graphics, documentation or versioning, etc. -A Modelica tool is free to define and use other annotations, in addition to those defined here, according to \cref{vendor-specific-annotations}. - -Annotations are optional in the Modelica grammar, and when present, indicated using the \lstinline!annotation!\indexinline{annotation} keyword, see \lstinline[language=grammar]!annotation-clause! in the grammar (\cref{expressions1}). -The structure of the annotation content is the same as a class modification (\lstinline[language=grammar]!class-modification! in the grammar). -(For replaceable class declarations with a \lstinline[language=grammar]!constraining-clause! also refer to \cref{constraining-clause-annotations}.) -The specification in this document defines the semantic meaning if a tool implements any of these annotations. - -\section{Vendor-Specific Annotations}\label{vendor-specific-annotations} - -A vendor may -- anywhere inside an annotation -- add specific, possibly undocumented, annotations which are not intended to be interpreted by other tools. -The only requirement is that any tool shall save files with all vendor-specific annotations (and all annotations from this chapter) intact. -Two variants of vendor-specific annotations\index{vendor-specific annotation} exist; one simple and one hierarchical. -Double underscore concatenated with a vendor name as initial characters of the identifier are used to identify vendor-specific annotations. +\chapter{Annotations}\doublelabel{annotations} + +Annotations are intended for storing extra information about a model, +such as graphics, documentation or versioning, etc. A Modelica tool is +free to define and use other annotations, in addition to those defined +here, according to \autoref{vendor-specific-annotations}. The only requirement is that any tool +shall save files with all annotations from this chapter and all +vendor-specific annotations intact. To ensure this, annotations must be +represented with constructs according to the Modelica grammar (for +replaceable class declarations with a constraining-clause also refer to +\autoref{constraining-clause-annotations}). The specification in this document defines the +semantic meaning if a tool implements any of these annotations. + +\section{Vendor-Specific Annotations}\doublelabel{vendor-specific-annotations} + +A vendor may -- anywhere inside an annotation -- add specific, possibly +undocumented, annotations which are not intended to be interpreted by +other tools. Two variants of vendor-specific annotations exist; one +simple and one hierarchical. Double underscore concatenated with a +vendor name as initial characters of the identifier are used to identify +vendor-specific annotations. \begin{example} \begin{lstlisting}[language=modelica] -annotation( - Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}), - graphics = {__NameOfVendor(Circle(center = {0, 0}, radius = 10))})); +annotation ( + Icon(coordinateSystem(extent={{-100,-100}, {100,100}}), + graphics={__NameOfVendor(Circle(center={0,0}, radius=10))}) ); \end{lstlisting} This introduces a new graphical primitive \lstinline!Circle! using the hierarchical variant of vendor-specific annotations. \begin{lstlisting}[language=modelica] -annotation( - Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}), - graphics = {Rectangle(extent = {{-5, -5}, {7, 7}}, - __NameOfVendor_shadow = 2)})); +annotation ( + Icon(coordinateSystem(extent={{-100,-100}, {100,100}}), + graphics={Rectangle(extent={{-5,-5},{7,7}}, __NameOfVendor_shadow=2)}) ); \end{lstlisting} This introduces a new attribute \lstinline!__NameOfVendor_shadow! for the \lstinline!Rectangle! primitive using the simple variant of vendor-specific annotations. \end{example} -\section{Annotations for Documentation}\label{annotations-for-documentation} +\section{Annotations for Documentation}\doublelabel{annotations-for-documentation} -The \fmtannotationindex{Documentation} annotation has the following contents, where the \lstinline!info! and \lstinline!revisions! annotations are described in \cref{annotation-info-revisions}, and the \lstinline!figures! annotation is described in \cref{annotations-for-figures}: +\begin{lstlisting}[language=grammar] +documentation-annotation: + annotation "(" Documentation "(" "info" "=" STRING ["," "revisions" "=" STRING ] ")" ")" +\end{lstlisting} +The \lstinline!Documentation! annotation can contain the \lstinline!info! annotation +giving a textual description, the \lstinline!revisions! annotation giving a list +of revisions and other annotations defined by a tool. +How the tool interprets the information in \lstinline!Documentation! is +unspecified. Within a string of the \lstinline!Documentation! annotation, the +tags \lstinline!! and \lstinline!! or +\lstinline!! and \lstinline!! define +optionally begin and end of content that is HTML encoded. For external +links see \autoref{external-resources}. Links to Modelica classes may be defined with +the HTML link command using scheme \lstinline!Modelica! +(using its lower case form in the URI, see \autoref{external-resources}), e.g., \begin{lstlisting}[language=modelica] -record Documentation - String info = "" "Description of the class"; - String revisions = "" "Revision history"; - Figure[:] figures = {}; "Simulation result figures"; -end Documentation; +MultiBody.Tutorial \end{lstlisting} -How the tool interprets the information in \lstinline!Documentation! is unspecified. - -\subsection{Class Description and Revision History}\label{annotation-info-revisions} - -Inside the \lstinline!Documentation! annotation, the \lstinline!info! annotation gives a textual description of the class, and the \lstinline!revisions! annotation gives a revision history. - \begin{nonnormative} The \lstinline!revisions! documentation may be omitted in printed documentation. \end{nonnormative} -If the string starts with the tag \lstinline!! or \lstinline!! the entire string is HTML encoded (and is assumed to end with \lstinline!! or \lstinline!! and shall be rendered as HTML even if the end-tags are missing), otherwise the entire string is rendered as is. The HTML encoded content may contain links. For external links, see \cref{external-resources}. Links to Modelica classes may be defined with the HTML link command using scheme \lstinline!Modelica! (using its lower case form in the URI, see \cref{external-resources}), e.g., -\begin{lstlisting}[language=modelica] -MultiBody.Tutorial -\end{lstlisting} - Together with scheme \lstinline!Modelica! the (URI) fragment specifiers \lstinline!#diagram!, \lstinline!#info!, \lstinline!#text!, \lstinline!#icon! may be used to reference different layers. User-defined fragment specifiers (anchors) may also be used, and they may be renamed @@ -68,386 +72,228 @@ \subsection{Class Description and Revision History}\label{annotation-info-revisi \begin{lstlisting}[language=modelica] Revolute \end{lstlisting} - -\subsection{Annotations for Figures}\label{annotations-for-figures} - -Inside the \lstinline!Documentation! annotation, each element of the \lstinline!figures! annotation array has the following content: -\begin{lstlisting}[language=modelica] -record Figure - String title = "" "Title meant for display"; - String identifier = "" "Identifier meant for programmatic access"; - String group = "" "Name of plot group"; - Boolean preferred = false "Automatically display figure after simulation"; - Plot[:] plots "Plots"; - String caption = "" "Figure caption"; -end Figure; +\begin{lstlisting}[language=grammar] +preferred-view-annotation: + annotation "(" preferredView "=" ("info" | "diagram" | "text") ")" \end{lstlisting} -A \fmtannotationindex{Figure} is a graphical container that can contain several \lstinline!plots! described by \fmtannotationindex{Plot} annotations: -\begin{lstlisting}[language=modelica] -record Plot - String title "Title meant for display"; - String identifier = "" "Identifier meant for programmatic access"; - Curve[:] curves "Plot curves"; - Axis x "X axis properties"; - Axis y "Y axis properties"; -end Plot; +The \lstinline!preferredView! annotation defines the default view when selecting the +class. \lstinline!info! means info layer, i.e., the documentation of the class, +\lstinline!diagram! means diagram layer and \lstinline!text! means the Modelica text layer. +\begin{lstlisting}[language=grammar] +documentation-class-annotation: + annotation "(" DocumentationClass "=" true ")" \end{lstlisting} -A \lstinline!Plot! can contain several \lstinline!curves!, see \cref{plot-curves}, that all share a common \lstinline!x! and \lstinline!y! axis with properties described in \cref{axis-properties}. - -Both \lstinline!Figure! and \lstinline!Plot! can have an optional title. When -the \lstinline!Figure! \lstinline!title! is the empty string (the default), the -tool must produce a non-empty title based on the figure content. On the other -hand, the \lstinline!Plot! \lstinline!title! has a tool-dependent default, but -the default may be the empty string. When the \lstinline!Plot! \lstinline!title! is the empty string, no -title should be shown. The plot title is not to be confused with the plot -\emph{label} which is never empty, see below. Variable replacements, as -described in \cref{variable-replacements}, can be used in the -\lstinline!title! of \lstinline!Figure! and \lstinline!Plot!. - -The \lstinline!identifier! in \lstinline!Figure! and \lstinline!Plot! is a \lstinline!String! identifier, and is intended to identify the \lstinline!Figure! and \lstinline!Plot! for programmatic access. -The \lstinline!figures! annotation is inherited in the sense that each class has a collection of figures comprised by the contents of the \lstinline!figures! annotation in the class itself, as well as the \lstinline!figures! annotations from any base classes. -A \lstinline!Figure! must be uniquely identified by its \lstinline!identifier! and a class having it in its collection. -This means that a \lstinline!Figure! \lstinline!identifier! must be unique among all \lstinline!Figure! annotations within the same \lstinline!figures! annotation as well as among all \lstinline!figures! annotations from inherited classes. -A \lstinline!Plot! \lstinline!identifier! on the other hand is only required to be unique among the \lstinline!plots! in the the same \lstinline!Figure! annotation. -If an \lstinline!identifier! is an empty string it cannot be used for programmatic access and is exempt from the uniqueness requirements. +Only allowed as class annotation on any kind of class and implies that +this class and all classes within it are treated as having the +annotation \lstinline!preferredView="info"!. If the annotation \lstinline!preferredView! is +explicitly set for a class, it has precedence over a \lstinline!DocumentationClass! +annotation. \begin{nonnormative} -For \lstinline!Figure!, this makes it possible to reference the plot from a -tool-specific scripting environment. For \lstinline!Plot!, this makes it -possible to reference the plot in the figure caption, which becomes useful when -the \lstinline!Figure! contains more than one \lstinline!Plot!. +A tool may display such classes in special ways. For example, the description texts of the classes might be displayed instead +of the class names, and if no icon is defined, a special information default icon may be displayed in the package browser. \end{nonnormative} -% henrikt-ma 2020-06: Once there is Modelica URI support for referring to a figure in the collection of a class, it will be easier to explain -% the following statement. -Even though a \lstinline!Figure! annotation can be shared through inheritance between classes in a class hierarchy, note that each simulated class provides -its own data to be displayed in the figure. - -Every \lstinline!Plot! has an automatically generated \emph{label} which is -required to be shown as soon as at least one \lstinline!Plot! in the -\lstinline!Figure! has an \lstinline!identifier!. A tool is free to choose both -labeling scheme (such as \emph{a}, \emph{b}, \dots, or \emph{i}, \emph{ii}, \dots), placement in the plot, -and styling in the plot itself as well as in other contexts. - -When a \lstinline!Figure! defines a non-empty \lstinline!group!, it is used to -organize figures similar to how \lstinline!group! is used in the -\lstinline!Dialog! annotation (see \cref{annotations-for-the-graphical-user-interface}). However, leaving \lstinline!group! at -the default of an empty string does not mean that a group will be created -automatically, but that the figure resides outside of any group. The -\lstinline!group! is both the key used for grouping, and the name of the group -for display purposes. - -The \lstinline!preferred! attribute of \lstinline!Figure! indicates whether the figure should be given preference when automatically determining which figures to show, -and a class may define any number of \lstinline!preferred! figures. For example, a tool might choose to automatically show all preferred figures when the class is simulated. - -The \lstinline!caption! attribute of \lstinline!Figure! can use the restricted -form of text markup described in \cref{text-markup-in-captions} as well as -the variable replacements described in \cref{variable-replacements}. - -\subsubsection{Axis Properties}\label{axis-properties} +\section{Annotations for Code Generation}\doublelabel{annotations-for-code-generation} +\begin{lstlisting}[language=grammar] +code-annotation: + annotation"(" codeGenerationFlag "=" ( false | true ) ")" -Properties may be defined for each \lstinline!Plot! axis\annotationindex{Axis}: -\begin{lstlisting}[language=modelica] -record Axis - Real min "Axis lower bound, in 'unit'"; - Real max "Axis upper bound, in 'unit'"; - String unit = "" "Unit of axis tick labels"; - String label "Axis label"; -end Axis; +codeGenerationFlag : + "Evaluate" | "HideResult" | "Inline" | "LateInline" | "GenerateEvents" \end{lstlisting} - -When an axis bound is not provided, the tool computes one automatically. - -An empty \lstinline!unit! means that the axis is unitless, and each expression plotted against it may use its own unit determined by the tool. The tool is responsible for conveying the information -about choice of unit for the different variables, for instance by attaching this information to curve legends. - -The Modelica tool is responsible for showing that values at the axis tick marks are expressed in \lstinline!unit!, so the axis \lstinline!label! shall not contain this information. +These annotations can influence the code generation. The details are +defined in the next table: +\begin{longtable}[]{|p{4.2cm}|p{10cm}|} +\hline \endhead +\lstinline!Evaluate!& +The annotation Evaluate can occur in the component declaration, its type +declaration, or a base-class of the type-declaration. In the case of +multiple conflicting annotations it is handled similarly to modifiers +(e.g., an Evaluate-annotation on the component declaration takes +precedence). The annotation Evaluate only has effect for a component +declared with the prefix \lstinline!parameter!. + +If \lstinline!Evaluate = true!, the model developer proposes to utilize the value +for the symbolic processing. In that case, it is not possible to change +the parameter value after symbolic pre-processing. + +If \lstinline!Evaluate = false!, the model developer proposes to not utilize the +value of the corresponding parameter for the symbolic processing. \begin{nonnormative} -When \lstinline!unit! is empty, and axis bounds are to be determined automatically, a natural choice of unit could be the variable's \lstinline!displayUnit!. When axis bounds are specified by the -user, on the other hand, a tool may choose a unit for the variable such that the range of the variable values (expressed in the chosen unit) fit nicely with the range of the unitless axis. +\lstinline!Evaluate! is for example used for axis of rotation parameters in +the \lstinline!Modelica.Mechanics.MultiBody! library in order to improve the +efficiency of the generated code. \end{nonnormative} +\\ \hline +\lstinline!HideResult! & +\lstinline!HideResult = true! defines that the model developer proposes to not show +the simulator results of the corresponding component. -If a tool does not recognize the \lstinline!unit!, it is recommended to issue a warning and treat the \lstinline!unit! as if it was empty, as well as ignore any setting for \lstinline!min! and \lstinline!max!. - -When \lstinline!label! is not provided, the tool produces a default label. -Providing the empty string as \lstinline!label! means that no label should be shown. -Variable replacements, as described in \cref{variable-replacements}, can be used in \lstinline!label!. -The Modelica tool is responsible for showing the unit used for values at the axis tick marks, so the axis \lstinline!label! shall not contain the unit. - -\subsubsection{Plot Curves}\label{plot-curves} - -The actual data to plot is specified in the \lstinline!curves!\annotationindex{Curve} of a \lstinline!Plot!: -\begin{lstlisting}[language=modelica] -record Curve - expression x = time "X coordinate values"; - expression y "Y coordinate values"; - String legend "Legend"; -end Curve; -\end{lstlisting} - -The mandatory \lstinline!x! and \lstinline!y! expressions are restricted to be component references referring to a scalar variable or \lstinline!time!. -It is an error if \lstinline!x! or \lstinline!y! does not designate a scalar variable. -When the \lstinline!unit! of an \lstinline!Axis! is non-empty, it is an error if the unit of the corresponding \lstinline!x! or \lstinline!y! expression (i.e., a variable's \lstinline!unit!, or second for \lstinline!time!) is incompatible with the axis unit. - -When \lstinline!legend! is not provided, the tool produces a default based on \lstinline!x! and/or \lstinline!y!. -Providing the empty string as \lstinline!legend! means that the curve shall be omitted from the plot legend. -Variable replacements, as described in \cref{variable-replacements}, can be used in \lstinline!legend!. - -\subsubsection{Escape sequences}\label{text-markup-escape-sequences} - -In an attribute inside a figure where the variable replacements of \cref{variable-replacements} or the text markup of \cref{text-markup-in-captions} can be used, the following use of \firstuse{text markup escape sequences}\index{text markup escape sequence}\index{escape sequence!text markup} applies. -These escape sequences are applied after the application of other markup, and is not applied at all inside some of the other markup, see details for the respective markup. - -The percent character `\%' shall be encoded \lstinline!%%!. The following are all the recognized escape sequences: -\begin{center} -\begin{tabular}{c c l} -\hline -\tablehead{Sequence} & \tablehead{Encoded character} & \tablehead{Comment}\\ -\hline -\hline -\lstinline!%%! & `\%' & Only way to encode character. \\ -\lstinline!%]! & `]' & Prevents termination of markup delimited by \lstinline![$\ldots$]!. \\ -\hline -\end{tabular} -\end{center} +\lstinline!HideResult = false! defines that the developer proposes to show the +corresponding component. \begin{nonnormative} -With the percent character being encoded as \lstinline!%%!, the behavior of \lstinline!%! appearing in any other way than the escape sequences above, for variable replacement (\cref{variable-replacements}), or for the text markup (\cref{text-markup-in-captions}) is undefined, and thus possible to define in the future without breaking backward compatibility. +For example, a tool is not expected to provide means to plot a variable with \lstinline!HideResult = true!. +If a variable is declared in a protected section, a tool might not include it in a simulation result. +By setting \lstinline!HideResult = false!, the modeler would like to have the variable in the simulation +result, even if in the protected section. + +\lstinline!HideResult! is for example used in the connectors of the +\lstinline!Modelica.StateGraph! library to not show variables to the modeler +that are of no interest to him and would confuse him. \end{nonnormative} +\\ \hline +\lstinline!Inline! & +Has only an effect within a function declaration. -\subsubsection{Variable Replacements}\label{variable-replacements} +If \lstinline!Inline = true!, the model developer proposes to inline the +function. This means, that the body of the function is included at all +places where the function is called. -In the places listed in \cref{attributes-with-variable-replacements} where text for display is defined, the final value of a result variable can be embedded by referring to the variable as \lstinline!%{inertia1.w}!. -This is similar to the \lstinline!Text! graphical primitive in \cref{text}. +If \lstinline!Inline = true!, the model developer proposes to not inline the +function. -\begin{table}[H] -\caption{Attributes that can use variable replacements.} -\label{attributes-with-variable-replacements} -\begin{center} -\begin{tabular}{l l} -\hline -\tablehead{Attribute} & \tablehead{Annotation}\\ -\hline -\hline -\lstinline!title! & \lstinline!Figure! and \lstinline!Plot! \\ -\lstinline!caption! & \lstinline!Figure! \\ -\lstinline!legend! & \lstinline!Curve! \\ -\lstinline!label! & \lstinline!Axis! \\ -\hline -\end{tabular} -\end{center} -\end{table} - -In \lstinline!%{$\mathit{variable}$}!, text markup escape sequences don't apply inside the $\mathit{variable}$, which has the form of \lstinline[language=grammar]!component-reference! in the grammar (\cref{expressions1}). This means that a complete \lstinline[language=grammar]!component-reference! shall be scanned before looking for the terminating closing brace. - -\begin{example} -The variable replacement \lstinline!%{'%%'}! references the variable \lstinline!'%%'!, not the variable \lstinline!'%'!. -\end{example} - -\begin{example} -The variable replacement \lstinline!%{foo . '}bar{'}! makes a valid reference to the variable\linebreak[4] \lstinline!foo.'}bar{'!. -\end{example} +% Added "The annotation" to avoid bad formatting. +\begin{nonnormative} +The annotation \lstinline!Inline = true! is for example used in +Modelica\allowbreak{}.Mechanics\allowbreak{}.MultiBody\allowbreak{}.Frames and in functions of +Modelica\allowbreak{}.Media to have no overhead for function calls such as +resolving a vector in a different coordinate system and at the same time +the function can be analytically differentiated, e.g., for index +reduction needed for mechanical systems. +\end{nonnormative} +\\ \hline +\lstinline!LateInline! +& +Has only an effect within a function declaration. -Note that expansion to the final value means that expansion is not restricted to -parameters and constants, so that values to be shown in a caption can be -determined during simulation. +If \lstinline!LateInline = true!, the model developer proposes to inline the +function after all symbolic transformations have been performed. \begin{nonnormative} -By design, neither \lstinline!%class! nor \lstinline!%name! is supported in this context, as this information is expected to already be easily accessible (when applicable) in tool-specific ways. (Titles making use of \lstinline!%class! or \lstinline!%name! would then only lead to ugly duplication of this information.) +Late inlining is especially useful for differentiation and inversion of functions; +for efficiency reasons it is then useful to replace all function calls with +identical input arguments by one function call, before the inlining. \end{nonnormative} -\subsubsection{Text Markup in Captions}\label{text-markup-in-captions} +If \lstinline!LateInline = false!, the model developer proposes to not inline +the function after symbolic transformations have been performed. -In addition to variable replacements, a very restricted form of text markup is used for the \lstinline!caption!. Note that the text markup escape sequences described in \cref{text-markup-escape-sequences} generally apply inside \lstinline!caption!, with one exception given below for links. +\lstinline!Inline=true, LateInline=false! is identical to \lstinline!Inline=true!. -Links take the form \lstinline!%[$\mathit{text}$]($\mathit{link}$)!, where the \lstinline![$\mathit{text}$]! part is optional, and text markup escape sequences don't apply inside the $\mathit{link}$. The $\mathit{link}$ can be in either of the following forms, where the interpretation is given by the first matching form: -\begin{itemize} -\item -A \lstinline!variable:$\mathit{id}$!, where $\mathit{id}$ is a component reference in the form of \lstinline[language=grammar]!component-reference! in the grammar, such as \lstinline!inertia1.w!. -\item -% The 'plot:id' form below should be deprecated in favor of using an improved form of Modelica URI reference in the future, making 'variable:id' the only non-URI reference. -A \lstinline!plot:$\mathit{id}$!, where $\mathit{id}$ is the identifier of a \lstinline!Plot! in the current \lstinline!Figure!. -\item -% Use very short Modelica URI combined with carefully chosen wording below to deal with difficult line breaking. -A URI. -Well established schemes such as \lstinline[language={[nocomment]modelica}]!https://github.com/modelica! or \lstinline[language={[nocomment]modelica}]!modelica://Modelica!, as well as lesser known schemes may be used. -(A tool that has no special recognition of a scheme can try sending the URI to the operating system for interpretation.) -\end{itemize} +\lstinline!Inline=true, LateInline=true! is identical to \lstinline!LateInline=true!. -When \lstinline![$\mathit{text}$]! is omitted, a Modelica tool is free to derive a default based on the $\mathit{link}$. +\lstinline!Inline=false, LateInline=true! is identical to \lstinline!LateInline=true!. \begin{nonnormative} -Note that for the character `]' to appear in $\mathit{text}$, it needs to be encoded as the escape sequence \lstinline!%]!, or it would be interpreted as the terminating delimiter of the \lstinline![$\mathit{text}$]!. - -Similarly, the closing parenthesis `)' must be handled with care in $\mathit{link}$ in order to not be interpreted as the terminating delimiter of the \lstinline!($\mathit{link}$)!. -\begin{itemize} -\item -For a \lstinline!variable:!, no special treatment is needed, as the component reference syntax of the $\mathit{id}$ allows parentheses to appear without risk of misinterpretation inside a quoted identifier. -For example, \lstinline"%(variable:'try)me!')" has a parenthesis in \lstinline"'try)me!'" that must not be mistaken for the end of the \lstinline!($\mathit{link}$)!. -% The following shortcoming would be resolved if the 'plot:id' form was replaced by a Modelica URI reference, thanks to URL encoding. -\item -For a \lstinline!plot:!, there is currently no way to reference a plot with `)' in its \lstinline!identifier!. -\item -For a URI, a closing parenthesis must be URL encoded in order to not be interpreted as the end of the \lstinline!($\mathit{link}$)!. -For example, the URL in \lstinline[language={[nocomment]modelica}]!%(http://example.org/(tryme))! is just \filename{http://example.org/(tryme}, and the entire link is followed by a stray closing parenthesis. -To make it work, one has to use URL encoding: \lstinline[language={[nocomment]modelica}]!%(http://example.org/%28tryme%29)! (using URL encoding of the opening parenthesis just for symmetry, and note that the \lstinline!%! of the percent-encoded sequences are not subject to text markup escape sequences). -\end{itemize} +This annotation is for example used in +Modelica\allowbreak{}.Media\allowbreak{}.Water\allowbreak{}.IF97\_Utilities\allowbreak{}.T\_props\_ph to provide in +combination with common subexpression elimination the automatic caching +of function calls. Furthermore, it is used in order that a tool is able +to propagate specific enthalpy over connectors in the \lstinline!Modelica_Fluid! +library. \end{nonnormative} - -The styling of the link text, as well as the link action, is left for each Modelica -tool to decide. +\\ \hline +\lstinline!InlineAfterIndexReduction!\strut +& +Has only an effect within a function declaration. + +If \lstinline!true!, the model developer proposes to inline the function after the +function is differentiated for index reduction, and before any other +symbolic transformations are performed. This annotation cannot be +combined with annotations \lstinline!Inline! and \lstinline!LateInline!. +\\ \hline +\lstinline!GenerateEvents!\strut +& +Has only an effect within a function declaration + +If \lstinline!GenerateEvents = true!, the model developer proposes that crossing +functions in the function should generate events (one possibility of +doing this is to inline the function and generate events for the inlined +function). \begin{nonnormative} -For example, \lstinline!%(inertia1.w)! could be displayed as the text -\lstinline!inertia1.w! formatted with upright monospaced font, and have a pop-up -menu attached with menu items for plotting the variable, setting its start -value, or investigating the equation system from which it is solved. On the -other hand, \lstinline!%[angular velocity](inertia1.w)! could be formatted in -the same style as the surrounding text, except some non-intrusive visual clue -about it being linked. +This annotation is for example used in +Modelica\allowbreak{}.Media\allowbreak{}.Water\allowbreak{}.IF97\_Utilities.phase\_dT to indicate that +the output should generate an event when it changes. \end{nonnormative} +\\ \hline + +\end{longtable} +\begin{lstlisting}[language=grammar] +smoothOrder-annotation: + annotation"(" smoothOrder "=" UNSIGNED-NUMBER ")" | + annotation"(" smoothOrder "(" normallyConstant "=" NAME + ["," normallyConstant "=" NAME] ")" + "=" UNSIGNED-NUMBER ")" +\end{lstlisting} +This annotation has only an effect within a function declaration. +\lstinline!smoothOrder! defines the number of differentiations of the function, in +order that all of the differentiated outputs are continuous provided all +input arguments and their derivatives up to order \lstinline!smoothOrder! are +continuous. \begin{nonnormative} -% This non-normative text explains why we don't want to assume that the 'link' must have a scheme. -Note that $\mathit{link}$ is currently not allowed to be a \emph{URI reference}, i.e., a URI or a \emph{relative reference} such as \lstinline!#foo!. This is due to to the current inability to define a base URI referencing the current figure. Once this becomes possible, the URI form of $\mathit{link}$ may be changed into a URI reference. +This means that the function is at least C\textsuperscript{smoothOrder}. \lstinline!smoothOrder = 1! means that +the function can be differentiated at least once in order that all output arguments are still continuous, provided +the input arguments are continuous. If a tool needs the derivative of a function, e.g. for index reduction or to +compute an analytic Jacobian, the function can be differentiated analytically at least \lstinline!smoothOrder! times. \end{nonnormative} -A sequence of one or more newlines (encoded either literally or using the \lstinline!\n! -escape sequence) means a paragraph break. (A line break within a paragraph is -not supported, and any paragraph break before the first paragraph or after the last -paragraph has no impact.) - -\firstuse{Vendor-specific markup}\index{vendor-specific markup} takes the form \lstinline!%__$\mathit{nameOfVendor}_{1}$($\mathit{data}_{1}$)$\ldots$__$\mathit{nameOfVendor}_{n}$($\mathit{data}_{n}$)[$\mathit{text}$]!, where $n \geq 1$. -The $\mathit{nameOfVendor}$ consists of only digits and letters, and shall only convey the name of the vendor defining the meaning of the associated $\mathit{data}$. -Text markup escape sequences don't apply inside the $\mathit{data}$, implying that it cannot contain the closing parenthesis, `)'. -A tool which does not understand any of the vendor-specific meanings shall only display the mandatory $\mathit{text}$, but the $\mathit{text}$ may also be used together with the vendor-specific $\mathit{data}$. - -\begin{example} -One application of vendor-specific markup is to prototype a feature that can later be turned into standardized markup. For example, say that the tool AVendor wants to generalize the variable replacements such that the duration of a simulation can be substituted into a caption. During the development, this could be represented as the vendor-specific markup \lstinline!%__AVendor(?duration)[10 s]!, if the simulation has a duration of 10~seconds at the time of writing the caption. When AVendor renders this, it ignores the text \lstinline!10 s! and just displays the actual duration instead. Later, if this would become supported by standard markup, it might take the form of something like \lstinline!%{experiment:duration}! instead (note that \lstinline!experiment:duration! is not in the form of a component reference, avoiding conflict with current use of variable replacements). - -In a similar way, vendor-specific markup can be used to prototype a link for future inclusion in the link markup (either by extending the meaning of Modelica URIs, or by introducing another pseudo-scheme similar to \lstinline!variable:!). This is an example where the vendor-specific markup could make use of the $\mathit{text}$ (for link text) together with the vendor-specific $\mathit{data}$ (describing the actual link). -\end{example} - -\section{Annotations for Symbolic Processing}\label{annotations-for-symbolic-processing} - -The annotation listed below, in addition to annotations described in \crefrange{derivatives-and-inverses-of-functions}{function-inlining-and-event-generation}, can influence the symbolic processing. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Annotation} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!Evaluate! & Use parameter value for symbolic processing & \Cref{modelica:Evaluate}\\ -\hline -\end{tabular} -\end{center} - -\begin{annotationdefinition}[Evaluate] -\begin{synopsis}[grammar]\begin{lstlisting} -"Evaluate" "=" ( false | true ) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The annotation \lstinline!Evaluate! can occur in the component declaration, its type declaration, or a base class of the type-declaration. -In the case of multiple conflicting annotations it is handled similarly to modifiers (e.g., an \lstinline!Evaluate! annotation on the component declaration takes precedence). -In the case of hierarchical components it is applied to all components, overriding any \lstinline!Evaluate!-setting for specific components. -The annotation \lstinline!Evaluate! only has effect for a component declared with the prefix \lstinline!parameter!. - -If \lstinline!Evaluate = true!, the model developer proposes to utilize the value for the symbolic processing. In that case, it is not possible to change the parameter value after symbolic pre-processing. - -If \lstinline!Evaluate = false!, the model developer proposes to not utilize the value of the corresponding parameter for the symbolic processing. +The optional argument \lstinline!normallyConstant! of \lstinline!smoothOrder! defines that the +function argument \lstinline!NAME! is usually constant. \begin{nonnormative} -\lstinline!Evaluate! is for example used for axis of rotation parameters in the \lstinline!Modelica.Mechanics.MultiBody! library in order to improve the efficiency of the generated code. +A tool might check whether the actual argument to \lstinline!NAME! is a parameter expression at the place where the +function is called. If this is the case, the derivative of the function might be constructed under the assumption that +the corresponding argument is constant, to enhance efficiency. Typically, a tool would generate at most two different +derivative functions of a function: One, under the assumption that all \lstinline!normallyConstant! arguments are +actually constant. And one, under the assumption that all input arguments are time varying. Based on the actual +arguments of the function call either of the two derivative functions is used. + +This annotation is used by many functions of the \lstinline!Modelica.Fluid! library, such as\\ +\lstinline!Modelica.Fluid.Dissipation.PressureLoss.StraightPipe.dp_laminar_DP!, since geometric +arguments to these functions are usually constant. \end{nonnormative} -\end{semantics} -\end{annotationdefinition} - - -\section{Annotations for Simulations}\label{annotations-for-simulations} - -The annotations listed below define how models can be checked, translated, and simulated. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Annotation} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!experiment! & Simulation experiment settings & \Cref{modelica:experiment}\\ -\lstinline!HideResult! & Don't show component's simulator result & \Cref{modelica:HideResult}\\ -\lstinline!TestCase! & Information for model used as test case & \Cref{modelica:TestCase}\\ -\hline -\end{tabular} -\end{center} -\begin{annotationdefinition}[experiment] -% henrikt-ma 2021-04: Seems strange to allow 'experiment' completely without list of options -- what would it mean? -\begin{synopsis}[grammar]\begin{lstlisting} -"experiment" - [ "(" [ experimentOption { "," experimentOption } ] ")" ] +\section{Annotations for Simulation Experiments}\doublelabel{annotations-for-simulation-experiments} +\begin{lstlisting}[language=grammar] +experiment-annotation: + annotation "(" "experiment" [ "(" [experimentOption + {"," experimentOption}] ")" ] ")" experimentOption: - "StartTime" "=" [ "+" | "-" ] UNSIGNED-NUMBER - | "StopTime" "=" [ "+" | "-" ] UNSIGNED-NUMBER - | "Interval" "=" UNSIGNED-NUMBER - | "Tolerance" "=" UNSIGNED-NUMBER -\end{lstlisting}\end{synopsis} -\begin{semantics} -The \lstinline{experiment} annotation defines the default start time (\lstinline!StartTime!) in {[}s{]}, the default stop time (\lstinline!StopTime!) in {[}s{]}, the suitable time resolution for the result grid (\lstinline!Interval!) in {[}s{]}, and the default relative integration tolerance (\lstinline!Tolerance!) for simulation experiments to be carried out with the model or block at hand. -If \lstinline!StartTime! is not specified it is assumed to be \lstinline!0.0!. -\end{semantics} -\end{annotationdefinition} - -\begin{annotationdefinition}[HideResult] -\begin{synopsis}[grammar]\begin{lstlisting} -"HideResult" "=" ( false | true ) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\lstinline!HideResult = true! defines that the model developer proposes to not show the simulator results of the corresponding component. - -\lstinline!HideResult = false! defines that the developer proposes to show the corresponding component. - -\begin{nonnormative} -For example, a tool is not expected to provide means to plot a variable with \lstinline!HideResult = true!. If a variable is declared in a protected section, a tool might not include it in a simulation result. By setting \lstinline!HideResult = false!, the modeler would like to have the variable in the simulation result, even if in the protected section. - -\lstinline!HideResult! is for example used in the connectors of the \lstinline!Modelica.StateGraph! library to not show variables to the modeler that are of no interest to him and would confuse him. -\end{nonnormative} -\end{semantics} -\end{annotationdefinition} - -\begin{annotationdefinition}[TestCase] -\begin{synopsis}[grammar]\begin{lstlisting} -"TestCase" "(" "shouldPass" "=" ( false | true ) ")" -\end{lstlisting}\end{synopsis} -\begin{semantics} -If \lstinline!shouldPass! is \lstinline!false! it indicates that the translation or the simulation of the model should fail. -If a tools checks a package where classes have \lstinline!shouldPass = false! they should not generate errors, and checking may even be skipped. -On the other hand, models with \lstinline!shouldPass = false! may be useful for creation of negative tests in tool-specific ways. -Similarly as a class with obsolete-annotation, a class with \lstinline!TestCase! annotation (regardless of the value of \lstinline!shouldPass!) shall not be used in other models, unless those models also have a \lstinline!TestCase! annotation. - -\begin{nonnormative} -The intent of the test-case can be included in the documentation of the class. -This annotation can both be used for models intended as test-cases for implementations, and for models explaining detectable errors. -\end{nonnormative} -\end{semantics} -\end{annotationdefinition} + StartTime "=" [ "+" | "-" ] UNSIGNED-NUMBER | + StopTime "=" [ "+" | "-"] UNSIGNED-NUMBER | + Interval "=" UNSIGNED-NUMBER | + Tolerance "=" UNSIGNED-NUMBER +\end{lstlisting} +The experiment annotation defines the default start time (StartTime) in + {[}s{]}, the default stop time (StopTime) in {[}s{]}, the suitable time + resolution for the result grid (Interval) in {[}s{]}, and the default +relative integration tolerance (Tolerance) for simulation experiments to +be carried out with the model or block at hand. If StartTime is not specified it is assumed to be \lstinline!0.0!. -\section{Annotation for Single Use of Class}\label{annotation-for-single-use-of-class} +\section{Annotation for single use of class}\doublelabel{annotation-for-single-use-of-class} -For state machines it is useful to have single instances of local classes. -This can be done using: +For state machines it is useful to have single instances of local +classes. This can be done using: \begin{lstlisting}[language=modelica] -annotation(singleInstance = true) +annotation(singleInstance=true) \end{lstlisting} -The annotation \fmtannotationindex{singleInstance} in a class indicates that there should only be one component instance of the class, and it should be in the same scope as the class is defined. -The intent is to remove the class when the component is removed and to prevent duplication of the component. +The annotation singleInstance in a class indicates that there should +only be one component instance of the class, and it should be in the +same scope as the class is defined. The intent is to remove the class +when the component is removed and to prevent duplication of the +component. - -\section{Annotations for Graphical Objects}\label{annotations-for-graphical-objects} +\section{Annotations for Graphical Objects}\doublelabel{annotations-for-graphical-objects} A graphical representation of a class consists of two abstraction layers, icon layer and diagram layer showing graphical objects, @@ -463,7 +309,7 @@ \section{Annotations for Graphical Objects}\label{annotations-for-graphical-obje annotation "(" [ layer-annotations ] ")" layer-annotations : - ( icon-layer | diagram-layer ) [ "," layer-annotations ] + ( icon\_layer | diagram\_layer ) [ "," layer-annotations ] \end{lstlisting} Layer descriptions (start of syntactic description): \begin{lstlisting}[language=grammar] @@ -472,61 +318,71 @@ \section{Annotations for Graphical Objects}\label{annotations-for-graphical-obje diagram-layer : "Diagram" "(" [ coordsys-specification "," ] graphics ")" -\end{lstlisting}% -\annotationindex{Icon}\annotationindex{Diagram} +\end{lstlisting} \begin{example} \begin{lstlisting}[language=modelica] -annotation( - Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}), - graphics = {Rectangle(extent = {{-100, -100}, {100, 100}}), - Text(extent = {{-100, -100}, {100, 100}}, - textString = "Icon")})); +annotation ( + Icon(coordinateSystem(extent={{-100,-100}, {100,100}}), + graphics={Rectangle(extent={{-100,-100}, {100,100}}), + Text(extent={{-100,-100}, {100,100}}, textString="Icon")})); \end{lstlisting} \end{example} -The graphics is specified as an ordered sequence of graphical primitives, which are described below. -First base class contents is drawn according to the order of the \lstinline!extends!-clauses, and then graphical primitives are drawn according to the order such that later objects can cover earlier ones. +The graphics is specified as an ordered sequence of graphical +primitives, which are described below. First base-class contents is +drawn according to the order of the extends-clauses, and then graphical +primitives are drawn according to the order such that later objects can +cover earlier ones. \begin{nonnormative} Note that the ordered sequence is syntactically a valid Modelica annotation, although there is no mechanism for defining an array of heterogeneous objects in Modelica. \end{nonnormative} -These \lstinline!Icon!, \lstinline!Diagram!, and \lstinline!Documentation! annotations are only allowed directly in classes (e.g.\ not on components or connections). -The allowed annotations for a short class definition is the union of the allowed annotations in classes and on \lstinline!extends!-clauses. +These Icon, Diagram, and Documentation annotations are only allowed +directly in classes (e.g. not on components or connections). The allowed +annotations for a short class definition is the union of the allowed +annotations in classes and on extends-clauses. -\subsection{Common Definitions}\label{common-definitions} +\subsection{Common Definitions}\doublelabel{common-definitions} + +The following common definitions are used to define graphical +annotations in the later sections. -The following common definitions are used to define graphical annotations in the later sections. \begin{lstlisting}[language=modelica] -type DrawingUnit = Real(final unit="mm"); -type Point = DrawingUnit[2] "{x, y}"; -type Extent = Point[2] "Defines a rectangular area {{x1, y1}, {x2, y2}}"; -\end{lstlisting}% -\annotationindex{DrawingUnit}\annotationindex{Point}\annotationindex{Extent} -The interpretation of \lstinline!unit! is with respect to printer output in natural size (not zoomed). + type DrawingUnit = Real(final unit="mm"); + type Point = DrawingUnit[2] "{x, y}"; + type Extent = Point[2] "Defines a rectangular area {{x1, y1}, {x2, y2}}"; +\end{lstlisting} +The interpretation of \lstinline!unit! is with respect to printer output in +natural size (not zoomed). + +All graphical entities have a visible attribute which indicates if the +entity should be shown. -All graphical entities have a visible attribute which indicates if the entity should be shown. \begin{lstlisting}[language=modelica] partial record GraphicItem Boolean visible = true; Point origin = {0, 0}; Real rotation(quantity="angle", unit="deg")=0; end GraphicItem; -\end{lstlisting}% -\annotationindex{GraphicItem} -The \lstinline!origin! attribute specifies the origin of the graphical item in the coordinate system of the layer in which it is defined. -The origin is used to define the geometric information of the item and for all transformations applied to the item. -All geometric information is given relative the \lstinline!origin! attribute, which by default is \lstinline!{0, 0}!. +\end{lstlisting} +The \lstinline!origin! attribute specifies the origin of the graphical item in the +coordinate system of the layer in which it is defined. The origin is +used to define the geometric information of the item and for all +transformations applied to the item. All geometric information is given +relative the \lstinline!origin! attribute, which by default is \{0, 0\}. The \lstinline!rotation! attribute specifies the rotation of the graphical item counter-clockwise around the point defined by the \lstinline!origin! attribute. -\subsubsection{Coordinate Systems}\label{coordinate-systems} +\subsubsection{Coordinate Systems}\doublelabel{coordinate-systems} -Each of the layers has its own coordinate system.\annotationindex{CoordinateSystem} -A coordinate system is defined by the coordinates of two points, the left (x1) lower (y1) corner and the right (x2) upper (y2) corner, where the coordinates of the first point shall be less than the coordinates of the second point. +Each of the layers has its own coordinate system. A coordinate system is +defined by the coordinates of two points, the left (x1) lower (y1) +corner and the right (x2) upper (y2) corner, where the coordinates of +the first point shall be less than the coordinates of the second point. The attribute \lstinline!preserveAspectRatio! specifies a hint for the shape of components of the class, but does not actually influence the rendering of the component. @@ -539,13 +395,13 @@ \subsubsection{Coordinate Systems}\label{coordinate-systems} application may use a different default value of \lstinline!initialScale!. The attribute \lstinline!grid! specifies the spacing between grid points which can -be used by tools for alignment of points in the coordinate system, e.g.\ ``snap-to-grid''. +be used by tools for alignment of points in the coordinate system, e.g. ``snap-to-grid''. Its use and default value is tool-dependent. \begin{lstlisting}[language=modelica] record CoordinateSystem Extent extent; - Boolean preserveAspectRatio = true; + Boolean preserveAspectRatio=true; Real initialScale = 0.1; DrawingUnit grid[2]; end CoordinateSystem; @@ -556,7 +412,7 @@ \subsubsection{Coordinate Systems}\label{coordinate-systems} \begin{lstlisting}[language=modelica] CoordinateSystem(extent = {{-10, -10}, {10, 10}}); \end{lstlisting} -i.e.\ a coordinate system with width 20 units and height 20 units. +i.e. a coordinate system with width 20 units and height 20 units. \end{example} The coordinate systems for the icon and diagram layers are by default @@ -574,72 +430,96 @@ \subsubsection{Coordinate Systems}\label{coordinate-systems} GraphicItem[:] graphics; end Diagram; \end{lstlisting} -The coordinate system (including \lstinline!preserveAspectRatio!) of a class is defined by the following priority: +The coordinate system (including preserveAspectRatio) of a class is +defined by the following priority: \begin{enumerate} \item The coordinate system annotation given in the class (if specified). \item - The coordinate systems of the first base class where the extent on the \lstinline!extends!-clause specifies a null-region (if any). - Note that null-region is the default for base classes, see \cref{extends-clause}. + The coordinate systems of the first base-class where the extent on the + extends-clause specifies a null-region (if any). Note that null-region + is the default for base-classes, see \autoref{extends-clause}. \item - The default coordinate system \lstinline!CoordinateSystem(extent = {{-100, -100}, {100, 100}})!. + The default coordinate system CoordinateSystem(extent=\{\{-100, + -100\}, \{100, 100\}\}). \end{enumerate} -\subsubsection{Graphical Properties}\label{graphical-properties} +\subsubsection{Graphical Properties}\doublelabel{graphical-properties} + +Properties of graphical objects and connection lines are described using +the following attribute types. -Properties of graphical objects and connection lines are described using the following attribute types. \begin{lstlisting}[language=modelica] -type Color = Integer[3](min = 0, max = 255) "RGB representation"; -constant Color Black = zeros(3); -type LinePattern = enumeration(None, Solid, Dash, Dot, DashDot, DashDotDot); -type FillPattern = enumeration(None, Solid, Horizontal, Vertical, - Cross, Forward, Backward, CrossDiag, - HorizontalCylinder, VerticalCylinder, Sphere); -type BorderPattern = enumeration(None, Raised, Sunken, Engraved); -type Smooth = enumeration(None, Bezier); -type EllipseClosure = enumeration(None, Chord, Radial); -\end{lstlisting}% -\annotationindex{Color}\annotationindex{LinePattern}\annotationindex{FillPattern}\annotationindex{BorderPattern}\annotationindex{Smooth}\annotationindex{EllipseClosure} -The \lstinline!LinePattern! attribute \lstinline!Solid! indicates a normal line, \lstinline!None! an invisible line, and the other attributes various forms of dashed/dotted lines. + type Color = Integer[3](min=0, max=255) "RGB representation"; + + constant Color Black = zeros(3); + type LinePattern = enumeration(None, Solid, Dash, Dot, DashDot, DashDotDot); + type FillPattern = enumeration(None, Solid, Horizontal, Vertical, + Cross, Forward, Backward, CrossDiag, HorizontalCylinder, VerticalCylinder, Sphere); + type BorderPattern = enumeration(None, Raised, Sunken, Engraved); + type Smooth = enumeration(None, Bezier); + type EllipseClosure = enumeration(None, Chord, Radial); +\end{lstlisting} +The \lstinline!LinePattern! attribute \lstinline!Solid! indicates a normal line, \lstinline!None! an +invisible line, and the other attributes various forms of dashed/dotted +lines. -The \lstinline!FillPattern! attributes \lstinline!Horizontal!, \lstinline!Vertical!, \lstinline!Cross!, \lstinline!Forward!, \lstinline!Backward! and \lstinline!CrossDiag! specify fill patterns drawn with the line color over the fill color. +The \lstinline!FillPattern! attributes \lstinline!Horizontal!, \lstinline!Vertical!, +\lstinline!Cross!, \lstinline!Forward!, +\lstinline!Backward! and \lstinline!CrossDiag! specify fill patterns drawn with the line color +over the fill color. The attributes \lstinline!HorizontalCylinder!, \lstinline!VerticalCylinder! and \lstinline!Sphere! specify gradients that represent a horizontal cylinder, a vertical cylinder and a sphere, respectively. The gradient goes from line color to fill color. -The border pattern attributes \lstinline!Raised!, \lstinline!Sunken! and \lstinline!Engraved! represent frames which are rendered in a tool-dependent way --- inside the extent of the filled shape. +\includegraphics[width=2.08333in,height=1.66667in]{bezierpoints} -\begin{figure}[H] - \begin{center} - \includegraphics{bezierpoints} - \end{center} - \caption{Line with \lstinline!smooth = Bezier!. The four line points $P_{1}$, \ldots{}, $P_{4}$ result in two quadratic splines and two straight line segments.}\label{fig:smooth-bezier} -\end{figure} +The border pattern attributes \lstinline!Raised!, \lstinline!Sunken! and \lstinline!Engraved! represent frames +which are rendered in a tool-dependent way -- inside the extent of the +filled shape. -The \lstinline!smooth! attribute specifies that a line can be drawn as straight line segments (\lstinline!None!) or using a spline (\lstinline!Bezier!), where the line's points specify control points of a quadratic Bezier curve, see \cref{fig:smooth-bezier}. +The \lstinline!smooth! attribute specifies that a line can be drawn as straight line +segments (\lstinline!None!) or using a spline (\lstinline!Bezier!), where the line's points +specify control points of a quadratic Bezier curve. For lines with only two points, the \lstinline!smooth! attribute has no effect. -For lines with three or more points ($P_{1}$, $P_{2}$, \ldots{}, $P_{n}$), the middle point of each line segment ($P_{12}$, $P_{23}$, \ldots{}, $P_{(n-1)n}$) becomes the starting point and ending -points of each quadratic Bezier curve. For each quadratic Bezier curve, the common point of the two line segment becomes the control point. For instance, point $P_{2}$ becomes the control point for -the Bezier curve starting at $P_{12}$ and ending at $P_{23}$. A straight line is drawn between the starting point of the line and the starting point of the first quadratic Bezier curve, as well as -between the ending point of the line and the ending point of the last quadratic Bezier curve. - -In the illustration above, the square points ($P_{1}$, $P_{2}$, $P_{3}$, and $P_{4}$) represent the points that define the line, and the circle points ($P_{12}$, $P_{23}$, and $P_{34}$) are the -calculated middle points of each line segment. Points $P_{12}$, $P_{2}$, and $P_{23}$ define the first quadratic Bezier curve, and the points $P_{23}$, $P_{3}$, and $P_{34}$ define the second -quadratic Bezier curve. Finally a straight line is drawn between points $P_{1}$ and $P_{12}$ as well as between $P_{34}$ and $P_{4}$. - -The values of the \lstinline!EllipseClosure! enumeration specify if and how the endpoints of an elliptical arc are to be joined (see \cref{ellipse}). - -\begin{lstlisting}[language=modelica] -type Arrow = enumeration(None, Open, Filled, Half); -type TextStyle = enumeration(Bold, Italic, UnderLine); -type TextAlignment = enumeration(Left, Center, Right); -\end{lstlisting}% -\annotationindex{Arrow}\annotationindex{TextStyle}\annotationindex{TextAlignment} - +For lines with three or more points (P\textsubscript{1}, +P\textsubscript{2}, \ldots{}, P\textsubscript{n}), the middle point of +each line segment (P\textsubscript{12}, P\textsubscript{23}, \ldots{}, +P\textsubscript{(n-1)n}) becomes the starting point and ending points of +each quadratic Bezier curve. For each quadratic Bezier curve, the common +point of the two line segment becomes the control point. For instance, +point P\textsubscript{2} becomes the control point for the Bezier curve +starting at P\textsubscript{12} and ending at P\textsubscript{23}. A +straight line is drawn between the starting point of the line and the +starting point of the first quadratic Bezier curve, as well as between +the ending point of the line and the ending point of the last quadratic +Bezier curve. + +In the illustration above, the square points (P\textsubscript{1}, +P\textsubscript{2}, P\textsubscript{3,} and P\textsubscript{4}) +represent the points that define the line, and the circle points +(P\textsubscript{12}, P\textsubscript{23}, and P\textsubscript{34}) are +the calculated middle points of each line segment. Points +P\textsubscript{12}, P\textsubscript{2}, and P\textsubscript{23} define +the first quadratic Bezier curve, and the points P\textsubscript{23}, +P\textsubscript{3}, and P\textsubscript{34} define the second quadratic +Bezier curve. Finally a straight line is drawn between points +P\textsubscript{1} and P\textsubscript{12} as well as between +P\textsubscript{34} and P\textsubscript{4}. + +The values of the \lstinline!EllipseClosure! enumeration specify if and how the +endpoints of an elliptical arc are to be joined (see \autoref{ellipse} Ellipse). + +\begin{lstlisting}[language=modelica] + type Arrow = enumeration(None, Open, Filled, Half); + type TextStyle = enumeration(Bold, Italic, UnderLine); + type TextAlignment = enumeration(Left, Center, Right); +\end{lstlisting} Filled shapes have the following attributes for the border and interior. + \begin{lstlisting}[language=modelica] record FilledShape "Style attributes for filled shapes" Color lineColor = Black "Color of border line"; @@ -648,31 +528,36 @@ \subsubsection{Graphical Properties}\label{graphical-properties} FillPattern fillPattern = FillPattern.None "Interior fill pattern"; DrawingUnit lineThickness = 0.25 "Line thickness"; end FilledShape; -\end{lstlisting}% -\annotationindex{FilledShape} -The extent/points of the filled shape describe the theoretical zero-thickness filled shape, and the actual rendered border is then half inside and half outside the extent. +\end{lstlisting} +The extent/points of the filled shape describe the theoretical +zero-thickness filled shape, and the actual rendered border is then half +inside and half outside the extent. -\subsection{Component Instance}\label{component-instance} +\subsection{Component Instance}\doublelabel{component-instance} -A component instance can be placed within a diagram or icon layer. -It has an annotation with a \lstinline!Placement! modifier to describe the placement. +A component instance can be placed within a diagram or icon layer. It +has an annotation with a \lstinline!Placement! modifier to describe the placement. Placements are defined in term of coordinate systems transformations: \begin{lstlisting}[language=modelica] record Transformation Point origin = {0, 0}; Extent extent; - Real rotation(quantity = "angle", unit = "deg") = 0; + Real rotation(quantity="angle", unit="deg")=0; end Transformation; -\end{lstlisting}% -\annotationindex{Transformation} -The origin attribute defines the position of the component in the coordinate system of the enclosing class. -The \lstinline!extent! defines the position, size and flipping of the component, relative to the \lstinline!origin! attribute. -The \lstinline!extent! is defined relative to the \lstinline!origin! attribute of the component instance. -Given an extent \lstinline!{{$x_{1}$, $y_{1}$}, {$x_{2}$, $y_{2}$}}!, $x_{2} < x_{1}$ defines horizontal flipping and $y_{2} < y_{1}$ defines vertical flipping around the center of the object. +\end{lstlisting} +The origin attribute defines the position of the component in the +coordinate system of the enclosing class. The \lstinline!extent! defines the +position, size and flipping of the component, relative to the \lstinline!origin! +attribute. The \lstinline!extent! is defined relative to the \lstinline!origin! attribute of the +component instance. Given an extent \{\{x1, y1\}, \{x2, y2\}\}, +x2\textless{}x1 defines horizontal flipping and y2\textless{}y1 defines +vertical flipping around the center of the object. -The \lstinline!rotation! attribute specifies rotation of the extent around the point defined by the \lstinline!origin! attribute. +The \lstinline!rotation! attribute specifies rotation of the extent around the point +defined by the \lstinline!origin! attribute. -The graphical operations are applied in the order: scaling, flipping and rotation. +The graphical operations are applied in the order: scaling, flipping and +rotation. \begin{lstlisting}[language=modelica] record Placement @@ -682,10 +567,10 @@ \subsection{Component Instance}\label{component-instance} Boolean iconVisible "Visible in icon layer; for public connector"; Transformation iconTransformation "Placement in the icon layer; for public connector"; end Placement; -\end{lstlisting}% -\annotationindex{Placement} -If no \lstinline!iconTransformation! is given the \lstinline!transformation! is also used for placement in the icon layer. -If no \lstinline!iconVisible! is given for a public connector the \lstinline!visible! is also used for visibility in the icon layer. +\end{lstlisting} +If no \lstinline!iconTransformation! is given the \lstinline!transformation! is also used for +placement in the icon layer. If no \lstinline!iconVisible! is given for a public connector the +\lstinline!visible! is also used for visibility in the icon layer. \begin{nonnormative} A connector can be shown in both an icon layer and a diagram @@ -708,9 +593,12 @@ \subsection{Component Instance}\label{component-instance} icon layer. Non-connector components are only shown in the diagram layer. -\subsection{Extends-clause}\label{extends-clause} +\subsection{Extends clause}\doublelabel{extends-clause} -Each \lstinline!extends!-clause (and short class definition, as stated in \cref{annotations-for-graphical-objects}) may have layer specific annotations which describe the rendering of the base class' icon and diagram layers in the derived class. +Each extends-clause (and short-class-definition, as stated in \autoref{annotations-for-graphical-objects}) +may have layer specific annotations which describe +the rendering of the base class' icon and diagram layers in the +subclass. \begin{lstlisting}[language=modelica] record IconMap @@ -722,54 +610,63 @@ \subsection{Extends-clause}\label{extends-clause} Extent extent = {{0, 0}, {0, 0}}; Boolean primitivesVisible = true; end DiagramMap; -\end{lstlisting}% -\annotationindex{IconMap}\annotationindex{DiagramMap} -All graphical objects are by default inherited from a base class. -If the \lstinline!primitivesVisible! attribute is false, components and connections are visible but graphical primitives are not. +\end{lstlisting} +All graphical objects are by default inherited from a base class. If the +\lstinline!primitivesVisible! attribute is false, components and connections are +visible but graphical primitives are not. \begin{itemize} \item - If the extent of the \lstinline!extends!-clause defines a null region (the default), the base class contents is mapped to the same coordinates in the derived class, and the coordinate system (including \lstinline!preserveAspectRatio!) can be inherited as described in \cref{coordinate-systems}. + If the extent of the extends-clause defines a null region (the + default), the base class contents is mapped to the same coordinates in + the derived class, and the coordinate system (including + preserveAspectRatio) can be inherited as described in + \autoref{coordinate-systems}. \item - If the extent of the \lstinline!extends!-clause defines a non-null region, the base class coordinate system is mapped to the region specified by the attribute extent, if \lstinline!preserveAspectRatio! is true for the base class the mapping shall preserve the aspect ratio. - The base class coordinate system (and \lstinline!preserveAspectRatio!) is not inherited. + If the extent of the extends-clause defines a non-null region, the + base class coordinate system is mapped to the region specified by the + attribute extent, if preserveAspectRatio is true for the base class + the mapping shall preserve the aspect ratio. The base class coordinate + system (and preserveAspectRatio) is not inherited. \end{itemize} \begin{example} \begin{lstlisting}[language=modelica] model A extends B annotation( - IconMap(extent = {{-100, -100}, {100, 100}}, primitivesVisible = false), - DiagramMap(extent = {{-50, -50}, {0, 0}}, primitivesVisible = true) + IconMap(extent={{-100,-100}, {100,100}},primitivesVisible=false), + DiagramMap(extent={{-50,-50}, {0,0}},primitivesVisible=true) ); end A; model B - extends C annotation(DiagramMap(primitivesVisible = false)); - $\ldots$ + extends C annotation(DiagramMap(primitivesVisible=false)); + ... end B; \end{lstlisting} In this example the diagram of \lstinline!A! contains the graphical primitives -from \lstinline!A! and \lstinline!B! (but not from \lstinline!C! since they were hidden in \lstinline!B!) -- the ones +from \lstinline!A! and \lstinline!B! (but not from \lstinline!C! since they were hidden in \lstinline!B!) --- the ones from \lstinline!B! are rescaled, and the icon of \lstinline!A! contains the graphical primitives from \lstinline!A! (but neither from \lstinline!B! nor from \lstinline!C!). \end{example} -\subsection{Connections}\label{connections1} +\subsection{Connections}\doublelabel{connections1} -A connection is specified with an annotation containing a \lstinline!Line!\index{Line@\robustinline{Line}!\robustinline{connect} annotation} primitive and optionally a \lstinline!Text! primitive, as specified below. +A connection is specified with an annotation containing a \lstinline!Line! primitive +and optionally a Text-primitive, as specified below. \begin{example} \begin{lstlisting}[language=modelica] -connect(a.x, b.x) - annotation(Line(points = {{-25, 30}, {10, 30}, {10, -20}, {40, -20}})); + connect(a.x, b.x) + annotation(Line(points={{-25,30}, {10,30}, {10, -20}, {40,-20}})); \end{lstlisting} \end{example} -The optional \lstinline!Text!\index{Text@\robustinline{Text}!\robustinline{connect} annotation} primitive defines a text that will be written on the connection line. -It has the following definition (\emph{it is not equal to the \lstinline!Text! primitive as part of graphics -- the differences are marked as bold lines}): -% NOTE: Technically just the names -- not the entire lines are marked in bold -\begin{lstlisting}[language=modelica] +The optional Text-primitive defines a text that will be written on the +connection line. It has the following definition (\emph{it is not equal +to the Text-primitive as part of graphics -- the differences are marked as bold lines}): +% NOTE: Technically just the names - not the entire lines are marked in bold +\begin{lstlisting}[language=modelica,escapechar=!,emph={horizontalAlignment,string,index}, emphstyle=\textbf] record Text extends GraphicItem; extends FilledShape; @@ -778,39 +675,45 @@ \subsection{Connections}\label{connections1} Real fontSize = 0 "unit pt"; String fontName; TextStyle textStyle[:]; - Color textColor = lineColor; - TextAlignment horizontalAlignment = - if index < 0 then TextAlignment.Right else TextAligment.Left; + Color textColor=lineColor; + TextAlignment horizontalAlignment = if index<0 then TextAlignment.Right else TextAligment.Left; Integer index; end Text; \end{lstlisting} -The \lstinline!index! is one of the points of Line (numbered 1, 2, 3, \ldots{} where negative numbers count from the end, thus -1 indicate the last one). -The \lstinline!string! may use the special symbols \lstinline!"%first"! and \lstinline!"%second"! to indicate the connectors in the \lstinline!connect!-equation. +The \lstinline!index! is one of the points of Line (numbered 1, 2, 3, \ldots{} where +negative numbers count from the end, thus -1 indicate the last one). The \lstinline!string! +may use the special +symbols \lstinline!"\%first"! and \lstinline!"\%second"! to indicate the connectors in the +connect-equation. -The \lstinline!extent! and \lstinline!rotation! are relative to the \lstinline!origin! (default \lstinline!{0, 0}!) and the \lstinline!origin! is relative to the point on the \lstinline!Line!. +The \lstinline!extent! and \lstinline!rotation! are relative to the \lstinline!origin! (default \lstinline!{0,0}!) +and the \lstinline!origin! is relative to the point on the Line. -The \lstinline!textColor! attribute defines the color of the text. The text is drawn with transparent background and no border around the text (and without outline). The contents inherited from \lstinline!FilledShape! is deprecated, but kept for compatibility reasons. The default value for \lstinline!horizontalAlignment! is deprecated. Having a zero size for the \lstinline!extent! is deprecated and is handled as if upper part is moved up an appropriate amount. +The textColor attribute defines the color of the text. The text is drawn +with transparent background and no border around the text (and without +outline). The contents inherited from FilledShape is deprecated, but kept for compatibility reasons. +The default value for \lstinline!horizontalAlignment! is deprecated. +Having a zero size for the extent is deprecated and is handled as if upper part is moved up an appropriate amount. \begin{example} \begin{lstlisting}[language=modelica] -connect(controlBus.axisControlBus1, axis1.axisControlBus) - annotation( - Text(string = "%first", index = -1, extent = [-6, 3; -6, 7]), - Line(points = - {{-80,-10},{-80,-14.5},{-79,-14.5},{-79,-17},{-65,-17},{-65,-65},{-25,-65}}) - ); + connect(controlBus.axisControlBus1, axis1.axisControlBus) annotation ( + Text(string="%first", index=-1, extent=[-6,3; -6,7]), + Line(points={{-80,-10},{-80,-14.5},{-79,-14.5},{-79,-17},{-65,-17},{-65,-65}, + {-25,-65}})); \end{lstlisting} -Draws a connection line and adds the text \emph{axisControlBus1} ending at $(-6,\, 3) + (-25,\, -65)$ and 4 vertical units of space for the text. -Using a height of zero, such as \lstinline!extent = [-6, 3; -6, 3]! is deprecated, but gives similar result. +Draws a connection line and adds the text \emph{axisControlBus1} +ending at \{-6, 3\}+\{-25, -65\} and 4 vertical units of space for the text. +Using a height of zero, such as \lstinline!extent=[-6,3; -6,3]! is deprecated, but gives similar result. \end{example} -\subsection{Graphical primitives}\label{graphical-primitives} +\subsection{Graphical primitives}\doublelabel{graphical-primitives} This section describes the graphical primitives that can be used to define the graphical objects in an annotation. -\subsubsection{Line}\label{line} +\subsubsection{Line}\doublelabel{line} A line is specified as follows: \begin{lstlisting}[language=modelica] @@ -821,26 +724,30 @@ \subsubsection{Line}\label{line} LinePattern pattern = LinePattern.Solid; DrawingUnit thickness = 0.25; Arrow arrow[2] = {Arrow.None, Arrow.None} "{start arrow, end arrow}"; - DrawingUnit arrowSize = 3; + DrawingUnit arrowSize=3; Smooth smooth = Smooth.None "Spline"; end Line; -\end{lstlisting}% -\annotationindex{Line} -Note that the \lstinline!Line! primitive is also used to specify the graphical representation of a connection. +\end{lstlisting} +Note that the \lstinline!Line! primitive is also used to specify the graphical +representation of a connection. For arrows: \begin{itemize} \item - The arrow is drawn with an aspect ratio of 1/3 for each arrow half, i.e., if the arrow-head is 3~mm long an arrow with \lstinline!Half! will extend 1~mm from the mid-line and with \lstinline!Open! or \lstinline!Filled! extend 1~mm to each side, in total making the base 2~mm wide. + The arrow is drawn with an aspect ratio of 1/3 for each arrow half, i.e., +if the arrow-head is 3~mm long an arrow with Half will extend 1~mm from the +mid-line and with Open or Filled extend 1~mm to each side, in total making the base 2~mm wide. \item - The \lstinline!arrowSize! gives the width of the arrow (including the imagined other half for \lstinline!Half!) so that \lstinline!lineThickness = 10! and \lstinline!arrowSize = 10! will touch at the outer parts. + The arrowSize gives the width of the arrow (including the imagined + other half for Half) so that lineThickness=10 and arrowSize=10 will + touch at the outer parts. \item All arrow variants overlap for overlapping lines. \item - The lines for the \lstinline!Open! and \lstinline!Half! variants are drawn with \lstinline!lineThickness!. + The lines for the Open and Half variants are drawn with lineThickness. \end{itemize} -\subsubsection{Polygon}\label{polygon} +\subsubsection{Polygon}\doublelabel{polygon} A polygon is specified as follows: \begin{lstlisting}[language=modelica] @@ -850,11 +757,11 @@ \subsubsection{Polygon}\label{polygon} Point points[:]; Smooth smooth = Smooth.None "Spline outline"; end Polygon; -\end{lstlisting}% -\annotationindex{Polygon} -The polygon is automatically closed, if the first and the last points are not identical. +\end{lstlisting} +The polygon is automatically closed, if the first and the last points +are not identical. -\subsubsection{Rectangle}\label{rectangle} +\subsubsection{Rectangle}\doublelabel{rectangle} A rectangle is specified as follows: \begin{lstlisting}[language=modelica] @@ -865,12 +772,12 @@ \subsubsection{Rectangle}\label{rectangle} Extent extent; DrawingUnit radius = 0 "Corner radius"; end Rectangle; -\end{lstlisting}% -\annotationindex{Rectangle} -The \lstinline!extent! attribute specifies the bounding box of the rectangle. -If the \lstinline!radius! attribute is specified, the rectangle is drawn with rounded corners of the given radius. +\end{lstlisting} +The \lstinline!extent! attribute specifies the bounding box of the rectangle. If the +\lstinline!radius! attribute is specified, the rectangle is drawn with rounded +corners of the given radius. -\subsubsection{Ellipse}\label{ellipse} +\subsubsection{Ellipse}\doublelabel{ellipse} An ellipse is specified as follows: \begin{lstlisting}[language=modelica] @@ -878,21 +785,32 @@ \subsubsection{Ellipse}\label{ellipse} extends GraphicItem; extends FilledShape; Extent extent; - Real startAngle(quantity = "angle", unit = "deg") = 0; - Real endAngle(quantity = "angle", unit = "deg") = 360; + Real startAngle(quantity="angle", unit="deg")=0; + Real endAngle(quantity="angle", unit="deg")=360; EllipseClosure closure = if startAngle == 0 and endAngle == 360 then EllipseClosure.Chord else EllipseClosure.Radial; end Ellipse; -\end{lstlisting}% -\annotationindex{Ellipse} +\end{lstlisting} The \lstinline!extent! attribute specifies the bounding box of the ellipse. -Partial ellipses can be drawn using the \lstinline!startAngle! and \lstinline!endAngle! attributes. These specify the endpoints of the arc prior to the stretch and rotate operations. The arc is drawn counter-clockwise from \lstinline!startAngle! to \lstinline!endAngle!, where \lstinline!startAngle! and \lstinline!endAngle! are defined counter-clockwise from 3 o'clock (the positive x-axis). +Partial ellipses can be drawn using the \lstinline!startAngle! and \lstinline!endAngle! +attributes. These specify the endpoints of the arc prior to the stretch +and rotate operations. The arc is drawn counter-clockwise from +\lstinline!startAngle! to \lstinline!endAngle!, where startAngle and endAngle are defined +counter-clockwise from 3 o'clock (the positive x-axis). -The closure attribute specifies whether the endpoints specified by \lstinline!startAngle! and \lstinline!endAngle! are to be joined by lines to the center of the extent (\lstinline!closure = EllipseClosure.Radial!), joined by a single straight line between the end points (\lstinline!closure = EllipseClosure.Chord!), or left unconnected (\lstinline!closure = EllipseClosure.None!). In the latter case, the ellipse is treated as an open curve instead of a closed shape, and the \lstinline!fillPattern! and \lstinline!fillColor! are not applied (if present, they are ignored). +The closure attribute specifies whether the endpoints specified by +\lstinline!startAngle! and \lstinline!endAngle! are to be joined by lines to the centre of the +extent (\lstinline!closure=EllipseClosure.Radial!), joined by a single straight line +between the end points (\lstinline!closure=EllipseClosure.Chord!), or left +unconnected (\lstinline!closure=EllipseClosure.None!). In the latter case, the +ellipse is treated as an open curve instead of a closed shape, and the +\lstinline!fillPattern! and \lstinline!fillColor! are not applied (if present, they are +ignored). -The default closure is \lstinline!EllipseClosure.Chord! when \lstinline!startAngle! is 0 and \lstinline!endAngle! is 360, or \lstinline!EllipseClosure.Radial! otherwise. +The default closure is \lstinline!EllipseClosure.Chord! when \lstinline!startAngle! is 0 and +\lstinline!endAngle! is 360, or \lstinline!EllipseClosure.Radial! otherwise. \begin{nonnormative} The default for a closed ellipse is not \lstinline!EllipseClosure.None!, since that would result in \lstinline!fillColor! @@ -900,7 +818,7 @@ \subsubsection{Ellipse}\label{ellipse} is equivalent in this case, since the chord will be of zero length. \end{nonnormative} -\subsubsection{Text}\label{text} +\subsubsection{Text}\doublelabel{text} A text string is specified as follows: \begin{lstlisting}[language=modelica] @@ -912,31 +830,23 @@ \subsubsection{Text}\label{text} Real fontSize = 0 "unit pt"; String fontName; TextStyle textStyle[:]; - Color textColor = lineColor; + Color textColor=lineColor; TextAlignment horizontalAlignment = TextAlignment.Center; end Text; -\end{lstlisting}% -\annotationindex{Text} -The \lstinline!textColor! attribute defines the color of the text. -The text is drawn with transparent background and no border around the text (and without outline). -The contents inherited from \lstinline!FilledShape! is deprecated, but kept for compatibility reasons. +\end{lstlisting} +The \lstinline!textColor! attribute defines the color of the text. The text is drawn +with transparent background and no border around the text (and without +outline). The contents inherited from \lstinline!FilledShape! is deprecated, but kept for compatibility reasons. -There are a number of common macros that can be used in the text, and they should be replaced when displaying the text as follows (in order such that the earliest ones have precedence, and using the longest sequence of identifier characters -- alphanumeric and underscore): +There are a number of common macros that can be used in the text, and +they should be replaced when displaying the text as follows: \begin{itemize} \item - \%\% replaced by \% -\item - \%name replaced by the name of the component (i.e., the identifier for - it in the enclosing class). -\item - \%class replaced by the name of the class (only the last part of the hierarchical name). -\item - \%\emph{par} and \%\{\emph{par\}} replaced by the value of the - parameter \lstinline!par!. + \%\emph{par} and \%\{\emph{par\}} replaced by the value of the parameter \lstinline!par!. If the value is numeric, tools shall display the value with \lstinline!displayUnit!, formatted according to bipm-specification. E.g., for \begin{lstlisting}[language=modelica] -parameter Real t(unit = "s", displayUnit = "ms") = 0.1 +parameter Real t(unit="s", displayUnit="ms") = 0.1 \end{lstlisting} tools shall display \emph{100 ms}. The intent is that the text is easily readable, @@ -945,10 +855,17 @@ \subsubsection{Text}\label{text} \begin{example} If \lstinline!par = "Modelica.Blocks.Types.Enumeration.Periodic"!, then \lstinline!%par! should be displayed as \emph{Periodic}. \end{example} - The form \%\{\emph{par\}} allows component-references and is required for quoted identifiers, and can be directly + The form \%\{\emph{par\}} allows component-references, and can be directly followed by a letter. Thus \lstinline!%{w}x%{h}! gives the value of \lstinline!w! - directly followed by \emph{x} and the value of \lstinline!h!, while \lstinline!%wxh! gives the value of the + directly followed by \emph{x} and the value of \lstinline!h! -- and \lstinline!%wxh! gives the value of the parameter \lstinline!wxh!. If the parameter does not exist it is an error. +\item + \%\% replaced by \% +\item + \%name replaced by the name of the component (i.e. the identifier for + it in in the enclosing class). +\item + \%class replaced by the name of the class (only the last part of the hierarchical name). \end{itemize} The style attribute \lstinline!fontSize! specifies the font size. If the \lstinline!fontSize! @@ -964,12 +881,14 @@ \subsubsection{Text}\label{text} A zero-width \lstinline!extent! is convenient for handling texts where the width is unknown. \end{nonnormative} -If the string \lstinline!fontName! is empty, the tool may choose a font. The font names \lstinline!"serif"!, \lstinline!"sans-serif"!, and \lstinline!"monospace"! shall be recognized. If possible -the correct font should be used -- otherwise a reasonable match, or treat as if \lstinline!fontName! was empty. +If the string \lstinline!fontName! is empty, the tool may choose a font. The font +names \lstinline!"serif"!, \lstinline!"sans-serif"!, and \lstinline!"monospace"! shall be recognized. If +possible the correct font should be used - otherwise a reasonable match, +or treat as if font-name was empty. The style attribute \lstinline!textStyle! specifies variations of the font. -\subsubsection{Bitmap}\label{bitmap} +\subsubsection{Bitmap}\doublelabel{bitmap} A bitmap image is specified as follows: \begin{lstlisting}[language=modelica] @@ -979,58 +898,71 @@ \subsubsection{Bitmap}\label{bitmap} String fileName "Name of bitmap file"; String imageSource "Base64 representation of bitmap"; end Bitmap; -\end{lstlisting}% -\annotationindex{Bitmap} -The \lstinline!Bitmap! primitive renders a graphical bitmap image. -The data of the image can either be stored on an external file or in the annotation itself. -The image is scaled to fit the extent. -Given an extent \lstinline!{{$x_{1}$, $y_{1}$}, {$x_{2}$, $y_{2}$}}!, $x_{2} < x_{1}$ defines horizontal flipping and $y_{2} < y_{1}$ defines vertical flipping around the center of the object. +\end{lstlisting} +The \lstinline!Bitmap! primitive renders a graphical bitmap image. The data of the +image can either be stored on an external file or in the annotation +itself. The image is scaled to fit the extent. Given an extent \{\{x1, +y1\}, \{x2, y2\}\}, x2\textless{}x1 defines horizontal flipping and +y2\textless{}y1 defines vertical flipping around the center of the +object. -The graphical operations are applied in the order: scaling, flipping and rotation. +The graphical operations are applied in the order: scaling, flipping and +rotation. When the attribute \lstinline!fileName! is specified, the string refers to an external file containing image data. The mapping from the string to the -file is specified for some URIs in \cref{external-resources}. The supported file +file is specified for some URIs in \autoref{external-resources}. The supported file formats include \lstinline!PNG!, \lstinline!BMP!, \lstinline!JPEG!, and \lstinline!SVG!. When the attribute \lstinline!imageSource! is specified, the string contains the -image data, and the image format is determined based on the contents. +image data -- and the image format is determined based on the contents. The image is represented as a Base64 encoding of the image file format (see RFC~4648, \url{http://tools.ietf.org/html/rfc4648}). The image is uniformly scaled (preserving the aspect ratio) so it exactly fits within the extent (touching the extent along one axis). The center of the image is positioned at the center of the extent. -\subsection{Variable Graphics and Schematic Animation}\label{variable-graphics-and-schematic-animation} +\subsection{Variable Graphics and Schematic Animation}\doublelabel{variable-graphics-and-schematic-animation} -Any value (coordinates, color, text, etc.) in graphical annotations can be dependent on class variables using \lstinline!DynamicSelect!. -\lstinline!DynamicSelect! has the syntax of a function call with two arguments, where the first argument specifies the value of the editing state and the second argument the value of the non-editing state. -The first argument must be a literal expression. -The second argument may contain references to variables to enable a dynamic behavior. +Any value (coordinates, color, text, etc.) in graphical annotations can +be dependent on class variables using the \lstinline!DynamicSelect! expression. +\lstinline!DynamicSelect! has the syntax of a function call with two arguments, +where the first argument specifies the value of the editing state and +the second argument the value of the non-editing state. The first +argument must be a literal expression. The second argument may contain +references to variables to enable a dynamic behavior. \begin{example} -The level of a tank could be animated by a rectangle expanding in vertical direction and its color depending on a variable overflow: -\begin{lstlisting}[language=modelica] -annotation(Icon(graphics = { - Rectangle( - extent = - DynamicSelect({{0, 0}, {20, 20}}, - {{0, 0}, {20, level}}), - fillColor = - DynamicSelect({0, 0, 255}, - if overflow then {255, 0, 0} else {0, 0, 255}) - )})); +The level of a tank could be animated by a +rectangle expanding in vertical direction and its color depending on a +variable overflow: +\begin{lstlisting}[language=modelica] + annotation ( + Icon(graphics={Rectangle( + extent=DynamicSelect({{0,0},{20,20}},{{0,0},{20,level}}), + fillColor=DynamicSelect({0,0,255}, + if overflow then {255,0,0} else {0,0,255}))} + ); \end{lstlisting} \end{example} -\subsection{User input}\label{user-input} +\subsection{User input}\doublelabel{user-input} -It is possible to interactively modify variables during a simulation. The variables may either be parameters, discrete-time variables or states. New numeric values can be given, a mouse click can change a \lstinline!Boolean! variable or a mouse movement can change a \lstinline!Real! variable. Input fields may be associated with a \lstinline!GraphicItem! or a component as an array named \lstinline!interaction!. The \lstinline!interaction! array may occur as an attribute of a graphic primitive, an attribute of a component annotation or as an attribute of the layer annotation of a class. +It is possible to interactively modify variables during a simulation. +The variables may either be parameters, discrete variables or states. +New numeric values can be given, a mouse click can change a Boolean +variable or a mouse movement can change a Real variable. Input fields +may be associated with a \lstinline!GraphicItem! or a component as an array named +\lstinline!interaction!. The \lstinline!interaction! array may occur as an attribute of a +graphic primitive, an attribute of a component annotation or as an +attribute of the layer annotation of a class. -\subsubsection{Mouse input}\label{mouse-input} +\subsubsection{Mouse input}\doublelabel{mouse-input} -A \lstinline!Boolean! variable can be changed when the cursor is held over a graphical item or component and the selection button is pressed if the interaction annotation contains \fmtannotationindex{OnMouseDownSetBoolean}: +A Boolean variable can be changed when the cursor is held over a +graphical item or component and the selection button is pressed if the +interaction annotation contains \lstinline!OnMouseDownSetBoolean!: \begin{lstlisting}[language=modelica] record OnMouseDownSetBoolean Boolean variable "Name of variable to change when mouse button pressed"; @@ -1042,32 +974,34 @@ \subsubsection{Mouse input}\label{mouse-input} A button can be represented by a rectangle changing color depending on a \lstinline!Boolean! variable \lstinline!on! and toggles the variable when the rectangle is clicked on: \begin{lstlisting}[language=modelica] -annotation(Icon( - graphics = { - Rectangle(extent = [0, 0; 20, 20], - fillColor = if on then {255, 0, 0} else {0, 0, 255})}, - interaction = {OnMouseDownSetBoolean(on, not on)})); + annotation (Icon(graphics={Rectangle(extent=[0,0; 20,20], + fillColor=if on then {255,0,0} else + {0,0,255})}, + interaction={ OnMouseDownSetBoolean (on, not on)})); \end{lstlisting} \end{example} -In a similar way, a variable can be changed when the mouse button is \emph{released}: +In a similar way, a variable can be changed when the mouse button is +\emph{released}: \begin{lstlisting}[language=modelica] record OnMouseUpSetBoolean Boolean variable "Name of variable to change when mouse button released"; Boolean value "Assigned value"; end OnMouseUpSetBoolean; -\end{lstlisting}% -\annotationindex{OnMouseUpSetBoolean} +\end{lstlisting} +Note that several interaction objects can be associated with the same +graphical item or component. -Note that several interaction objects can be associated with the same graphical item or component. \begin{example} \begin{lstlisting}[language=modelica] -interaction = {OnMouseDownSetBoolean(on, true), - OnMouseUpSetBoolean(on, false)} +interaction={ OnMouseDownSetBoolean(on, true), OnMouseUpSetBoolean(on, false)}; \end{lstlisting} \end{example} -The \fmtannotationindex{OnMouseMoveXSetReal} interaction object sets the variable to the position of the cursor in X direction in the local coordinate system mapped to the interval defined by the \lstinline!minValue! and \lstinline!maxValue! attributes. +The \lstinline!OnMouseMoveXSetReal! interaction object sets the variable to the +position of the cursor in X direction in the local coordinate system +mapped to the interval defined by the \lstinline!minValue! and \lstinline!maxValue! attributes. + \begin{lstlisting}[language=modelica] record OnMouseMoveXSetReal Real xVariable "Name of variable to change when cursor moved in x direction"; @@ -1075,8 +1009,9 @@ \subsubsection{Mouse input}\label{mouse-input} Real maxValue; end OnMouseMoveXSetReal; \end{lstlisting} +The \lstinline!OnMouseMoveYSetReal! interaction object works in a corresponding way +as the \lstinline!OnMouseMoveXSetReal! object but in the Y direction. -The \fmtannotationindex{OnMouseMoveYSetReal} interaction object works in a corresponding way as the \lstinline!OnMouseMoveXSetReal! object but in the Y direction. \begin{lstlisting}[language=modelica] record OnMouseMoveYSetReal Real yVariable "Name of variable to change when cursor moved in y direction"; @@ -1084,76 +1019,56 @@ \subsubsection{Mouse input}\label{mouse-input} Real maxValue; end OnMouseMoveYSetReal; \end{lstlisting} +\subsubsection{Edit input}\doublelabel{edit-input} -\subsubsection{Edit input}\label{edit-input} +The \lstinline!OnMouseDownEditInteger! interaction object presents an input field +when the graphical item or component is clicked on. The field shows the +actual value of the variable and allows changing the value. If a too +small or too large value according to the \lstinline!min! and \lstinline!max! parameter values +of the variable is given, the input is rejected. -The \fmtannotationindex{OnMouseDownEditInteger} interaction object presents an input field when the graphical item or component is clicked on. -The field shows the actual value of the variable and allows changing the value. -If a too small or too large value according to the \lstinline!min! and \lstinline!max! parameter values of the variable is given, the input is rejected. \begin{lstlisting}[language=modelica] record OnMouseDownEditInteger Integer variable "Name of variable to change"; end OnMouseDownEditInteger; \end{lstlisting} +The \lstinline!OnMouseDownEditReal! interaction object presents an input field when +the graphical item or component is clicked on. The field shows the +actual value of the variable and allows changing the value. If a too +small or too large value according to the \lstinline!min! and \lstinline!max! parameter values +of the variable is given, the input is rejected. -The \fmtannotationindex{OnMouseDownEditReal} interaction object presents an input field when the graphical item or component is clicked on. -The field shows the actual value of the variable and allows changing the value. -If a too small or too large value according to the \lstinline!min! and \lstinline!max! parameter values of the variable is given, the input is rejected. \begin{lstlisting}[language=modelica] record OnMouseDownEditReal Real variable "Name of variable to change"; end OnMouseDownEditReal; \end{lstlisting} +The \lstinline!OnMouseDownEditString! interaction object presents an input field +when the graphical item or component is clicked on. The field shows the +actual value of the variable and allows changing the value. -The \fmtannotationindex{OnMouseDownEditString} interaction object presents an input field when the graphical item or component is clicked on. -The field shows the actual value of the variable and allows changing the value. \begin{lstlisting}[language=modelica] record OnMouseDownEditString String variable "Name of variable to change"; end OnMouseDownEditString; \end{lstlisting} +\section{Annotations for the Graphical User Interface}\doublelabel{annotations-for-the-graphical-user-interface} -\section{Annotations for the Graphical User Interface}\label{annotations-for-the-graphical-user-interface} - -This section describes the annotations that are used to define properties of the graphical user interface. - -\begin{lstlisting}[language=grammar] - preferred-view-annotation: - annotation "(" preferredView "=" ("info" | "diagram" | "text") ")" -\end{lstlisting} - -The \fmtannotationindex{preferredView} annotation defines the default view when selecting the class. -\lstinline!info! means info layer, i.e., the documentation of the class, \lstinline!diagram! means diagram layer and \lstinline!text! means the Modelica text layer. - -\begin{lstlisting}[language=grammar] - documentation-class-annotation: - annotation "(" DocumentationClass "=" true ")" -\end{lstlisting}% -\annotationindex{DocumentationClass} - -Only allowed as class annotation on any kind of class and implies that this class and all classes within it are treated as having the annotation \lstinline!preferredView = "info"!. -If the annotation \lstinline!preferredView! is explicitly set for a class, it has precedence over a \lstinline!DocumentationClass! annotation. - -\begin{nonnormative} -A tool may display such classes in special ways. For example, the description texts of the classes might be displayed instead -of the class names, and if no icon is defined, a special information default icon may be displayed in the package browser. -\end{nonnormative} - +A class may have the following annotations to define properties of the +graphical user interface: \begin{lstlisting}[language=modelica] annotation(defaultComponentName = "name") -\end{lstlisting}% -\annotationindex{defaultComponentName} +\end{lstlisting} When creating a component of the given class, the recommended component name is \emph{name}. \begin{lstlisting}[language=modelica] -annotation(defaultComponentPrefixes = "prefixes") -\end{lstlisting}% -\annotationindex{defaultComponentPrefixes} + annotation(defaultComponentPrefixes = "prefixes") +\end{lstlisting} When creating a component, it is recommended to generate a declaration of the form -\begin{lstlisting}[language=grammar] -type-prefix type-specifier component-declaration +\begin{lstlisting}[language=modelica] + prefixes class-name component-name \end{lstlisting} The following prefixes may be included in the string \lstinline!prefixes!: \lstinline!inner!, @@ -1166,18 +1081,17 @@ \section{Annotations for the Graphical User Interface}\label{annotations-for-the \end{nonnormative} \begin{lstlisting}[language=modelica] -annotation(missingInnerMessage = "message") -\end{lstlisting}% -\annotationindex{missingInnerMessage} + annotation(missingInnerMessage = "message") +\end{lstlisting} When an \lstinline!outer! component of the class does not have a corresponding \lstinline!inner! component, the literal string message may be used as part of a diagnostic message (together with appropriate context), see -\cref{instance-hierarchy-name-lookup-of-inner-declarations}. +\autoref{instance-hierarchy-name-lookup-of-inner-declarations}. \begin{example} \begin{lstlisting}[language=modelica] model World - $\ldots$ + ... annotation(defaultComponentName = "world", defaultComponentPrefixes = "inner replaceable", missingInnerMessage = "The World object is missing"); @@ -1186,17 +1100,17 @@ \section{Annotations for the Graphical User Interface}\label{annotations-for-the When an instance of model \lstinline!World! is dragged in to the diagram layer, the following declaration is generated: \begin{lstlisting}[language=modelica] -inner replaceable World world; + inner replaceable World world; \end{lstlisting} \end{example} A simple type or component of a simple type may have: \begin{lstlisting}[language=modelica] -annotation(absoluteValue = false); -\end{lstlisting}% -\annotationindex{absoluteValue} + annotation(absoluteValue=false); +\end{lstlisting} -If \lstinline!false!, then the variable defines a relative quantity, and if true an absolute quantity. +If \lstinline!false!, then the variable defines a relative quantity, and if true an +absolute quantity. \begin{nonnormative} When converting between units (in the user-interface for plotting and entering parameters), the \lstinline!offset! must be @@ -1207,36 +1121,52 @@ \section{Annotations for the Graphical User Interface}\label{annotations-for-the A model or block definition may contain: \begin{lstlisting}[language=modelica] -annotation(defaultConnectionStructurallyInconsistent = true) -\end{lstlisting}% -\annotationindex{defaultConnectionStructurallyInconsistent} + annotation(defaultConnectionStructurallyInconsistent=true) +\end{lstlisting} -If \lstinline!true!, it is stated that a default connection will result in a structurally inconsistent model or block\footnote{% - For the precise definition of \emph{structurally inconsistent}, see \textcite{Pantelides1988ConsistentInitialization}.}% -. -A "default connection" is constructed by instantiating the respective \lstinline!model! or \lstinline!block! and for every input \lstinline!u! providing an equation \lstinline!0 = f(u)!, and for every (potential, flow) pair of the form \lstinline!(v, i)!, providing an equation of the form \lstinline!0 = f(v, i)!. +If \lstinline!true!, it is stated that a default connection will result in a +structurally inconsistent model or block\footnote{For the precise + definition of "structurally inconsistent" see the article: + \href{http://epubs.siam.org/doi/abs/10.1137/0909014}{Pantelides C.C.: + The Consistent Initialization of Differential-Algebraic Systems, SIAM + J. Sci. and Stat. Comput. Volume 9, Issue 2, pp. 213--231 (March + 1988)}}. A "default connection" is constructed by instantiating the +respective \lstinline!model! or \lstinline!block! and for every input \lstinline!u! providing an equation +\lstinline!0=f(u)!, and for every (potential,flow) pair of the form \lstinline!(v,i)!, providing +an equation of the form \lstinline!0=f(v,i)!. \begin{nonnormative} -It is useful to check all models/blocks of a Modelica package in a simple way. One check is to default connect every model/block and to check whether the resulting class is structurally consistent (which is a stronger requirement than being balanced). It is rarely needed; but is for example used in \lstinline!Modelica.Blocks.Math.InverseBlockConstraints!, in order to prevent a wrong error message. Additionally, when a user defined model is structurally inconsistent, a tool should try to pinpoint in which class the error is present. This annotation avoids then to show a wrong error message. +It is useful to check all models/blocks of a Modelica package +in a simple way. One check is to default connect every model/block and +to check whether the resulting class is structurally consistent (which is a +stronger requirement than being balanced). It is rarely needed; but is for +example used in Modelica.Blocks.Math.InverseBlockConstraints, in order +to prevent a wrong error message. Additionally, when a user defined +model is structurally inconsistent, a tool should try to pinpoint in +which class the error is present. This annotation avoids then to show a +wrong error message. \end{nonnormative} A class may have the following annotation: \begin{lstlisting}[language=modelica] -annotation(obsolete = "message"); -\end{lstlisting}% -\annotationindex{obsolete} + annotation(obsolete = "message"); +\end{lstlisting} -It indicates that the class ideally should not be used anymore and gives a message indicating the recommended action. -This annotation is not inherited, the assumption is that if a class uses an obsolete class (as a base class or as the class of one of the components) that shall be updated -- ideally without impacting users of the class. -If that is not possible the current class can have also have an \lstinline!obsolete! annotation. +It indicates that the class ideally should not be used anymore and gives +a message indicating the recommended action. +This annotation is not inherited, the assumption is that if a class uses +an obsolete class (as a base-class or as the class of one of the components) +that shall be updated - ideally without impacting users of the class. +If that is not possible the current class can have also have an obsolete-annotation. -A component declaration may have the following annotation: +A declaration may have the following annotations: \begin{lstlisting}[language=modelica] -annotation(unassignedMessage = "message"); -\end{lstlisting}% -\annotationindex{unassignedMessage} + annotation(unassignedMessage = "message"); +\end{lstlisting} -When the variable to which this annotation is attached in the declaration cannot be computed due to the structure of the equations, the string \lstinline!"message"! can be used as a diagnostic message. +When the variable to which this annotation is attached in the +declaration cannot be computed due to the structure of the equations, +the string message can be used as a diagnostic message. \begin{nonnormative} When using BLT partitioning, this means if a variable \lstinline!a! or one of its aliases \lstinline!b = a! or \lstinline!b = -a! @@ -1246,7 +1176,7 @@ \section{Annotations for the Graphical User Interface}\label{annotations-for-the \begin{example} \begin{lstlisting}[language=modelica] connector Frame "Frame of a mechanical system" - $\ldots$ + ... flow Modelica.Units.SI.Force f[3] annotation(unassignedMessage = "All Forces cannot be uniquely calculated. The reason could be that the @@ -1258,92 +1188,48 @@ \section{Annotations for the Graphical User Interface}\label{annotations-for-the \end{lstlisting} \end{example} -A component declaration or a short replaceable class definition may have the following annotation: \begin{lstlisting}[language=modelica] -record Dialog - String tab = "General"; - String group = ""; - Boolean enable = true; - Boolean showStartAttribute = false; - Boolean colorSelector = false; - Selector loadSelector; - Selector saveSelector; - String groupImage = ""; - Boolean connectorSizing = false; -end Dialog; - -record Selector - String filter = ""; - String caption = ""; -end Selector; -\end{lstlisting}% -\annotationindex{Dialog} - -For a short replaceable class definition only the fields \lstinline!tab!, \lstinline!group!, \lstinline!enable! and \lstinline!groupImage! are allowed. - -In the organization of a tool's user interface, the \lstinline!tab! shall correspond to a major divisioning of ``tabs'', and \lstinline!group! correspond to sub-divisioning of ``groups'' within each tab. -An empty \lstinline!group! (the default) means tool-specific choice of group. -The order of components (and class definitions) within each group and the order of the groups and tabs are according to the declaration order, where inherited elements are added at the place of the extends. - -A component shall have at most one of \lstinline!showStartAttribute=true!, \lstinline!colorSelector=true!, \lstinline!loadSelector!, \lstinline!saveSelector! or \lstinline!connectorSizing=true!. - -\begin{example} -When \lstinline!group! is empty, a tool may place parameters in the group ``Parameters'', and place variables with \lstinline!showStartAttribute = true! in the group ``Start Attributes''. -\end{example} - -If \lstinline!enable = false!, the input field may be disabled and no input can be given. +annotation(Dialog(enable = true, tab = "General", + group = "", + showStartAttribute = false, + colorSelector = false, + groupImage="modelica://MyPackage/Resources/Images/switch.png", + connectorSizing = false)); +\end{lstlisting} -If \lstinline!showStartAttribute = true! the dialog should allow the user to set the \lstinline!start!- and \lstinline!fixed!-attributes for the variable instead of the value of the variable. +The annotations \lstinline!tab! and \lstinline!group! define the placement of +the component or of variables in a dialog with optional tab and group +specification, where the empty string (default) means tool-specific group. +The idea is that a tool may as default place parameters in the group "Parameters" in the tab "General", +but add e.g., variables with \lstinline!showStartAttribute=true! to another group. +If \lstinline!enable = false!, the input field may +be disabled and no input can be given. If \lstinline!showStartAttribute = true! the dialog should allow the user to +set the start-value and the fixed attribute for the variable instead of the value-attribute. \begin{nonnormative} -The \lstinline!showStartAttribute = true! is primarily intended for non-parameter values and avoids introducing a separate parameter for the \lstinline!start!-attribute of the variable. +The \lstinline!showStartAttribute = true! is primarily intended for non-parameter values and avoids introducing +a separate parameter for the start-value of the variable. \end{nonnormative} -If \lstinline!colorSelector = true!, it suggests the use of a color selector to pick an \textsc{rgb} color as a vector of three values in the range 0..255 (the color selector should be useable both for vectors of \lstinline!Integer! and \lstinline!Real!). - -The presence of \lstinline!loadSelector! or \lstinline!saveSelector! specifying \fmtannotationindex{Selector} suggests the use of a file dialog to select a file. -Setting \lstinline!filter! will in the dialog only show files that fulfill the given pattern. -Setting \lstinline!text1 (*.ext1);;text2 (*.ext2)! will only show files with file extension \filename{ext1} or \filename{ext2} with the corresponding description texts \lstinline!text1! and \lstinline!text2!, respectively. -\lstinline!caption! is a caption for display in the file dialog. -\lstinline!loadSelector! is used to select an existing file for reading, whereas \lstinline!saveSelector! is used to define a file for writing. +The order of parameters within each group and the order of the groups and tabs are according +to the declaration order, where inherited elements are added at the place of the extends. -The \lstinline!groupImage! references an image using an URI (see \cref{external-resources}), and the image is intended to be shown together with the entire group (only one image per group is supported). -Disabling the input field will not disable the image. -The background of the \lstinline!groupImage! and any image used in HTML-documentation is recommended to be transparent (intended to be a light color) or white. - -The \lstinline!connectorSizing! is described separately in \cref{connector-sizing}. - -\begin{example} -\begin{lstlisting}[language=modelica] -model DialogDemo - parameter Boolean b = true "Boolean parameter"; - parameter Modelica.Units.SI.Length length "Real parameter with unit"; - parameter Real r1 "Real parameter in Group 1" - annotation(Dialog(group = "Group 1")); - parameter Real r2 "Disabled Real parameter in Group 1" - annotation(Dialog(group = "Group 1", enable = not b)); - parameter Real r3 "Real parameter in Tab 1" - annotation(Dialog(tab = "Tab 1")); - parameter Real r4 "Real parameter in Tab 1 and Group 2" - annotation(Dialog(tab = "Tab 1", group = "Group 2")); - $\ldots$ -end DialogDemo; -\end{lstlisting} -When clicking on an instance of model \lstinline!DialogDemo!, a dialog is shown that may have the following layout (other layouts are also possible, this is vendor specific). +If \lstinline!colorSelector=true!, it indicates that an rgb-value selector can be +presented for a vector of three elements and generate values 0..255 (the +annotation should be useable both for vectors of Integers and Reals). -\begin{center} -\includegraphics[scale=0.5]{disabledparameter} -\quad -\includegraphics[scale=0.5]{tabparameter}\\ -\end{center} -\end{example} +The annotation \lstinline!groupImage! references an image using an URI (see +\autoref{external-resources}), and the image is intended to be shown together with the +parameter-group (only one image per group is supported). Disabling the +input field will not disable the image. -\subsection{Connector Sizing}\label{connector-sizing} +The background of the \lstinline!groupImage! and any image used in HTML-documentation is recommended to be transparent (intended to be a light color) - or white. -This section describes the \lstinline!connectorSizing! annotation inside a \lstinline!Dialog! annotation. -The value of \lstinline!connectorSizing! must be a literal \lstinline!false! or \lstinline!true!. -If \lstinline!connectorSizing = false!, this annotation has no effect. -If \lstinline!connectorSizing = true!, the corresponding variable must be declared with the \lstinline!parameter! prefix, must be a subtype of a scalar \lstinline!Integer! and must have a literal default value of zero. +The value of the \lstinline!connectorSizing! annotation must be a literal +\lstinline!false! or \lstinline!true! value. If \lstinline!connectorSizing = false!, this annotation has no effect. +If \lstinline!connectorSizing = true!, the corresponding variable must be declared with the +\lstinline!parameter! prefix, must be a subtype of a scalar \lstinline!Integer! and +must have a literal default value of zero. \begin{nonnormative} The reason why \lstinline!connectorSizing! must be given a literal value is that if the value is an expression, @@ -1357,8 +1243,9 @@ \subsection{Connector Sizing}\label{connector-sizing} model. \end{nonnormative} -If \lstinline!connectorSizing = true!, a tool may set the parameter value in a modifier automatically, if used as dimension size of a vector of connectors. -In that case the parameter should not be modified by the user, and a tool may choose to not display that parameter in the dialog or display it with disabled input field. +If \lstinline!connectorSizing = true!, a tool may set the parameter value +in a modifier automatically, if used as dimension size of a vector of +connectors. \begin{nonnormative} The \lstinline!connectorSizing! annotation is used in cases @@ -1369,32 +1256,92 @@ \subsection{Connector Sizing}\label{connector-sizing} state machines and for certain components of fluid libraries. \end{nonnormative} +Annotation \lstinline!Dialog! is defined as: +\begin{lstlisting}[language=modelica] +record Dialog + parameter String tab = "General"; + parameter String group = "Parameters"; + parameter Boolean enable = true; + parameter Boolean showStartAttribute = false; + parameter Boolean colorSelector = false; + parameter Selector loadSelector; + parameter Selector saveSelector; + parameter String groupImage = ""; + parameter Boolean connectorSizing = false; +end Dialog; + +record Selector + parameter String filter=""; + parameter String caption=""; +end Selector; +\end{lstlisting} +A parameter dialog is a sequence of tabs with a sequence of groups +inside them. + +A \lstinline!Selector! displays a file dialog to select a file. Setting \lstinline!filter! only +shows files that fulfill the given pattern defined by \lstinline!text1 (*.ext1);;text2 (*.ext2)! to show only files with file extension +\filename{ext1} or \filename{ext2} and displaying a description text \lstinline!text1! and +\lstinline!text2!, respectively. Parameter \lstinline!caption! is the text displayed in the +dialog menu. Parameter \lstinline!loadSelector! is used to select an existing file +for reading, whereas parameter \lstinline!saveSelector! is used to define a file for +writing. + +\begin{example} +\begin{lstlisting}[language=modelica] +model DialogDemo + parameter Boolean b = true "Boolean parameter"; + parameter Modelica.Units.SI.Length length "Real parameter with unit"; + parameter Integer nInports=0 + annotation(Dialog(connectorSizing=true)); + parameter Real r1 "Real parameter in Group 1" + annotation(Dialog(group="Group 1")); + parameter Real r2 "Disabled Real parameter in Group 1" + annotation(Dialog(group="Group 1",enable = not b)); + parameter Real r3 "Real parameter in Tab 1" + annotation(Dialog(tab="Tab 1")); + parameter Real r4 "Real parameter in Tab 1 and Group 2" + annotation(Dialog(tab="Tab 1", group="Group 2")); + StepIn stepIn[nInports]; + ... +end DialogDemo; +\end{lstlisting} +When clicking on an instance of model \lstinline!DialogDemo!, a menu pops up +that may have the following layout (other layouts are also possible, +this is vendor specific). Note, parameter \lstinline!nInports! is not present in the +menu since it has the \lstinline!connectorSizing! annotation and therefore it +should not be modified by the user (an alternative is to show parameter +\lstinline!nInports! in the menu but with disabled input field): + +\includegraphics[width=2.25in,height=1.125in]{disabledparameter} +\includegraphics[width=2.625in,height=0.89583in]{tabparameter}\\ +\end{example} + \begin{nonnormative} The following part is non-normative text and describes a useful way to handle the \lstinline!connectorSizing! annotation in a tool (still a tool may use another strategy and/or may handle other cases than described -below). -The recommended rules are clarified at hand of the following +below). The recommended rules are clarified at hand of the following example which represents a connector and a model from the -\lstinline!Modelica.StateGraph! library (note that they may be modified or renamed in future versions): +\lstinline!Modelica.StateGraph! library: \begin{lstlisting}[language=modelica] -connector Step_in // Only 1:1 connections are possible since input used +connector StepIn // Only 1:1 connections are possible since input used output Boolean occupied; input Boolean set; -end Step_in; - -block Step - // nIn cannot be set through the dialog (but maybe shown) - parameter Integer nIn=0 annotation(Dialog(connectorSizing=true)); - Step_in inPorts[nIn]; - $\ldots$ +end StepIn; + +model Step + // nIn cannot be set in the parameter dialog (but maybe shown) + parameter Integer nIn=0 + annotation(Dialog(connectorSizing=true)); + StepIn inPorts[nIn]; + ... end Step; \end{lstlisting} If the parameter is used as dimension size of a vector of connectors, it is automatically updated according to the following rules: \begin{enumerate} -\item \label{connectorSizing:addVector} +\item If a new connection line is drawn between one outside and one inside vector of connectors both dimensioned with (\lstinline!connectorSizing!) parameters, a connection between the two vectors is performed and the @@ -1403,38 +1350,41 @@ \subsection{Connector Sizing}\label{connector-sizing} of a (\lstinline!connectorSizing!) parameter. \emph{Example:} Assume there is a connector \lstinline!inPorts! and a component \lstinline!step1!: \begin{lstlisting}[language=modelica] -parameter Integer nIn=0 annotation(Dialog(connectorSizing=true)); -Step_in inPorts[nIn]; -Step step1(nIn=0); + parameter Integer nIn=0 annotation(Dialog(connectorSizing=true)); + StepIn inPorts[nIn]; + Step step1(nIn=0); \end{lstlisting} Drawing a connection line between connectors \lstinline!inPorts! and \lstinline!step1.inPorts! results in: \begin{lstlisting}[language=modelica] parameter Integer nIn=0 annotation(Dialog(connectorSizing=true)); - Step_in inPorts[nIn]; + StepIn inPorts[nIn]; Step step1(nIn=nIn); // nIn=0 changed to nIn=nIn -equation - connect(inPorts, step1.inPorts); // new connect-equation + equation + connect(inPorts, step1.inPorts); // new connect equation \end{lstlisting} -\item\label{connectorSizing:deleteVector} - If a connection line is deleted between one outside and one inside vector of connectors both dimensioned with (\lstinline!connectorSizing!) parameters, the \lstinline!connect!-equation is removed and the (\lstinline!connectorSizing!) parameter of the component is set to zero or the modifier is removed. - \emph{Example:} Assume the connection line in the resulting example in case~\ref{connectorSizing:addVector} is removed. +\item + If a connection line is deleted between one outside and one + inside vector of connectors both dimensioned with (\lstinline!connectorSizing!) + parameters, the connect equation is removed and the (\lstinline!connectorSizing!) + parameter of the component is set to zero or the modifier is removed. + \emph{Example:} Assume the connection line in (3) is removed. This results in: \begin{lstlisting}[language=modelica] -parameter Integer nIn=0 annotation(Dialog(connectorSizing=true)); -Step_in inPorts[nIn]; -Step step1; // modifier nIn=nIn is removed + parameter Integer nIn=0 annotation(Dialog(connectorSizing=true)); + StepIn inPorts[nIn]; + Step step1; // modifier nIn=nIn is removed \end{lstlisting} -\item \label{connectorSizing:addScalar} +\item If a new connection line is drawn to an inside connector with - \lstinline!connectorSizing! and case~\ref{connectorSizing:addVector} does not apply then, the parameter is + connectorSizing and case 1 does not apply then, the parameter is incremented by one and the connection is performed for the new highest index. \emph{Example:} Assume that 3 connections are present and a new connection is performed. The result is: \begin{lstlisting}[language=modelica] - Step step1(nIn=4); // index changed from nIn=3 to nIn=4 -equation - connect($\ldots$, step1.inPorts[4]); // new connect-equation + Step step1(nIn=4); // index changed from nIn=3 to nIn=4 + equation + connect(.., step1.inPorts[4]); // new connect equation \end{lstlisting} In some applications, like state machines, the vector index is used as a priority, e.g., to define which transition is firing if @@ -1442,9 +1392,9 @@ \subsection{Connector Sizing}\label{connector-sizing} not sufficient to only provide a mechanism to always connect to the last index. Instead, some mechanism to select an index conveniently should be provided. -\item \label{connectorSizing:deleteScalar} +\item If a connection line is deleted to an inside connector with - \lstinline!connectorSizing! and case~\ref{connectorSizing:deleteVector} does not apply then, then the + \lstinline!connectorSizing! and case 2 does not apply then, then the (\lstinline!connectorSizing!) parameter is decremented by one and all connections with index above the deleted connection index are also decremented by one. \emph{Example:}Assume there are 4 connections: @@ -1467,18 +1417,18 @@ \subsection{Connector Sizing}\label{connector-sizing} \end{lstlisting} \end{enumerate} -These rules also apply if the connectors and/or components are defined in superclass. - -\emph{Example:} Assume that \lstinline!step1! is defined in superclass \lstinline!MyCompositeStep! with 3 connections, and a new connection is performed in a derived class. -The result is: +These rules also apply if the connectors and/or components are +defined in superclass. \emph{Example:} Assume that \lstinline!step1! is defined in +superclass \lstinline!CompositeStep! with 3 connections, and a new connection is +performed in a subclass. The result is: \begin{lstlisting}[language=modelica] - extends MyCompositeStep(step1(nIn=4)); // new modifier nIn=4 + extends CompositeStep(step1(nIn=4)); // new modifier nIn=4 equation - connect($\ldots$, step1.inPorts[4]); // new connect-equation + connect(.., step1.inPorts[4]); // new connect equation \end{lstlisting} \end{nonnormative} -\section{Annotations for Version Handling}\label{annotations-for-version-handling} +\section{Annotations for Version Handling}\doublelabel{annotations-for-version-handling} A top-level package or model can specify the version of top-level classes it uses, its own version number, and if possible how to convert @@ -1486,19 +1436,19 @@ \section{Annotations for Version Handling}\label{annotations-for-version-handlin consistent versions are used, and if possible to upgrade usage from an earlier version to a current one. -\subsection{Version Numbering}\label{version-numbering} +\subsection{Version Numbering}\doublelabel{version-numbering} Version numbers are of the forms: \begin{itemize} \item - Main release versions: \lstinline[language=grammar]!""" UNSIGNED-INTEGER { "." UNSIGNED-INTEGER } """!\\ - Example: \lstinline!"2.1"! + Main release versions: """ \lstinline!UNSIGNED-INTEGER! \{ "." \lstinline!UNSIGNED-INTEGER! \} """\\ + Example: "2.1" \item - Pre-release versions: \lstinline[language=grammar]!""" UNSIGNED-INTEGER { "." UNSIGNED-INTEGER } " " {S-CHAR} """!\\ - Example: \lstinline!"2.1 Beta 1"! + Pre-release versions: """ \lstinline!UNSIGNED-INTEGER! \{ "." \lstinline!UNSIGNED-INTEGER! \} " " \{\lstinline!S-CHAR!\} """\\ + Example: "2.1 Beta 1" \item - Un-ordered versions: \lstinline[language=grammar]!""" NON-DIGIT {S-CHAR} """!\\ - Example: \lstinline!"Test 1"! + Un-ordered versions: """ \lstinline!NON-DIGIT! \{\lstinline!S-CHAR!\} """\\ + Example: "Test 1" \end{itemize} The main release versions are ordered using the hierarchical numerical @@ -1506,39 +1456,49 @@ \subsection{Version Numbering}\label{version-numbering} pre-release versions of the same main release version are internally ordered alphabetically. -\subsection{Version Handling}\label{version-handling} +\subsection{Version Handling}\doublelabel{version-handling} -In a top-level class, the version number and the dependency to earlier versions of this class are defined using one or more of the following annotations: -% TODO: Syntax below is a mess: neither Modelica, pseudo-code record, nor grammar. +In a top-level class, the version number and the dependency to earlier +versions of this class are defined using one or more of the following +annotations: \begin{itemize} \item - \lstinline!version = CURRENT-VERSION-NUMBER!\annotationindex{version}\\ - Defines the version number of the model or package. - All classes within this top-level class have this version number. + \lstinline!version = CURRENT-VERSION-NUMBER!\\ + Defines the version number of the model or package. All classes within + this top-level class have this version number. \item - \lstinline!conversion(noneFromVersion = VERSION-NUMBER)!\annotationindex{conversion}\\ - Defines that user models using the \lstinline!VERSION-NUMBER! can be upgraded to the \lstinline!CURRENT-VERSION-NUMBER! of the current class without any changes. + \lstinline!conversion(noneFromVersion = VERSION-NUMBER)!\\ + Defines that user models using the \lstinline!VERSION-NUMBER! can be upgraded to + the \lstinline!CURRENT-VERSION-NUMBER! of the current class without any changes. \item \lstinline!conversion(from(version = Versions, [to=VERSION-NUMBER,] Convert))!\\ - where \emph{Versions} is \lstinline!VERSION-NUMBER! \textbar{} \lstinline!{VERSION-NUMBER, VERSION-NUMBER, $\ldots$}! and \lstinline!Convert! is \lstinline!script="$\ldots$"! \textbar{} \lstinline!change={conversionRule(), $\ldots$, conversionRule()}!\\*[.5ex] - Defines that user models using the \lstinline!VERSION-NUMBER! or any of the given \lstinline!VERSION-NUMBER! can be upgraded to the given \lstinline!VERSION-NUMBER! (if the to-tag is missing this is the \lstinline!CURRENT-VERSION-NUMBER!) of the current class by applying the given conversion rules. - The script consists of an unordered sequence of \lstinline!conversionRule();! (and optionally Modelica comments). - The \lstinline!conversionRule! functions are defined in \cref{conversion-rules}. + where \emph{Versions} is \lstinline!VERSION-NUMBER! \textbar{} + \lstinline!{VERSION-NUMBER,VERSION-NUMBER, ...}!\ + and \lstinline!Convert! is \lstinline!script="..."! \textbar{} + \lstinline!change={conversionRule(), ..., conversionRule()}!\\*[.5ex] + Defines that user models using the \lstinline!VERSION-NUMBER! or any of the given + \lstinline!VERSION-NUMBER! can be upgraded to the given \lstinline!VERSION-NUMBER! (if the + to-tag is missing this is the \lstinline!CURRENT-VERSION-NUMBER!) of the current + class by applying the given conversion rules. The script consists of + an unordered sequence of \lstinline!conversionRule();! (and optionally Modelica + comments). The \lstinline!conversionRule! functions are defined in \autoref{conversion-rules}. \begin{nonnormative} The to-tag is added for clarity and optionally allows a tool to convert in multiple steps. \end{nonnormative} \item - \lstinline!uses(IDENT (version = VERSION-NUMBER [, versionBuild=INTEGER] [, dateModified=STRING] ) )!\annotationindex{uses}\\ - Defines that classes within this top-level class uses version \lstinline!VERSION-NUMBER! of classes within the top-level class \lstinline!IDENT!. + \lstinline!uses(IDENT (version = VERSION-NUMBER [, versionBuild=INTEGER] [, dateModified=STRING] ) )!\\ + Defines that classes within this top-level class uses version + \lstinline!VERSION-NUMBER! of classes within the top-level class \lstinline!IDENT!. \end{itemize} -The annotations \lstinline!uses! and \lstinline!conversion! may contain several different sub-entries. +The annotations \lstinline!uses! and \lstinline!conversion! may contain several different +sub-entries. \begin{example} \begin{lstlisting}[language=modelica] package Modelica - $\ldots$ + ... annotation(version="3.1", conversion(noneFromVersion="3.1 Beta 1", noneFromVersion="3.1 Beta 2", @@ -1549,13 +1509,13 @@ \subsection{Version Handling}\label{version-handling} end Modelica; model A - $\ldots$ + ... annotation(version="1.0", uses(Modelica(version="1.5"))); end A; model B - $\ldots$ + ... annotation(uses(Modelica(version="3.1 Beta 1"))); end B; \end{lstlisting} @@ -1565,15 +1525,13 @@ \subsection{Version Handling}\label{version-handling} required when upgrading. \end{example} -\subsubsection{Conversion rules}\label{conversion-rules} +\subsubsection{Conversion rules}\doublelabel{conversion-rules} -% Using mbox to avoid having line starting with "," There are a number of functions: \lstinline!convertClass!, \lstinline!convertClassIf!, -\lstinline!convertElement!, \mbox{\lstinline!convertModifiers!,} \lstinline!convertMessage! defined as follows. The +\lstinline!convertElement!, \lstinline!convertModifiers!, \lstinline!convertMessage! defined as follows. The calls of these functions do not directly convert, instead they define -conversion rules as below. -It is recommended, but not required, to terminate each such function call with a semi-colon. -The order between the function calls does not matter, instead the longer paths (in terms of number of hierarchical names) +conversion rules as below. The order between the function calls does not +matter, instead the longer paths (in terms number of hierarchical names) are used first as indicated below, and it is an error if there are any ambiguities. @@ -1581,14 +1539,19 @@ \subsubsection{Conversion rules}\label{conversion-rules} corresponding to the old version. \begin{nonnormative} -Whenever possible tools should preserve the original style of the model, e.g.\ use of imports. +Whenever possible tools should preserve the original style of the model, e.g. use of imports. \end{nonnormative} These functions can be called with literal strings or array of strings -and vectorize according to \cref{scalar-functions-applied-to-array-arguments}. +and vectorize according to \autoref{scalar-functions-applied-to-array-arguments}. -All of these convert-functions only use inheritance among user models, and not in the library that is used for the conversion -- thus conversions of base classes will require multiple conversion calls; this ensures that the conversion is independent of the new library structure. -The name of the class used as argument to \lstinline!convertElement! and \lstinline!convertModifiers! is similarly the old name of the class, i.e.\ the name before it is possibly converted by \lstinline!convertClass!. +All of these convert-functions only use inheritance among user +models, and not in the library that is used for the conversion -- thus +conversions of base-classes will require multiple conversion-calls; this +ensures that the conversion is independent of the new library structure. +The class-name used as argument to \lstinline!convertElement! and \lstinline!convertModifiers! +is similarly the old name of the class, i.e. the name before it is +possibly converted by \lstinline!convertClass!. \begin{nonnormative} Specifying conversions using the old name of a class allows the conversion to be done without access to the old @@ -1596,40 +1559,46 @@ \subsubsection{Conversion rules}\label{conversion-rules} of the library during the conversion. \end{nonnormative} -\paragraph*{convertClass("OldClass", "NewClass")}\label{convertclassoldclassnewclass}\annotationindex{convertClass} +\paragraph*{convertClass("OldClass", "NewClass")}\doublelabel{convertclassoldclassnewclass} Convert class \lstinline!OldClass! to \lstinline!NewClass!. -Match longer path first, so if converting both \lstinline!A! to \lstinline!C! and \lstinline!A.B! to \lstinline!D! then \lstinline!A.F! is converted to \lstinline!C.F! and \lstinline!A.B.E! to \lstinline!D.E!. This is considered before \lstinline!convertMessage! for the same \lstinline!OldClass!. +Match longer path first, so if converting both \lstinline!A! to \lstinline!C! and \lstinline!A.B! to \lstinline!D! then +\lstinline!A.F! is converted to \lstinline!C.F! and \lstinline!A.B.E! to \lstinline!D.E!. This is considered before +convertMessage for the same \lstinline!OldClass!. \begin{example} Consider the following as part of a conversion script: \begin{lstlisting}[language=modelica] -convertClass("Modelica.SIunits", "Modelica.Units.SI"); -convertClass("Modelica.SIunits.Icons", "Modelica.Units.Icons"); +convertClass("Modelica.SIunits", "Modelica.Units.SI") +convertClass("Modelica.SIunits.Icons", "Modelica.Units.Icons") \end{lstlisting} This ensures that for example \lstinline!Modelica.SIunits.Length! is converted to \lstinline!Modelica.Units.SI.Length! and \lstinline!Modelica.SIunits.Icons! is converted to \lstinline!Modelica.SIunits.Icons!. \end{example} -\paragraph*{convertClassIf("OldClass", "oldElement", "whenValue", "NewClass")}\label{convertclassifoldclass-oldelement-whenvalue-newclass}\annotationindex{convertClassIf} +\paragraph*{convertClassIf("OldClass", "oldElement", "whenValue", "NewClass")}\doublelabel{convertclassifoldclass-oldelement-whenvalue-newclass} Convert class \lstinline!OldClass! to \lstinline!NewClass! if the literal modifier for \lstinline!oldElement! has the value \lstinline!whenValue!, and also remove the modifier for \lstinline!oldElement!. -These are considered before \lstinline!convertClass! and \lstinline!convertMessage! for the same \lstinline!OldClass!. +These are considered before \lstinline!convertClass! and \lstinline!convertMessage! for the same +\lstinline!OldClass!. The old element should be of a \lstinline!Boolean!, \lstinline!Integer!, \lstinline!String!, or enumeration type and the match is based on the literal value of the modifier. -For string elements the value argument to \lstinline!convertClassIf! shall be up-quoted, e.g.\ \lstinline!"\"My String\""!, +For string elements the value argument to \lstinline!convertClassIf! shall be up-quoted, e.g. \lstinline!"\"My String\""!, and for enumeration literals only the enumeration literal part of the old value matters, e.g., \lstinline!red! for \lstinline!"Colors.red"!. -\paragraph*{convertElement("OldClass", "OldName", "NewName")}\label{convertelementoldclassoldnamenewname}\annotationindex{convertElement} +\paragraph*{convertElement("OldClass", "OldName", "NewName")}\doublelabel{convertelementoldclassoldnamenewname} -In \lstinline!OldClass!, convert element \lstinline!OldName! to \lstinline!NewName!. Both \lstinline!OldName! and \lstinline!NewName! normally refer to components, but they may also refer to -class-parameters, or hierarchical names. For hierarchical names, the longest match is used first. +In \lstinline!OldClass! convert element \lstinline!OldName! to \lstinline!NewName!. +Both \lstinline!OldName! and \lstinline!NewName! +normally refer to components -- but they may also refer to +class-parameters, or hierarchical names. For hierarchical names the +longest match is used first. For replaceable classes in packages (and replaceable classes in other classes) \lstinline!convertElement! shall be used if the class is renamed within the package (or class), whereas \lstinline!convertClass! shall only be used if the class @@ -1644,42 +1613,43 @@ \subsubsection{Conversion rules}\label{conversion-rules} \begin{lstlisting}[language=modelica] convertElement({"Modelica.Mechanics.MultiBody.World", "Modelica.Mechanics.MultiBody.World.gravityAcceleration"}, - "mue", "mu"); + "mue", "mu") \end{lstlisting} This implies that \begin{lstlisting}[language=modelica] -Modelica.Mechanics.MultiBody.World world(mue=2); -function f=Modelica.Mechanics.MultiBody.World.gravityAcceleration(mue=4); + Modelica.Mechanics.MultiBody.World world(mue=2); + function f=Modelica.Mechanics.MultiBody.World.gravityAcceleration(mue=4); \end{lstlisting} is converted to: \begin{lstlisting}[language=modelica] -Modelica.Mechanics.MultiBody.World world(mu=2); -function f=Modelica.Mechanics.MultiBody.World.gravityAcceleration(mu=4); + Modelica.Mechanics.MultiBody.World world(mu=2); + function f=Modelica.Mechanics.MultiBody.World.gravityAcceleration(mu=4); \end{lstlisting} \end{example} -\paragraph*{convertModifiers}\label{convertmodifiers}\annotationindex{convertModifiers} -\ % Dummy paragraph content to ensure listing below starts on a fresh line. +\paragraph*{convertModifiers}\doublelabel{convertmodifiers} \begin{lstlisting}[language=modelica] convertModifiers("OldClass", - {"OldModifier1=default1", "OldModifier2=default2", $\ldots$}, - {"NewModifier1=$\ldots$%OldModifier2%$\ldots$", "NewModifier2=$\ldots$", $\ldots$} - [, simplify=true]); +{"OldModifier1=default1", "OldModifier2=default2", ...}, +{"NewModifier1=...%OldModifier2%...", "NewModifier2=...", ...} [, simplify=true] ) \end{lstlisting} -Normal case; if any modifier among \lstinline!OldModifier! exist then replace all of them with the list of\linebreak[4] \lstinline!NewModifiers!. -The \lstinline!$\ldots$%OldModifier2%$\ldots$! indicate an expression that may involve the values of the old modifiers (tools are responsible for adding parenthesis if needed). +Normal case; if any modifier among \lstinline!OldModifier! exist then replace all of +them with the list of \lstinline!NewModifiers!. The \lstinline!...%OldModifier2%...! indicate an expression that may +involve the values of the old modifiers (tools are responsible for adding parenthesis if needed). The lists of old and new modifiers can have different lengths. -The defaults (if present) are used if there are multiple \lstinline!OldModifier! and not all are set in the component instance. +The defaults (if present) are used if there +are multiple \lstinline!OldModifier! and not all are set in the component instance. The defaults are optional if there is at most one \lstinline!OldModifier! element, and should otherwise be provided. If \lstinline!simplify! is specified and true then perform obvious simplifications to clean up the new modifier; otherwise leave as is. \begin{nonnormative} -Note: \lstinline!simplify! is primarily intended for converting enumerations and emulated enumerations that naturally lead to large nested \lstinline!if!-expressions. -The simplifications may also simplify parts of the original expression. +Note: \lstinline!simplify! is primarily intended for converting enumerations and emulated +enumerations that naturally lead to large nested if-expressions. The +simplifications may also simplify parts of the original expression. \end{nonnormative} If the modifiers contain literal string values they must be quoted. @@ -1687,30 +1657,39 @@ \subsubsection{Conversion rules}\label{conversion-rules} Behaviour in unusual cases: \begin{itemize} \item - if \lstinline!NewModifier! list is empty then the modifier is just removed + if NewModifier list is empty then the modifier is just removed \item - If \lstinline!OldModifer! list is empty it is added for all uses of the class + If OldModifer list is empty it is added for all uses of the class \item - If \lstinline!OldModifier$i$! is \lstinline!cardinality(a) = 0! the conversion will only be applied for a component comp if there are no inside connections to \lstinline!comp.a!. This can be combined with other modifiers that are handled in the usual way. + If OldModifier\_i is cardinality(a)=0 the conversion will only be + applied for a component comp if there are no inside connections to + comp.a. This can be combined with other modifiers that are handled in + the usual way. \item - If \lstinline!OldModifier$i$! is \lstinline!cardinality(a) = 1! the conversion will only be applied for a component comp if there are any inside connections to \lstinline!comp.a!. + If OldModifier\_i is cardinality(a)=1 the conversion will only be + applied for a component comp if there are any inside connections to + comp.a. \end{itemize} -The converted modifiers and existing modifiers are merged such that the existing modifiers take precedence over the result of \lstinline!convertModifiers!. -A diagnostics is recommended if this merging removes some modifiers unless those modifiers are identical or it is the special case of an empty \lstinline!OldModifier! list. +The converted modifiers and existing modifiers are merged such that the existing modifiers take precedence over the result of convertModifiers. +A diagnostics is recommended if this merging removes some modifiers unless those modifiers are identical or it is the special case of an empty OldModifier list. \begin{nonnormative} This can be used to handle the case where the default value was changed. \end{nonnormative} -Converting modifiers with cardinality is used to remove the deprecated operator \lstinline!cardinality! from model libraries, and replace tests on cardinality in models by parameters explicitly enabling the different cases. -The case where the old class is used as a base class, and there exist outside connections to \lstinline!a!, and there is \lstinline!convertModifiers! involving the cardinality of \lstinline!a! is not handled. +Converting modifiers with cardinality is used to remove the deprecated +operator cardinality from model libraries, and replace tests on +cardinality in models by parameters explicitly enabling the different +cases. The case where the old class is used as a base-class, and there exist outside connections to +\lstinline!a!, and there is \lstinline!convertModifiers! involving the cardinality of \lstinline!a! is not +handled. \begin{nonnormative} Having a parameter for explicitly enabling the different cases means that instead of model \lstinline!A! internally testing if its connector \lstinline!B! is connected, there will be a parameter for enabling connector \lstinline!B!, and the conversion ensures that each component of model \lstinline!A! will have this parameter set accordingly. -In case a parameter is simply renamed it is preferable to use \lstinline!convertElement!, since that also handles e.g.\ binding equations +In case a parameter is simply renamed it is preferable to use \lstinline!convertElement!, since that also handles e.g. binding equations using the parameter. \end{nonnormative} @@ -1719,37 +1698,33 @@ \subsubsection{Conversion rules}\label{conversion-rules} The conversion \begin{lstlisting}[language=modelica] convertClass("Modelica.Thermal.FluidHeatFlow.Components.IsolatedPipe", - "Modelica.Thermal.FluidHeatFlow.Components.Pipe"); + "Modelica.Thermal.FluidHeatFlow.Components.Pipe") convertModifiers({"Modelica.Thermal.FluidHeatFlow.Components.IsolatedPipe"}, - fill("",0), {"useHeatPort=false"}); + fill("",0), {"useHeatPort=false"}) convertClass("Modelica.StateGraph.Temporary.NumericValue", - "Modelica.Blocks.Interaction.Show.RealValue"); + "Modelica.Blocks.Interaction.Show.RealValue") convertModifiers("Modelica.StateGraph.Temporary.NumericValue", - {"Value"}, {"number=%Value%"}); + {"Value"}, {"number=%Value%"}) convertModifiers("Modelica.StateGraph.Temporary.NumericValue", - {"hideConnector"}, {"use_numberPort=not %hideConnector%"}); + {"hideConnector"}, {"use_numberPort=not %hideConnector%"}) convertModifiers("Modelica.Blocks.Math.LinearDependency", - {"y0=0", "k1=0", "k2=0"}, {"y0=%y0%", "k1=%y0%*%k1%", "k2=%y0%*%k2%"}, - true); -convertClass( - "Modelica.Electrical.Machines.BasicMachines.QuasiStationaryDCMachines", - "Modelica.Electrical.Machines.BasicMachines.QuasiStaticDCMachines"); -convertElement("Modelica.Electrical.Machines.Interfaces.PartialBasicDCMachine", - "quasiStationary", "quasiStatic"); + {"y0=0", "k1=0", "k2=0"}, {"y0=%y0%", "k1=%y0%*%k1%", "k2=%y0%*%k2%"}, true) +convertClass("Modelica.Electrical.Machines.BasicMachines.QuasiStationaryDCMachines", + "Modelica.Electrical.Machines.BasicMachines.QuasiStaticDCMachines") +convertElement({"Modelica.Electrical.Machines.Interfaces.PartialBasicDCMachine"}, + "quasiStationary", "quasiStatic") convertElement("Modelica.Electrical.Machines.BasicMachines.QuasiStationaryDCMachines.DC_ElectricalExcited", - "quasiStationary", "quasiStatic"); + "quasiStationary", "quasiStatic") \end{lstlisting} converts \begin{lstlisting}[language=modelica] Modelica.Thermal.FluidHeatFlow.Components.IsolatedPipe pipe1; -Modelica.StateGraph.Temporary.NumericValue tempValue(Value=10, - hideConnector=true); +Modelica.StateGraph.Temporary.NumericValue tempValue(Value=10, hideConnector=true); Modelica.Blocks.Math.LinearDependency linearDep(y0=2, k2=1); model A - import Modelica.Electrical.Machines.BasicMachines; - extends BasicMachines.QuasiStationaryDCMachines.DC_ElectricalExcited; + extends Modelica.Electrical.Machines.BasicMachines.QuasiStationaryDCMachines.DC_ElectricalExcited; end A; model B extends A; @@ -1762,38 +1737,29 @@ \subsubsection{Conversion rules}\label{conversion-rules} Modelica.Blocks.Interaction.Show.RealValue(number=10, use_numberPort=not true); Modelica.Blocks.Math.LinearDependency linearDep(y0=2, k1=0, k2=2); model A - import Modelica.Electrical.Machines.BasicMachines; - extends BasicMachines.QuasiStaticDCMachines.DC_ElectricalExcited; + extends Modelica.Electrical.Machines.BasicMachines.QuasiStaticDCMachines.DC_ElectricalExcited; end A; model B extends A; Boolean b=a.quasiStatic; end B; \end{lstlisting} -The \lstinline!convertElement! call for \lstinline!DC_ElectricalExcited! is needed to avoid relying on base classes in the original library where \lstinline!DC_ElectricalExcited! inherits from \lstinline!PartialBasicDCMachine!. +The \lstinline!convertElement! call for \lstinline!DC_ElectricalExcited! is needed to avoid relying on base-classes +in the original library where \lstinline!DC_ElectricalExcited! inherits from \lstinline!PartialBasicDCMachine!. However, the inheritance among the models to convert (in this case \lstinline!B! inherits from \lstinline!A!) should be handled. \end{example} -\paragraph*{convertMessage("OldClass", "Failed Message")}\label{convertmessageoldclass-failed-message}\annotationindex{convertMessage} +\paragraph*{convertMessage("OldClass", "Failed Message");}\doublelabel{convertmessageoldclass-failed-message} For any use of \lstinline!OldClass! (or element of \lstinline!OldClass!) report that conversion could not be applied with the given message. \begin{nonnormative} -This may be useful if there is no possibility to convert a specific class. An alternative is to construct \lstinline!ObsoleteLibraryA! for problematic +This may be useful if there is no possibility to convert a specific class. An alternative is to construct \lstinline!ObsoleteLibraryA! for problematic cases, which may be more work but allows users to directly run the models after the conversion and later convert them. \end{nonnormative} -\paragraph*{convertMessage("OldClass", "Failed Message", "oldElement")}\label{convertmessageoldclass-failed-message2} - -For any use of \lstinline!oldElement! in \lstinline!OldClass! report that conversion -could not be applied with the given message. - -\begin{nonnormative} -This is useful if there is no possibility to convert a specific parameter (or other element), especially if it rarely modified. If the parameter had no impact on the model it can be removed using \lstinline!convertModifiers!, see \cref{convertmodifiers}. -\end{nonnormative} - -\subsection{Mapping of Versions to File System}\label{mapping-of-versions-to-file-system} +\subsection{Mapping of Versions to File System}\doublelabel{mapping-of-versions-to-file-system} A top-level class, \lstinline!IDENT!, with version \lstinline!VERSION-NUMBER! can be stored in one of the following ways in a directory given in the \lstinline!MODELICAPATH!: @@ -1814,25 +1780,26 @@ \subsection{Mapping of Versions to File System}\label{mapping-of-versions-to-fil This allows a tool to access multiple versions of the same package. -\subsection{Version Date and Build Information}\label{version-date-and-build-information} +\subsection{Version Date and Build Information}\doublelabel{version-date-and-build-information} -Besides version information, a top-level class can have additionally the following top-level annotations to specify associated information to the version number:% +Besides version information, a top level class can have additionally the +following top-level annotations to specify associated information to the +version number: \begin{lstlisting}[language=modelica] String versionDate "UTC date of first version build (in format: YYYY-MM-DD)"; Integer versionBuild "Larger number is a more recent maintenance update"; -String dateModified "UTC date and time of the latest change to the package - in the following format (with one space between date - and time): YYYY-MM-DD hh:mm:ssZ"; +String dateModified "UTC date and time of the latest change to the package in the + following format (with one space between date and time): + YYYY-MM-DD hh:mm:ssZ"; String revisionId "Revision identifier of the version management system used - to manage this library. It marks the latest submitted - change to any file belonging to the package"; -\end{lstlisting}% -\annotationindex{versionDate}\annotationindex{versionBuild}\annotationindex{dateModified}\annotationindex{revisionId} + to manage this library. It marks the latest submitted change to + any file belonging to the package"; +\end{lstlisting} \begin{example} -\begin{lstlisting}[language=modelica,mathescape=false] +\begin{lstlisting}[language=modelica] package Modelica - $\ldots$ + ... annotation(version = "3.0.1", versionDate = "2008-04-10", versionBuild = 4, @@ -1850,11 +1817,11 @@ \subsection{Version Date and Build Information}\label{version-date-and-build-inf \end{lstlisting} \end{example} -The meanings of these annotations are: +The meaning of these annotation is: \begin{itemize} \item \lstinline!version! is the version number of the released library, - see \cref{version-handling}. + see \autoref{version-handling}. \item \lstinline!versionDate! is the date in UTC format (according to ISO 8601) when the library was released. This string is updated by the @@ -1870,9 +1837,11 @@ \subsection{Version Date and Build Information}\label{version-date-and-build-inf library. There are no conversions between the same versions with different build numbers. - Two releases of a library with the same \lstinline!version! but different \lstinline!versionBuild! are in general assumed to be compatible. - In special cases, the \lstinline!uses!-clause of a model may specify \lstinline!versionBuild! and/or \lstinline!dateModified!. - In such a case the tool is expected to give a warning if there is a mismatch between library and model. + Two releases of a library with the same \lstinline!version! but different + \lstinline!versionBuild! are in general assumed to be compatible. In special + cases, the \lstinline!uses! clause of a model may specify \lstinline!versionBuild! and/or + \lstinline!dateModified!. In such a case the tool is expected to give + a warning if there is a mismatch between library and model. \item \lstinline!dateModified! is the UTC date and time (according to ISO 8601) of the last modification of the package. @@ -1883,8 +1852,8 @@ \subsection{Version Date and Build Information}\label{version-date-and-build-inf \end{nonnormative} \item \lstinline!revisionId! is a tool specific revision identifier - possibly generated by a source code management system (e.g.\ Subversion - or CVS). This information exactly identifies the library + possibly generated by a source code management system (e.g. Subversion + or CVS). This information allows to exactly identify the library source code in the source code management system. \end{itemize} @@ -1895,7 +1864,7 @@ \subsection{Version Date and Build Information}\label{version-date-and-build-inf It is recommended that tools do not automatically store \lstinline!versionBuild! and \lstinline!dateModified! in the \lstinline!uses! annotation. \end{nonnormative} -\section{Annotations for Access Control to Protect Intellectual Property}\label{annotations-for-access-control-to-protect-intellectual-property} +\section{Annotations for Access Control to Protect Intellectual Property}\doublelabel{annotations-for-access-control-to-protect-intellectual-property} This section presents annotations to define the protection and the licensing of packages. The goal is to unify basic mechanisms to control @@ -1923,44 +1892,48 @@ \section{Annotations for Access Control to Protect Intellectual Property}\label{ different encryption formats. \end{nonnormative} -The following definitions relate to access control. - -\begin{definition}[Protection]\index{protection!access control} -Define what parts of a class are visible. -\end{definition} - -\begin{definition}[Obfuscation]\index{obfuscation!access control} -Changing a Modelica class or generated code so that it is difficult to inspect by a user (e.g.\ by automatically renaming variables to non-meaningful names). -\end{definition} - -\begin{definition}[Encryption]\index{encryption!access control} -Encoding of a model or a package in a form so that the modeler cannot inspect any content of a class without an appropriate key. An encrypted package that has the \lstinline!Protection! annotation -is read-only; the way to modify it is to generate a new encrypted version. -\end{definition} - -\begin{definition}[Licensing]\index{licensing!access control} -Restrict the use of an encrypted package for particular users for a specified period of time. -\end{definition} +\textbf{Definitions:} +\begin{longtable}[]{|p{2.5cm}|p{12cm}|} +\hline +\tablehead{Term} & \tablehead{Description}\\ \hline +\endhead +\textbf{Protection} & Define what parts of a class are visible.\\ +\hline +\textbf{Obfuscation} & Changing a Modelica class or generated code so that it is difficult to inspect by a user +(e.g. by automatically renaming variables to non-meaningful names).\\ +\hline +\textbf{Encryption} & Encoding of a model or a package in a form so that +the modeler cannot inspect any content of a class without an appropriate +key. An encrypted package that has the \lstinline!Protection! annotation is +read-only; the way to modify it is to generate a new encrypted version.\\ +\hline +\textbf{Licensing} & Restrict the use of an encrypted package for particular users for a specified period of time.\\ +\hline -In this section annotations are defined for protection and licensing. Obfuscation and encryption are not standardized. +\end{longtable} -Protection and licensing are both defined inside the \fmtannotationindex{Protection} annotation: +In this section annotations are defined for protection and +licensing. Obfuscation and encryption are not standardized. +protection and licensing are both defined inside the +\lstinline!Protection! annotation: \begin{lstlisting}[language=modelica] -annotation(Protection($\ldots$)); +annotation(Protection(...)); \end{lstlisting} -\subsection{Protection of Classes}\label{protection-of-classes} +\subsection{Protection of Classes}\doublelabel{protection-of-classes} -A class may have the following annotations to define what parts of a class are visible, and only the parts explicitly listed as visible below can be accessed (if a class is encrypted and no \lstinline!Protection! annotation is defined, the access annotation has the default value \lstinline!Access.documentation!): +A class may have the following annotations to define what parts of a +class are visible, and only the parts explicitly listed as visible below can be accessed +(if a class is encrypted and no Protection annotation is defined, the access annotation has the default value +\lstinline!Access.documentation!): \begin{lstlisting}[language=modelica] -type Access = - enumeration(hide, icon, documentation, diagram, - nonPackageText, nonPackageDuplicate, - packageText, packageDuplicate); -annotation(Protection(access = Access.documentation)); + type Access = enumeration(hide, icon, documentation, + diagram, nonPackageText, nonPackageDuplicate, + packageText, packageDuplicate); + annotation(Protection(access = Access.documentation)); \end{lstlisting} -The items of the \fmtannotationindex{Access} enumeration have the following meanings: +The items of the Access enumeration have the following meaning: \begin{enumerate} \item \lstinline!Access.hide!\\ @@ -1968,37 +1941,55 @@ \subsection{Protection of Classes}\label{protection-of-classes} of the class). \item \lstinline!Access.icon!\\ - The class can be instantiated and public parameter, constant, input, output variables as well as public connectors can be accessed, as well as the \lstinline!Icon! annotation, as defined in \cref{annotations-for-graphical-objects} (the declared information of these elements can be shown). Additionally, the class name and its description text can be accessed. + The class can be instantiated and public parameter, constant, input, + output variables as well as public connectors can be accessed, as well + as the icon annotation, as defined in \autoref{annotations-for-graphical-objects} (the declared + information of these elements can be shown). Additionally, the class + name and its description text can be accessed. \item \lstinline!Access.documentation!\\ - Same as \lstinline!Access.icon! and additionally the \lstinline!Documentation! annotation (as defined in \cref{annotations-for-documentation}) can be accessed. HTML-generation in the \lstinline!Documentation! annotation is normally performed before encryption, but the generated HTML is intended to be used with the encrypted package. Thus the HTML-generation should use the same access as the encrypted version -- even before encryption. + Same as \lstinline!Access.icon! and additionally the documentation annotation (as + defined in \autoref{annotations-for-documentation}) can be accessed. HTML-generation in the + documentation annotation is normally performed before encryption, but + the generated HTML is intended to be used with the encrypted package. + Thus the HTML-generation should use the same access as the encrypted + version-- even before encryption. \item \lstinline!Access.diagram!\\ - Same as \lstinline!Access.documentation! and additionally, the \lstinline!Diagram! annotation, and all components and \lstinline!connect!-equations that have a graphical annotation can be accessed. + Same as \lstinline!Access.documentation! and additionally, the diagram annotation, + and all components and connect equations that have a graphical + annotation can be accessed. \item \lstinline!Access.nonPackageText!\\ - Same as \lstinline!Access.diagram! and additionally if it is not a package: the whole class definition can be accessed (but that text cannot be copied, i.e., you can see but not copy the source code). + Same as \lstinline!Access.diagram! and additionally if it is not a package: the + whole class definition can be accessed (but that text cannot be copied, i.e., you can see but not copy the source code). \item \lstinline!Access.nonPackageDuplicate!\\ - Same as \lstinline!Access.nonPackageText! and additionally if it is not a package: the class, or part of the class, can be copied. + Same as \lstinline!Access.nonPackageText! and additionally if it is not a package: + the class, or part of the class, can be copied. \item \lstinline!Access.packageText!\\ - Same as \lstinline!Access.diagram! (note: \emph{not} including all rights of \lstinline!Access.nonPackageDuplicate!) and additionally the whole class definition can be accessed (but that text cannot be copied, i.e., you can see but not copy the source code). + Same as \lstinline!Access.diagram! (note: \textbf{not} including all rights of + \lstinline!Access.nonPackageDuplicate!) and additionally the whole class + definition can be accessed (but that text cannot be copied, i.e., you can see but not copy the source code). \item \lstinline!Access.packageDuplicate!\\ - Same as \lstinline!Access.packageText! and additionally the class, or part of the class, can be copied. + Same as \lstinline!Access.packageText! and additionally the class, or part of the + class, can be copied. \end{enumerate} The \lstinline!access! annotation holds for the respective class and all classes -that are hierarchically on a lower level, unless overridden by a +that are hierarchically on a lower level, unless overriden by a \lstinline!Protection! annotation with \lstinline!access!. Overriding \lstinline!access=Access.hide! or \lstinline!access=Access.packageDuplicate! has no effect. \begin{example} -If the annotation is given on the top level of a package and at no other class in this package, then the \lstinline!access! annotation holds for all classes in this package. +If the annotation is given on the top level of a package and at no other class in this +package, then the \lstinline!access! annotation holds for all classes in this package. \end{example} + \begin{nonnormative} It is currently not standardized which result variables are accessible for plotting. It seems natural to not introduce new flags for @@ -2040,23 +2031,26 @@ \subsection{Protection of Classes}\label{protection-of-classes} \end{lstlisting} \end{nonnormative} -\subsection{Licensing}\label{licensing} +\subsection{Licensing}\doublelabel{licensing} In this section annotations within the \lstinline!Protection! annotation are defined to restrict the usage of the encrypted package: \begin{lstlisting}[language=modelica] record Protection - $\ldots$ - String features[:] = fill("", 0) "Required license features"; + ... + String features[:]=fill("", 0) "Required license features"; record License String libraryKey; - String licenseFile = "" "Optional, default mapping if empty"; + String licenseFile="" "Optional, default mapping if empty"; end License; end Protection; \end{lstlisting} -The \fmtannotationindex{License} annotation has only an effect on the top of an encrypted class and is then valid for the whole class hierarchy. -(Usually the licensed class is a package.) -The \lstinline!libraryKey! is a secret string from the library vendor and is the protection mechanism so that a user cannot generate his/her own authorization file since the \lstinline!libraryKey! is unknown to him/her. +The \lstinline!License! annotation has only an effect on the top of an encrypted +class and is then valid for the whole class hierarchy. (Usually +the licensed class is a package.) The \lstinline!libraryKey! is a secret string +from the library vendor and is the protection mechanism so that a user +cannot generate his/her own authorization file since the \lstinline!libraryKey! is +unknown to him/her. The \lstinline!features! annotation defines the required license options. If the features vector has more than one element, then at least a license @@ -2081,26 +2075,28 @@ \subsection{Licensing}\label{licensing} \end{lstlisting} \end{example} -In order that the protected class can be used either a tool specific license manager, or a license file (called \lstinline!licenseFile!) must be present. -The license file is standardized. -It is a Modelica package without classes that has a \lstinline!Protection! annotation of the following form which specifies a sequence of target records, which makes it natural to define start/end dates for different sets of targets individually: +In order that the protected class can be used either a tool specific +license manager, or a license file (called \lstinline!licenseFile!) must be +present. The license file is standardized. It is a Modelica package +without classes that has a \lstinline!Protection! annotation of the following form +which specifies a sequence of target records, which makes it natural to +define start/end dates for different sets of targets individually: \begin{lstlisting}[language=modelica] record Authorization - String licensor = "" "Optional string to show information about the licensor"; + String licensor="" "Optional string to show information about the licensor"; String libraryKey "Matching the key in the class. Must be encrypted and not visible"; License license[:] "Definition of the license options and of the access rights"; end Authorization; record License - String licensee = "" "Optional string to show information about the licensee"; - String id[:] "Unique machine identifications, e.g.\ MAC addresses"; - String features[:] = fill("", 0) "Activated library license features"; - String startDate = "" "Optional start date in UTCformat YYYY-MM-DD"; - String expirationDate = "" "Optional expiration date in UTCformat YYYY-MM-DD"; - String operations[:] = fill("", 0) "Library usage conditions"; + String licensee ="" "Optional string to show information about the licensee"; + String id[:] "Unique machine identifications, e.g. MAC addresses"; + String features[:] =fill("", 0) "Activated library license features"; + String startDate ="" "Optional start date in UTCformat YYYY-MM-DD"; + String expirationDate="" "Optional expiration date in UTCformat YYYY-MM-DD"; + String operations[:]=fill("",0) "Library usage conditions"; end License; -\end{lstlisting}% -\index{Authorization@\robustinline{Authorization}!license file}\index{License@\robustinline{License}!license file} +\end{lstlisting} The format of the strings used for \lstinline!libraryKey! and \lstinline!id! are not specified (they are vendor specific). The \lstinline!libraryKey! is a secret of the library @@ -2135,7 +2131,7 @@ \subsection{Licensing}\label{licensing} // File MyLibrary\package.mo package MyLibrary annotation(Protection(License(libraryKey="15783-A39323-498222-444ckk4ll", - licenseFile="MyLibraryAuthorization_Tool.mo_lic), $\ldots$)); + licenseFile="MyLibraryAuthorization_Tool.mo_lic), ...)); end MyLibrary; // File MyLibrary\MyLibraryAuthorization_Tool.mo\ @@ -2157,12 +2153,24 @@ \subsection{Licensing}\label{licensing} \end{lstlisting} \end{example} +\section{Annotations for Functions}\doublelabel{annotations-for-functions} + +\subsection{Function Derivative Annotations}\doublelabel{function-derivative-annotations} + +See \autoref{using-the-derivative-annotation} + +\subsection{Inverse Function Annotation}\doublelabel{inverse-function-annotation} + +See \autoref{declaring-inverses-of-functions}. + +\subsection{External Function Annotations}\doublelabel{external-function-annotations} -\section{Annotations for Functions}\label{annotations-for-functions} +See \autoref{annotations-for-external-libraries-and-include-files}. -See \crefnameref{derivatives-and-inverses-of-functions}, \crefnameref{function-inlining-and-event-generation}, and \crefnameref{annotations-for-external-libraries-and-include-files}. +\section{Annotation Choices for Modifications and Redeclarations}\doublelabel{annotation-choices-for-modifications-and-redeclarations} +See \autoref{annotation-choices-for-suggested-redeclarations-and-modifications}. -\section{Annotation Choices for Modifications and Redeclarations}\label{annotation-choices-for-modifications-and-redeclarations} +\section{Annotation for External Libraries and Include Files}\doublelabel{annotation-for-external-libraries-and-include-files} -See \crefnameref{annotation-choices-for-suggested-redeclarations-and-modifications}. +See \autoref{annotations-for-external-libraries-and-include-files}. diff --git a/chapters/arrays.tex b/chapters/arrays.tex index 8f50603ba..dccce5718 100644 --- a/chapters/arrays.tex +++ b/chapters/arrays.tex @@ -1,747 +1,574 @@ -\chapter{Arrays}\label{arrays} +\chapter{Arrays}\doublelabel{arrays} -A non-record array can be regarded as a collection of type compatible values, \cref{type-compatible-expressions}. -An array of records may contain scalar record values whose elements differ in their dimension sizes, but apart from that they must be of the same type. -Such heterogenous arrays may only be used completely, sliced as specified, or indexed. -An array of arrays must have the same dimension sizes for all of the arrays (with the same exception for records). -Modelica arrays can be multidimensional and are ``rectangular'', +An array can be regarded as a collection of values, all of the same +type. Modelica arrays can be multidimensional and are ``rectangular'', which in the case of matrices has the consequence that all rows in a matrix have equal length, and all columns have equal length. -Each array has a certain dimensionality, i.e., number of dimensions. -The degenerate case of a \firstuse{scalar}\index{scalar} variable is not really an array, but can be regarded as an array with zero dimensions. -\firstuse{Vectors}\index{vector} have one dimension, matrices (sing.\ \firstuse{matrix}\index{matrix}) have two dimensions, etc. +Each array has a certain dimensionality, i.e., number of dimensions. The +degenerate case of a scalar variable is not really an array, but can be +regarded as an array with zero dimensions. Vectors have one dimension, +matrices have two dimensions, etc. -So-called row vectors and column vectors do not exist in Modelica and cannot be distinguished since vectors have only one dimension. -If distinguishing these is desired, row matrices and column matrices are available, being the corresponding two-dimensional entities. -However, in practice this is seldom needed since the usual matrix arithmetic and linear algebra operations have been defined to give the expected behavior when operating on Modelica vectors and matrices. +\begin{nonnormative} +So-called row vectors and column vectors do not exist in Modelica and cannot be distinguished since vectors have only one +dimension. If distinguishing these is desired, row matrices and column matrices are available, being the corresponding +two-dimensional entities. However, in practice this is seldom needed since the usual matrix arithmetic and linear algebra +operations have been defined to give the expected behavior when operating on Modelica vectors and matrices. +\end{nonnormative} Modelica is a strongly typed language, which also applies to array types. The number of dimensions of an array is fixed and cannot be changed at run-time. However, the sizes of array dimensions can be computed at run-time. +\begin{nonnormative} The fixed number of array dimensions permits strong type checking and efficient implementation. The non-fixed sizes of array dimensions on the other hand, allow fairly generic array manipulation code to be written as well as interfacing to standard numeric libraries implemented in other programming languages. +\end{nonnormative} An array is allocated by declaring an array variable or calling an array constructor. Elements of an array can be indexed by \lstinline!Integer!, \lstinline!Boolean!, or \lstinline!enumeration! values. -\section{Array Declarations}\label{array-declarations} +\section{Array Declarations}\doublelabel{array-declarations} -The Modelica type system includes scalar number, vector, matrix (number of dimensions, ndim=2), and arrays of more than two dimensions. +The Modelica type system includes scalar number, vector, matrix (number +of dimensions, ndim=2), and arrays of more than two dimensions. \begin{nonnormative} -There is no distinction between a row and column vector. +There is no distinguishing between a row and column vector. \end{nonnormative} -The following table shows the two possible forms of declarations and defines the terminology. -% Is the use of "class" here meant to exclude types defined as array aliases (see comment in table below)? -\lstinline!C! is a placeholder for any class, including the built-in type classes \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, \lstinline!String!, and enumeration types. -The type of a dimension upper bound expression, e.g.\ $n$, $m$, $p$, \ldots in the table below, need to be a subtype of \lstinline!Integer! or \lstinline!EB! for a class \lstinline!EB! that is an enumeration type or subtype of the \lstinline!Boolean! type. +The following table shows the two possible forms of declarations and +defines the terminology. C is a placeholder for any class, including the +built-in type classes \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, \lstinline!String!, and enumeration +types. The type of a dimension upper bound expression, e.g. n, m, p,... +in the table below, need to be a subtype of \lstinline!Integer! or EB for a class EB +that is an enumeration type or subtype of the \lstinline!Boolean! type. -Colon (\lstinline!:!) indicates that the dimension upper bound is unknown and is a subtype of \lstinline!Integer!. -The size of such a variable can be determined from its binding equation, or the size of any of its array attributes, see also \cref{flexible-array-sizes-and-resizing-of-arrays-in-functions}. -The size cannot be determined from other equations or algorithms. +Colon (:) indicates that the dimension upper bound is unknown and is a subtype of +\lstinline!Integer!. The size of such a variable can be determined from its binding equation, or the size +of any of its array attributes - see also \autoref{flexible-array-sizes-and-resizing-of-arrays-in-functions}. +The size cannot be determined from other equations or algorithm. -Upper and lower array dimension index bounds are described in \cref{array-dimension-lower-and-upper-index-bounds}. +Upper and lower array dimension index bounds are described in \autoref{array-dimension-lower-and-upper-index-bounds}. -An array indexed by \lstinline!Boolean! or enumeration type can only be used in the following ways: +An array indexed by Boolean or enumeration type can only be used in the following ways: \begin{itemize} \item - Subscripted using expressions of the appropriate type (i.e.\ \lstinline!Boolean! or the enumerated type). + Subscripted using expressions of the appropriate type (i.e. Boolean or + the enumerated type) \item - Binding equations of the form \lstinline!x1 = x2! are allowed for arrays independent of whether the index types of dimensions are subtypes of \lstinline!Integer!, \lstinline!Boolean!, or enumeration types. + Binding equations of the form \lstinline!x1 = x2! as well as declaration + assignments of the form \lstinline!x1 := x2! are allowed for arrays independent of + whether the index types of dimensions are subtypes of Integer, + Boolean, or enumeration types. \end{itemize} % IMPROVETOP -\begin{table}[H] -% henrikt-ma: Doesn't the "Designation" and "Explanation" here assume that C is of non-array type? -\caption{% -General forms of declaration of arrays. -The notation \lstinline!EB! stands for an enumeration type or \lstinline!Boolean!. -The general array can have one or more dimensions ($k \geq 1$). -} -\begin{center} -\begin{tabular}{l l c l l} -\hline -\tablehead{Modelica form 1} & \tablehead{Modelica form 2} & \tablehead{\# dims} & \tablehead{Designation} & \tablehead{Explanation}\\ -\hline -\hline -\lstinline!C x!; & \lstinline!C x!; & $0$ & Scalar & Scalar\\ -\lstinline!C[$n$] x;! & \lstinline!C x[$n$];! & $1$ & Vector & $n$-vector\\ -\lstinline!C[EB] x;! & \lstinline!C x[EB]! & $1$ & Vector & Vector indexed by \lstinline!EB!\\ -\lstinline!C[$n$, $m$] x;! & \lstinline!C x[$n$, $m$];! & $2$ & Matrix & $n \times m$ matrix\\ -\lstinline!C[$n_1$, $n_{2}$, $\ldots$, $n_k$] x;! & -\lstinline!C x[$n_{1}$, $n_{2}$, $\ldots$, $n_{k}$];! & $k$ & Array & General array\\ -\hline -\end{tabular} -\end{center} -\end{table} - -% henrikt-ma: The following paragraph was only modified slightly when migrated from the old glossary to the index, and seems to be in need of more attention: -A component declared with array dimensions, or where the element type is an array type, is called an \firstuse{array variable}\index{array!variable}. -It is a component whose components are \willintroduce{array elements} (see below). -For an array variable, the ordering of its components matters: -The $k$th element in the sequence of components of an array variable \lstinline!x! is the array element with index \lstinline!k!, denoted \lstinline!x[k]!. -% henrikt-ma: The following statement seems like an over-simplification; for Flat Modelica, we've spent some time trying to figure out how to deal with the fact that Modelica arrays are not homogenous in general. -All elements of an array have the same type. -An array element may again be an array, i.e., arrays can be nested. -An array element is hence referenced using $n$ indices in general, where $n$ is the number of dimensions of the array. - -% henrikt-ma: The following paragraph was only modified slightly when migrated from the old glossary to the index, and seems to be in need of more attention: -A component contained in an array variable is called an \firstuse{array element}\index{array!element}. -An array element has no identifier. -Instead they are referenced by array access expressions called indices that use enumeration values or positive integer index values. +\begin{longtable}{|l|l|l|l|p{4cm}|} +\caption{General forms of declaration of arrays.}\\ +\hline +\tablehead{Modelica form 1} & \tablehead{Modelica form 2} & \tablehead{\# dimensions} & \tablehead{Designation} & \tablehead{Explanation}\\ \hline +\endhead +C x; & C x; & 0 & Scalar & Scalar\\ \hline +C{[}n{]} x; & C x{[}n{]}; & 1 & Vector & n -- Vector\\ \hline +C{[}EB{]} x; & C x{[}EB{]} & 1 & Vector & Vector index by enumeration or +Boolean type EB\\ \hline +C{[}n, m{]} x; & C x{[}n, m{]}; & 2 & Matrix & n x m +Matrix\\ \hline +C{[}$n_1$, $n_{2}$,\ldots{},$n_k${]} x; & C x{[}$n_1$, $n_2$,\ldots{},$n_k${]}; & $k$ & Array & Array with $k$ dimensions +($k \geq 0$).\\ \hline +\end{longtable} \begin{example} The number of dimensions and the dimensions sizes are part of the type, and shall be checked for example at redeclarations. -Declaration form~1 displays clearly the type of an array, whereas -declaration form~2 is the traditional way of array declarations in +Declaration form 1 displays clearly the type of an array, whereas +declaration form 2 is the traditional way of array declarations in languages such as Fortran, C, C++. \begin{lstlisting}[language=modelica] -Real[:] v1, v2 // Vectors v1 and v2 have unknown sizes. - // The actual sizes may be different. + Real[:] v1, v2 // vectors v1 and v2 have unknown sizes. The actual sizes may be different. \end{lstlisting} It is possible to mix the two declaration forms although it might be confusing. \begin{lstlisting}[language=modelica] -Real[3, 2] x[4, 5]; // x has type Real[4, 5, 3, 2]; + Real[3,2] x[4,5]; // x has type Real[4,5,3,2]; \end{lstlisting} The reason for this order is given by examples such as: \begin{lstlisting}[language=modelica] -type R3 = Real[3]; -R3 a; -R3 b[1] = {a}; -Real[3] c[1] = b; + type R3=Real[3]; + R3 a; + R3 b[1]={a}; + Real[3] c[1]=b; \end{lstlisting} -Using a type for \lstinline!a! and \lstinline!b! in this way is normal, and substituting a type by its definition allows \lstinline!c!. +Using a type for \lstinline!a! and \lstinline!b! in this way is normal, and +substituting a type by its definition allow \lstinline!c!. A vector \lstinline!y! indexed by enumeration values \begin{lstlisting}[language=modelica] -type TwoEnums = enumeration(one,two); -Real[TwoEnums] y; + type TwoEnums = enumeration(one,two); + Real[TwoEnums] y; \end{lstlisting} \end{example} -Zero-valued dimensions are allowed, so: \lstinline!C x[0];! declares an empty vector, and: \lstinline!C x[0, 3];! an empty matrix. Some examples of array dimensions of size one are given in \cref{tab:size-1-dimensions}. +Zero-valued dimensions are allowed, so: \lstinline!C x[0];! declares an empty vector and: \lstinline!C x[0,3]!; an empty matrix. -\begin{table}[H] -\caption{Special cases of declaration of arrays as 1-vectors, row-vectors, or column-vectors of arrays.}\label{tab:size-1-dimensions} -\begin{center} -\begin{tabular}{l l c l l} -\hline -\tablehead{Modelica form 1} & \tablehead{Modelica form 2} & \tablehead{\# dims} & \tablehead{Designation} & \tablehead{Explanation}\\ -\hline -\hline -\lstinline!C[1] x;! & \lstinline!C x[1];! & $1$ & Vector & 1-vector, representing a scalar\\ -\lstinline!C[1, 1] x;! & \lstinline!C x[1, 1];! & $2$ & Matrix & $(1 \times 1)$-matrix, representing a scalar\\ -\lstinline!C[$n$, 1] x;! & \lstinline!C x[$n$, 1];! & $2$ & Matrix & $(n \times 1)$-matrix, representing a column\\ -\lstinline!C[1, $n$] x;! & \lstinline!C x[1, $n$];! & $2$ & Matrix & $(1 \times n)$-matrix, representing a row\\ -\hline -\end{tabular} -\end{center} -\end{table} +\begin{nonnormative} +Special cases: +\begin{longtable}{|l|l|l|l|p{3cm}|} +\caption{Declaration of arrays as 1-vectors, row-vectors, or +column-vectors of arrays.}\\ +\hline +\tablehead{Modelica form 1} & \tablehead{Modelica form 2} & \tablehead{\# dimensions} & +\tablehead{Designation} & \tablehead{Explanation}\\ \hline +\endhead +C{[}1{]} x; & C x{[}1{]}; & 1 & Vector & 1 -- Vector, representing a scalar\\ \hline +C{[}1,1{]} x; & C x{[}1, 1{]}; & 2 & Matrix & 1 x 1 -- Matrix, representing a scalar\\ \hline +C{[}n,1{]} x; & C x{[}n, 1{]}; & 2 & Matrix & n x 1 -- Matrix, representing a column\\ \hline +C{[}1,n{]} x; & C x{[}1, n{]}; & 2 & Matrix & 1 x n -- Matrix, representing a row\\ \hline +\end{longtable} +\end{nonnormative} -The type of an array of array is the multidimensional array which is constructed by taking the first dimensions from the component declaration and subsequent dimensions -from the maximally expanded component type. A type is maximally expanded, if it is either one of the built-in types (\lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, -\lstinline!String!, enumeration type) or it is not a type class. Before operator overloading is applied, a type class of a variable is maximally expanded. +The type of an array of array is the multidimensional array which is +constructed by taking the first dimensions from the component +declaration and subsequent dimensions from the maximally expanded +component type. A type is maximally expanded, if it is either one of the +built-in types (Real, Integer, Boolean, String, enumeration type) or it +is not a type class. Before operator overloading is applied, a type +class of a variable is maximally expanded. \begin{example} \begin{lstlisting}[language=modelica] -type Voltage = Real(unit = "V"); -type Current = Real(unit = "A"); -connector Pin - Voltage v; // type class of v = Voltage, type of v = Real - flow Current i; // type class of i = Current, type of i = Real -end Pin; -type MultiPin = Pin[5]; -MultiPin[4] p; // type class of p is MultiPin, type of p is Pin[4, 5]; -type Point = Real[3]; -Point p1[10]; -Real p2[10, 3]; + type Voltage = Real(unit = "V"); + type Current = Real(unit = "A"); + connector Pin + Voltage v; // type class of v = Voltage, type of v = Real + flow Current i; // type class of i = Current, type of i = Real + end Pin; + type MultiPin = Pin[5]; + MultiPin[4] p; // type class of p is MultiPin, type of p is Pin[4,5]; + type Point = Real[3]; + Point p1[10]; + Real p2[10,3]; \end{lstlisting} -The components \lstinline!p1! and \lstinline!p2! have identical types. +The components p1 and p2 have identical types. \begin{lstlisting}[language=modelica] -p2[5] = p1[2] + p2[4]; // equivalent to p2[5, :] = p1[2, :] + p2[4, :] -Real r[3] = p1[2]; // equivalent to r[3] = p1[2, :] + p2[5] = p1[2]+ p2[4]; // equivalent to p2[5,:] = p1[2,:] + p2[4,:] + Real r[3] = p1[2]; // equivalent to r[3] = p1[2,:] \end{lstlisting} \end{example} \begin{nonnormative} Automatic assertions at simulation time: -Let \lstinline!A! be a declared array and \lstinline!i! be the declared maximum dimension size of the \lstinline!di!-dimension, then an \lstinline!assert!-statement \lstinline!assert(i >= 0, $\ldots$)! is generated provided this assertion cannot be checked at compile time. It is a quality of implementation issue to generate a good error message if the assertion fails. +Let \lstinline!A! be a declared array and \lstinline!i! be the declared maximum dimension +size of the \lstinline!di!-dimension, then an assert statement +\lstinline!assert(i>=0, ...)! is generated provided this +assertion cannot be checked at compile time. It is a quality of +implementation issue to generate a good error message if the assertion +fails. -Let \lstinline!A! be a declared array and \lstinline!i! be an index accessing an index of the \lstinline!di!-dimension. Then for every such index-access an assert -statement \lstinline!assert(1 <= i and i <= size(A, di), $\ldots$)! is generated, provided this assertion cannot be checked at compile time. +Let \lstinline!A! be a declared array and \lstinline!i! be an index accessing an index of +the \lstinline!di!-dimension. Then for every such index-access an assert +statement \lstinline!assert(i>=1 and i<=size(A,di), ...! +) is generated, provided this assertion cannot be checked at +compile time. -For efficiency reasons, these implicit \lstinline!assert!-statements may be optionally suppressed. +For efficiency reasons, these implicit assert statement may be optionally suppressed. \end{nonnormative} -\subsection{Array Dimension Lower and Upper Index Bounds}\label{array-dimension-lower-and-upper-index-bounds} +\subsection{Array Dimension Lower and Upper Index Bounds}\doublelabel{array-dimension-lower-and-upper-index-bounds} -The lower and upper index bounds for a dimension of an array indexed by \lstinline!Integer!, \lstinline!Boolean!, or \lstinline!enumeration! values are as follows: +The lower and upper index bounds for a dimension of an array indexed by +\lstinline!Integer!, \lstinline!Boolean!, or \lstinline!enumeration! values are as follows: \begin{itemize} \item - An array dimension indexed by \lstinline!Integer! values has a lower bound of 1 and an upper bound being the size of the dimension. + An array dimension indexed by integers has a lower bound of 1 and an + upper bound being the size of the dimension. \item - An array dimension indexed by \lstinline!Boolean! values has the lower bound \lstinline!false! and the upper bound \lstinline!true!. + An array dimension indexed by \lstinline!Boolean! values has the lower bound \lstinline!false! + and the upper bound \lstinline!true!. \item - An array dimension indexed by \lstinline!enumeration! values of the type \lstinline!E = enumeration(e1, e2, $\ldots$, en)! - has the lower bound \lstinline!E.e1! and the upper bound \lstinline!E.en!. + An array dimension indexed by \lstinline!enumeration! values of the type + \lstinline!E=enumeration!(\lstinline!e1!, \lstinline!e2!, ..., \lstinline!en!) has the lower bound \lstinline!E.e1! and the upper + bound \lstinline!E.en!. \end{itemize} -\section{Flexible Array Sizes}\label{flexible-array-sizes} +\section{Flexible Array Sizes}\doublelabel{flexible-array-sizes} Regarding flexible array sizes and resizing of arrays in functions, see -\cref{flexible-array-sizes-and-resizing-of-arrays-in-functions}. - -\section{Built-in Array Functions}\label{built-in-array-functions} - -Modelica provides a number of built-in functions that are applicable to arrays. +\autoref{flexible-array-sizes-and-resizing-of-arrays-in-functions}. -The \lstinline!promote! function listed below is utilized to define other array operators and functions. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!promote($A$, $n$)! & Append dimensions of size 1 & \Cref{modelica:promote} \\ -\hline -\end{tabular} -\end{center} +\section{Built-in Array Functions}\doublelabel{built-in-array-functions} -\begin{operatordefinition}[promote]\indexinline{promote} -\begin{synopsis}\begin{lstlisting} -promote($A$, $n$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Fills dimensions of size 1 from the right to array $A$ upto dimension $n$, where $n \geq$ \lstinline!ndims($A$)! is required. +Modelica provides a number of built-in functions that are applicable to +arrays. -Let \lstinline!C = promote(A, $n$)!, with $n_{\mathrm{A}}$ = \lstinline!ndims(A)!, then \lstinline!ndims(C) = $n$!, \lstinline!size(C, $j$) = size(A, $j$)! for $1 \leq j \leq n_{\mathrm{A}}$, \lstinline!size(C, $j$)! = $1$ for $n_{\mathrm{A}} + 1 \leq j \leq n$, \lstinline!C[$i_{1}$, $\ldots$, $i_{n_{\mathrm{A}}}$, 1, $\ldots$, 1]! = \lstinline!A[$i_{1}$, $\ldots$, $i_{n_{\mathrm{A}}}$]! +The following \lstinline!promote! function cannot be used in Modelica, but is +utilized below to define other array operators and functions: +\begin{longtable}[]{|l|p{9cm}|} +\caption{Promote function (cannot be used in Modelica).}\\ +\hline \endhead +\lstinline!promote(A, n)! & Fills dimensions of size 1 from the right to array \lstinline!A! upto +dimension $n$, where $n \geq$ \lstinline!ndims(A)! is required. Let \lstinline!C = promote(A, n)!, with \lstinline!nA = ndims(A)!, then \lstinline!ndims(C) = n!, \lstinline!size(C, j) = size(A, j)! for $1 \leq \text{\lstinline!j!} \leq \text{\lstinline!nA!}$, $\text{\lstinline!size(C, j)!} = 1$ for $\text{\lstinline!nA!} + 1 \leq \text{\lstinline!j!} \leq \text{\lstinline!n!}$, \lstinline!C[i_1, ..., i_nA, 1, ..., 1]! = \lstinline!A[i_1, ..., i_nA]!\\ \hline +\end{longtable} -The argument $n$ must be a constant that can be evaluated during translation, as it determines the number of dimensions of the returned array. \begin{nonnormative} -An $n$ that is not a constant that can be evaluated during translation for \lstinline!promote! complicates matrix handling as it can change matrix-equations in subtle ways (e.g.\ changing inner products to matrix multiplication). +The function \lstinline!promote! cannot be used in Modelica, because +the number of dimensions of the returned array cannot be determined at +compile time if \lstinline!n! is a variable. Below, \lstinline!promote! is only used for +constant \lstinline!n!. \end{nonnormative} -\end{semantics} -\end{operatordefinition} \begin{nonnormative} Some examples of using the functions defined in the following -\cref{array-dimension-and-size-functions} to \cref{matrix-and-vector-algebra-functions}: +\autoref{array-dimension-and-size-functions} to \autoref{matrix-and-vector-algebra-functions}: \begin{lstlisting}[language=modelica] -Real x[4, 1, 6]; -size(x, 1) = 4; -size(x); // vector with elements 4, 1, 6 -size(2 * x + x) = size(x); -Real[3] v1 = fill(1.0, 3); -Real[3, 1] m = matrix(v1); -Real[3] v2 = vector(m); -Boolean check[3, 4] = fill(true, 3, 4); + Real x[4,1,6]; + size(x,1) = 4; + size(x); // vector with elements 4, 1, 6 + size(2*x+x ) = size(x); + Real[3] v1 = fill(1.0, 3); + Real[3,1] m = matrix(v1); + Real[3] v2 = vector(m); + Boolean check[3,4] = fill(true, 3, 4); \end{lstlisting} \end{nonnormative} -\subsection{Array Dimension and Size Functions}\label{array-dimension-and-size-functions} - -The functions listed below operate on the array dimensions of the type of an expression: -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!ndims($A$)! & Number of dimensions & \Cref{modelica:ndims} \\ -\lstinline!size($A$, $i$)! & Size of single array dimension & \Cref{modelica:size-of-dim} \\ -\lstinline!size($A$)! & Sizes of all array dimensions & \Cref{modelica:size-vector} \\ -\hline -\end{tabular} -\end{center} - -\begin{operatordefinition}[ndims] -\begin{synopsis}\begin{lstlisting} -ndims($A$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the number of dimensions $k$ of expression $A$, with $k \geq 0$. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition*}[size]\label{modelica:size-of-dim}\index{size@\robustinline{size}!of single array dimension} -\begin{synopsis}\begin{lstlisting} -size($A$, $i$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the size of dimension $i$ of array expression $A$ where $0 \leq i \leq$ \lstinline!ndims($A$)!. - -If $A$ refers to a component of an expandable connector, then the component must be a declared component of the expandable connector, and it must not use colon (\lstinline!:!) to specify the array size of dimension $i$. -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[size]\label{modelica:size-vector}\index{size@\robustinline{size}!of all array dimensions} -\begin{synopsis}\begin{lstlisting} -size($A$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns a vector of length \lstinline!ndims($A$)! containing the dimension sizes of $A$. - -If $A$ refers to a component of an expandable connector, then the component must be a declared component of the expandable connector, and it must not use colon (\lstinline!:!) to specify the size of any array dimension. -\end{semantics} -\end{operatordefinition*} - -\subsection{Dimensionality Conversion Functions}\label{dimensionality-conversion-functions} - -The conversion functions listed below convert scalars, vectors, and arrays to scalars, vectors, or matrices by adding or removing 1-sized dimensions. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!scalar($A$)! & Extract only element & \Cref{modelica:scalar} \\ -\lstinline!vector($A$)! & Vector of all elements & \Cref{modelica:vector} \\ -\lstinline!matrix($A$)! & Two-dimensional array & \Cref{modelica:matrix} \\ -\hline -\end{tabular} -\end{center} - -\begin{operatordefinition}[scalar] -\begin{synopsis}\begin{lstlisting} -scalar($A$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the single element of array $A$. \lstinline!size($A$, i)! $= 1$ is required for $1 \leq i \leq$ \lstinline!ndims($A$)!. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[vector] -\begin{synopsis}\begin{lstlisting} -vector($A$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -% This definition is lacking detail regarding the order of the elements in the result. -% It's also strange that it isn't defined for an array with just a single element (all sizes equal to 1). -Returns a 1-vector if $A$ is a scalar, and otherwise returns a vector containing all the elements of the array, provided there is at most one dimension size $> 1$. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[matrix] -\begin{synopsis}\begin{lstlisting} -matrix($A$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns \lstinline!promote($A$, 2)! if $A$ is a scalar or vector, and otherwise returns the elements of the first two dimensions as a matrix. \lstinline!size($A$, i)! $= 1$ is required for $2 < i \leq$ \lstinline!ndims($A$)!. -\end{semantics} -\end{operatordefinition} - -\subsection{Specialized Array Constructor Functions}\label{specialized-array-constructor-functions} +\subsection{Array Dimension and Size Functions}\doublelabel{array-dimension-and-size-functions} + +The following built-in functions for array dimensions and dimension +sizes are provided: +\begin{longtable}[]{|l|p{9cm}|} +\caption{Built-in array dimension and size functions.}\\ +\hline +\tablehead{Modelica} & \tablehead{Explanation}\\ \hline +\endhead +\lstinline!ndims(A)! & +Returns the number of dimensions $k$ of expression \lstinline!A!, with $k \geq 0$. +\\ \hline +\lstinline!size(A, i)! & +Returns the size of dimension \lstinline!i! of array expression \lstinline!A! where $0 \leq \text{\lstinline!i!} \leq \text{\lstinline!ndims(A)!}$.\\ \hline +\lstinline!size(A)! & +Returns a vector of length \lstinline!ndims(A)! containing the dimension sizes of \lstinline!A!.\\ \hline +\end{longtable} + +\subsection{Dimensionality Conversion Functions}\doublelabel{dimensionality-conversion-functions} + +The following built-in conversion functions convert scalars, vectors, +and arrays to scalars, vectors, or matrices by adding or removing +1-sized dimensions. + +\begin{longtable}[]{|l|p{9cm}|} +\caption{Built-in dimensionality conversion functions.}\\ +\hline +\tablehead{Modelica} & \tablehead{Explanation}\\ \hline +\endhead +\lstinline!scalar(A)! & Returns the single element of array \lstinline!A!. $\text{\lstinline!size(A, i)!} = 1$ is required for $1 +\leq \text{\lstinline!i!} \leq \text{\lstinline!ndims(A)!}$.\\ \hline +\lstinline!vector(A)! +& +Returns a 1-vector, if A is a scalar and otherwise returns a vector +containing all the elements of the array, provided there is at most one +dimension size $> 1$.\\ \hline +\lstinline!matrix(A)! +& +Returns \lstinline!promote(A, 2)!, if \lstinline!A! is a scalar or vector and otherwise returns +the elements of the first two dimensions as a matrix. $\text{\lstinline!size(A, i)!} = 1$ is +required for $2 < \text{\lstinline!i!} \leq \text{\lstinline!ndims(A)!}$.\\ \hline +\end{longtable} + +\subsection{Specialized Array Constructor Functions}\doublelabel{specialized-array-constructor-functions} An array constructor function constructs and returns an array computed -from its arguments. Most of the constructor functions listed below +from its arguments. Most of the constructor functions in the table below construct an array by filling in values according to a certain pattern, in several cases just giving all array elements the same value. The -general array constructor with syntax \lstinline!array($\ldots$)! or \lstinline!{$\ldots$}! -is described in \cref{vector-matrix-and-array-constructors}. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!identity($n$)! & Identity matrix & \Cref{modelica:identity} \\ -\lstinline!diagonal($v$)! & Diagonal matrix & \Cref{modelica:diagonal} \\ -\lstinline!zeros($n_{1}$, $n_{2}$, $n_{3}$, $\ldots$)! & Array with all elements being 0 & \Cref{modelica:zeros} \\ -\lstinline!ones($n_{1}$, $n_{2}$, $n_{3}$, $\ldots$)! & Array with all elements being 1 & \Cref{modelica:ones} \\ -\lstinline!fill($s$, $n_{1}$, $n_{2}$, $n_{3}$, $\ldots$)! & Array with all elements equal & \Cref{modelica:fill} \\ -\lstinline!linspace($x_{1}$, $x_{2}$, $n$)! & Vector with equally spaced elements & \Cref{modelica:linspace} \\ -\hline -\end{tabular} -\end{center} - -\begin{operatordefinition}[identity] -\begin{synopsis}\begin{lstlisting} -identity($n$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the $n \times n$ \lstinline!Integer! identity matrix, with ones on the diagonal and zeros at the other places. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[diagonal] -\begin{synopsis}\begin{lstlisting} -diagonal($v$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns a square matrix with the elements of vector $v$ on the diagonal and all other elements zero. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[zeros] -\begin{synopsis}\begin{lstlisting} -zeros($n_{1}$, $n_{2}$, $n_{3}$, $\ldots$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the $n_{1} \times n_{2} \times n_{3} \times \ldots$ \lstinline!Integer! array with all elements equal to zero ($n_{i} \geq 0$). The function needs one or more arguments, that is, \lstinline!zeros()! is not legal. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[ones] -\begin{synopsis}\begin{lstlisting} -ones($n_{1}$, $n_{2}$, $n_{3}$, $\ldots$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Return the $n_{1} \times n_{2} \times n_{3} \times \ldots$ \lstinline!Integer! array with all elements equal to one ($n_{i} \geq 0$). The function needs one or more arguments, that is, \lstinline!ones()! is not legal. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[fill] -\begin{synopsis}\begin{lstlisting} -fill($s$, $n_{1}$, $n_{2}$, $n_{3}$, $\ldots$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the $n_{1} \times n_{2} \times n_{3} \times \ldots$ array with all elements equal to scalar or array expression $s$ ($n_{i} \geq 0$). The returned array has the same type as $s$. - +general array constructor with syntax \lstinline!array! (\ldots{}) or \{\ldots{}\} +is described in \autoref{vector-matrix-and-array-constructors}. + +\begin{longtable}[]{|l|p{11cm}|} +\caption{Specialized array constructor functions.}\\ +\hline +\tablehead{Modelica} & \tablehead{Explanation}\\ \hline +\endhead +\lstinline!identity(n)! +& +Returns the n x n Integer identity matrix, with ones on the diagonal and +zeros at the other places.\\ \hline +\lstinline!diagonal(v)! +& +Returns a square matrix with the elements of vector v on the diagonal +and all other elements zero.\\ \hline +\texttt{zeros(n\textsubscript 1,n\textsubscript 2,n\textsubscript 3,...)} & +Returns the $n_1$ x $n_2$ x $n_3$ x ... \lstinline!Integer! array with all elements equal to zero ($n_i \geq 0$). +The function need one or more arguments, that is \lstinline!zeros()! is not legal.\\ \hline +\texttt{ones(n\textsubscript 1,n\textsubscript 2,n\textsubscript 3,...)} & +Return the $n_1$ x $n_2$ x $n_3$ x ... Integer array with all elements equal to one ($n_i \geq 0$). +The function need one or more arguments, that is \lstinline!ones()! is not legal.\\ \hline +\texttt{fill(s,n\textsubscript 1,n\textsubscript 2,n\textsubscript 3,...)} & +Returns the $n_1$ x $n_2$ x $n_3$ x ... array with all elements equal to scalar or array expression s +($n_i \geq 0$). The returned array has the same type as \lstinline!s!. Recursive definition: -\lstinline!fill($s$, $n_{1}$, $n_{2}$, $n_{3}$, $\ldots$)! = -\lstinline!fill(fill($s$, $n_{2}$, $n_{3}$, $\ldots$), $n_{1}$)!; -\lstinline!fill($s$, $n$)! = \lstinline!{$s$, $s$, $\ldots$, $s$}!. - -The function needs two or more arguments; that is, \lstinline!fill($s$)! is not legal. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[linspace] -\begin{synopsis}\begin{lstlisting} -linspace($x_{1}$, $x_{2}$, $n$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns a \lstinline!Real! vector with $n$ equally spaced elements, such that \lstinline!v = linspace($x_{1}$, $x_{2}$, $n$)! results in -\begin{equation*} -\text{\lstinline!v[$i$]!} = x_{1} + (x_{2} - x_{1}) \frac{i - 1}{n - 1} \quad \text{for $1 \leq i \leq n$} -\end{equation*} -It is required that $n \geq 2$. The arguments $x_{1}$ and $x_{2}$ shall be numeric scalar expressions. -\end{semantics} -\end{operatordefinition} - -\subsection{Reduction Functions and Operators}\label{reduction-functions-and-operators} - -The reduction functions listed below ``reduce'' an array (or several scalars) to one value (normally a scalar, but the \lstinline!sum! reduction function may give an array as result -and also be applied to an operator record). Note that none of these operators (particularly \lstinline!min! and \lstinline!max!) generate events themselves (but arguments -could generate events). The restriction on the type of the input in \cref{reduction-expressions} for reduction expressions also applies to the array elements/scalar -inputs for the reduction operator with the same name. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!min($A$)! & Least element or array & \Cref{modelica:min-of-array} \\ -\lstinline!min($x$, $y$)! & Least of two scalars & \Cref{modelica:min-binary} \\ -\lstinline!min($\ldots$ for $\ldots$)! & Reduction to least value & \Cref{modelica:min-reduction} \\ -\lstinline!max($A$)! & Greatest element or array & \Cref{modelica:max-of-array} \\ -\lstinline!max($x$, $y$)! & Greatest of two scalars & \Cref{modelica:max-binary} \\ -\lstinline!max($\ldots$ for $\ldots$)! & Reduction to greatest value & \Cref{modelica:max-reduction} \\ -% Not saying "scalar sum" for symmetry with the product case below: -\lstinline!sum($A$)! & Sum of scalar array elements & \Cref{modelica:sum-of-array} \\ -\lstinline!sum($\ldots$ for $\ldots$)! & Sum reduction & \Cref{modelica:sum-reduction} \\ -% Not saying "scalar product" to avoid confusion with inner products: -\lstinline!product($A$)! & Product of scalar array elements & \Cref{modelica:product-of-array} \\ -\lstinline!product($\ldots$ for $\ldots$)! & Product reduction & \Cref{modelica:product-reduction} \\ -\hline +\lstinline!fill!(s,$n_1$,$n_2$,$n_3$,...) = +\lstinline!fill!(\lstinline!fill!(s,$n_2$,$n_3$, ...), +$n_1$,); \lstinline!fill!(s,n)=\{s,s,\ldots{}, s\} + +The function needs two or more arguments; that is \lstinline!fill(s)! is not legal.\\ \hline +\lstinline!linspace(x1,x2,n)! +& +Returns a \lstinline!Real! vector with \lstinline!n! equally spaced elements, such that +$v = \text{\lstinline!linspace(x1, x2, n)!}$ results in +\lstinline!v[i] = x1 + (x2-x1)*(i-1)/(n-1)! for $1 \leq \text{\lstinline!i!} \leq \text{\lstinline!n!}$. +It is required that $\text{\lstinline!n!} \geq 2$. The arguments \lstinline!x1! and \lstinline!x2! shall +be numeric scalar expressions.\\ \hline +\end{longtable} + +\subsection{Reduction Functions and Operators}\doublelabel{reduction-functions-and-operators} + +A reduction function ``reduces'' an array (or several scalars) to one +value (normally a scalar - but the sum reduction function may give an +array as result and also be applied to an operator record). Note that +none of these operators (particularly min and max) generate events +themselves (but arguments could generate events). The restriction on the +type of the input in \autoref{reduction-expressions} for reduction expressions also +apply to the array elements/scalar inputs for the reduction operator +with the same name. + +The sum reduction function (both variants) may be applied to an operator +record, provided that the operator record defines '0' and '+'. It is +then assumed to form an additive group. + +The following reduction functions are available: +\begin{longtable}{|p{4.1cm}|p{10.1cm}|} +\caption{Array reduction functions and operators.}\\ +\hline +\tablehead{Modelica} & \tablehead{Explanation}\\ \hline +\endhead +\lstinline!min(A)! +& +Returns the least element of array expression \lstinline!A!; as defined by \lstinline!!. -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[max]\label{modelica:max-binary}\index{max@\robustinline{max}!binary function} -\begin{synopsis}\begin{lstlisting} -max($x$, $y$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the greatest element of the scalars $x$ and $y$; as defined by \lstinline!>!. -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[max]\label{modelica:max-reduction}\index{max@\robustinline{max}!reduction expression} -\begin{synopsis}\begin{lstlisting} -max($e$($i$, $\ldots$, $j$) for $i$ in $u$, $\ldots$, $j$ in $v$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Also described in \cref{reduction-expressions}. Returns the greatest value (as defined by \lstinline!>!) of the scalar expression \lstinline!$e$($i$, $\ldots$, $j$)! evaluated for all combinations of $i$ in $u$, \ldots, $j$ in $v$. -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[sum]\label{modelica:sum-of-array}\index{sum@\robustinline{sum}!of array} -\begin{synopsis}\begin{lstlisting} -sum($A$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the scalar sum of all the elements of array expression \lstinline!A!. Equivalent to sum reduction (see below, including application to operator records) over all array indices: \lstinline!sum($A$[j, k, $\ldots$] for j, k, $\ldots$)! -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[sum]\label{modelica:sum-reduction}\index{sum@\robustinline{sum}!reduction expression} -\begin{synopsis}\begin{lstlisting} -sum($e$($i$, $\ldots$, $j$) for $i$ in $u$, $\ldots$, $j$ in $v$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Also described in \cref{reduction-expressions}. Returns the sum of the expression \lstinline!$e$($i$, $\ldots$, $j$)! evaluated for all combinations of $i$ in $u$, \ldots, $j$ in $v$. - -The \lstinline!sum! reduction function (both variants) may be applied to an operator record, provided that the operator record defines \lstinline!'0'! and \lstinline!'+'!. -It is then assumed to form an additive group. - -For \lstinline!Integer! indexing this is -\begin{lstlisting}[language=modelica] -$e$($u$[1], $\ldots$, $v$[1]) + $e$($u$[2], $\ldots$, $v$[1]) + $\ldots$ - + $e$($u$[end], $\ldots$, $v$[1]) + $\ldots$ - + $e$($u$[end], $\ldots$, $v$[end]) -\end{lstlisting} -For non-\lstinline!Integer! indexing this uses all valid indices instead of 1..\lstinline!end!. - -The type of \lstinline!sum($e$($i$, $\ldots$, $j$) for $i$ in $u$, $\ldots$, $j$ in $v$)! is the same as the type of \lstinline!$e$($i$, $\ldots$, $j$)!. -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[product]\label{modelica:product-of-array}\index{product@\robustinline{product}!of array} -\begin{synopsis}\begin{lstlisting} -product($A$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -% Dangerous to say "scalar product" when not referring to anything related to inner products. -Returns the scalar product of all the elements of array expression \lstinline!A!. Equivalent to product reduction (see below) over all array indices: \lstinline!product($A$[j, k, $\ldots$] for j, k, $\ldots$)! -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[product]\label{modelica:product-reduction}\index{product@\robustinline{product}!reduction expression} -\begin{synopsis}\begin{lstlisting} -product($e$($i$, $\ldots$, $j$) for $i$ in $u$, $\ldots$, $j$ in $v$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Also described in \cref{reduction-expressions}. Returns the product of the expression \lstinline!$e$($i$, $\ldots$, $j$)! evaluated for all combinations of $i$ in $u$, \ldots, $j$ in $v$. - -For \lstinline!Integer! indexing this is +& +\begin{tabular}{@{}p{10cm}@{}} +Also described in \autoref{reduction-expressions}\\ +Returns the least value (as defined by \lstinline!!.\\ \hline +\lstinline!max(x,y)! +& +Returns the greatest element of the scalars \lstinline!x! and \lstinline!y!; as defined by +\lstinline!>!.\\ \hline +\begin{tabular}{@{}p{4cm}@{}} +\lstinline!max(e(i, ..., j)!\\ +\lstinline! for i in u,!\\ +\lstinline! ..., j in v)! +\end{tabular} +& +\begin{tabular}{@{}p{10cm}@{}} +Also described in \autoref{reduction-expressions} +Returns the greatest value (as defined by \lstinline!>!) of the scalar +expression \lstinline!e(i, ..., j)! evaluated for all combinations of \lstinline!i! in \lstinline!u!, \ldots, \lstinline!j! +in \lstinline!v!: +\end{tabular}\\ \hline +\lstinline!sum(A)! +& +\begin{tabular}{@{}p{10cm}@{}} +Returns the scalar sum of all the elements of array expression:\\ +\lstinline!=sum(A[j,k,...]) for j,k,...! +\end{tabular}\\ \hline +\begin{tabular}{@{}p{5cm}@{}} +\lstinline!sum(e(i, ..., j)!\\ +\lstinline! for i in u,!\\ +\lstinline! ..., j in v)! +\end{tabular} +& +\begin{tabular}{@{}p{10cm}@{}} +Also described in \autoref{reduction-expressions}\\ +Returns the sum of the expression e(i, ..., j) evaluated for all +combinations of i in u, ..., j in v: For \lstinline!Integer! indexing this is + e(u{[}1{]},... + ,v{[}1{]})+e(u{[}2{]},... ,v{[}1{]})+... +e(u{[}end{]},... + ,v{[}1{]})+...+e(u{[}end{]},... ,v{[}end{]}) + For non-\lstinline!Integer! indexing this uses all valid indices instead of 1..\lstinline!end!. + The type of sum(e(i, ..., j) for i in u, ..., j + in v) is the same as the type of e(i,...j). +\end{tabular}\\ \hline +\lstinline!product(A)! +& +\begin{tabular}{@{}p{10cm}@{}} +Returns the scalar product of all the elements of array expression A.\\ + \lstinline!=product(A[j,k,...] for j,k,...! +\end{tabular}\\ \hline +\begin{tabular}{@{}p{4cm}@{}} +\lstinline!product(e(i, ..., j)!\\ +\lstinline! for i in u,!\\ +\lstinline! ..., j in v)! +\end{tabular} +& +\begin{tabular}{@{}p{10cm}@{}} +Also described in \autoref{reduction-expressions}.\\ +Returns the product of the scalar expression e(i, ..., j) evaluated for +all combinations of i in u, ..., j in v: For \lstinline!Integer! indexing this is \begin{lstlisting}[language=modelica] -$e$($u$[1], $\ldots$, $v$[1]) * $e$($u$[2], $\ldots$, $v$[1]) * $\ldots$ - * $e$($u$[end], $\ldots$, $v$[1]) * $\ldots$ - * $e$($u$[end], $\ldots$, $v$[end]) + e(u[1],...,v[1])*e(u[2],...,v[1])*... + *(u[end],...,v[1])*...*e(u[end],...,v[end]) \end{lstlisting} -For non-\lstinline!Integer! indexing this uses all valid indices instead of 1..\lstinline!end!. - -The type of \lstinline!product($e$($i$, $\ldots$, $j$) for $i$ in $u$, $\ldots$, $j$ in $v$)! is the same as the type of \lstinline!$e$($i$, $\ldots$, $j$)!. -\end{semantics} -\end{operatordefinition*} + For non-\lstinline!Integer! indexing this uses all valid indices instead of 1..\lstinline!end!. + The type of product(e(i, ..., j) for i in u, ..., j + in v) is the same as the type of e(i,...j). +\end{tabular} +\\ \hline +\end{longtable} -\subsubsection{Reduction Expressions}\label{reduction-expressions} +\subsubsection{Reduction Expressions}\doublelabel{reduction-expressions} An expression: \begin{lstlisting}[language=grammar] function-name "(" expression1 for iterators ")" -\end{lstlisting}% -\index{for@\robustinline{for}!reduction expression} -is a \firstuse{reduction expression}\index{reduction expression}. -The expressions in the iterators of a reduction expression shall be vector expressions. -They are evaluated once for each reduction expression, and are evaluated in the scope immediately enclosing the reduction expression. +\end{lstlisting} + +is a reduction-expression. The expressions in the iterators of a +reduction-expression shall be vector expressions. They are evaluated +once for each reduction-expression, and are evaluated in the scope +immediately enclosing the reduction-expression. For an iterator: \begin{lstlisting}[language=grammar] IDENT in expression2 -\end{lstlisting}% -\index{in@\robustinline{in}!reduction expression} -the loop-variable, \lstinline!IDENT!, is in scope inside \lstinline!expression1!. -The loop-variable may hide other variables, as in \lstinline!for!-loops. -The result depends on the \lstinline!function-name!, and currently the only legal function-names are the built-in operators \lstinline!array!, \lstinline!sum!, \lstinline!product!, \lstinline!min!, and \lstinline!max!. -For array, see \cref{vector-matrix-and-array-constructors}. -If \lstinline!function-name! is \lstinline!sum!, \lstinline!product!, \lstinline!min!, or \lstinline!max! the result is of the same type as \lstinline!expression1! and is constructed by evaluating \lstinline!expression1! for each value of the loop-variable and computing the \lstinline!sum!, \lstinline!product!, \lstinline!min!, or \lstinline!max! of the computed elements. -For deduction of ranges, see \cref{implicit-iteration-ranges}; and for using types as ranges see \cref{types-as-iteration-ranges}. - -\begin{table}[H] -\caption{Reduction expressions with iterators. (The least and greatest values of \lstinline!Real! are available as \lstinline!-Modelica.Constants.inf! and \lstinline!Modelica.Constants.inf!, respectively.)} -\begin{center} -\begin{tabular}{l l l} -\hline -\tablehead{Reduction} & \tablehead{Restriction on \lstinline!expression1!} & \tablehead{Result for empty \lstinline!expression2!}\\ -\hline -\hline -\lstinline!sum! & \lstinline!Integer! or \lstinline!Real! & \lstinline!zeros($\ldots$)!\\ -\lstinline!product! & Scalar \lstinline!Integer! or \lstinline!Real! & 1\\ -\lstinline!min! & Scalar enumeration, \lstinline!Boolean!, \lstinline!Integer! or \lstinline!Real! & Greatest value of type\\ -\lstinline!max! & Scalar enumeration, \lstinline!Boolean!, \lstinline!Integer! or \lstinline!Real! & Least value of type\\ -\hline -\end{tabular} -\end{center} -\end{table} +\end{lstlisting} + +the loop-variable, \lstinline!IDENT!, is in scope inside \lstinline!expression1!. The +loop-variable may hide other variables, as in for-clauses. The result +depends on the \lstinline!function-name!, and currently the only legal +function-names are the built-in operators \lstinline!array!, \lstinline!sum!, +\lstinline!product!, \lstinline!min!, and +\lstinline!max!. For array, see \autoref{vector-matrix-and-array-constructors}. If \lstinline!function-name! is +\lstinline!sum!, \lstinline!product!, \lstinline!min!, +or \lstinline!max! the result is of the same type as \lstinline!expression1! and is constructed +by evaluating \lstinline!expression1! for each value of the loop-variable and +computing the \lstinline!sum!, \lstinline!product!, \lstinline!min!, or +\lstinline!max! of the computed elements. For +deduction of ranges, see \autoref{implicit-iteration-ranges}; and for using types as ranges +see \autoref{types-as-iteration-ranges}. + +\begin{longtable}{|p{3cm}|p{5cm}|p{6cm}|} +\caption{Reduction expressions with iterators.}\\ +\hline +\tablehead{Function-name} & \tablehead{Restriction on expression1} & \tablehead{Result if expression2 is empty}\\ \hline +\endhead +\lstinline!sum! & Integer or Real & \lstinline!zeros(...)!\\ \hline +\lstinline!product! & Scalar Integer or Real & \lstinline!1!\\ \hline +\lstinline!min! & Scalar enumeration, Boolean, Integer or Real & +\begin{tabular}{@{}p{6cm}@{}} +Greatest value of type\\( \lstinline!Modelica.Constants.inf! for Real) +\end{tabular}\\ \hline +\lstinline!max! & Scalar enumeration, Boolean, Integer or Real & +\begin{tabular}{@{}p{6cm}@{}} +Least value of type\\ ( \lstinline!-Modelica.Constants.inf! for Real) +\end{tabular}\\ \hline + +\end{longtable} \begin{example} % No frame since the math would break it. -\begin{lstlisting}[language=modelica, frame=none] -sum(i for i in 1:10) // Gives $\sum_{i=1}^{10}i$ = 1 + 2 + $\ldots$ + 10 = 55 -// Read it as: compute the sum of i for i in the range 1 to 10. -sum(i^2 for i in {1,3,7,6}) // Gives $\sum_{i\in \{1,\, 3,\, 7,\, 6\}}i^2$ = 1 + 9 + 49 + 36 = 95 -{product(j for j in 1:i) for i in 0:4} // Gives {1, 1, 2, 6, 24} -max(i^2 for i in {3,7,6}) // Gives 49 +\begin{lstlisting}[language=modelica, mathescape=true, frame=none] + sum(i for i in 1:10) // Gives $\sum_{i=1}^{10}i=$1+2+...+10=55 + // Read it as: compute the sum of i for i in the range 1 to 10. + sum(i^2 for i in {1,3,7,6}) // Gives $\sum_{i\in \begin{Bmatrix}1&3&7&6\end{Bmatrix}}i^2=$1+9+49+36=95 + {product(j for j in 1:i) for i in 0:4} // Gives {1,1,2,6,24} + max(i^2 for i in {3,7,6}) // Gives 49 \end{lstlisting} \end{example} -\subsection{Matrix and Vector Algebra Functions}\label{matrix-and-vector-algebra-functions} - -Functions for matrix and vector algebra are listed below. The function \lstinline!transpose! can be applied to any matrix. The functions \lstinline!outerProduct!, \lstinline!symmetric!, \lstinline!cross! and \lstinline!skew! require \lstinline!Real! vector(s) or matrix as input(s) and return a \lstinline!Real! vector or matrix. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!transpose($A$)! & Matrix transpose & \Cref{modelica:transpose} \\ -\lstinline!outerProduct($x$, $y$)! & Vector outer product & \Cref{modelica:outerProduct} \\ -\lstinline!symmetric($A$)! & Symmetric matrix, keeping upper part & \Cref{modelica:symmetric} \\ -\lstinline!cross($x$, $y$)! & Cross product & \Cref{modelica:cross} \\ -\lstinline!skew($x$)! & Skew symmetric matrix associated with vector & \Cref{modelica:skew} \\ -\hline -\end{tabular} -\end{center} - -% Using operatordefinition rather than functiondefinition, since the result types cannot be expressed with a Modelica type signature. -\begin{operatordefinition}[transpose] -\begin{synopsis}\begin{lstlisting} -transpose($A$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Permutes the first two dimensions of array $A$. It is an error if array $A$ does not have at least 2 dimensions. -\end{semantics} -\end{operatordefinition} - -\begin{functiondefinition}[outerProduct] -\begin{synopsis}\begin{lstlisting} -outerProduct($x$, $y$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the outer product of vectors $x$ and $y$, that is: \lstinline!matrix($x$) * transpose(matrix($y$))! -\end{semantics} -\end{functiondefinition} - -\begin{functiondefinition}[symmetric] -\begin{synopsis}\begin{lstlisting} -symmetric($A$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns a symmetric matrix which is identical to the square matrix $A$ on and above the diagonal. - -That is, if \lstinline!B := symmetric($A$)!, then \lstinline!B! is given by: -\begin{equation*} -\text{\lstinline!B[$i$, $j$]!} = -\begin{cases} -\text{\lstinline!$A$[$i$, $j$]!} & \text{if $i \leq j$}\\ -\text{\lstinline!$A$[$j$, $i$]!} & \text{if $i > j$} -\end{cases} -\end{equation*} -\end{semantics} -\end{functiondefinition} - -\begin{functiondefinition}[cross] -\begin{synopsis}\begin{lstlisting} -cross($x$, $y$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the cross product of the 3-vectors $x$ and $y$: -\begin{lstlisting}[frame=none] -vector([ $x$[2] * $y$[3] - $x$[3] * $y$[2] ; - $x$[3] * $y$[1] - $x$[1] * $y$[3] ; - $x$[1] * $y$[2] - $x$[2] * $y$[1] ]) -\end{lstlisting} -\end{semantics} -\end{functiondefinition} - -\begin{functiondefinition}[skew] -\begin{synopsis}\begin{lstlisting} -skew($x$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the $3 \times 3$ skew symmetric matrix associated with a 3-vector, i.e., \lstinline!cross($x$, $y$) = skew($x$) * $y$!. Equivalently, \lstinline!skew($x$)! is given by: -\begin{lstlisting}[frame=none] -[ 0, -$x$[3], $x$[2] ; - $x$[3], 0, -$x$[1] ; - -$x$[2], $x$[1], 0 ] -\end{lstlisting} -\end{semantics} -\end{functiondefinition} - -\section{Vector, Matrix and Array Constructors}\label{vector-matrix-and-array-constructors} - -The \firstuse{array constructor}\index{array!constructor} function \lstinline!array(A, B, C, $\ldots$)! constructs an array from its arguments according to the following rules: +\subsection{Matrix and Vector Algebra Functions}\doublelabel{matrix-and-vector-algebra-functions} + +The following set of built-in matrix and vector algebra functions are +available. The function transpose and symmetric can be applied to any matrix. The +functions outerProduct, cross and skew require Real/Integer +vector(s) or matrix as input(s) and returns a Real/Integer vector or matrix (the result is only Integer +if the input/all inputs are Integer): +\begin{longtable}[]{|p{3.5cm}|p{11.5cm}|} +\caption{Matrix and vector algebra functions.}\\ +\hline +\tablehead{Modelica} & \tablehead{Explanation}\\ \hline +\endhead +\lstinline!transpose(A)! +& Permutes the first two dimensions of array A. It is an error, if array A +does not have at least 2 dimensions.\\ \hline +\lstinline!outerProduct(v1,v2)! +& Returns the outer product of vectors v1 and v2 ( = matrix(v1)*transpose( +matrix(v2) ) ).\\ \hline +\lstinline!symmetric(A)! +& Returns a symmetric matrix which is identical to the square matrix \lstinline!A! +on and above the diagonal, i.e., \lstinline!B := symmetric(A) ->! + \lstinline!B[i,j] := A[i,j], if i <= j, ! \lstinline! B[i,j] := A[j,i], if i > j!.\\ \hline +\lstinline!cross(x,y)! +& Returns the cross product of the 3-vectors x and y, i.e. +\lstinline!cross(x,y) = vector( [ x[2]*y[3]-x[3]*y[2]; x[3]*y[1]-x[1]*y[3]; x[1]*y[2]-x[2]*y[1] ] );!\\ \hline +\lstinline!skew(x)! +& Returns the 3 x 3 skew symmetric matrix associated with a 3-vector, + i.e., \lstinline!cross(x,y) = skew(x)*y; skew(x) = [0, -x[3], x[2]; x[3], 0, -x[1]; -x[2], x[1], 0];!\\ \hline +\end{longtable} + +\section{Vector, Matrix and Array Constructors}\doublelabel{vector-matrix-and-array-constructors} + +The constructor function \lstinline!array(A,B,C,...)! constructs an array from its +arguments according to the following rules: \begin{itemize} \item Size matching: All arguments must have the same sizes, i.e., - \lstinline!size(A)! = \lstinline!size(B)! = \lstinline!size(C)! = \ldots + \lstinline!size(A)=size(B)=size(C)=!... \item - All arguments must be type compatible expressions (\cref{type-compatible-expressions}) giving the type of the elements. The data type of the result array is the - maximally expanded type of the arguments. \lstinline!Real! and \lstinline!Integer! subtypes can be mixed resulting in a \lstinline!Real! result array where the - \lstinline!Integer! numbers have been transformed to \lstinline!Real! numbers. + All arguments must be type compatible expressions (\autoref{type-compatible-expressions}) giving + the type of the elements. The data type of the result array is the + maximally expanded type of the arguments. Real and Integer subtypes + can be mixed resulting in a Real result array where the Integer + numbers have been transformed to Real numbers. \item - Each application of this constructor function adds a one-sized dimension to the left in the result compared to the dimensions of the argument arrays, i.e., - \lstinline!ndims(array(A, B, C)) = ndims(A) + 1 = ndims(B) + 1, $\ldots$! + Each application of this constructor function adds a one-sized + dimension to the left in the result compared to the dimensions of the + argument arrays, i.e., \lstinline!ndims(array(A,B,C)) = ndims(A) + 1 = ndims(B) + 1, ...! \item - \lstinline!{A, B, C, $\ldots$}! is a shorthand notation for \lstinline!array(A, B, C, $\ldots$)!. + \lstinline!{A, B, C, ...}! is a shorthand notation for \lstinline!array(A, B, C, ...)!. \item There must be at least one argument. \begin{nonnormative} - The reason \lstinline!array()! or \lstinline!{}! is not defined is that at least one argument is needed to determine the type of the resulting array. + The reason \lstinline!array()! or \lstinline!{}! is not defined is that at least one argument is + needed to determine the type of the resulting array. \end{nonnormative} \end{itemize} \begin{example} \begin{lstlisting}[language=modelica, escapechar=!] -{1, 2, 3} !\emph{is a 3-vector of type Integer}.! -{{11, 12, 13}, {21, 22, 23}} !\emph{is a 2 x 3 matrix of type Integer}! -{{{1.0, 2.0, 3.0}}} !\emph{is a 1 x 1 x 3 array of type Real}.! - -Real[3] v = array(1, 2, 3.0); -type Angle = Real(unit="rad"); -parameter Angle alpha = 2.0; // type of alpha is Real. -// array(alpha, 2, 3.0) or {alpha, 2, 3.0} is a 3-vector of type Real. -Angle[3] a = {1.0, alpha, 4}; // type of a is Real[3]. + {1,2,3} !\emph{is a 3-vector of type Integer}.! + {{11,12,13}, {21,22,23}} !\emph{is a 2x3 matrix of type Integer}! + {{{1.0, 2.0, 3.0}}} !\emph{is a 1x1x3 array of type Real}.! + + Real[3] v = array(1, 2, 3.0); + type Angle = Real(unit="rad"); + parameter Angle alpha = 2.0; // type of alpha is Real. + // array(alpha, 2, 3.0) or {alpha, 2, 3.0} is a 3-vector of type Real. + Angle[3] a = {1.0, alpha, 4}; // type of a is Real[3]. \end{lstlisting} \end{example} -\subsection{Array Constructor with Iterators}\label{array-constructor-with-iterators} +\subsection{Array Constructor with Iterators}\doublelabel{array-constructor-with-iterators} An expression: \begin{lstlisting}[language=grammar] @@ -751,24 +578,28 @@ \subsection{Array Constructor with Iterators}\label{array-constructor-with-itera \begin{lstlisting}[language=grammar] array "(" expression for iterators ")" \end{lstlisting} -is an \firstuse{array constructor with iterators}\index{array!constructor!with iterators}. -The expressions inside the iterators of an array constructor shall be vector expressions. -They are evaluated once for each array constructor, and are evaluated in the scope immediately enclosing the array constructor. + +is an array constructor with iterators. The expressions inside the +iterators of an array constructor shall be vector expressions. They are +evaluated once for each array constructor, and are evaluated in the +scope immediately enclosing the array constructor. For an iterator: \begin{lstlisting}[language=modelica] IDENT in array_expression \end{lstlisting} -the loop-variable, \lstinline!IDENT!, is in scope inside expression in the array construction. -The loop-variable may hide other variables, as in \lstinline!for!-loops. -The loop-variable has the same type as -the type of the elements of \lstinline!array_expression!; and can be simple type as well as a record type. -The loop-variable will have the same type for the entire loop -- i.e., for an -\lstinline!array_expression! \lstinline!{1, 3.2}! the iterator will have the type of the type-compatible expression (\lstinline!Real!) for all iterations. -For deduction of ranges, see -\cref{implicit-iteration-ranges}; and for using types as range see \cref{types-as-iteration-ranges}. -\subsubsection{Array Constructor with One Iterator}\label{array-constructor-with-one-iterator} +the loop-variable, \lstinline!IDENT!, is in scope inside expression in the array +construction. The loop-variable may hide other variables, as in +for-clauses. The loop-variable has the same type as the type of the +elements of array\_expression; and can be simple type as well as a +record type. The loop-variable will have the same type for the entire +loop - i.e. for an array\_expression \{1,3.2\} the iterator will have +the type of the type-compatible expression (Real) for all iterations. +For deduction of ranges, see \autoref{implicit-iteration-ranges}; and for using types as +range see \autoref{types-as-iteration-ranges}. + +\subsubsection{Array Constructor with One Iterator}\doublelabel{array-constructor-with-one-iterator} If only one iterator is used, the result is a vector constructed by evaluating expression for each value of the loop-variable and forming an @@ -777,17 +608,17 @@ \subsubsection{Array Constructor with One Iterator}\label{array-constructor-with \begin{example} \begin{lstlisting}[language=modelica] array(i for i in 1:10) -// Gives the vector 1:10 = {1, 2, 3, $\ldots$, 10} +// Gives the vector 1:10={1,2,3,...,10} {r for r in 1.0 : 1.5 : 5.5} -// Gives the vector 1.0:1.5:5.5 = {1.0, 2.5, 4.0, 5.5} +// Gives the vector 1.0:1.5:5.5={1.0, 2.5, 4.0, 5.5} {i^2 for i in {1,3,7,6}} // Gives the vector {1, 9, 49, 36} \end{lstlisting} \end{example} -\subsubsection{Array Constructor with Several Iterators}\label{array-constructor-with-several-iterators} +\subsubsection{Array Constructor with Several Iterators}\doublelabel{array-constructor-with-several-iterators} The notation with several iterators is a shorthand notation for nested array constructors. The notation can be expanded into the usual form by @@ -796,223 +627,227 @@ \subsubsection{Array Constructor with Several Iterators}\label{array-constructor \begin{example} \begin{lstlisting}[language=modelica] -Real toeplitz[:,:] = {i-j for i in 1:n, j in 1:n}; -Real toeplitz2[:,:] = {{i-j for i in 1:n} for j in 1:n}; + Real hilb[:,:]= { 1/(i+j-1) for i in 1:n, j in 1:n}; + Real hilb2[:,:]={{ 1/(i+j-1) for j in 1:n} for i in 1:n}; \end{lstlisting} \end{example} -\subsection{Array Concatenation}\label{array-concatenation} +\subsection{Array Concatenation}\doublelabel{array-concatenation} + -The function \lstinline!cat($k$, A, B, C, $\ldots$)! concatenates arrays -\lstinline!A!, \lstinline!B!, \lstinline!C!, \ldots along -dimension $k$ according to the following rules: +The function \lstinline!cat(k,A,B,C,...)! concatenates arrays +\lstinline!A!,\lstinline!B!,\lstinline!C!,... along +dimension k according to the following rules: \begin{itemize} \item - Arrays \lstinline!A!, \lstinline!B!, \lstinline!C!, \ldots must have the same number of dimensions, i.e., - \lstinline!ndims(A)! = \lstinline!ndims(B)! = \ldots + Arrays A, B, C, ... must have the same number of dimensions, i.e., + \lstinline!ndims(A)! = \lstinline!ndims(B)! = ... \item - Arrays \lstinline!A!, \lstinline!B!, \lstinline!C!, \ldots must be type compatible expressions (\cref{type-compatible-expressions}) + Arrays A, B, C, ... must be type compatible expressions (\autoref{type-compatible-expressions}) giving the type of the elements of the result. The maximally expanded - types should be equivalent. \lstinline!Real! and \lstinline!Integer! subtypes can be mixed - resulting in a \lstinline!Real! result array where the \lstinline!Integer! numbers have been - transformed to \lstinline!Real! numbers. + types should be equivalent. Real and Integer subtypes can be mixed + resulting in a Real result array where the Integer numbers have been + transformed to Real numbers. \item - $k$ has to characterize an existing dimension, i.e., $1 \leq k \leq \text{\lstinline!ndims(A)!} = \text{\lstinline!ndims(B)!} = \text{\lstinline!ndims(C)!}$; $k$ shall be a parameter expression of \lstinline!Integer! type. + k has to characterize an existing dimension, i.e., 1 $<=$ k + $<=$ \lstinline!ndims(A)! = \lstinline!ndims(B)! = \lstinline!ndims(C)!; k shall be a parameter expression of \lstinline!Integer! type. \item - Size matching: Arrays \lstinline!A!, \lstinline!B!, \lstinline!C!, \ldots must have identical array sizes - with the exception of the size of dimension $k$, i.e., \lstinline!size(A, $j$)! = - \lstinline!size(B, $j$)!, for $1 \leq j \leq \text{\lstinline!ndims(A)!}$ and $j \neq k$. + Size matching: Arrays A, B, C, ... must have identical array sizes + with the exception of the size of dimension k, i.e., \lstinline!size(A,j)! = + \lstinline!size(B,j)!, for 1 $<=$ j $<=$ \lstinline!ndims(A)! and j + $\neq$ k. \end{itemize} \begin{example} \begin{lstlisting}[language=modelica] -Real[2,3] r1 = cat(1, {{1.0, 2.0, 3}}, {{4, 5, 6}}); -Real[2,6] r2 = cat(2, r1, 2*r1); + Real[2,3] r1 = cat(1, {{1.0, 2.0, 3}}, {{4, 5, 6}}); + Real[2,6] r2 = cat(2, r1, 2*r1); \end{lstlisting} \end{example} -Formally, the concatenation \lstinline!R = cat($k$, A, B, C, $\ldots$)! is defined as follows. Let $n$ = \lstinline!ndims(A)! = \lstinline!ndims(B)! = \lstinline!ndims(C)! = \ldots Then the size of \lstinline!R! is given by -\begin{lstlisting}[language=modelica,escapechar=!,frame=none,xleftmargin=1em] -size(R,$k$) = size(A,$k$) + size(B,$k$) + size(C,$k$) + $\ldots$ -size(R,$j$) = size(A,$j$) = size(B,$j$) = size(C,$j$) = $\ldots$ !for! $1 \leq j \leq n$ !and! $j \neq k$ -\end{lstlisting} -and the array elements of \lstinline!R! are given by -\begin{lstlisting}[language=modelica,escapechar=!,frame=none,xleftmargin=1em] -R[$i_{1}$, $\ldots$, $i_{k}$, $\ldots$, $i_{n}$] = A[$i_{1}$, $\ldots$, $i_{k}$, $\ldots$, $i_{n}$] - !for! $0 < i_{k} \leq$ size(A,$k$) -R[$i_{1}$, $\ldots$, $i_{k}$, $\ldots$, $i_{n}$] = B[$i_{1}$, $\ldots$, $i_{k}$ - size(A,$k$), $\ldots$, $i_{n}$] - !for! size(A,$k$) $< i_{k} \leq$ size(A,$k$) + size(B,$k$) -R[$i_{1}$, $\ldots$, $i_{k}$, $\ldots$, $i_{n}$] = C[$i_{1}$, $\ldots$, $i_{k}$ - size(A,$k$) - size(B,$k$), $\ldots$, $i_{n}$] - !for! size(A,$k$) + size(B,$k$) $< i_{k} \leq$ size(A,$k$) + size(B,$k$) + size(C,$k$) -$\ldots$ +Concatenation is formally defined according to: +\begin{lstlisting}[language=modelica, escapechar=!] +!Let! R = cat(k,A,B,C,...)!, and let! n = ndims(A) = ndims(B) = ndims(C) = +....!, then! + size(R,k) = size(A,k) + size(B,k) + size(C,k) + ... + size(R,j) = size(A,j) = size(B,j) = size(C,j) = ...., for 1 <=j <= n and j <> k. + + R[i_1, ..., i_k, ..., i_n] = A[i_1, ..., i_k, ..., i_n], for i_k <= size(A,k), + R[i_1, ..., i_k, ..., i_n] = B[i_1, ..., i_k - size(A,i), ..., i_n], for i_k <= size(A,k) + size(B,k), + .... + where 1 <= i_j <= size(R,j) for 1 <= j <= n. \end{lstlisting} -where $1 \leq i_{j} \leq$ \lstinline!size(R,$j$)! for $1 \leq j \leq n$. -\subsubsection{Array Concatenation along First and Second Dimensions}\label{array-concatenation-along-first-and-second-dimensions} +\subsubsection{Array Concatenation along First and Second Dimensions}\doublelabel{array-concatenation-along-first-and-second-dimensions} + +For convenience, a special syntax is supported for the concatenation +along the first and second dimensions. -For convenience, a special syntax is supported for the concatenation along the first and second dimensions: \begin{itemize} \item \emph{Concatenation along first dimension}:\\ - \lstinline![A; B; C; $\ldots$] = cat(1, promote(A, n), promote(B, n), promote(C, n), $\ldots$)! - where \lstinline!n = max(2, ndims(A), ndims(B), ndims(C), $\ldots$)!. If necessary, 1-sized - dimensions are added to the right of \lstinline!A!, \lstinline!B!, \lstinline!C! before the operation is - carried out, in order that the operands have the same number of dimensions which will be at least two. +\lstinline![A; B; C; ...] = cat(1, promote(A,n), promote(B,n), promote(C,n), ...)! +where \lstinline!n = max(2, ndims(A), ndims(B), ndims(C), ....)!. If necessary, 1-sized + dimensions are added to the right of A, B, C before the operation is + carried out, in order that the operands have the same number of + dimensions which will be at least two. \item \emph{Concatenation along second dimension}:\\ - \lstinline![A, B, C, $\ldots$] = cat(2, promote(A, n), promote(B, n), promote(C, n), $\ldots$)! - where \lstinline!n = max(2, ndims(A), ndims(B), ndims(C), $\ldots$)!. If necessary, 1-sized - dimensions are added to the right of \lstinline!A!, \lstinline!B!, \lstinline!C! before the operation is +\lstinline![A, B, C, ...] = cat(2, promote(A,n), promote(B,n), promote(C,n), ...)! +where \lstinline!n = max(2, ndims(A), ndims(B), ndims(C), ....)!. If necessary, 1-sized + dimensions are added to the right of A, B, C before the operation is carried out, especially that each operand has at least two dimensions. \item - The two forms can be mixed. \lstinline![$\ldots$, $\ldots$]! has higher precedence than - \lstinline![$\ldots$; $\ldots$]!, e.g., \lstinline![a, b; c, d]! is parsed as \lstinline![[a, b]; [c, d]]!. + The two forms can be mixed. \lstinline![...,...]! has higher precedence than + \lstinline![...;...]!, e.g., \lstinline![a, b; c, d]! is parsed as \lstinline![[a,b];[c,d]]!. \item - \lstinline![A] = promote(A, max(2, ndims(A)))!, i.e., \lstinline![A] = A!, if \lstinline!A! has 2 or more dimensions, and it is a matrix - with the elements of \lstinline!A!, if \lstinline!A! is a scalar or a vector. +\lstinline![A] = promote(A,max(2,ndims(A)))!, i.e., \lstinline![A] = A!, if A has 2 or + more dimensions, and it is a matrix with the elements of A, if A is a + scalar or a vector. \item - There must be at least one argument (i.e.\ \lstinline![]! is not defined). + There must be at least one argument (i.e. \lstinline![]! is not defined) \end{itemize} \begin{example} \begin{lstlisting}[language=modelica] -Real s1, s2, v1[n1], v2[n2], M1[m1,n], -M2[m2,n], M3[n,m1], M4[n,m2], K1[m1,n,k], -K2[m2,n,k]; -[v1;v2] is a (n1+n2) x 1 matrix -[M1;M2] is a (m1+m2) x n matrix -[M3,M4] is a n x (m1+m2) matrix -[K1;K2] is a (m1+m2) x n x k array -[s1;s2] is a 2 x 1 matrix -[s1,s1] is a 1 x 2 matrix -[s1] is a 1 x 1 matrix -[v1] is a n1 x 1 matrix -Real[3] v1 = array(1, 2, 3); -Real[3] v2 = {4, 5, 6}; -Real[3,2] m1 = [v1, v2]; -Real[3,2] m2 = [v1, [4;5;6]]; // m1 = m2 -Real[2,3] m3 = [1, 2, 3; 4, 5, 6]; -Real[1,3] m4 = [1, 2, 3]; -Real[3,1] m5 = [1; 2; 3]; + Real s1, s2, v1[n1], v2[n2], M1[m1,n], + M2[m2,n], M3[n,m1], M4[n,m2], K1[m1,n,k], + K2[m2,n,k]; + [v1;v2] is a (n1+n2) x 1 matrix + [M1;M2] is a (m1+m2) x n matrix + [M3,M4] is a n x (m1+m2) matrix + [K1;K2] is a (m1+m2) x n x k array + [s1;s2] is a 2 x 1 matrix + [s1,s1] is a 1 x 2 matrix + [s1] is a 1 x 1 matrix + [v1] is a n1 x 1 matrix + Real[3] v1 = array(1, 2, 3); + Real[3] v2 = {4, 5, 6}; + Real[3,2] m1 = [v1, v2]; + Real[3,2] m2 = [v1, [4;5;6]]; // m1 = m2 + Real[2,3] m3 = [1, 2, 3; 4, 5, 6]; + Real[1,3] m4 = [1, 2, 3]; + Real[3,1] m5 = [1; 2; 3]; \end{lstlisting} \end{example} -\subsection{Vector Construction}\label{vector-construction} +\subsection{Vector Construction}\doublelabel{vector-construction} Vectors can be constructed with the general array constructor, e.g., \begin{lstlisting}[language=modelica] -Real[3] v = {1, 2, 3}; + Real[3] v = {1,2,3}. \end{lstlisting} -The range vector operator or colon operator of \lstinline[language=grammar]!simple-expression! can be used instead of or in combination with this general constructor to construct \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean! or enumeration type vectors. -Semantics of the colon operator: +The range vector operator or colon operator of simple-expression can be +used instead of or in combination with this general constructor to +construct Real, Integer, Boolean or enumeration type vectors. Semantics +of the colon operator: \begin{itemize} \item - \lstinline!$j$ : $k$! is the \lstinline!Integer! vector \lstinline!{$j$, $j+1$, $\ldots$, $k$}!, if $j$ and $k$ are of type + \lstinline!j : k! is the \lstinline!Integer! vector \lstinline!{j, j+1, ..., k}!, if \lstinline!j! and \lstinline!k! are of type \lstinline!Integer!. \item - \lstinline!$j$ : $k$! is the \lstinline!Real! vector \lstinline!{$j$, $j+1.0$, $\ldots$, $j+n$}!, with $n = \text{\lstinline!floor!}(k - j)$, if - $j$ and/or $k$ are of type \lstinline!Real!. + \lstinline!j : k! is the \lstinline!Real! vector \lstinline!{j, j+1.0, ..., j+n}!, with \lstinline!n = floor(k - j)!, if + \lstinline!j! and/or \lstinline!k! are of type \lstinline!Real!. \item - \lstinline!$j$ : $k$! is a \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, or \lstinline!enumeration! type vector with zero elements, if $j > k$. + \lstinline!j : k! is a \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, or \lstinline!enumeration! type vector with + zero elements, if $\text{\lstinline!j!} > \text{\lstinline!k!}$. \item - \lstinline!$j$ : $d$ : $k$! is the \lstinline!Integer! vector \lstinline!{$j$, $j+d$, $\ldots$, $j + n d$}!, with $n = \text{\lstinline!div!}(k - j, d)$, if $j$, $d$, and $k$ are of type \lstinline!Integer!. + \lstinline!j : d : k! is the \lstinline!Integer! vector \lstinline!{j, j+d, ..., j+n*d}!, with \lstinline!n = div(k - j, d)!, if \lstinline!j!, \lstinline!d!, and \lstinline!k! are of type \lstinline!Integer!. \item - \lstinline!$j$ : $d$ : $k$! is the \lstinline!Real! vector \lstinline!{$j$, $j+d$, $\ldots$, $j + n d$}!, with $n = \text{\lstinline!floor!}((k-j)/d)$, - if $j$, $d$, or $k$ are of type \lstinline!Real!. In order to avoid rounding issues for the length it is recommended to use \lstinline!{j + d * i for i in 0 : n}! or - \lstinline!linspace(j, k, n + 1)! -- if the number of elements are known. + \lstinline!j : d : k! is the \lstinline!Real! vector \lstinline!{j, j+d, ..., j+n*d}!, with \lstinline!n = floor((k-j)/d)!, if \lstinline!j!, \lstinline!d!, or \lstinline!k! are of type \lstinline!Real!. In order to avoid rounding issues for the length it is recommended to use \lstinline!{j+d*i for i in 0:n}! or \lstinline!linspace(j, k, n+1)! --- if the number of elements are + known. \item - \lstinline!$j$ : $d$ : $k$! is a \lstinline!Real! or \lstinline!Integer! vector with zero elements, if $d > 0$ and $j > k$ or if $d < 0$ and $j < k$. + \lstinline!j : d : k! is a \lstinline!Real! or \lstinline!Integer! vector with zero elements, if $\text{\lstinline!d!} + > 0$ and $\text{\lstinline!j!} > \text{\lstinline!k!}$ or if $\text{\lstinline!d!} < 0$ and $\text{\lstinline!j!} + < \text{\lstinline!k!}$. \item - \lstinline!false : true! is the \lstinline!Boolean! vector \lstinline!{false, true}!. + \lstinline!false : true! is the Boolean vector \lstinline!{false, true}!. \item - \lstinline!$j$ : $j$! is \lstinline!{$j$}! if $j$ is \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, or \lstinline!enumeration! type. + \lstinline!j : j! is \lstinline!{j}! if \lstinline!j! is \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, or \lstinline!enumeration! type. \item - \lstinline!E.ei : E.ej! is the enumeration type vector \lstinline!{E.ei, $\ldots$, E.ej}! where + \lstinline!E.ei : E.ej! is the enumeration type vector \lstinline!{E.ei, ... E.ej}! where $\text{\lstinline!E.ej!} > \text{\lstinline!E.ei!}$, and \lstinline!ei! and \lstinline!ej! belong to some enumeration type - \lstinline!E = enumeration($\ldots$, ei, $\ldots$, ej, $\ldots$)!. + \lstinline!E = enumeration(...ei, ...ej, ...)!. \end{itemize} \begin{example} \begin{lstlisting}[language=modelica] -Real v1[5] = 2.7 : 6.8; -Real v2[5] = {2.7, 3.7, 4.7, 5.7, 6.7}; // = same as v1 -Boolean b1[2] = false:true; -Colors = enumeration (red,blue,green); -Colors ec[3] = Colors.red : Colors.green; + Real v1[5] = 2.7 : 6.8; + Real v2[5] = {2.7, 3.7, 4.7, 5.7, 6.7}; // = same as v1 + Boolean b1[2] = false:true; + Colors = enumeration (red,blue,green); + Colors ec[3] = Colors.red : Colors.green; \end{lstlisting} \end{example} -\section{Array Indexing}\label{array-indexing} +\section{Array Indexing}\doublelabel{array-indexing} -The array indexing operator \lstinline!$\mathit{name}$[$\ldots$]! is used to access array elements for retrieval of their values or for updating these values. -An indexing operation is subject to upper and lower array dimension index bounds (\cref{array-dimension-lower-and-upper-index-bounds}). -The indexing operator takes two or more operands, where the first operand is the array to be indexed and the rest of the operands are \firstuse{index}\index{index} (or \firstuse{subscript}\index{subscript}) expressions: +The array indexing operator \emph{name}\lstinline![!\emph{...}\lstinline!]! is used to +access array elements for retrieval of their values or for updating +these values. An indexing operation is subject to upper and lower array +dimension index bounds (\autoref{array-dimension-lower-and-upper-index-bounds}). The indexing operator takes two or more +operands, where the first operand is the array to be indexed and the rest of the operands are index expressions: -\lstinline!$\mathit{arrayname}$[$\mathit{indexexpr}_{1}$, $\mathit{indexexpr}_{2}$, $\ldots$]! +\lstinline[mathescape=true]!$\mathit{arrayname}$[$\mathit{indexexpr}_{1}$, $\mathit{indexexpr}_{2}$, $\ldots$]! -A colon (`\lstinline!:!') is used to denote all indices of one dimension. -A vector expression can be used to pick out selected rows, columns and elements of vectors, matrices, and arrays. -The number of dimensions of the expression is reduced by the number of scalar index arguments. -If the number of index arguments is smaller than the number of dimensions of the array, the trailing indices will use `\lstinline!:!'. +A colon is used to denote all indices of one dimension. A vector +expression can be used to pick out selected rows, columns and elements +of vectors, matrices, and arrays. The number of dimensions of the +expression is reduced by the number of scalar index arguments. If the +number of index arguments is smaller than the number of dimensions of +the array, the trailing indices will use `\lstinline!:!'. -It is also possible to use the array access operator to assign to element/elements of an array in algorithm sections. -This is called an \firstuse{indexed assignment statement}\index{assignment statement!indexed}. -If the index is an array the assignments take place in the order given by the index array. -For assignments to arrays and elements of arrays, the entire right-hand side and the index on the left-hand side are evaluated before any element is assigned a new value. +It is also possible to use the array access operator to assign to +element/elements of an array in algorithm sections. If the index is an +array the assignments take place in the order given by the index array. +For assignments to arrays and elements of arrays, the entire right-hand +side and the index on the left-hand side are evaluated before any +element is assigned a new value. \begin{nonnormative} An indexing operation is assumed to take constant time, i.e., largely independent of the size of the array. \end{nonnormative} \begin{example} -Array indexing expressions: -\begin{lstlisting}[language=modelica] -a[:, j] // Vector of the j'th column of a. -a[j] // Vector of the j'th row of a. Same as: a[j, :] -a[j : k] // Same as: {a[j], a[j+1], $\ldots$, a[k]} -a[:, j : k] // Same as: [a[:, j], a[:, j+1], $\ldots$, a[:, k]] -\end{lstlisting} -The range vector operator is just a special case of a vector expression: -\begin{lstlisting}[language=modelica] -v[2 : 2 : 8] // Same as: v[{2, 4, 6, 8}] -\end{lstlisting} -Array indexing in assignment statements: -\begin{lstlisting}[language=modelica] -v[{j, k}] := {2, 3}; // Same as: v[j] := 2; v[k] := 3; -v[{1, 1}] := {2, 3}; // Same as: v[1] := 3; +\begin{lstlisting}[language=modelica, escapechar=!] + a[:, j] !\emph{is a vector of the j-th column of a,}! + a[j] !\emph{is a vector of the j-th row of a:}! a[j, :] + a[j : k] is {[a[j], a[j+1], ... , a[k]} + a[:,j : k] is [a[:,j], a[:,j+1], ... , a[:,k]], + v[2:2:8] = v[ {2,4,6,8} ] . + v[{j,k}]:={2,3}; // Same as v[j]:=2; v[k]:=3; + v[{1,1}]:={2,3}; // Same as v[1]:=3; \end{lstlisting} If \lstinline!x! is a vector, \lstinline!x[1]! is a scalar, but the slice \lstinline!x[1:5]! is a vector (a vector-valued or colon index expression causes a vector to be returned). \end{example} -\begin{table}[H] -\caption{Examples of scalars vs.\ array slices created with the colon index. The examples make use of the array variables \lstinline!x[$n$, $m$]!, \lstinline!v[$k$]!, and \lstinline!z[$i$, $j$, $p$]!.} -\begin{center} -\begin{tabular}{l c l} -\hline -\tablehead{Expression} & \tablehead{\# dims} & \tablehead{Description}\\ -\hline -\hline -\lstinline!x[1, 1]! & 0 & Scalar\\ -\lstinline!x[:, 1]! & 1 & $n$-vector\\ -\lstinline!x[1, :]! or \lstinline!x[1]! & 1 & $m$-vector\\ -\lstinline!v[1:$p$]! & 1 & $p$-vector\\ -\lstinline!x[1:$p$, :]! & 2 & $p \times m$ matrix\\ -\lstinline!x[1:1, :]! & 2 & $1 \times m$ ``row'' matrix\\ -\lstinline!x[{1, 3, 5}, :]! & 2 & $3 \times m$ matrix\\ -\lstinline!x[:, v]! & 2 & $n \times k$ matrix\\ -\lstinline!z[:, 3, :]! & 2 & $i \times p$ matrix\\ -\lstinline!x[scalar([1]), :]! & 1 & $m$-vector\\ -\lstinline!x[vector([1]), :]! & 2 & $1 \times m$ ``row'' matrix\\ -\hline -\end{tabular} -\end{center} -\end{table} +\begin{example} +Array slicing given the declaration \lstinline!x[n,m], v[k], z[i,j,p]!. +\begin{longtable}[]{|l|l|l|} +\caption{Examples of scalars vs. array slices created with the colon index.}\\ +\hline +\tablehead{Expression} & \tablehead{\# dimensions} & \tablehead{Type of value}\\ \hline +\endhead +\lstinline!x[1, 1]! & \lstinline!0! & Scalar\\ \hline +\lstinline!x[:, 1]! & \lstinline!1! & n -- Vector\\ \hline +\lstinline!x[1, :] or x[1]! & \lstinline!1! & m -- Vector\\ \hline +\lstinline!v[1:p]! & \lstinline!1! & p -- Vector\\ \hline +\lstinline!x[1:p, :]! & \lstinline!2! & p x m -- Matrix\\ \hline +\lstinline!x[1:1, :]! & \lstinline!2! & 1 x m - ``row'' matrix\\ \hline +\lstinline!x[{1, 3, 5}, :]! & \lstinline!2! & 3 x m -- Matrix\\ \hline +\lstinline!x[: , v]! & \lstinline!2! & n x k -- Matrix\\ \hline +\lstinline!z[: , 3, :]! & \lstinline!2! & i x p -- Matrix\\ \hline +\lstinline!x[scalar([1]), :]! & \lstinline!1! & m -- Vector\\ \hline +\lstinline!x[vector([1]), :]! & \lstinline!2! & 1 x m - ``row'' matrix\\ \hline +\end{longtable} +\end{example} -\subsection{Indexing with Boolean or Enumeration Values}\label{indexing-with-boolean-or-enumeration-values} +\subsection{Indexing with Boolean or Enumeration Values}\doublelabel{indexing-with-boolean-or-enumeration-values} -Arrays can be indexed using values of enumeration types or the \lstinline!Boolean! type, not only by \lstinline!Integer!. The type of the index should correspond to +Arrays can be indexed using values of enumeration types or the \lstinline!Boolean! +type, not only by integers. The type of the index should correspond to the type used for declaring the dimension of the array. \begin{example} @@ -1028,302 +863,294 @@ \subsection{Indexing with Boolean or Enumeration Values}\label{indexing-with-boo \end{lstlisting} \end{example} -\subsection{Indexing with end}\label{indexing-with-end} - -The expression \lstinline!end!\indexinline{end} may only appear inside array subscripts, and if used in the $i$th subscript of an array expression \lstinline!A! it is equivalent to the upper bound of the $i$th dimension of \lstinline!A!. -If used inside nested array subscripts it refers to the most closely nested array. +\subsection{Indexing with end}\doublelabel{indexing-with-end} -\begin{nonnormative} -If indices to \lstinline!A! are a subtype of \lstinline!Integer! it is equivalent to \lstinline!size(A, i)!. -\end{nonnormative} +The expression \lstinline!end! may only appear inside array subscripts, and if used +in the i:th subscript of an array expression \lstinline!A! it is equivalent to +\lstinline!size(A,i)! provided indices to A are a subtype of Integer. If used inside +nested array subscripts it refers to the most closely nested array. \begin{example} \begin{lstlisting}[language=modelica, escapechar=!] -A[end - 1, end] !is! A[size(A,1) - 1, size(A,2)] -A[v[end], end] !is! A[v[size(v,1)], size(A,2)] // !\emph{First}! end !\emph{is referring to end of v.}! - -Real B[Boolean]; -B[end] !is! B[true] + A[end -1,end] is A[size(A,1)-1,size(A,2)] + A[v[end ],end] is A[v[size(v,1)],size(A,2)] // !\emph{since the first}! end !\emph{is referring to end of v.}! \end{lstlisting} \end{example} -\section{Scalar, Vector, Matrix, and Array Operator Functions}\label{scalar-vector-matrix-and-array-operator-functions} +\section{Scalar, Vector, Matrix, and Array Operator Functions}\doublelabel{scalar-vector-matrix-and-array-operator-functions} -The mathematical operations defined on scalars, vectors, and matrices are the subject of linear algebra. +The mathematical operations defined on scalars, vectors, and matrices +are the subject of linear algebra. -The term numeric or numeric class is used below for a subtype of the \lstinline!Real! or \lstinline!Integer! type classes. The standard type coercion defined -in \cref{standard-type-coercion} applies. +The term numeric or numeric class is used below for a subtype of the +Real or Integer type classes. The standard type coercion defined in \autoref{standard-type-coercion} apply. -\subsection{Equality and Assignment}\label{equality-and-assignment} +\subsection{Equality and Assignment}\doublelabel{equality-and-assignment} -Equality \lstinline!a = b! and assignment \lstinline!a := b! of scalars, vectors, matrices, and arrays is defined element-wise and require both objects to have the same number of dimensions and corresponding dimension sizes. -See \cref{array-indexing} regarding assignments to array variables with vector of subscripts. +Equality \lstinline!a=b! and assignment \lstinline!a:=b! of scalars, vectors, matrices, and +arrays is defined element-wise and require both objects to have the same +number of dimensions and corresponding dimension sizes. The operands +need to be type equivalent. This is legal for the simple types and all +types satisfying the requirements for a record, and is in the latter +case applied to each component-element of the records. -The operands need to be type equivalent. -This is legal for the simple types and all types satisfying the requirements for a record, and is in the latter case applied to each component-element of the records. - -\begin{table}[H] -\caption{Equality and assignment of arrays and scalars. The scalar \tablehead{Operation} applies for all $j$ in $1,\, \ldots,\, n$ and $k$ in $1,\, \ldots,\, m$.} -\begin{center} -\begin{tabular}{l l|l l} -\hline -\tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!b!} & \tablehead{Size of \lstinline!a = b!} & \tablehead{Operation}\\ +\begin{longtable}[]{|l|l|l|l|} +\caption{Equality and assignment of arrays and scalars.}\\ \hline -\hline -Scalar & Scalar & Scalar & \lstinline!a = b!\\ -$n$-vector & $n$-vector & $n$-vector & \lstinline!a[$j$] = b[$j$]!\\ -$n \times m$ matrix & $n \times m$ matrix & $n \times m$ matrix & \lstinline!a[$j$, $k$] = b[$j$, $k$]!\\ -$n \times m \times \ldots$ & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!a[$j$, $k$, $\ldots$] = b[$j$, $k$, $\ldots$]!\\ -\hline -\end{tabular} -\end{center} -\end{table} +\tablehead{Type of a} & \tablehead{Type of b} & \tablehead{Result of} a = b & \tablehead{Operation} (j=1:n, k=1:m)\\ \hline +\endhead +Scalar & Scalar & Scalar & a = b\\ \hline +Vector{[}n{]} & Vector{[}n{]} & Vector{[}n{]} & a{[}j{]} = +b{[}j{]}\\ \hline +Matrix{[}n, m{]} & Matrix{[}n, m{]} & Matrix{[}n, m{]} & a{[}j, k{]} = +b{[}j, k{]}\\ \hline +Array{[}n, m, \ldots{}{]} & Array{[}n, m, \ldots{}{]} & Array{[}n, m, +\ldots{}{]} & a{[}j, k, \ldots{}{]} = b{[}j, k, +\ldots{}{]}\\ \hline +\end{longtable} -\subsection{Array Element-wise Addition, Subtraction, and String Concatenation}\label{array-element-wise-addition-subtraction-and-string-concatenation} +\subsection{Array Element-wise Addition, Subtraction, and String Concatenation}\doublelabel{array-element-wise-addition-subtraction-and-string-concatenation} -Addition \lstinline!a + b! and subtraction \lstinline!a - b! of numeric scalars, vectors, matrices, -and arrays is defined element-wise and require \lstinline!size(a) = size(b)! and a +Addition \lstinline!a+b! and subtraction \lstinline!a-b! of numeric scalars, vectors, matrices, +and arrays is defined element-wise and require \lstinline!size(a)=size(b)! and a numeric type for \lstinline!a! and \lstinline!b!. Unary plus and minus are defined element-wise. -Addition \lstinline!a + b! of string scalars, vectors, matrices, and arrays is defined +Addition a+b of string scalars, vectors, matrices, and arrays is defined as element-wise string concatenation of corresponding elements from \lstinline!a! -and \lstinline!b!, and require \lstinline!size(a) = size(b)!. - -\begin{table}[H] -\caption{Array addition, subtraction, and string concatenation. In this table the symbolic operator $\pm$ represents either \lstinline!+! or \lstinline!-!. The scalar \tablehead{Operation} applies for all $j$ in $1,\, \ldots,\, n$ and $k$ in $1,\, \ldots,\, m$.} -\begin{center} -\begin{tabular}{l l|l l} -\hline -\tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!b!} & \tablehead{Size of \lstinline!a! $\pm$ \lstinline!b!} & -% Warning: Spacing inside \lstinline doesn't work properly inside \tablehead. -\tablehead{Operation} \lstinline!c := a $\pm$ b!\\ -\hline -\hline -Scalar & Scalar & Scalar & \lstinline!c := a $\pm$ b!\\ -$n$-vector & $n$-vector & $n$-vector & \lstinline!c[$j$] := a[$j$] $\pm$ b[$j$]!\\ -$n \times m$ matrix & $n \times m$ matrix & $n \times m$ matrix & \lstinline!c[$j$, $k$] := a[$j$, $k$] $\pm$ b[$j$, $k$]!\\ -$n \times m \times \ldots$ & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] $\pm$ b[$j$, $k$, $\ldots$]!\\ -\hline -\end{tabular} -\end{center} -\end{table} - -Element-wise addition \lstinline!a .+ b! and subtraction \lstinline!a .- b! of numeric scalars, vectors, matrices or arrays \lstinline!a! and \lstinline!b! requires a -numeric type class for \lstinline!a! and \lstinline!b! and either \lstinline!size(a) = size(b)! or scalar \lstinline!a! or scalar \lstinline!b!. Element-wise addition -\lstinline!a .+ b! of string scalars, vectors, matrices, and arrays is defined as element-wise string concatenation of corresponding elements from \lstinline!a! and -\lstinline!b!, and require either \lstinline!size(a) = size(b)! or scalar \lstinline!a! or scalar \lstinline!b!. - -\begin{table}[H] -\caption{Array element-wise addition, subtraction, and string concatenation. In this table the symbolic operator $\pm$ represents either \lstinline!+! or \lstinline!-!, and when preceded by a dot (\lstinline!.$\pm$!), either \lstinline!.+! or \lstinline!.-!. The scalar \tablehead{Operation} applies for all $j$ in $1,\, \ldots,\, n$ and $k$ in $1,\, \ldots,\, m$.} -\begin{center} -\begin{tabular}{l l|l l} -\hline -\tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!b!} & \tablehead{Size of \lstinline!a .$\pm$ b!} -& \tablehead{Operation \lstinline!c := a .$\pm$ b!}\\ -\hline -\hline -Scalar & Scalar & Scalar & \lstinline!c := a $\pm$ b!\\ -Scalar & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a $\pm$ b[$j$, $k$, $\ldots$]!\\ -$n \times m \times \ldots$ & Scalar & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] $\pm$ b!\\ -$n \times m \times \ldots$ & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] $\pm$ b[$j$, $k$, $\ldots$]!\\ -\hline -\end{tabular} -\end{center} -\end{table} - -\begin{table}[H] -\caption{Unary operators. In this table the symbolic operator $\pm$ represents either unary \lstinline!+! or unary \lstinline!-!. The element-wise (\lstinline!.+!, \lstinline!.-!) and normal (\lstinline!+!, \lstinline!-!) operators give the same results. The scalar \tablehead{Operation} applies for all $j$ in $1,\, \ldots,\, n$ and $k$ in $1,\, \ldots,\, m$.} -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!$\pm$ a!} & -% Warning: Spacing inside \lstinline doesn't work properly inside \tablehead. -\tablehead{Operation} \lstinline!c := $\pm$ a!\\ -\hline -\hline -Scalar & Scalar & \lstinline!c := $\pm$ a!\\ -$n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := $\pm$ a[$j$, $k$, $\ldots$]!\\ -\hline -\end{tabular} -\end{center} -\end{table} - -\subsection{Array Element-wise Multiplication}\label{array-element-wise-multiplication} - -Scalar multiplication \lstinline!s * a! or \lstinline!a * s! with numeric scalar s and numeric +and \lstinline!b!, and require \lstinline!size(a)=size(b)!. + +\begin{longtable}[]{|l|l|l|l|} +\caption{Array addition, subtraction, and string concatenation.}\\ +\hline +\tablehead{Type of a} & \tablehead{Type of b} & \tablehead{Result of a +/- b} & +\tablehead{Operation c := a +/- b (j=1:n, k=1:m)}\\ \hline +\endhead +Scalar & Scalar & Scalar & c := a +/- b\\ \hline +Vector{[}n{]} & Vector{[}n{]} & Vector{[}n{]} & c{[}j{]} := a{[}j{]} +/- +b{[}j{]}\\ \hline +Matrix{[}n, m{]} & Matrix{[}n, m{]} & Matrix{[}n, m{]} & c{[}j, k{]} := +a{[}j, k{]} +/- b{[}j, k{]}\\ \hline +Array{[}n, m, \ldots{}{]} & Array{[}n, m, \ldots{}{]} & Array{[}n, m, +\ldots{}{]} & c {[}j, k, \ldots{}{]} := a{[}j, k, \ldots{}{]} +/- b{[}j, +k, \ldots{}{]}\\ \hline +\end{longtable} + +Element-wise addition \lstinline!a.+b! and subtraction \lstinline!a.-b! of numeric scalars, +vectors, matrices or arrays a and b requires a numeric type class for a +and b and either size(a) = size(b) or scalar a or scalar b. Element-wise +addition \lstinline!a.+b! of string scalars, vectors, matrices, and arrays is +defined as element-wise string concatenation of corresponding elements +from a and b, and require either size(a) = size(b) or scalar a or scalar +b. + +\begin{longtable}[]{|l|l|l|l|} +\caption{Array element-wise addition, subtraction, and string concatenation.}\\ +\hline +\tablehead{Type of a} & \tablehead{Type of b} & \tablehead{Result of a} \lstinline!.+/.-! \tablehead{b} +& \tablehead{Operation c := a .+/.- b (j=1:n, k=1:m)}\\ \hline +\endhead +Scalar & Scalar & Scalar & c := a +/- b\\ \hline +Scalar & Array{[}n, m, \ldots{}{]} & Array{[}n, m, \ldots{}{]} & c{[}j, +k, \ldots{}{]} := a +/- b{[}j, k, \ldots{}{]}\\ \hline +Array{[}n, m, \ldots{}{]} & Scalar & Array{[}n, m, \ldots{}{]} & c{[}j, +k, \ldots{}{]} := a{[}j, k, \ldots{}{]} +/- b\\ \hline +Array{[}n, m, \ldots{}{]} & Array{[}n, m, \ldots{}{]} & Array{[}n, m, +\ldots{}{]} & c {[}j, k, \ldots{}{]} := a{[}j, k, \ldots{}{]} +/- b{[}j, +k, \ldots{}{]}\\ \hline + +\end{longtable} + +\begin{longtable}[]{|l|l|l|} +\caption{Unary operators. The element-wise (.+, .-) and normal (+, -) operators give the same results.}\\ +\hline +\tablehead{Type of a} & \tablehead{Result of} \lstinline!+/-! \tablehead{a} & \tablehead{Operation c := ++/- a (j=1:n, k=1:m)}\\ \hline +\endhead +Scalar & Scalar & c := +/- a\\ \hline +Array{[}n, m, \ldots{}{]} & Array{[}n, m, \ldots{}{]} & c{[}j, k, +\ldots{}{]} := +/-a{[}j, k, \ldots{}{]}\\ \hline + +\end{longtable} + +\subsection{Array Element-wise Multiplication}\doublelabel{array-element-wise-multiplication} + +Scalar multiplication \lstinline!s*a! or \lstinline!a*s! with numeric scalar s and numeric scalar, vector, matrix or array \lstinline!a! is defined element-wise: -\begin{table}[H] -\caption{Scalar and scalar to array multiplication of numeric elements. The scalar \tablehead{Operation} applies for all $j$ in $1,\, \ldots,\, n$ and $k$ in $1,\, \ldots,\, m$.}\label{tab:product} -\begin{center} -\begin{tabular}{l l|l l} -\hline -\tablehead{Size of \lstinline!s!} & \tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!s * a! and \lstinline!a * s!} & -\tablehead{Operation \lstinline!c := s * a! or \lstinline!c := a * s!}\\ -\hline -\hline -Scalar & Scalar & Scalar & \lstinline!c := s * a!\\ -Scalar & $n$-vector & $n$-vector & \lstinline!c[$j$] := s * a[$j$]!\\ -Scalar & $n \times m$ matrix & $n \times m$ matrix & \lstinline!c[$j$, $k$] := s * a[$j$, $k$]!\\ -Scalar & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := s * a[$j$, $k$, $\ldots$]!\\ -\hline -\end{tabular} -\end{center} -\end{table} - -Element-wise multiplication \lstinline!a .* b! of numeric scalars, vectors, matrices or arrays \lstinline!a! and \lstinline!b! requires a numeric type class -for \lstinline!a! and \lstinline!b! and either \lstinline!size(a) = size(b)! or scalar \lstinline!a! or scalar \lstinline!b!. - -\begin{table}[H] -\caption{Array element-wise multiplication. The scalar \tablehead{Operation} applies for all $j$ in $1,\, \ldots,\, n$ and $k$ in $1,\, \ldots,\, m$.} -\begin{center} -\begin{tabular}{l l|l l} -\hline -\tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!b!} & \tablehead{Size of \lstinline!a .* b!} & -\tablehead{Operation} \lstinline!c := a .* b!\\ -\hline -\hline -Scalar & Scalar & Scalar & \lstinline!c := a * b!\\ -Scalar & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a * b[$j$, $k$, $\ldots$]!\\ -$n \times m \times \ldots$ & Scalar & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] * b!\\ -$n \times m \times \ldots$ & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] * b[$j$, $k$, $\ldots$]!\\ -\hline -\end{tabular} -\end{center} -\end{table} - -\subsection{Matrix and Vector Multiplication of Numeric Arrays}\label{matrix-and-vector-multiplication-of-numeric-arrays} - -Multiplication \lstinline!a * b! of numeric vectors and matrices is defined only for the following combinations: -\begin{table}[H] -\caption{Matrix and vector multiplication of arrays with numeric elements. The scalar \tablehead{Operation} applies for all $i$ in $1,\, \ldots,\, l$ and $j$ in $1,\, \ldots,\, n$, and the summation over $k$ goes from 1 to $m$.} -\begin{center} -\begin{tabular}{l l|l l} -\hline -\tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!b!} & \tablehead{Size of \lstinline!a * b!} & -\tablehead{Operation \lstinline!c := a * b!}\\ -\hline -\hline -$m$-vector & $m$-vector & Scalar & \lstinline!c := $\sum_{k}$ a[$k$] * b[$k$]!\\ -$m$-vector & $m \times n$ matrix & $n$-vector & \lstinline!c[$j$] := $\sum_{k}$ a[$k$] * b[$k$, $j$]!\\ -$l \times m$ matrix & $m$-vector & $l$-vector & \lstinline!c[$i$] := $\sum_{k}$ a[$i$, $k$] * b[$k$]!\\ -$l \times m$ matrix & $m \times n$ matrix & $l \times n$ matrix & \lstinline!c[$i$, $j$] := $\sum_{k}$ a[$i$, $k$] * b[$k$, $j$]!\\ -\hline -\end{tabular} -\end{center} -\end{table} +\begin{longtable}[]{|l|l|l|l|} +\caption{Scalar and scalar to array multiplication of numeric elements}\\ +\hline +\tablehead{Type of s} & \tablehead{Type of a} & \tablehead{Type of s* a and a*s} & +\tablehead{Operation} c := s*a or c := a*s (j=1:n, k=1:m)\\ \hline +\endhead +Scalar & Scalar & Scalar & c := s * a\\ \hline +Scalar & Vector {[}n{]} & Vector {[}n{]} & c{[}j{]} := s* +a{[}j{]}\\ \hline +Scalar & Matrix {[}n, m{]} & Matrix {[}n, m{]} & c{[}j, k{]} := s* +a{[}j, k{]}\\ \hline +Scalar & Array{[}n, m, ...{]} & Array {[}n, m, ...{]} & c{[}j, k, ...{]} +:= s*a{[}j, k, ...{]}\\ \hline +\label{tab:product} +\end{longtable} + +Element-wise multiplication \lstinline!a.*b! of numeric scalars, vectors, matrices +or arrays a and b requires a numeric type class for a and b and either +size(a) = size(b) or scalar a or scalar b. + +\begin{longtable}[]{|l|l|l|l|} +\caption{Array element-wise multiplication}\\ +\hline +\tablehead{Type of a} & \tablehead{Type of b} & \tablehead{Type of a .* b} & +\tablehead{Operation} c:=a .* b (j=1:n, k=1:m)\\ \hline +\endhead +Scalar & Scalar & Scalar & c := a * b\\ \hline +Scalar & Array{[}n, m, \ldots{}{]} & Array{[}n, m, \ldots{}{]} & c{[}j, +k, \ldots{}{]} := a* b{[}j, k, \ldots{}{]}\\ \hline +Array{[}n, m, \ldots{}{]} & Scalar & Array{[}n, m, \ldots{}{]} & c{[}j, +k, \ldots{}{]} := a{[}j, k, \ldots{}{]}* b\\ \hline +Array{[}n, m, \ldots{}{]} & Array{[}n, m, ...{]} & Array {[}n, m, ...{]} +& c{[}j, k, \ldots{}{]} := a{[}j, k, \ldots{}{]}* b{[}j, k, +\ldots{}{]}\\ \hline +\end{longtable} + +\subsection{Matrix and Vector Multiplication of Numeric Arrays}\doublelabel{matrix-and-vector-multiplication-of-numeric-arrays} + +Multiplication \lstinline!a*b! of numeric vectors and matrices is defined only for +the following combinations: +\begin{longtable}[]{|l|l|l|l|} +\caption{Matrix and vector multiplication of arrays with numeric elements.}\\ +\hline +\tablehead{Type of a} & \tablehead{Type of b} & \tablehead{Type of a* b} & +\tablehead{Operation c := a*b}\\ \hline +\endhead +Vector {[}n{]} & Vector {[}n{]} & Scalar & c := +$\textrm{sum}_k$(a{[}k{]}*b{[}k{]}), k=1:n\\ \hline +Vector {[}n{]} & Matrix {[}n, m{]} & Vector {[}m{]} & c{[}j{]} := +$\textrm{sum}_k$(a{[}k{]}*b{[}k, j{]}), j=1:m, k=1:n\\ \hline +Matrix {[}n, m{]} & Vector {[}m{]} & Vector {[}n{]} & c{[}j{]} := +$\textrm{sum}_k$(a{[}j, k{]}*b{[}k{]})\\ \hline +Matrix {[}n, m{]} & Matrix {[}m, p{]} & Matrix {[}n, p{]} & c{[}i, j{]} += $\textrm{sum}_k$(a{[}i, k{]}*b{[}k, j{]}), i=1:n, k=1:m, +j=1:p\\ \hline + +\end{longtable} \begin{example} \begin{lstlisting}[language=modelica] -Real A[3, 3], x[3], b[3], v[3]; -A * x = b; -x * A = b; // same as transpose([x])*A*b -[v] * transpose([v]) // outer product -v * A * v // scalar -tranpose([v]) * A * v // vector with one element + Real A[3,3], x[3], b[3], v[3]; + A*x = b; + x*A = b; // same as transpose([x])*A*b + [v]*transpose([v]) // outer product + v*A*v // scalar + tranpose([v])*A*v // vector with one element \end{lstlisting} \end{example} -\subsection{Division of Scalars or Numeric Arrays by Numeric Scalars}\label{division-of-scalars-or-numeric-arrays-by-numeric-scalars} - -Division \lstinline!a / s! of numeric scalars, vectors, matrices, or arrays \lstinline!a! and numeric scalars \lstinline!s! is defined element-wise. -The result is always of \lstinline!Real! type. In order to get integer division with truncation, use the function \lstinline!div!. - -\begin{table}[H] -\caption{Division of scalars and arrays by numeric elements. The scalar \tablehead{Operation} applies for all $j$ in $1,\, \ldots,\, n$ and $k$ in $1,\, \ldots,\, m$.} -\begin{center} -\begin{tabular}{l l|l l} -\hline -\tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!s!} & \tablehead{Size of \lstinline!a / s!} & -\tablehead{Operation \lstinline!c := a / s!}\\ -\hline -\hline -Scalar & Scalar & Scalar & \lstinline!c := a / s!\\ -$n$-vector & Scalar & $n$-vector & \lstinline!c[$k$] := a[$k$] / s!\\ -$n \times m$ matrix & Scalar & $n \times m$ matrix & \lstinline!c[$j$, $k$] := a[$j$, $k$] / s!\\ -$n \times m \times \ldots$ & Scalar & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] / s!\\ -\hline -\end{tabular} -\end{center} -\end{table} - -\subsection{Array Element-wise Division}\label{array-element-wise-division} - -Element-wise division \lstinline!a ./ b! of numeric scalars, vectors, matrices or arrays \lstinline!a! and \lstinline!b! requires a numeric type class for \lstinline!a! and \lstinline!b! -and either \lstinline!size(a) = size(b)! or scalar \lstinline!a! or scalar \lstinline!b!. The result is always of \lstinline!Real! type. In order to get integer division with truncation, -use the function \lstinline!div!. - -\begin{table}[H] -\caption{Element-wise division of arrays. The scalar \tablehead{Operation} applies for all $j$ in $1,\, \ldots,\, n$ and $k$ in $1,\, \ldots,\, m$.} -\begin{center} -\begin{tabular}{l l|l l} -\hline -\tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!b!} & \tablehead{Size of \lstinline!a ./ b!} & -\tablehead{Operation} \lstinline!c := a ./ b!\\ -\hline -\hline -Scalar & Scalar & Scalar & \lstinline!c := a / b!\\ -Scalar & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a / b[$j$, $k$, $\ldots$]!\\ -$n \times m \times \ldots$ & Scalar & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] / b!\\ -$n \times m \times \ldots$ & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] / b[$j$, $k$, $\ldots$]!\\ -\hline -\end{tabular} -\end{center} -\end{table} +\subsection{Division of Scalars or Numeric Arrays by Numeric Scalars}\doublelabel{division-of-scalars-or-numeric-arrays-by-numeric-scalars} + +Division \lstinline!a/s! of numeric scalars, vectors, matrices, or arrays \lstinline!a! and +numeric scalars \lstinline!s! is defined element-wise. The result is always of real +type. In order to get integer division with truncation use the function +\lstinline!div!. + +\begin{longtable}[]{|l|l|l|l|} +\caption{Division of scalars and arrays by numeric elements.}\\ +\hline \endhead +\tablehead{Type of a} & \tablehead{Type of s} & \tablehead{Result of a / s} & +\tablehead{Operation c := a / s (j=1:n, k=1:m)}\\ \hline +Scalar & Scalar & Scalar & c := a / s\\ \hline +Vector{[}n{]} & Scalar & Vector{[}n{]} & c{[}k{]} := a{[}k{]} / +s\\ \hline +Matrix{[}n, m{]} & Scalar & Matrix{[}n, m{]} & c{[}j, k{]} := a{[}j, +k{]} / s\\ \hline +Array{[}n, m, \ldots{}{]} & Scalar & Array{[}n, m, \ldots{}{]} & c{[}j, +k, \ldots{}{]} := a{[}j, k, \ldots{}{]} / s\\ \hline + +\end{longtable} + +\subsection{Array Element-wise Division}\doublelabel{array-element-wise-division} + +Element-wise division \lstinline!a./b! of numeric scalars, vectors, matrices or +arrays a and b requires a numeric type class for a and b and either +size(a) = size(b) or scalar a or scalar b. The result is always of real +type. In order to get integer division with truncation use the function +\lstinline!div!. + +\begin{longtable}[]{|l|l|l|l|} +\caption{Element-wise division of arrays}\\ +\hline \endhead +\tablehead{Type of a} & \tablehead{Type of b} & \tablehead{Type of a ./ b} & +\tablehead{Operation} c:=a ./ b (j=1:n, k=1:m)\\ \hline +Scalar & Scalar & Scalar & c := a / b\\ \hline +Scalar & Array{[}n, m, \ldots{}{]} & Array{[}n, m, \ldots{}{]} & c{[}j, +k, \ldots{}{]} := a / b{[}j, k, \ldots{}{]}\\ \hline +Array{[}n, m, \ldots{}{]} & Scalar & Array{[}n, m, \ldots{}{]} & c{[}j, +k, \ldots{}{]} := a{[}j, k, \ldots{}{]} / b\\ \hline +Array{[}n, m, \ldots{}{]} & Array{[}n, m, ...{]} & Array {[}n, m, ...{]} +& c{[}j, k, \ldots{}{]} := a{[}j, k, \ldots{}{]} / b{[}j, k, +\ldots{}{]}\\ \hline + +\end{longtable} \begin{example} -Element-wise division by scalar (\lstinline!./!) and division by scalar (\lstinline!/!) are identical: \lstinline!a ./ s = a / s!: +Element-wise division by scalar (\lstinline!./!) and division by scalar (\lstinline!/!) +are identical: \lstinline!a./s = a/s!: \begin{lstlisting}[language=modelica] -2./[1, 2; 3, 4] // error; same as 2.0 / [1, 2; 3, 4] -2 ./[1, 2; 3, 4] // fine; element-wise division + 2./[1,2;3,4] // error, since 2.0/[1,2;3,4] + 2 ./[1,2;3,4] // fine, element-wise division \end{lstlisting} -This is a consequence of the parsing rules, since `\lstinline!2.!' is a lexical unit. Using a space after the literal solves the problem. +This is a consequence of the parsing rules, since `\lstinline!2!' is a lexical +unit. Using a space after the literal solves the problem. \end{example} -\subsection{Exponentiation of Scalars of Numeric Elements}\label{exponentiation-of-scalars-of-numeric-elements} +\subsection{Exponentiation of Scalars of Numeric Elements}\doublelabel{exponentiation-of-scalars-of-numeric-elements} -Exponentiation \lstinline!a ^ b! is defined as \lstinline[language=C]!pow(double a, double b)! in the ANSI~C library if both \lstinline!a! and \lstinline!b! are -\lstinline!Real! scalars. A \lstinline!Real! scalar value is returned. If \lstinline!a! or \lstinline!b! are \lstinline!Integer! scalars, they are -automatically promoted to \lstinline!Real!. Consequences of exceptional situations, such as ($\text{\lstinline!a!} = 0.0$ and $\text{\lstinline!b!} \leq 0.0$, -$\text{\lstinline!a!} < 0$ and \lstinline!b! is not an integer) or overflow are undefined. +Exponentiation \lstinline!a^b! is defined as \lstinline!pow(double a, double b)! in the ANSI +C library if both \lstinline!a! and \lstinline!b! are \lstinline!Real! scalars. A \lstinline!Real! scalar value is +returned. If \lstinline!a! or \lstinline!b! are \lstinline!Integer! scalars, they are automatically +promoted to \lstinline!Real!. Consequences of exceptional situations, such as +($\text{\lstinline!a!} = 0.0$ and $\text{\lstinline!b!} \leq 0.0$, $\text{\lstinline!a!} < 0$ and \lstinline!b! is +not an integer) or overflow are undefined. -Element-wise exponentiation \lstinline!a .^ b! of numeric scalars, vectors, matrices, or arrays \lstinline!a! and \lstinline!b! requires a numeric type class for -\lstinline!a! and \lstinline!b! and either \lstinline!size(a) = size(b)! or scalar \lstinline!a! or scalar \lstinline!b!. +Element-wise exponentiation \lstinline!a.^b! of numeric scalars, vectors, +matrices, or arrays a and b requires a numeric type class for a and b +and either size(a) = size(b) or scalar a or scalar b. -\begin{table}[H] -\caption{Element-wise exponentiation of arrays. The scalar \tablehead{Operation} applies for all $j$ in $1,\, \ldots,\, n$ and $k$ in $1,\, \ldots,\, m$.} -\begin{center} -\begin{tabular}{l l|l l} -\hline -\tablehead{Size of \lstinline!a!} & \tablehead{Size of \lstinline!b!} & \tablehead{Size of \lstinline!a .^ b!} & -\tablehead{Operation} \lstinline!c := a .^ b!\\ -\hline +\begin{longtable}[]{|l|l|l|l|} +\caption{Element-wise exponentiation of arrays}\\ \hline -Scalar & Scalar & Scalar & \lstinline!c := a ^ b!\\ -Scalar & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a ^ b[$j$, $k$, $\ldots$]!\\ -$n \times m \times \ldots$ & Scalar & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] ^ b!\\ -$n \times m \times \ldots$ & $n \times m \times \ldots$ & $n \times m \times \ldots$ & \lstinline!c[$j$, $k$, $\ldots$] := a[$j$, $k$, $\ldots$] ^ b[$j$, $k$, $\ldots$]!\\ -\hline -\end{tabular} -\end{center} -\end{table} +\tablehead{Type of a} & \tablehead{Type of b} & \tablehead{Type of a .\^{} b} & +\tablehead{Operation} c:=a .\^{} b (j=1:n, k=1:m)\\ \hline +\endhead +Scalar & Scalar & Scalar & c := a \^{} b\\ \hline +Scalar & Array{[}n, m, \ldots{}{]} & Array{[}n, m, \ldots{}{]} & c{[}j, +k, \ldots{}{]} := a \^{} b{[}j, k, \ldots{}{]}\\ \hline +Array{[}n, m, \ldots{}{]} & Scalar & Array{[}n, m, \ldots{}{]} & c{[}j, +k, \ldots{}{]} := a{[}j, k, \ldots{}{]} \^{} b\\ \hline +Array{[}n, m, \ldots{}{]} & Array{[}n, m, ...{]} & Array {[}n, m, ...{]} +& c{[}j, k, \ldots{}{]} := a{[}j, k, \ldots{}{]} \^{} b{[}j, k, +\ldots{}{]}\\ \hline + +\end{longtable} \begin{example} \begin{lstlisting}[language=modelica] -2.^[1, 2; 3, 4] // error; same as 2.0 ^ [1, 2; 3, 4] -2 .^[1, 2; 3, 4] // fine; element-wise exponentiation + 2.^[1,2;3,4] // error, since 2.0^[1,2;3,4] + 2 .^[1,2;3,4] // fine, element wise exponentiation \end{lstlisting} -This is a consequence of the parsing rules, i.e.\ since \lstinline!2.! could be a lexical unit it seen as a lexical unit; using a space after -literals solves the problem. +This is a consequence of the parsing rules, i.e. since 2. could be +a lexical unit it seen as a lexical unit; using a space after literals +solves the problem. \end{example} -\subsection{Scalar Exponentiation of Square Matrices of Numeric Elements}\label{scalar-exponentiation-of-square-matrices-of-numeric-elements} +\subsection{Scalar Exponentiation of Square Matrices of Numeric Elements}\doublelabel{scalar-exponentiation-of-square-matrices-of-numeric-elements} -Exponentiation \lstinline!a ^ s! is defined if \lstinline!a! is a square numeric matrix and \lstinline!s! is a scalar as a subtype of \lstinline!Integer! -with $\text{\lstinline!s!} \geq 0$. The exponentiation is done by repeated multiplication, e.g.: +Exponentiation \lstinline!a^s! is defined if \lstinline!a! is a square numeric matrix and \lstinline!s! +is a scalar as a subtype of Integer with \lstinline!s>=0!. The +exponentiation is done by repeated multiplication, e.g.: \begin{lstlisting}[language=modelica] -a^3 = a * a * a; -a^0 = identity(size(a, 1)); -assert(size(a, 1) == size(a, 2), "Matrix must be square"); -a^1 = a; + a^3 = a * a * a; + a^0 = identity(size(a, 1)); + assert(size(a, 1) == size(a, 2), "Matrix must be square"); + a^1 = a; \end{lstlisting} \begin{nonnormative} @@ -1332,24 +1159,28 @@ \subsection{Scalar Exponentiation of Square Matrices of Numeric Elements}\label{ longer an elementary operation. \end{nonnormative} -\subsection{Slice Operation}\label{slice-operation} +\subsection{Slice Operation}\doublelabel{slice-operation} The following holds for slice operations: \begin{itemize} \item - If \lstinline!a! is an array containing scalar components and \lstinline!m! is a component of those components, the expression \lstinline!a.m! is interpreted as a - slice operation. It returns the array of components \lstinline!{a[1].m, $\ldots$}!. + If \lstinline!a! is an array containing scalar components and \lstinline!m! is a component of + those components, the expression \lstinline!a.m! is interpreted as a slice operation. It returns the array of components \lstinline!{a{[1].m, ...}!. \item - If \lstinline!m! is also an array component, the slice operation is valid only if \lstinline!size(a[1].m)! = \lstinline!size(a[2].m)! = \ldots + If \lstinline!m! is also an array component, the slice operation is valid only if \lstinline!size(a[1].m)=size(a[2].m)=...! \item - The slicing operation can be combined with indexing, e.g.\ \lstinline!a.m[1]!. It returns the array of components \lstinline!{a[1].m[1], a[2].m[1], $\ldots$}!, - and does not require that \lstinline!size(a[1].m) = size(a[2].m)!. The number of subscripts on \lstinline!m! must not be greater than the number of array dimension - for \lstinline!m! (the number can be smaller, in which case the missing trailing indices are assumed to be `\lstinline!:!'), and is only valid if - \lstinline!size(a[1].m[$\ldots$]) = size(a[2].m[$\ldots$])!. + The slicing operation can be combined with indexing, e.g. \lstinline!a.m[1]!. + It returns the array of components \lstinline!{a[1].m[1], a[2].m[1], ...}!, and does not require that + \lstinline!size(a[1].m)=size(a[2].m)!. The number of subscripts on m must + not be greater than the number of array dimension for m (the number + can be smaller, in which case the missing trailing indices are assumed + to be `\lstinline!:!'), and is only valid if \lstinline!size(a[1].m[...]) = size(a[2].m[...])!.. \end{itemize} \begin{example} -The size-restriction on the operand is only applicable if the indexing on the second operand uses vectors or colon as in the example: +The size-restriction on the operand is only applicable +if the indexing on the second operand uses vectors or colon as in the +example: \begin{lstlisting}[language=modelica] constant Integer m=3; Modelica.Blocks.Continuous.LowpassButterworth tf[m](n=2:(m+1)); @@ -1357,93 +1188,103 @@ \subsection{Slice Operation}\label{slice-operation} Real y2,y3; equation // Extract the x1 slice even though different x1's have different lengths - y = tf.x1[1] ; // Legal, = {tf[1].x1[1], tf[2].x1[1], $\ldots$ tf[m].x1[1]}; - y2 = sum(tf.x1[:]); // Illegal to extract all elements since they have - // different lengths. Does not satisfy: - // size(tf[1].x1[:]) = size(tf[2].x1[:]) = $\ldots$ = size(tf[m].x1[:]) - y3 = sum(tf.x1[1:2]); // Legal. - // Since x1 has at least 2 elements in all tf, and - // size(tf[1].x1[1:2]) = $\ldots$ = size(tf[m].x1[1:2]) = {2} + y=tf.x1[1] ; // Legal, ={tf[1].x1[1], tf[2].x1[1], + ... tf[m].x1[1]}; + y2=sum(tf.x1[:]); // Illegal to extract all elements since they have + // different lengths. Does not satisfy: + // size(tf[1].x1[:])=size(tf[2].x1[:])=...=size(tf[m].x1[:]) + y3=sum(tf.x1[1:2]); // Legal. + // Since x1 has at least 2 elements in all tf, and + // size(tf[1].x1[1:2])=size(tf[2].x1[1:2])=...=size(tf[m].x1[1:2])={2} \end{lstlisting} In this example the different \lstinline!x1! vectors have different lengths, but it is still possible to perform some operations on them. \end{example} -\subsection{Relational Operators}\label{relational-operators} +\subsection{Relational Operators}\doublelabel{relational-operators} Relational operators \lstinline!!, \lstinline!>=!, \lstinline!==!, \lstinline!<>!, are only defined for -scalar operands of simple types, not for arrays, see \cref{equality-relational-and-logical-operators} - -\subsection{Boolean Operators}\label{boolean-operators} +scalar operands of simple types, not for arrays, see \autoref{equality-relational-and-logical-operators} -The operators \lstinline!and! and \lstinline!or! take expressions of \lstinline!Boolean! type, which are either scalars or arrays of matching dimensions. The operator \lstinline!not! -takes an expression of \lstinline!Boolean! type, which is either scalar or an array. The result is the element-wise logical operation. For short-circuit evaluation of \lstinline!and! -and \lstinline!or!, see \cref{evaluation-order}. +\subsection{Boolean Operators}\doublelabel{boolean-operators} -\subsection{Vectorized Calls of Functions}\label{vectorized-calls-of-functions} +The operators, \lstinline!and! and \lstinline!or! take expressions of Boolean type, which are +either scalars or arrays of matching dimensions. The operator \lstinline!not! takes +an expression of Boolean type, which is either scalar or an array. The +result is the element-wise logical operation. For short-circuit +evaluation of \lstinline!and! and \lstinline!or! see \autoref{evaluation-order}. -See \cref{scalar-functions-applied-to-array-arguments}. +\subsection{Vectorized Calls of Functions}\doublelabel{vectorized-calls-of-functions} -\subsection{Standard Type Coercion}\label{standard-type-coercion} +See \autoref{scalar-functions-applied-to-array-arguments}. -In all contexts that require an expression which is a subtype of \lstinline!Real!, an expression which is a subtype of \lstinline!Integer! can also be used; -the \lstinline!Integer! expression is automatically converted to \lstinline!Real!. +\subsection{Standard Type Coercion}\doublelabel{standard-type-coercion} +In all contexts that require an expression which is a subtype of Real, +an expression which is a subtype of Integer can also be used; the +Integer expression is automatically converted to Real. -This also applies to arrays of \lstinline!Real!, and for fields of record expressions. There is no similar rule for sub-typing. +This also applies to arrays of Reals, and for fields of record expressions +There is no similar rule for sub-typing. \begin{example} \begin{lstlisting}[language=modelica] -record RealR - Real x,y; -end RealR; -record IntegerR - Integer x,y; -end IntegerR; -parameter Integer a = 1; -Real y(start=a); // Ok, a is automatically coerced to Real -RealR r1 = IntegerR(a, a); // Ok, record is automatically coerced -RealR r2 = RealR(a, a); // Ok, a is automatically coerced to Real + record RealR + Real x,y; + end RealR; + record IntegerR + Integer x,y; + end IntegerR; + parameter Integer a=1; + Real y(start=a); // Ok, a is automatically coerced to Real + RealR r1=IntegerR(a,a); // Ok, record is automatically coerced + RealR r2=RealR(a,a); // Ok, a is automatically coerced to Real \end{lstlisting} \end{example} -\section{Empty Arrays}\label{empty-arrays} +\section{Empty Arrays}\doublelabel{empty-arrays} + +Arrays may have dimension sizes of 0. E.g. -Arrays may have dimension sizes of 0. For example: \begin{lstlisting}[language=modelica] -Real x[0]; // an empty vector -Real A[0, 3], B[5, 0], C[0, 0]; // empty matrices + Real x[0]; // an empty vector + Real A[0, 3], B[5, 0], C[0, 0]; // empty matrices \end{lstlisting} +Empty matrices can be constructed with the fill function. E.g. -Empty matrices can be constructed with the fill function. For example: \begin{lstlisting}[language=modelica] -Real A[:,:] = fill(0.0, 0, 1); // a Real 0 x 1 matrix -Boolean B[:, :, :] = fill(false, 0, 1, 0); // a Boolean 0 x 1 x 0 matrix + Real A[:,:] = fill(0.0, 0, 1); // a Real 0 x 1 matrix + Boolean B[:, :, :] = fill(false, 0, 1, 0); // a Boolean 0 x 1 x 0 matrix \end{lstlisting} - -It is not possible to access an element of an empty matrix, e.g.\ \lstinline!v[j, k]! cannot be evaluated if \lstinline!v = []! because the assertion fails +It is not possible to access an element of an empty matrix, e.g. + \lstinline!v[j,k]! cannot be evaluated if \lstinline!v=[]! because the assertion fails that the index must be bigger than one. -Size-requirements of operations, such as \lstinline!+!, \lstinline!-!, must also be fulfilled if a dimension is zero. For example: +Size-requirements of operations, such as +, -, have also to be fulfilled +if a dimension is zero. E.g. + \begin{lstlisting}[language=modelica] -Real[3, 0] A, B; -Real[0, 0] C; -A + B // fine, result is an empty matrix -A + C // error, sizes do not agree + Real[3,0] A, B; + Real[0,0] C; + A + B // fine, result is an empty matrix + A + C // error, sizes do not agree \end{lstlisting} +Multiplication of two empty matrices results in a zero matrix of +corresponding numeric type if the result matrix has no zero dimension +sizes, i.e., -Multiplication of two empty matrices results in a zero matrix of corresponding numeric type if the result matrix has no zero dimension sizes, i.e., \begin{lstlisting}[language=modelica] -Real[0, m] * Real[m, n] = Real[0, n] (empty matrix) -Real[m, n] * Real[n, 0] = Real[m, 0] (empty matrix) -Real[m, 0] * Real[0, n] = fill(0.0, m, n) (non-empty matrix, with zero elements). + Real[0,m]*Real[m,n] = Real[0,n] (empty matrix) + Real[m,n]*Real[n,0] = Real[m,0] (empty matrix) + Real[m,0]*Real[0,n] = fill(0.0, m, n) (non-empty matrix, with zero elements). \end{lstlisting} \begin{example} \begin{lstlisting}[language=modelica] -Real u[p], x[n], y[q], A[n, n], B[n, p], C[q, n], D[q, p]; -der(x) = A * x + B * u -y = C * x + D * u + Real u[p], x[n], y[q], A[n,n], B[n,p], C[q,n], + D[q,p]; + der(x) = A*x + B*u + y = C*x + D*u \end{lstlisting} -Assume $\text{\lstinline!n!} = 0$, $\text{\lstinline!p!} > 0$, $\text{\lstinline!q!} > 0$: Results in \lstinline!y = D * u!. +Assume $\text{\lstinline!n!} = 0$, $\text{\lstinline!p!} > 0$, $\text{\lstinline!q!} > 0$: Results in \lstinline!y = D*u!. \end{example} diff --git a/chapters/classes.tex b/chapters/classes.tex index c63b4f52c..d26725058 100644 --- a/chapters/classes.tex +++ b/chapters/classes.tex @@ -1,24 +1,25 @@ -\chapter{Classes, Predefined Types, and Declarations}\label{class-predefined-types-and-declarations} +\chapter{Classes, Predefined Types, and Declarations}\doublelabel{class-predefined-types-and-declarations} The fundamental structuring unit of modeling in Modelica is the class. Classes provide the structure for objects, also known as instances. Classes can contain equations which provide the basis for the executable code that is used for computation in Modelica. Conventional algorithmic code can also be part of classes. All data objects in Modelica are -instantiated from classes, including the basic data types -- \lstinline!Real!, -\lstinline!Integer!, \lstinline!String!, \lstinline!Boolean! -- and enumeration types, which are built-in +instantiated from classes, including the basic data types---\lstinline!Real!, +\lstinline!Integer!, \lstinline!String!, \lstinline!Boolean!---and enumeration types, which are built-in classes or class schemata. Declarations are the syntactic constructs needed to introduce classes and objects (i.e., components). -\section{Access Control -- Public and Protected Elements}\label{access-control-public-and-protected-elements} +\section{Access Control -- Public and Protected Elements}\doublelabel{access-control-public-and-protected-elements} -Members of a Modelica class can have two levels of visibility: \lstinline!public!\indexinline{public} or \lstinline!protected!\indexinline{protected}. -The default is \lstinline!public! if nothing else is specified. +Members of a Modelica class can have two levels of visibility: \lstinline!public! or +\lstinline!protected!. The default is \lstinline!public! if nothing else is specified -A protected element, \lstinline!P!, in classes and components shall not be accessed via dot notation (e.g., \lstinline!A.P!, \lstinline!a.P!, \lstinline!a[1].P!, \lstinline!a.b.P!, \lstinline!.A.P!; but there is no restriction on using \lstinline!P! or \lstinline!P.x! for a protected element \lstinline!P!). -They shall not be modified or redeclared except for modifiers applied to protected elements in a base class modification (not inside any component or class) and the modifier on the declaration of the protected element. +A protected element, \lstinline!P!, in classes and components may not be accessed via dot notation (e.g., \lstinline!A.P!, \lstinline!a.P!, \lstinline!a[1].P!, \lstinline!a.b.P!, +\lstinline!.A.P!; but there is no restriction on using \lstinline!P! or \lstinline!P.x! for a protected element \lstinline!P!). They may not be modified or redeclared except for +modifiers applied to protected elements in a base-class modification (not inside any component or class) and the modifier on the declaration of the protected element. \begin{example} \begin{lstlisting}[language=modelica] @@ -46,17 +47,18 @@ \section{Access Control -- Public and Protected Elements}\label{access-control-p \end{example} All elements defined under the heading \lstinline!protected! are regarded as protected. All other elements (i.e., defined -under the heading \lstinline!public!, without headings or in a separate file) are public (i.e.\ not protected). Regarding -inheritance of protected and public elements, see \cref{inheritance-of-protected-and-public-elements}. +under the heading \lstinline!public!, without headings or in a separate file) are public (i.e. not protected). Regarding +inheritance of protected and public elements, see \autoref{inheritance-of-protected-and-public-elements}. -\section{Double Declaration not Allowed}\label{double-declaration-not-allowed} +\section{Double Declaration not Allowed}\doublelabel{double-declaration-not-allowed} The name of a declared element shall not have the same name as any other -element in its partially flattened enclosing class. However, the internal +element in its partially flattened enclosing class. A component shall +not have the same name as its type specifier. However, the internal flattening of a class can in some cases be interpreted as having two -elements with the same name; these cases are described in \cref{simultaneous-inner-outer-declarations}, -and \cref{redeclaration}. +elements with the same name; these cases are described in \autoref{simultaneous-inner-outer-declarations}, +and \autoref{redeclaration}. \begin{example} \begin{lstlisting}[language=modelica] @@ -71,7 +73,7 @@ \section{Double Declaration not Allowed}\label{double-declaration-not-allowed} \end{lstlisting} \end{example} -\section{Declaration Order and Usage before Declaration}\label{declaration-order-and-usage-before-declaration} +\section{Declaration Order and Usage before Declaration}\doublelabel{declaration-order-and-usage-before-declaration} Variables and classes can be used before they are declared. @@ -79,31 +81,24 @@ \section{Declaration Order and Usage before Declaration}\label{declaration-order In fact, declaration order is only significant for: \begin{itemize} \item - Functions with more than one input variable called with positional arguments, \cref{positional-or-named-input-arguments-of-functions}. + Functions with more than one input variable called with positional arguments, \autoref{positional-or-named-input-arguments-of-functions}. \item - Functions with more than one output variable, \cref{output-formal-parameters-of-functions}. + Functions with more than one output variable, \autoref{output-formal-parameters-of-functions}. \item - Records that are used as arguments to external functions, \cref{records}. + Records that are used as arguments to external functions, \autoref{records}. \item - Enumeration literal order within enumeration types, \cref{enumeration-types}. + Enumeration literal order within enumeration types, \autoref{enumeration-types}. \end{itemize} \end{nonnormative} -\section{Component Declarations}\label{component-declarations} +\section{Component Declarations}\doublelabel{component-declarations} Component declarations are described in this section. -A \firstuse{component declaration}\index{component!declaration} is an element of a class definition that generates a component. -A component declaration specifies (1) a component name, i.e., an identifier, (2) the class to be flattened in order to generate the component, and (3) an optional \lstinline!Boolean! parameter expression. -Generation of the component is suppressed if this parameter expression evaluates to false. -A component declaration may be overridden by an element-redeclaration. +\subsection{Syntax and Examples of Component Declarations}\doublelabel{syntax-and-examples-of-component-declarations} -A \firstuse{component}\index{component} or \firstuse{variable}\index{variable} is an instance (object) generated by a component declaration. -Special kinds of components are scalar, array, and attribute. - -\subsection{Syntax and Examples of Component Declarations}\label{syntax-and-examples-of-component-declarations} - -The formal syntax of a component declaration clause is given by the following syntactic rules: +The formal syntax of a component declaration clause is given by the +following syntactic rules: \begin{lstlisting}[language=grammar] component-clause: type-prefix type-specifier [ array-subscripts ] component-list @@ -114,8 +109,7 @@ \subsection{Syntax and Examples of Component Declarations}\label{syntax-and-exam type-specifier : name - -component-list : + component-list : component-declaration { "," component-declaration } component-declaration : @@ -129,134 +123,168 @@ \subsection{Syntax and Examples of Component Declarations}\label{syntax-and-exam \end{lstlisting} \begin{nonnormative} -The declaration of a component states the type, access, variability, data flow, and other properties of the component. -A \lstinline[language=grammar]!component-clause! i.e., the whole declaration, contains type prefixes followed by a \lstinline[language=grammar]!type-specifier! with optional \lstinline[language=grammar]!array-subscripts! followed by a \lstinline[language=grammar]!component-list!. - -There is no semantic difference between variables declared in a single declaration or in multiple declarations. -For example, regard the following single declaration (\lstinline[language=grammar]!component-clause!) of two matrix variables: +The declaration of a component states the type, access, +variability, data flow, and other properties of the component. A +\lstinline!component-clause! i.e., the whole declaration, contains type +prefixes followed by a \lstinline!type-specifier! with optional +\lstinline!array-subscripts! followed by a \lstinline!component-list!. + +There is no semantic difference between variables declared in a +single declaration or in multiple declarations. For example, regard the +following single declaration (\lstinline!component-clause!) of two matrix +variables: \begin{lstlisting}[language=modelica] -Real[2,2] A, B; + Real[2,2] A, B; \end{lstlisting} That declaration has the same meaning as the following two declarations together: \begin{lstlisting}[language=modelica] -Real[2,2] A; -Real[2,2] B; + Real[2,2] A; + Real[2,2] B; \end{lstlisting} The array dimension descriptors may instead be placed after the variable name, giving the two declarations below, with the same meaning as in the previous example: \begin{lstlisting}[language=modelica] -Real A[2,2]; -Real B[2,2]; + Real A[2,2]; + Real B[2,2]; \end{lstlisting} The following declaration is different, meaning that the variable a is a scalar but B is a matrix as above: \begin{lstlisting}[language=modelica] -Real a, B[2,2]; + Real a, B[2,2]; \end{lstlisting} \end{nonnormative} -\subsection{Component Declaration Static Semantics}\label{component-declaration-static-semantics} +\subsection{Component Declaration Static Semantics}\doublelabel{component-declaration-static-semantics} -If the \lstinline[language=grammar]!type-specifier! of the component declaration denotes a built-in type (\lstinline!RealType!, \lstinline!IntegerType!, etc.), the flattened or instantiated component has the same type. +If the \lstinline!type-specifier! of the component declaration denotes a built-in +type (\lstinline!RealType!, \lstinline!IntegerType!, etc.), the flattened or instantiated +component has the same type. -% Seems sufficient to just have \indexinline variant of 'partial' in index. -A class defined with \lstinline!partial!\indexinline{partial} in the \lstinline[language=grammar]!class-prefixes! is called a \firstuse{partial} class. -Such a class is allowed to be incomplete, and cannot be instantiated in a simulation model; useful, e.g., as a base class. +If the \lstinline!type-specifier! of the component does not denote a built-in type, +the name of the type is looked up (\autoref{static-name-lookup}). The found type is +flattened with a new environment and the partially flattened enclosing +class of the component. It is an error if the type is partial in a +simulation model, or if a simulation model itself is partial. The new +environment is the result of merging -If the \lstinline[language=grammar]!type-specifier! of the component does not denote a built-in type, the name of the type is looked up (\cref{static-name-lookup}). -The found type is flattened with a new environment and the partially flattened enclosing class of the component. -It is an error if the type is partial in a simulation model, or if a simulation model itself is partial. -The new environment is the result of merging \begin{itemize} \item - the modification of enclosing class element-modification with the same name as the component + the modification of enclosing class element-modification with the same + name as the component \item the modification of the component declaration \end{itemize} in that order. -Array dimensions shall be scalar non-negative parameter expressions of type \lstinline!Integer!, a reference to a type (which must an enumeration type or \lstinline!Boolean!, see \cref{enumeration-types}), or the colon operator denoting that the array dimension is left unspecified (see \cref{array-declarations}). All variants can also be part of short class definitions. +Array dimensions shall be scalar non-negative parameter expressions of type Integer, +a reference to a type (which must an enumeration type or Boolean, see \autoref{enumeration-types}), +or the colon operator denoting that the array dimension is left unspecified (see \autoref{array-declarations}). +All variants can also be part of short class definitions. -\begin{example} -Variables with array dimensions: +\begin{nonnormative} +Example of variables with array dimensions. \begin{lstlisting}[language=modelica] model ArrayVariants - type T = Real[:]; // Unspecified size for type - parameter T x = ones(4); - parameter T y[3] = ones(3, 4); - parameter Real a[2] = ones(2); // Specified using Integer - parameter Real b[2, 0] = ones(2, 0); // Size 0 is allowed - parameter Real c[:] = ones(0); // Unspecified size for variable - parameter Integer n = 0; - Real z[n*2] = cat(1, ones(n), zeros(n));// Parameter expressions are allowed - Boolean notV[Boolean] = {true, false}; // Indexing with type + type T=Real[:]; // Unspecified size for type + parameter T x=ones(4); + parameter T y[3]=ones(3, 4); + parameter Real a[2]=ones(2); // Specified using Integer + parameter Real b[2, 0]=ones(2, 0); // Size 0 is allowed + parameter Real c[:]=ones(0); // Unspecified size for variable + parameter Integer n=0; + Real x[n*2]=cat(1,ones(n),zeros(n)};// Parameter expressions are allowed + Boolean notV[Boolean]={true,false}; // Indexing with type end ArrayVariants; \end{lstlisting} -\end{example} - -The rules for components in functions are described in \cref{function-as-a-specialized-class}. - -Conditional declarations of components are described in \cref{conditional-component-declaration}. +\end{nonnormative} -\subsubsection{Declaration Equations}\label{declaration-equations} +The rules for components in functions are described in \autoref{function-as-a-specialized-class}. -An environment that defines the value of a component of built-in type is said to define a \firstuse{declaration equation}\index{declaration equation}\index{declaration equation!zzzzz@\igobble |seealso{binding equation}} associated with the declared component. -% Note: In variability-of-expressions, it's called a "binding equation", not "declaration equation". -The declaration equation is of the form \lstinline!x = expression! defined by a component declaration, where \lstinline!expression! must not have higher variability than the declared component \lstinline!x! (see \cref{variability-of-expressions}). -Unlike other equations, a declaration equation can be overridden (replaced or removed) by an element modification. +Conditional declarations of components are described in \autoref{conditional-component-declaration}. -For declarations of vectors and matrices, declaration equations are associated with each element. +\subsubsection{Declaration Equations}\doublelabel{declaration-equations} -Only components of the specialized classes \lstinline!type!, \lstinline!record!, \lstinline!operator record!, and \lstinline!connector!, or components of classes inheriting from \lstinline!ExternalObject! may have declaration equations. -See also the corresponding rule for algorithms, \cref{restrictions-on-assigned-variables}. +An environment that defines the value of a component of built-in type is +said to define a declaration equation associated with the declared +component. For declarations of vectors and matrices, declaration +equations are associated with each element. -\subsubsection{Prefix Rules}\label{prefix-rules} +Only components of the restricted classes type, record, operator record, and connector, or components of classes inheriting from ExternalObject +may have declaration equations. See also the corresponding rule for algorithms, \autoref{restrictions-on-assigned-variables}. -A \firstuse{prefix}\index{prefix} is property of an element of a class definition which can be present or not be present, e.g., \lstinline!final!, \lstinline!public!, \lstinline!flow!. +\subsubsection{Prefix Rules}\doublelabel{prefix-rules} -Variables declared with the \lstinline!flow! or the \lstinline!stream! type prefix shall be a subtype of \lstinline!Real!. +Variables declared with the \lstinline!flow! or the \lstinline!stream! type prefix shall be a +subtype of Real. -Type prefixes (that is, \lstinline!flow!, \lstinline!stream!, \lstinline!discrete!, \lstinline!parameter!, \lstinline!constant!, \lstinline!input!, \lstinline!output!) shall only be applied for type, -record and connector components -- see also record specialized class, \cref{specialized-classes}. +Type prefixes (that is , \lstinline!flow!, \lstinline!stream!, \lstinline!discrete!, +\lstinline!parameter!, \lstinline!constant!, +\lstinline!input!, \lstinline!output!) shall only be applied for type, record and connector +components -- see also record specialized class, \autoref{specialized-classes}. -An exception is \lstinline!input! for components whose type is of the special class function type (these can only be used for function formal parameters and has special semantics, see \cref{functional-input-arguments-to-functions}), and the \lstinline!input! prefix is not applied to the elements of the component and is allowed even if the elements have \lstinline!input! or \lstinline!output! prefix. +An exception is \lstinline!input! for components whose type is of the special class +function type (these can only be used for function formal parameters and +has special semantics, see \autoref{functional-input-arguments-to-functions}), and the \lstinline!input! prefix is not +applied to the elements of the component and is allowed even if the +elements have input or output prefix. -In addition, instances of classes extending from \lstinline!ExternalObject! may have type prefixes \lstinline!parameter! and \lstinline!constant!, and in functions also type prefixes -\lstinline!input! and \lstinline!output!, see \cref{external-objects}. +In addition, instances of classes extending from ExternalObject may have +type prefixes \lstinline!parameter! and \lstinline!constant!, and in functions also type +prefixes \lstinline!input! and \lstinline!output! - see \autoref{external-objects}. -The type prefixes \lstinline!flow!, \lstinline!stream!, \lstinline!input! and \lstinline!output! of a structured component (except as described above) are also applied to the elements of the component (this is done after verifying that the type prefixes occurring on elements of the component are correct; e.g.\ the \lstinline!flow! prefix can be used on a record component and all the record elements will generate zero-sum equations, even if elements of a record shall not be declared with the \lstinline!flow! prefix). When any of the type prefixes \lstinline!flow!, \lstinline!stream!, \lstinline!input! and \lstinline!output! are applied for a structured component, no element of the component may have any of these type prefixes. The corresponding rules for the type prefixes \lstinline!discrete!, \lstinline!parameter! and \lstinline!constant! are described in \cref{variability-of-structured-entities} for structured components. +The type prefixes \lstinline!flow!, \lstinline!stream!, \lstinline!input! +and \lstinline!output! of a structured +component (except as described above) are also applied to the elements +of the component (this is done after verifying that the type prefixes +occurring on elements of the component are correct; e.g. the \lstinline!flow! prefix +can be used on a record component and all the record elements will +generate zero-sum equations, even if elements of a record may not be +declared with the flow prefix). When any of the type prefixes \lstinline!flow!, +\lstinline!stream!, \lstinline!input! and \lstinline!output! are applied for a structured component, no +element of the component may have any of these type prefixes. +The corresponding rules for the type prefixes \lstinline!discrete!, +\lstinline!parameter! and \lstinline!constant! are described in \autoref{variability-of-structured-entities} for structured +components. \begin{example} -\lstinline!input! can only be used, if none of the elements has a \lstinline!flow!, \lstinline!stream!, \lstinline!input! or \lstinline!output! type prefix. +\lstinline!input! can only be used, if none of the elements has a \lstinline!flow!, \lstinline!stream!, \lstinline!input! or +\lstinline!output! type prefix. \end{example} -The prefixes \lstinline!input!\indexinline{input} and \lstinline!output!\indexinline{output} have a slightly different semantic meaning depending on the context where they are used: +The prefixes \lstinline!input! and \lstinline!output! have a slightly different semantic meaning +depending on the context where they are used: \begin{itemize} \item In \emph{functions}, these prefixes define the computational causality of the function body, i.e., given the variables declared as \lstinline!input!, the variables declared as \lstinline!output! are computed in the function body, see - \cref{function-call}. + \autoref{function-call}. \item - In \emph{simulation} \emph{models} and \emph{blocks} (i.e., on the top level of a model or block that shall be simulated), these prefixes define the interaction with the environment where the simulation model or block is used. - Especially, the \lstinline!input! prefix defines that values for such a variable have to be provided from the simulation environment and the \lstinline!output! prefix defines that the values of the corresponding variable can be directly utilized in the simulation environment, see the notion of \emph{globally balanced} in \cref{balanced-models}. + In \emph{simulation} \emph{models} and \emph{blocks} (i.e., on the top + level of a model or block that shall be simulated), these prefixes + define the interaction with the environment where the simulation model + or block is used. Especially, the \lstinline!input! prefix defines that values for + such a variable have to be provided from the simulation environment + and the \lstinline!output! prefix defines that the values of the corresponding + variable can be directly utilized in the simulation environment, see + the notion of Globally balanced in \autoref{balanced-models}. \item In component \emph{models} and \emph{blocks}, the \lstinline!input! prefix defines that a binding equation has to be provided for the corresponding variable when the component is utilized in order to guarantee a locally balanced model (i.e., the number of local equations is - identical to the local number of unknowns), see \cref{balanced-models}. + identical to the local number of unknowns), see \autoref{balanced-models}. \begin{example} \begin{lstlisting}[language=modelica] block FirstOrder input Real u; - $\ldots$ + ... end FirstOrder; model UseFirstOrder FirstOrder firstOrder(u=time); // binding equation for u - $\ldots$ + ... end UseFirstOrder; \end{lstlisting} \end{example} @@ -265,11 +293,11 @@ \subsubsection{Prefix Rules}\label{prefix-rules} \item In \emph{connectors}, prefixes \lstinline!input! and \lstinline!output! define that the corresponding connectors can only be connected according to block - diagram semantics, see \cref{connect-equations-and-connectors} (e.g., a connector with an \lstinline!output! + diagram semantics, see \autoref{connect-equations-and-connectors} (e.g., a connector with an \lstinline!output! variable can only be connected to a connector where the corresponding variable is declared as \lstinline!input!). There is the restriction that connectors which have at least one variable declared as \lstinline!input! must be - externally connected, see \cref{balanced-models} (in order to get a locally + externally connected, see \autoref{balanced-models} (in order to get a locally balanced model, where the number of local unknowns is identical to the number of unknown equations). Together with the block diagram semantics rule this means, that such connectors must be connected @@ -280,40 +308,37 @@ \subsubsection{Prefix Rules}\label{prefix-rules} function. \end{itemize} -\subsection{Acyclic Bindings of Constants and Parameters}\label{acyclic-bindings-of-constants-and-parameters} +\subsection{Acyclic Bindings of Constants and Parameters}\doublelabel{acyclic-bindings-of-constants-and-parameters} -The unexpanded binding equations for parameters and constants in the translated model must be acyclic after flattening; except that cycles are allowed if the cycles disappear when evaluating parameters having annotation \lstinline!Evaluate = true! that are not part of the cycle. -Thus it is not possible to introduce equations for parameters by cyclic dependencies. - -\begin{nonnormative} -There is no exception for parameters with \lstinline!fixed = false!, despite the fact that such parameters are generally allowed to be initialized from systems of dependent equations. -% Saying "binding equation" below even though it's called a "declaration equation", for consistency with the normative paragraph above. -However, a parameter with \lstinline!fixed = false! can use an initial equation instead of a binding equation, allowing for cyclic dependencies. -\end{nonnormative} +The unexpanded binding equations for parameters and constants in the +translated model must be acyclic after flattening; except that cycles +are allowed if the cycles disappear when evaluating parameters having +annotation Evaluate=true that are not part of the cycle. Thus it is not +possible to introduce equations for parameters by cyclic dependencies. \begin{example} \begin{lstlisting}[language=modelica] -constant Real p = 2 * q; -constant Real q = sin(p); // Illegal since p = 2 * q, q = sin(p) are cyclical +constant Real p=2*q; +constant Real q=sin(p); // Illegal since p=2*q, q=sin(p) are cyclical model ABCD - parameter Real A[n, n]; - parameter Integer n = size(A, 1); + parameter Real A[n,n]; + parameter Integer n=size(A,1); end ABCD; final ABCD a; // Illegal since cyclic dependencies between size(a.A,1) and a.n -ABCD b(redeclare Real A[2, 2] = [1, 2; 3, 4]); +ABCD b(redeclare Real A[2,2]=[1,2;3,4]); // Legal since size of A is no longer dependent on n. -ABCD c(n = 2); // Legal since n is no longer dependent on the size of A. +ABCD c(n=2); // Legal since n is no longer dependent on the size of A. -parameter Real r = 2 * sin(r); // Illegal, since r = 2 * sin(r) is cyclic +parameter Real r = 2*sin(r); // Illegal, since r = 2*sin(r) is cyclic partial model PartialLumpedVolume parameter Boolean use_T_start = true "= true, use T_start, otherwise h_start" - annotation(Dialog(tab = "Initialization"), Evaluate = true); + annotation(Dialog(tab = "Initialization"), Evaluate=true); parameter Medium.Temperature T_start=if use_T_start then system.T_start else Medium.temperature_phX(p_start,h_start,X_start) annotation(Dialog(tab = "Initialization", enable = use_T_start)); @@ -327,44 +352,53 @@ \subsection{Acyclic Bindings of Constants and Parameters}\label{acyclic-bindings // Illegal since the unexpanded bindings have cycles for both x and y // (even if they would disappear if bindings were expanded). model HasCycles - parameter Integer n = 10; - final constant Real A[3, 3] = [0, 0, 0; 1, 0, 0; 2, 3, 0]; - parameter Real y[3] = A * y + ones(3); - parameter Real x[n] = cat(1, {3.4}, x[1:(n-1)]); + parameter Integer n=10; + final constant Real A[3,3]=[0,0,0;1,0,0;2,3,0]; + parameter Real y[3]=A*y+ones(3); + parameter Real x[n]=cat(1, {3.4}, x[1:(n-1)]); end HasCycles; \end{lstlisting} \end{example} -\subsection{Component Variability Prefixes discrete, parameter, constant}\label{component-variability-prefixes-discrete-parameter-constant} +\subsection{Component Variability Prefixes discrete, parameter, constant}\doublelabel{component-variability-prefixes-discrete-parameter-constant} -The prefixes \lstinline!discrete!, \lstinline!parameter!, \lstinline!constant! of a component declaration are called \firstuse{variability prefixes}\index{variability!prefix}\index{declared variability}\index{variability!declared|see{declared variability}} and define in which situation the variable values of a component are initialized (see \cref{events-and-synchronization} and \cref{initialization-initial-equation-and-initial-algorithm}) and when they are changed in transient analysis (= solution of initial value problem of the hybrid DAE): +The prefixes \lstinline!discrete!, \lstinline!parameter!, \lstinline!constant! of a component declaration +are called variability prefixes and define in which situation the +variable values of a component are initialized (see \autoref{events-and-synchronization} and +\autoref{initialization-initial-equation-and-initial-algorithm}) and when they are changed in transient analysis (= solution +of initial value problem of the hybrid DAE): \begin{itemize} \item - A variable \lstinline!vc! declared with \lstinline!constant!\indexinline{constant} prefix remains constant during transient analysis, with a value that is unaffected by the initialization problem. + A variable \lstinline!vc! declared with \lstinline!constant! prefix remains constant during transient analysis, + with a value that is unaffected by the initialization problem. \item - A variable \lstinline!vc! declared with the \lstinline!parameter!\indexinline{parameter} prefix remains constant during transient analysis, with a value determined by the initialization problem. + A variable \lstinline!vc! declared with the \lstinline!parameter! prefix remains constant during transient analysis, + with a value determined by the initialization problem. \item A \emph{discrete-time} variable \lstinline!vd! has a vanishing time derivative between events. Note that this is not the same as saying that \lstinline!der(vd)=0! almost everywhere, as the derivative is not even defined at the events, and it is not legal - to apply \lstinline!der! to discrete-time variables as they are not continuous. During transient analysis the variable + to apply the \lstinline!der()! operator + to discrete-time variables as they are not continuous. During transient analysis the variable can only change its value at event - instants (see \cref{events-and-synchronization}). + instants (see \autoref{events-and-synchronization}). \item A \emph{continuous-time} variable \lstinline!vn! may have a non-vanishing time derivative (\lstinline!der(vn)<>0! possible) and may also change its value discontinuously at any time during transient analysis - (see \cref{events-and-synchronization}). If there are any discontinuities the variable is + (see \autoref{events-and-synchronization}). If there are any discontinuities the variable is not differentiable. \end{itemize} -If a \lstinline!Real! variable is declared with the prefix \lstinline!discrete!\indexinline{discrete} it must in a simulation model be assigned in a \lstinline!when!-clause, either by an assignment or an equation. -The variable assigned in a \lstinline!when!-clause shall not be defined in a sub-component of \lstinline!model! or \lstinline!block! specialized class. +If a \lstinline!Real! variable is declared with the prefix \lstinline!discrete! it must in a +simulation model be assigned in a when-clause, either by an assignment +or an equation. The variable assigned in a when-clause may not be +defined in a sub-component of model or block specialized class. (This is to keep the property of balanced models.) -A \lstinline!Real! variable assigned in a \lstinline!when!-clause is a discrete-time variable, +A \lstinline!Real! variable assigned in a when-clause is a discrete-time variable, even though it was not declared with the prefix \lstinline!discrete!. A \lstinline!Real! -variable not assigned in any \lstinline!when!-clause and without any type prefix is +variable not assigned in any when-clause and without any type prefix is a continuous-time variable. The default variability for \lstinline!Integer!, \lstinline!String!, @@ -374,55 +408,40 @@ \subsection{Component Variability Prefixes discrete, parameter, constant}\label{ \lstinline!enumeration! variables. \begin{nonnormative} -The restriction that discrete-valued variables (of type \lstinline!Boolean!, etc) cannot be -declared with continuous-time variability is one of the foundations of the expression variability rules -that will ensure that any discrete-valued expression has at most discrete-time variability, see \cref{variability-of-expressions}. +A Modelica translator is able to guarantee this property due to +restrictions imposed on discrete expressions, see \autoref{variability-of-expressions}. \end{nonnormative} The variability of expressions and restrictions on variability for -definition equations is given in \cref{variability-of-expressions}. +definition equations is given in \autoref{variability-of-expressions}. \begin{nonnormative} -For \lstinline!Real! variables we can distinguish two subtly different categories: discrete-time and piecewise constant, where the discrete-time variables are a subset of all piecewise constant variables. -The \lstinline!Real! variables declared with the prefix \lstinline!discrete! is a subset of the discrete-time \lstinline!Real! variables. -For a \lstinline!Real! variable, being discrete-time is equivalent to being assigned in a \lstinline!when!-clause. -A variable used as argument to \lstinline!pre! outside a \lstinline!when!-clause must be discrete-time. - -\begin{lstlisting}[language=modelica] -model PiecewiseConstantReals - discrete Real xd1 "Must be assigned in a when-clause, discrete-time"; - Real xd2 "Assigned in a when-clause (below) and thus discrete-time"; - Real xc3 "Not discrete-time, but piecewise constant"; - Real x4 "Piecewise constant, but changes between events"; -equation - when sample(1, 1) then - xd1 = pre(xd1) + 1; - xd2 = pre(xd2) + 1; - end when; - // It is legal to use pre for a discrete-time variable outside of when - xc3 = xd1 + pre(xd2); - // But pre(xc3) would not be legal - x4 = if noEvent(cos(time) > 0.5) then 1.0 else -1.0; -end PiecewiseConstantReals; -\end{lstlisting} - -Tools may optimize code to only compute and store discrete-time variables at events. -Tools may extend that optimization to piece-wise constant variables that only change at events (in the example above \lstinline!xc3!). -As shown above variables can be piecewise constant, but change at times that are not events (in the example above \lstinline!x4!). -It is not clear how a tool could detect and optimize the latter case. - -A \lstinline!parameter! variable is constant during simulation. -This prefix gives the library designer the possibility to express that the physical equations in a library are only valid if some of the used components are constant during simulation. -The same also holds for discrete-time and constant variables. -Additionally, the \lstinline!parameter! prefix allows a convenient graphical user interface in an experiment environment, to support quick changes of the most important constants of a compiled model. -In combination with an \lstinline!if!-equation, a \lstinline!parameter! prefix allows removing parts of a model before the symbolic processing of a model takes place in order to avoid variable causalities in the model (similar to \lstinline!#ifdef! in C). -Class parameters can be sometimes used as an alternative. +A discrete-time variable is a piecewise constant signal which +changes its values only at event instants during simulation. Such types +of variables are needed in order that special algorithms, such as the +algorithm of Pantelides for index reduction, can be applied (it must be +known that the time derivative of these variables is identical to zero). +Furthermore, memory requirements can be reduced in the simulation +environment, if it is known that a component can only change at event +instants. + +A parameter variable is constant during simulation. This prefix +gives the library designer the possibility to express that the physical +equations in a library are only valid if some of the used components are +constant during simulation. The same also holds for discrete-time and +constant variables. Additionally, the parameter prefix allows a +convenient graphical user interface in an experiment environment, to +support quick changes of the most important constants of a compiled +model. In combination with an if-clause, a parameter prefix allows to +remove parts of a model before the symbolic processing of a model takes +place in order to avoid variable causalities in the model (similar to +\lstinline!#ifdef! in C). Class parameters can be sometimes used as an alternative. Example: \begin{lstlisting}[language=modelica] model Inertia parameter Boolean state = true; - $\ldots$ + ... equation J*a = t1 - t2; if state then // code which is removed during symbolic @@ -461,7 +480,7 @@ \subsection{Component Variability Prefixes discrete, parameter, constant}\label{ integration whereas no such guarantee exists for \lstinline!u2!. \end{nonnormative} -\subsubsection{Variability of Structured Entities}\label{variability-of-structured-entities} +\subsubsection{Variability of Structured Entities}\doublelabel{variability-of-structured-entities} For elements of structured entities with variability prefixes the most restrictive of the variability prefix and the variability of the @@ -487,7 +506,7 @@ \subsubsection{Variability of Structured Entities}\label{variability-of-structur \end{lstlisting} \end{example} -\subsection{Conditional Component Declaration}\label{conditional-component-declaration} +\subsection{Conditional Component Declaration}\doublelabel{conditional-component-declaration} A component declaration can have a \lstinline!condition-attribute!: \lstinline!if!~\emph{expression}. @@ -501,30 +520,33 @@ \subsection{Conditional Component Declaration}\label{conditional-component-decla // Illegal modifier on component3 since component1.J is conditional // Even if we can see that component1 always exist if component3 exist equation - connect(component1$\ldots$, $\ldots$) "Connection to conditional component 1"; + connect(component1..., ...) "Connection to conditional component 1"; connect(component2.n, motor.n) "Connection to conditional component 2"; connect(component3.n, motor.n) "Connection to conditional component 3"; component1.u=0; // Illegal \end{lstlisting} \end{example} -The \emph{expression} must be a \lstinline!Boolean! scalar expression, and must be a parameter expression. +The \emph{expression} must be a \lstinline!Boolean! scalar expression, and must be a +parameter-expression. \begin{nonnormative} -A parameter expression is required since it shall be evaluated at compile time. +A parameter-expression is required since it shall be evaluated at compile time. \end{nonnormative} -A redeclaration of a component shall not include a condition attribute; +A redeclaration of a component may not include a condition attribute; and the condition attribute is kept from the original declaration (see -\cref{interface-compatibility-or-subtyping}). +\autoref{interface-compatibility-or-subtyping}). -If the \lstinline!Boolean! expression is false the component (including its modifier) is removed from the flattened DAE, and connections to/from the component are removed. -A component declared with a condition-attribute can only be modified and/or used in connections. +If the \lstinline!Boolean! expression is false the component (including its modifier) is removed from the flattened DAE, and +connections to/from the component are removed. A component declared with a condition-attribute can only be modified and/or +used in connections \begin{nonnormative} Adding the component and then removing it ensures that the component is valid. -If a connect equation defines the connection of a non-conditional component \lstinline!c1! with a conditional component \lstinline!c2! and \lstinline!c2! is de-activated, then \lstinline!c1! must still be a declared element. +If a connect statement defines the connection of a non-conditional component \lstinline!c1! with a conditional +component \lstinline!c2! and \lstinline!c2! is de-activated, then \lstinline!c1! must still be a declared element. \end{nonnormative} If the condition is true for a public connector containing flow @@ -535,18 +557,11 @@ \subsection{Conditional Component Declaration}\label{conditional-component-decla be an unconditional connector) and the model cannot check that connector is connected. \end{nonnormative} -\section{Class Declarations}\label{class-declarations} - -Essentially everything in Modelica is a \firstuse{class}\index{class}, from the predefined classes \lstinline!Integer! and \lstinline!Real!, to large packages such as the Modelica standard library. -The description consists of a class definition, a modification environment that modifies the class definition, an optional list of dimension expressions if the class is an array class, and a lexically -enclosing class for all classes. +\section{Class Declarations}\doublelabel{class-declarations} -The object generated by a class is called an \firstuse{instance}\index{instance}. -An instance contains zero or more components (i.e., instances), equations, algorithms, and local classes. -An instance has a type (\cref{interface-or-type}). -% Commenting out parts from old glossary that seem excessive here. -%Basically, two instances have same type, if their important attributes are the same and their public components and classes have pair wise equal identifiers and types. -%More specific type equivalence definitions are given, e.g., for functions. +Essentially everything in Modelica is a class, from the predefined +classes \lstinline!Integer! and \lstinline!Real!, to large packages such as the Modelica +standard library. \begin{example} A rather typical structure of a Modelica class is @@ -557,20 +572,17 @@ \section{Class Declarations}\label{class-declarations} class ClassName Declaration1 Declaration2 - $\ldots$ + ... equation equation1 equation2 - $\ldots$ + ... end ClassName; \end{lstlisting} \end{example} -The following is the formal syntax of class definitions, including the special variants described in later sections. - -An \firstuse{element}\index{element} is part of a class definition, and is one of: class definition, component declaration, or \lstinline!extends!-clause. -Component declarations and class definitions are called \firstuse{named elements}\index{named elements}. -An element is either inherited from a base class or local. +The following is the formal syntax of class definitions, including the +special variants described in later sections. \begin{lstlisting}[language=grammar] class-definition : @@ -587,8 +599,8 @@ \section{Class Declarations}\label{class-declarations} long-class-specifier : IDENT description-string composition end IDENT - | extends IDENT [ class-modification ] description-string - composition end IDENT + | extends IDENT [ class-modification ] description-string composition + end IDENT short-class-specifier : IDENT "=" base-prefix name [ array-subscripts ] @@ -617,7 +629,7 @@ \section{Class Declarations}\label{class-declarations} [ annotation ";" ] \end{lstlisting} -\subsection{Short Class Definitions}\label{short-class-definitions} +\subsection{Short Class Definitions}\doublelabel{short-class-definitions} A class definition of the form \begin{lstlisting}[language=modelica] @@ -634,14 +646,12 @@ \subsection{Short Class Definitions}\label{short-class-definitions} end IDENT1; \end{lstlisting} -An exception to the above is that if the short class definition is declared as \lstinline!encapsulated!, then the modifiers follow the rules for encapsulated classes and cannot be looked up in the enclosing scope. - \begin{example} Demonstrating the difference in scopes: \begin{lstlisting}[language=modelica] model Resistor parameter Real R; - $\ldots$ + ... end Resistor; model A parameter Real R; @@ -650,13 +660,11 @@ \subsection{Short Class Definitions}\label{short-class-definitions} replaceable model LoadError extends Resistor(R=R); // Gives the singular equation R=R, since the right-hand side R - // is searched for in LoadError and found in its base class Resistor. + // is searched for in LoadError and found in its base-class Resistor. end LoadError constrainedby TwoPin; - encapsulated model Load2=.Resistor(R=2); // Ok - encapsulated model LoadR=.Resistor(R=R); // Illegal Load a,b,c; - ConstantSource $\ldots$; - $\ldots$ + ConstantSource ...; + ... end A; \end{lstlisting} \end{example} @@ -675,8 +683,11 @@ \subsection{Short Class Definitions}\label{short-class-definitions} 'end' TN; \end{lstlisting} -Such an array class has exactly one anonymous component (\_); see also \cref{restriction-on-combining-base-classes-and-other-elements}. -When a component of such an array class type is flattened, the resulting flattened component type is an array type with the same dimensions as \_ and with the optional modifier applied. +Such an array class has exactly one anonymous component (\_); see also +\autoref{restriction-on-combining-base-classes-and-other-elements}. +When a component of such an array class type is +flattened, the resulting flattened component type is an array type with +the same dimensions as \_ and with the optional modifier applied. \begin{example} The types of \lstinline!f1! and \lstinline!f2! are identical: @@ -687,7 +698,9 @@ \subsection{Short Class Definitions}\label{short-class-definitions} \end{lstlisting} \end{example} -If a short class definition inherits from a partial class the new class definition will be partial, regardless of whether it is declared with the prefix \lstinline!partial! or not. +If a short class definition inherits from a partial class the new class +definition will be partial, regardless of whether it is declared with +the keyword partial or not. \begin{example} \begin{lstlisting}[language=modelica] @@ -696,9 +709,13 @@ \subsection{Short Class Definitions}\label{short-class-definitions} \end{lstlisting} \end{example} -If a short class definition does not specify any specialized class the new class definition will inherit the specialized class (this rule applies iteratively and also for redeclare). +If a short class definition does not specify any specialized class the +new class definition will inherit the specialized class (this rule +applies iteratively and also for redeclare). -A \lstinline[language=grammar]!base-prefix! applied in the \lstinline[language=grammar]!short-class-definition! does not influence its type, but is applied to components declared of this type or types derived from it; see also \cref{restriction-on-combining-base-classes-and-other-elements}. +A base-prefix applied in the short-class definition does not influence +its type, but is applied to components declared of this type or types +derived from it; see also \autoref{restriction-on-combining-base-classes-and-other-elements}. \begin{example} \begin{lstlisting}[language=modelica] @@ -716,18 +733,23 @@ \subsection{Short Class Definitions}\label{short-class-definitions} \end{lstlisting} \end{example} -\subsection{Restriction on combining base classes and other elements}\label{restriction-on-combining-base-classes-and-other-elements} +\subsection{Restriction on combining base-classes and other elements}\doublelabel{restriction-on-combining-base-classes-and-other-elements} -It is not legal to combine other components or base classes with an extends from an array class, a class with non-empty \lstinline[language=grammar]!base-prefix!, a \firstuse{simple type}\index{simple type} (\lstinline!Real!, \lstinline!Boolean!, \lstinline!Integer!, \lstinline!String! and enumeration types), or any class transitively extending from an array class, a class with non-empty \lstinline[language=grammar]!base-prefix!, or a simple type. +It is not legal to combine other components or base-classes with an +extends from an array class, a class with non-empty base-prefix, a +simple type (Real, Boolean, Integer, String and enumeration types), or +any class transitively extending from an array class, a class with +non-empty base-prefix, or a simple type (Real, Boolean, Integer, String +and enumeration types). \begin{example} \begin{lstlisting}[language=modelica] model Integrator input Real u; - output Real y = x; + output Real y=x; Real x; equation - der(x) = u; + der(x)=u; end Integrator; model Integrators = Integrator[3]; // Legal @@ -744,9 +766,13 @@ \subsection{Restriction on combining base classes and other elements}\label{rest \end{lstlisting} \end{example} -\subsection{Local Class Definitions -- Nested Classes}\label{local-class-definitions-nested-classes} +\subsection{Local Class Definitions -- Nested Classes}\doublelabel{local-class-definitions-nested-classes} -The local class should be statically flattenable with the partially flattened enclosing class of the local class apart from local class components that are \lstinline!partial! or \lstinline!outer!. The environment is the modification of any enclosing class element modification with the same name as the local class, or an empty environment. +The local class should be statically flattenable with the partially +flattened enclosing class of the local class apart from local class +components that are partial or \lstinline!outer!. The environment is the +modification of any enclosing class element modification with the same +name as the local class, or an empty environment. The unflattened local class together with its environment becomes an element of the flattened enclosing class. @@ -764,76 +790,98 @@ \subsection{Local Class Definitions -- Nested Classes}\label{local-class-definit end C2; \end{lstlisting} -Flattening of class \lstinline!C2! yields a local class \lstinline!Voltage! with \lstinline!nominal! modifier \lstinline!1000!. -The variables \lstinline!v1! and \lstinline!v2! are instances of this local class and thus have a nominal value of 1000. +Flattening of class \lstinline!C2! yields a local class \lstinline!Voltage! with +\lstinline!nominal!-modifier \lstinline!1000!. The variables \lstinline!v1! and \lstinline!v2! are +instances of this local class and thus have a nominal value of 1000. \end{example} -\section{Specialized Classes}\label{specialized-classes} +\section{Specialized Classes}\doublelabel{specialized-classes} -Specialized kinds of classes\index{specialized class} (earlier known as \emph{restricted classes}\index{restricted class|see{specialized class}}) -% The difference between the set of specializations given here and those that are defined below need some sort of explanation. +Specialized kinds of classes (earlier known as \emph{restricted classes}) \lstinline!record!, \lstinline!type!, \lstinline!model!, \lstinline!block!, \lstinline!package!, \lstinline!function! and \lstinline!connector! have the properties of a general class, apart from restrictions. -Moreover, they have additional properties called \firstuse{enhancements}\index{enhancement!specialized class}. -The definitions of the specialized classes are given below (additional restrictions on inheritance are in \cref{restrictions-on-the-kind-of-base-class}): -\begin{itemize} -\item \lstinline!record!\indexinline{record} -- -Only public sections are allowed in the definition or in any of its components (i.e., \lstinline!equation!, \lstinline!algorithm!, \lstinline!initial equation!, \lstinline!initial algorithm! and \lstinline!protected! sections are not allowed). The elements of a record shall not have prefixes \lstinline!input!, \lstinline!output!, \lstinline!inner!, \lstinline!outer!, \lstinline!stream,! or \lstinline!flow!. Enhanced with implicitly available record constructor function, see \cref{record-constructor-functions}. The components directly declared in a record may only be of specialized class record or type. - -\item \lstinline!type!\indexinline{type} -- -May only be predefined types, enumerations, array of type, or classes extending from type. - -\item \lstinline!model!\indexinline{model} -- -The normal modeling class in Modelica. - -\item \lstinline!block!\indexinline{block} -- -Same as \lstinline!model! with the restriction that each connector component of a \lstinline!block! must have prefixes \lstinline!input! and/or \lstinline!output! for all connector variables. - -\begin{nonnormative} +Moreover, they have additional properties called enhancements. The +following table summarizes the definition of the specialized classes +(additional restrictions on inheritance are in \autoref{restrictions-on-the-kind-of-base-class}): +\begin{longtable}{|p{4cm}|p{9cm}|} +\hline \endhead +\lstinline!record! & Only public sections are allowed in the definition or +in any of its components (i.e., equation, algorithm, initial equation, +initial algorithm and protected sections are not allowed). The elements +of a record may not have prefixes \lstinline!input!, \lstinline!output!, +\lstinline!inner!, \lstinline!outer!, \lstinline!stream,! +or \lstinline!flow!. Enhanced with implicitly available record constructor function, +see \autoref{record-constructor-functions}. The components +directly declared in a record may only be of specialized class record +or type.\\ \hline +\lstinline!type! & May only be predefined types, enumerations, array of +type, or classes extending from type.\\ \hline +\lstinline!model! & The normal modeling class in Modelica.\\ \hline +\lstinline!block! & Same as \lstinline!model! with the restriction that each connector +component of a \lstinline!block! must have prefixes \lstinline!input! and/or \lstinline!output! for all +connector variables. +\par +\begin{nonnormative*} The purpose is to model input/output blocks of block diagrams. Due to the restrictions on \lstinline!input! and \lstinline!output! prefixes, connections between blocks are only possible according to block diagram semantic. -\end{nonnormative} - -\item \lstinline!function!\indexinline{function} -- -See \cref{function-as-a-specialized-class} for restrictions and enhancements of functions. Enhanced to allow the function to contain an external function interface. - -\begin{nonnormative} -Non-\lstinline!function! specialized classes do not have this property. -\end{nonnormative} - -\item \lstinline!connector!\index{connector@\robustinline{connector}|hyperpageit} -- -Only public sections are allowed in the definition or in any of its components (i.e., \lstinline!equation!, \lstinline!algorithm!, \lstinline!initial equation!, \lstinline!initial algorithm! and \lstinline!protected! sections are not allowed). - -Enhanced to allow \lstinline!connect! to components of connector classes. The elements of a connector shall not have prefixes \lstinline!inner!, or \lstinline!outer!. May only contain components of specialized class \lstinline!connector!, \lstinline!record! and \lstinline!type!. - -\item \lstinline!package!\indexinline{package} -- -May only contain declarations of classes and constants. Enhanced to allow \lstinline!import! of elements of packages. (See also \cref{packages} on packages.) - -\item \lstinline!operator record!\indexinline{operator record} -- -Similar to \lstinline!record!; but operator overloading is possible, and due to this the typing rules are different, see \cref{interface-or-type-relationships}. It is not legal to extend from an \lstinline!operator record! (or \lstinline!connector! inheriting from \lstinline!operator record!), except if the new class is an \lstinline!operator record! or \lstinline!connector! that is declared as a short class definition, whose modifier is either empty or only modify the default attributes for the component elements directly inside the \lstinline!operator record!. An \lstinline!operator record! can only extend from an \lstinline!operator record!. It is not legal to extend from any of its enclosing scopes. (See \cref{overloaded-operators}). - -\item \lstinline!operator!\indexinline{operator} -- -Similar to \lstinline!package!; but may only contain declarations of functions. May only be placed directly in an \lstinline!operator record!. (See also \cref{overloaded-operators}). - -\item \lstinline!operator function!\indexinline{operator function} -- -Shorthand for an \lstinline!operator! with exactly one function; same restriction as \lstinline!function! class and in addition may only be placed directly in an \lstinline!operator record!. +\end{nonnormative*} +\\ \hline +\lstinline!function! & See \autoref{function-as-a-specialized-class} for restrictions +and enhancements of functions. Enhanced to allow the +function to contain an external function interface. +\par +\begin{nonnormative*} +Non-function specialized classes do not have this property. +\end{nonnormative*} +\\ \hline +\lstinline!connector! & Only public sections are allowed in the definition or in any of its +components (i.e., equation, algorithm, initial equation, initial +algorithm and protected sections are not allowed). + +Enhanced to allow \lstinline!connect!(..) to components of connector classes. The +elements of a connector may not have prefixes \lstinline!inner!, or \lstinline!outer.! May only +contain components of specialized class connector, record and +type.\\ \hline +\lstinline!package! & May only contain declarations of classes and +constants. Enhanced to allow \lstinline!import! of elements of packages. (See also +\autoref{packages} on packages.)\\ \hline +\lstinline!operator record! & Similar to record; but operator overloading +is possible, and due to this the typing rules are different -- see +\autoref{interface-or-type-relationships}. It is not legal to extend from an operator record (or +connector inheriting from operator record), except if the new class is +an operator record or connector that is declared as a short class +definition, whose modifier is either empty or only modify the default +attributes for the component elements directly inside the operator +record. An operator record can only extend from an operator record. It is not legal to extend +from any of its enclosing scopes. (See \autoref{overloaded-operators}). +\\ \hline +\lstinline!operator! & Similar to package; but may only contain +declarations of functions. May only be placed directly in an operator +record. (See also \autoref{overloaded-operators}).\\ \hline +\lstinline!operator function! & Shorthand for an +operator with exactly one function; same restriction as function class +and in addition may only be placed directly in an operator +record. \begin{nonnormative} A function declaration \begin{lstlisting}[language=modelica] -operator function foo $\ldots$ end foo; +operator function foo ... end foo; \end{lstlisting} is conceptually treated as \begin{lstlisting}[language=modelica] operator foo function foo1 - $\ldots$ + ... end foo1; end foo; \end{lstlisting} \end{nonnormative} - -\end{itemize} - -Additionally only components which are of specialized classes \lstinline!record!, \lstinline!type!, \lstinline!operator record!, and connector classes based on any of those can be used as component references in normal expressions and in the left hand side of assignments, subject to normal type compatibility rules. -Additionally components of connectors may be arguments of \lstinline!connect!-equations, and any component can be used as argument to the \lstinline!ndims! and \lstinline!size!-functions, or for accessing elements of that component (possibly in combination with array indexing). +\\ \hline +\end{longtable} +Additionally only components which are of specialized classes \lstinline!record!, \lstinline!type!, \lstinline!operator record!, and +connector classes based on any of those can be used as component references in normal expressions and in the left hand +side of assignments, subject to normal type compatibility rules. +Additionally components of connectors may be arguments of connect-statements, +and any component can be used as argument to the \lstinline!ndims! and \lstinline!size!-functions, or for accessing +elements of that component (possibly in combination with array indexing). \begin{example} Use of \lstinline!operator!: @@ -841,7 +889,7 @@ \section{Specialized Classes}\label{specialized-classes} operator record Complex Real re; Real im; - $\ldots$ + ... encapsulated operator function '*' import Complex; input Complex c1; @@ -853,17 +901,21 @@ \section{Specialized Classes}\label{specialized-classes} end '*'; end Complex; record MyComplex - extends Complex; // Error; extending from enclosing scope. + extends Complex; // not allowed, since extending from enclosing scope Real k; end MyComplex; operator record ComplexVoltage = Complex(re(unit="V"),im(unit="V")); // allowed \end{lstlisting} \end{example} -\section{Balanced Models}\label{balanced-models} +\section{Balanced Models}\doublelabel{balanced-models} \begin{nonnormative} -In this section restrictions for \lstinline!model! and \lstinline!block! classes are present, in order that missing or too many equations can be detected and localized by a Modelica translator before using the respective \lstinline!model! or \lstinline!block! class. A non-trivial case is demonstrated in the following example: +In this section restrictions for model and block classes are +present, in order that missing or too many equations can be detected and +localized by a Modelica translator before using the respective model or +block class. A non-trivial case is demonstrated in the following +example: \begin{lstlisting}[language=modelica] partial model BaseCorrelation input Real x; @@ -889,8 +941,11 @@ \section{Balanced Models}\label{balanced-models} end Broken; \end{lstlisting} -In this case one can argue that both \lstinline!UseCorrelation! (adding an acausal equation) and \lstinline!SpecialCorrelation! (adding a default to an input) are correct. Still, when combined they -lead to a model with too many equations, and it is not possible to determine which model is incorrect without strict rules -- as the ones defined here. +In this case one can argue that both \lstinline!UseCorrelation! (adding +an acausal equation) and \lstinline!SpecialCorrelation! (adding a default to +an input) are correct, but still when combined they lead to a model with +too many equations -- and it is not possible to determine which model is +incorrect without strict rules, as the ones defined here. In Modelica 2.2, model \lstinline!Broken! will work with some models. However, by just redeclaring it to model \lstinline!SpecialCorrelation!, an @@ -902,16 +957,25 @@ \section{Balanced Models}\label{balanced-models} redeclaration cannot lead to an unbalanced model any more. \end{nonnormative} -The restrictions below apply after flattening -- i.e.\ inherited components are included -- possibly modified. The corresponding restrictions on connectors and connections are in -\cref{restrictions-of-connections-and-connectors}. +The restrictions below apply after flattening -- i.e. inherited +components are included -- possibly modified. The corresponding +restrictions on connectors and connections are in \autoref{restrictions-of-connections-and-connectors}. -\begin{definition}[Local number of unknowns]\index{local number of unknowns} -The local number of unknowns of a \lstinline!model! or \lstinline!block! class is the sum based on the components: +\textbf{Definition 1: Local Number of Unknowns} + +The \firstuse{local number of unknowns} of a model or block class is the sum based +on the components: \begin{itemize} \item - For each declared component of specialized class \lstinline!type! (\lstinline!Real!, \lstinline!Integer!, \lstinline!String!, \lstinline!Boolean!, enumeration and arrays of those, etc.) or \lstinline!record!, or \lstinline!operator record! not declared as \lstinline!outer!, it is the number of unknown variables inside it (i.e., excluding parameters and constants and counting the elements after expanding all records, operator record, and arrays to a set of scalars of primitive types). + For each declared component of specialized class \lstinline!type! (Real, Integer, + String, Boolean, enumeration and arrays of those, etc.) or \lstinline!record!, or + \lstinline!operator record! not declared as \lstinline!outer!, it is the number of unknown + variables inside it (i.e., excluding parameters and constants and + counting the elements after expanding all records, operator record, + and arrays to a set of scalars of primitive types). \item - Each declared component of specialized class \lstinline!type! or \lstinline!record! declared as \lstinline!outer! is ignored. + Each declared component of specialized class \lstinline!type! or record declared + as \lstinline!outer! is ignored. \begin{nonnormative} I.e., all variables inside the component are treated as known. \end{nonnormative} @@ -927,29 +991,31 @@ \section{Balanced Models}\label{balanced-models} the elements after expanding all records and arrays to a set of scalars of primitive types). \end{itemize} -\end{definition} -\begin{definition}[Local equation size]\index{local equation size} -The local equation size of a \lstinline!model! or \lstinline!block! class is the sum of the following numbers: +\textbf{Definition 2: Local Equation Size} + +The \firstuse{local equation size} of a model or block class is the sum of the +following numbers: \begin{itemize} \item - The number of equations defined locally (i.e.\ not in any \lstinline!model! or \lstinline!block! component), including binding equations, and equations generated from \lstinline!connect!-equations. + The number of equations defined locally (i.e. not in any model or + block component), including binding equations, and equations generated + from connect-equations. \begin{nonnormative} - This includes the proper count for \lstinline!when!-clauses (see \cref{when-equations}), and algorithms (see \cref{algorithm-sections}), and is also used for - the flat Hybrid DAE formulation (see \cref{modelica-dae-representation}). + This includes the proper count for when-clauses (see \autoref{when-equations}), and algorithms (see \autoref{algorithm-sections}), and is also used for + the flat Hybrid DAE formulation (see \autoref{modelica-dae-representation}). \end{nonnormative} \item - The number of input and flow variables present in each (top-level) public connector component. + The number of input and flow-variables present in each (top-level) public connector component. \begin{nonnormative} This represents the number of connection equations that will be provided when the class is used. \end{nonnormative} \item - The number of (top-level) public input variables that neither are connectors nor have binding equations. + The number of (top level) public input variables that neither are connectors nor have binding equations. \begin{nonnormative} I.e., top-level inputs are treated as known variables. This represents the number of binding equations that will be provided when the class is used. \end{nonnormative} \end{itemize} -\end{definition} \begin{nonnormative} To clarify top-level inputs without binding equation (for @@ -969,70 +1035,86 @@ \section{Balanced Models}\label{balanced-models} supplied when using the model. \end{nonnormative} -\begin{definition}[Locally balanced]\index{locally balanced}\index{balanced!locally} -A \lstinline!model! or \lstinline!block! class is locally balanced if the \emph{local number of unknowns} is identical to the \emph{local equation size} for all legal values of constants and parameters. -\end{definition} +\textbf{Definition 3: Locally Balanced} + +A model or block class is \firstuse{locally balanced} if the +\emph{local number of unknowns} is identical to the \emph{local equation size} for all legal +values of constants and parameters. \begin{nonnormative} -Here, \emph{legal values} must respect final bindings and min/max-restrictions. -A tool shall verify the \emph{locally balanced} property for the actual values of parameters and constants in the simulation model. -It is a quality of implementation for a tool to verify this property in general, due to arrays of (locally) undefined sizes, conditional declarations, \lstinline!for!-loops etc. +Here, \emph{legal values} must respect final bindings and min/max-restrictions. A tool shall verify the \emph{locally balanced} property for the actual +values of parameters and constants in the simulation model. It is a quality of implementation for a tool to verify this property in general, due to +arrays of (locally) undefined sizes, conditional declarations, for loops etc. \end{nonnormative} -\begin{definition}[Globally balanced]\index{globally balanced}\index{balanced!globally} +\textbf{Definition 4: Globally Balanced} + Similarly as locally balanced, but including all unknowns and equations from all components. The global number of unknowns is computed by -expanding all unknowns (i.e.\ excluding parameters and constants) into a +expanding all unknowns (i.e. excluding parameters and constants) into a set of scalars of primitive types. This should match the global equation size defined as: \begin{itemize} \item - The number of equations defined (included in any \lstinline!model! or \lstinline!block! component), including equations generated from \lstinline!connect!-equations. + The number of equations defined (included in any model or block + component), including equations generated from connect-equations. \item - The number of input and flow variables present in each (top-level) public connector component. + The number of input and flow-variables present in each (top-level) + public connector component. \item - The number of (top-level) public input variables that neither are connectors nor have binding equations. + The number of (top level) public input variables that neither are connectors nor have binding equations. \begin{nonnormative} I.e., top-level inputs are treated as known variables. \end{nonnormative} \end{itemize} -\end{definition} The following restrictions hold: \begin{itemize} \item - In a non-partial \lstinline!model! or \lstinline!block!, all non-connector inputs of \lstinline!model! or \lstinline!block! components must have binding equations. + In a non-partial model or block, all non-connector inputs of model or + block components must have binding equations. \begin{nonnormative} - E.g.\ if the model contains a component, \lstinline!firstOrder! (of specialized class \lstinline!model!) and \lstinline!firstOrder! has + E.g. if the model contains a component, \lstinline!firstOrder! (of specialized class \lstinline!model!) and \lstinline!firstOrder! has \lstinline!input Real u! then there must be a binding equation for \lstinline!firstOrder.u!. \end{nonnormative} \item A component declared with the \lstinline!inner! or \lstinline!outer! prefix shall not be of a class having top-level public connectors containing inputs. \item - In a declaration of a component of a record, connector, or simple type, modifiers can be applied to any element, and these are also considered for the equation count. + In a declaration of a component of a record, connector, or simple + type, modifiers can be applied to any element -- and these are also + considered for the equation count. \begin{example} \begin{lstlisting}[language=modelica] Flange support(phi=phi, tau=torque1+torque2) if use_support; \end{lstlisting} - If \lstinline!use_support=true!, there are two additional equations for \lstinline!support.phi! and \lstinline!support.tau! via the modifier. + If \lstinline!use_support=true!, there are two additional equations for + \lstinline!support.phi! and \lstinline!support.tau! via the modifier. \end{example} \item - In other cases (declaration of a component of a \lstinline!model! or \lstinline!block! class, modifiers on extends, and modifier on short class definitions): Modifiers for components shall only contain redeclarations of replaceable elements and binding equations. The binding equations in modifiers for components may in these cases only be for parameters, constants, inputs and variables having a default binding equation. + In other cases (declaration of a component of a model or block type, + modifiers on extends, and modifier on short-class-definitions): + modifiers for components shall only contain redeclarations of + replaceable elements and binding equations. The binding equations in + modifiers for components may in these cases only be for parameters, + constants, inputs and variables having a default binding equation. \item - All non-partial \lstinline!model! and \lstinline!block! classes must be locally balanced. + \textbf{All non-partial model and block classes must be locally balanced.} \begin{nonnormative} This means that the local number of unknowns equals the local equation size. \end{nonnormative} \end{itemize} -Based on these restrictions, the following strong guarantee can be given: -\begin{itemize} -\item All simulation models and blocks are globally balanced. -\end{itemize} +Based on these restrictions, the following strong guarantee can be given +for simulation models and blocks: + +\textbf{Proposition 1:} + +All simulation models and blocks are globally balanced. \begin{nonnormative} -Therefore the number of unknowns equal to the number of equations of a simulation model or block, provided that every used non-partial \lstinline!model! or \lstinline!block! class is locally balanced. +Therefore the number of unknowns equal to the number of equations of a simulation model or block, provided that every used +non-partial model or block class is locally balanced. \end{nonnormative} \begin{example} @@ -1060,23 +1142,32 @@ \section{Balanced Models}\label{balanced-models} %TODO-FORMAT Should this be verbatim code instead? Local equations: -\begin{align*} -0 &= p.i + n.i;\\ -u &= p.v - n.v;\\ -C \cdot \text{der}(u) &= p.i; -\end{align*} -and 2 equations corresponding to the 2 flow variables \lstinline!p.i! and \lstinline!n.i!. - -These are 5 equations in 5 unknowns (locally balanced model). A more detailed analysis would reveal that this is structurally non-singular, i.e.\ that -the hybrid DAE will not contain a singularity independent of actual values. - -If the equation \lstinline!u = p.v - n.v! would be missing in the \lstinline!Capacitor! model, there would be 4 equations in 5 unknowns and the model -would be locally unbalanced and thus simulation models in which this model is used would be usually structurally singular and thus not solvable. - -If the equation \lstinline!u = p.v - n.v! would be replaced by the equation \lstinline!u = 0! and the equation \lstinline!C*der(u) = p.i! would be -replaced by the equation \lstinline!C*der(u) = 0!, there would be 5 equations in 5 unknowns (locally balanced), but the equations would be singular, -regardless of how the equations corresponding to the flow variables are constructed because the information that \lstinline!u! is constant is given twice -in a slightly different form. +\begin{eqnarray*} +0 &=& p.i + n.i;\\ +u &=& p.v - n.v;\\ +C \cdot \text{der}(u) &=& p.i; +\end{eqnarray*} +and 2 equations corresponding to the 2 flow-variables \lstinline!p.i! and \lstinline!n.i!. + +These are 5 equations in 5 unknowns (\textbf{locally} +\textbf{balanced model}). A more detailed analysis would reveal that +this is \textbf{structurally non-singular}, i.e. that the hybrid DAE +will not contain a singularity independent of actual values. + +If the equation \lstinline!u = p.v - n.v! would be missing in the +Capacitor model, there would be 4 equations in 5 unknowns and the model +would be \textbf{locally} \textbf{unbalanced} and thus simulation models +in which this model is used would be usually structurally singular and +thus not solvable. + +If the equation \lstinline!u = p.v - n.v! would be replaced by the +equation \lstinline!u = 0! and the equation \lstinline!C*der(u) = p.i! would +be replaced by the equation \lstinline!C*der(u) = 0!, there would be 5 +equations in 5 unknowns (\textbf{locally} \textbf{balanced}), but the +equations would be \textbf{singular}, regardless of how the equations +corresponding to the flow-variables are constructed because the +information that \lstinline!u! is constant is given twice in a slightly +different form. \end{example} \begin{example} @@ -1112,7 +1203,9 @@ \section{Balanced Models}\label{balanced-models} end Circuit; \end{lstlisting} -Since \lstinline!t! is partial we cannot check whether this is a globally balanced model, but we can check that \lstinline!Circuit! is locally balanced. +Since \lstinline!t! is partial we cannot check whether this is a +\textbf{globally balanced model}, but we can check that \lstinline!Circuit! +is \textbf{locally balanced}. Counting on model \lstinline!Circuit! results in the following balance sheet: @@ -1120,16 +1213,18 @@ \section{Balanced Models}\label{balanced-models} flow variables for \lstinline!t! (\lstinline!t.p.i!, \lstinline!t.n.i!), and 2 flow variables for \lstinline!c! (\lstinline!c.p.i!, \lstinline!c.n.i!). Local equations: -\begin{align*} \text{p.v} &= \text{t.p.v};\\ -0 &= \text{p.i}-\text{t.p.i};\\ -\text{c.p.v} &= \text{t.n.v};\\ -0 &= \text{c.p.i}+\text{t.n.i};\\ -\text{n.v} &= \text{c.n.v};\\ -0 &= \text{n.i}-\text{c.n.i}; -\end{align*} +\begin{eqnarray*} \text{p.v} &=& \text{t.p.v};\\ +0 &=& \text{p.i}-\text{t.p.i};\\ +\text{c.p.v} &=& \text{t.n.v};\\ +0 &=& \text{c.p.i}+\text{t.n.i};\\ +\text{n.v} &=& \text{c.n.v};\\ +0 &=& \text{n.i}-\text{c.n.i}; +\end{eqnarray*} and 2 equation corresponding to the flow variables \lstinline!p.i!, \lstinline!n.i!. -In total we have 8 scalar unknowns and 8 scalar equations, i.e., a locally balanced model (and this feature holds for any models used for the replaceable component \lstinline!t!). +In total we have 8 scalar unknowns and 8 scalar equations, i.e., a +\textbf{locally} \textbf{balanced model} (and this feature holds for any +models used for the replaceable component \lstinline!t!). Some more analysis reveals that this local set of equations and unknowns is structurally non-singular. However, this does not provide @@ -1160,10 +1255,13 @@ \section{Balanced Models}\label{balanced-models} end BaseProperties; \end{lstlisting} -The use of connector here is a special design pattern. -The variables \lstinline!p!, \lstinline!h!, \lstinline!Xi! are marked as input to get correct equation count. -Since they are connectors they should neither be given binding equations in derived classes nor when using the model. -The design pattern is to give textual equations for them (as below); using \lstinline!connect!-equations for these connectors would be possible (and would work) but is not part of the design. +The use of connector here is a special design pattern. The +variables \lstinline!p!, \lstinline!h!, \lstinline!Xi! are marked as input to get +correct equation count. Since they are connectors they should neither be +given binding equations in derived classes nor when using the model. The +design pattern is to give textual equations for them (as below); using +connect-equations for these connectors would be possible (and would +work) but is not part of the design. This partial model defines that \lstinline!T!, \lstinline!d!, \lstinline!u! can be computed from the medium model, provided \lstinline!p!, \lstinline!h!, \lstinline!Xi! are given. Every medium with @@ -1264,7 +1362,7 @@ \section{Balanced Models}\label{balanced-models} $2 + \text{\lstinline!nXi!}$ flow variables in the \lstinline!port! connector. \end{itemize} -Therefore, \lstinline!DynamicVolume! is a locally balanced model. +Therefore, \lstinline!DynamicVolume! is a \textbf{locally balanced} model. Note, when the \lstinline!DynamicVolume! is used and the \lstinline!Medium! model is redeclared to \lstinline!SimpleAir!, then a tool will try @@ -1315,164 +1413,115 @@ \section{Balanced Models}\label{balanced-models} $2 + \text{\lstinline!nXi!}$ flow variables in the \lstinline!port! connector. \end{itemize} -Therefore, \lstinline!FixedBoundary_pTX! is a locally balanced model. The predefined boundary variables \lstinline!p! and \lstinline!Xi! are -provided via equations to the input arguments \lstinline!medium.p! and \lstinline!medium.Xi!, in addition there is an equation for \lstinline!T! -in the same way -- even though \lstinline!T! is not an input. Depending on the flow direction, either the specific enthalpy in the port -(\lstinline!port.h!) or \lstinline!h! is used to compute the enthalpy flow rate \lstinline!H_flow!. \lstinline!h! is provided as binding equation -to the medium. With the equation \lstinline!medium.T = T!, the specific enthalpy \lstinline!h! of the reservoir is indirectly computed via the -medium equations. Again, this demonstrates, that an \lstinline!input! just defines the number of equations have to be provided, but that it not -necessarily defines the computational causality. -\end{example} - -\section{Predefined Types and Classes}\label{predefined-types-and-classes} - -% Not including definition of 'predefined type' from old glossary, since it seems inconsistent with actual use, since, at least -% ExternalObject is also described as a predefined type. -% The definition sounds more like the description of 'simple type'. -%One of the types \lstinline!Real!, \lstinline!Boolean!, \lstinline!Integer!, \lstinline!String! and types defined as \lstinline!enumeration! types. -%The component declarations of the predefined types define attributes such as \lstinline!min!, \lstinline!max!, and \lstinline!unit!. - -The \firstuse{attributes}\index{attribute} of the predefined variable types (\lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, \lstinline!String!) and \lstinline!enumeration! types are described below with Modelica syntax although they are predefined. -All attributes are predefined and attribute values can only be defined using a modification, such as in \lstinline!Real x(unit = "kg")!. -Attributes cannot be accessed using dot notation, and are not constrained by equations and algorithm sections. - -The $\langle$$\mbox{\emph{value}}$$\rangle$ in the definitions of the predefined types represents the value of an expresion of that type. -Unlike attributes, the $\langle$$\mbox{\emph{value}}$$\rangle$ of a component cannot be referred to by name; both access and modification of the value is made directly on the component. - -\begin{example} -Accessing and modifying a variable value, using \lstinline!Real! as example of a predefined type: -\begin{lstlisting}[language=modelica] -model M - record R - Real u; - Real v; - end R; - Real x = sin(time); // Value modification. - Real y(unit = "kg") = x; // Access value of x, and modify value of y. - R r(u = y); // Value modification of r.u. -equation - r.v + x * x = 0; // Access values of r.v and x. -end M; -\end{lstlisting} -Note that only the values of \lstinline!x! and \lstinline!y! are declared to be equal, but not their \lstinline!unit! attributes, nor any other attribute of \lstinline!x! and \lstinline!y! +Therefore, \lstinline!FixedBoundary_pTX! is a \textbf{locally +balanced} model. The predefined boundary variables \lstinline!p! and \lstinline!Xi! +are provided via equations to the input arguments \lstinline!medium.p! +and \lstinline!medium.Xi!, in addition there is an equation for \lstinline!T! +in the same way -- even though \lstinline!T! is not an input. Depending +on the flow direction, either the specific enthalpy in the port +(\lstinline!port.h!) or h is used to compute the enthalpy flow rate +\lstinline!H_flow!. \lstinline!h! is provided as binding equation to the medium. With +the equation \lstinline!medium.T = T!, the specific enthalpy \lstinline!h! of the +reservoir is indirectly computed via the medium equations. Again, this +demonstrates, that an \lstinline!input! just defines the number of equations +have to be provided, but that it not necessarily defines the +computational causality. \end{example} -It is not possible to combine extends from the predefined types, enumeration types, or this \lstinline!Clock! type with other components. +\section{Predefined Types and Classes}\doublelabel{predefined-types-and-classes} -The names \lstinline!Real!\index{Real@\robustinline{Real}!reserved name}, \lstinline!Integer!\index{Integer@\robustinline{Integer}!reserved name}, \lstinline!Boolean!\index{Boolean@\robustinline{Boolean}!reserved name} and \lstinline!String!\index{String@\robustinline{String}!reserved name} are reserved such that it is illegal to declare an element with these names. +The attributes of the predefined variable types (\lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, +\lstinline!String!) and \lstinline!enumeration! types are described below with Modelica syntax +although they are predefined. Attributes cannot be accessed using dot +notation, and are not constrained by equations and algorithm sections. +E.g. in \lstinline!Real x(unit="kg") = y;! only the values of \lstinline!x! and \lstinline!y! are declared +to be equal, but not their \lstinline!unit! attributes, nor any other attribute of \lstinline!x! +and \lstinline!y!. It is not possible to combine extends from the predefined types, +enumeration types, or this \lstinline!Clock! type with other components. The names +\lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean! and \lstinline!String! are reserved such that it is illegal +to declare an element with these names. \begin{nonnormative} Hence, it is possible to define a normal class called \lstinline!Clock! in a package and extend from it. \end{nonnormative} \begin{nonnormative} -It also follows that the only way to declare a subtype of e.g.\ \lstinline!Real! is to use the \lstinline!extends! mechanism. +It also follows that the only way to declare a subtype of e.g. \lstinline!Real! is to use the \lstinline!extends! mechanism. \end{nonnormative} -The definitions use \lstinline!RealType!\indexinline{RealType}, \lstinline!IntegerType!\indexinline{IntegerType}, \lstinline!BooleanType!\indexinline{BooleanType}, \lstinline!StringType!\indexinline{StringType}, \lstinline!EnumType!\indexinline{EnumType} as mnemonics corresponding to machine representations. -These are called the \firstuse{primitive types}\index{primitive type}. +The definitions use \lstinline!RealType!, \lstinline!IntegerType!, \lstinline!BooleanType!, \lstinline!StringType!, \lstinline!EnumType! +as mnemonics corresponding to machine representations. -\subsection{Real Type}\label{real-type} +\subsection{Real Type}\doublelabel{real-type} -The following is the predefined \lstinline!Real!\indexinline{Real} type: +The following is the predefined \lstinline!Real! type: \begin{lstlisting}[language=modelica] type Real // Note: Defined with Modelica syntax although predefined - RealType $\langle$$\mbox{\emph{value}}$$\rangle$; // Not an attribute; only accessed without dot-notation + RealType value; // Accessed without dot-notation parameter StringType quantity = ""; parameter StringType unit = "" "Unit used in equations"; parameter StringType displayUnit = "" "Default display unit"; - parameter RealType min = -Inf, max = +Inf; // Inf denotes a large value + parameter RealType min=-Inf, max=+Inf; // Inf denotes a large value parameter RealType start = 0; // Initial value parameter BooleanType fixed = true, // default for parameter/constant; = false; // default for other variables parameter RealType nominal; // Nominal value - parameter BooleanType unbounded = false; // For error control + parameter BooleanType unbounded=false; // For error control parameter StateSelect stateSelect = StateSelect.default; equation - assert(min <= $\langle$$\mbox{\emph{value}}$$\rangle$ and $\langle$$\mbox{\emph{value}}$$\rangle$ <= max, "Variable value out of limit"); + assert(value >= min and value <= max, "Variable value out of limit"); end Real; -\end{lstlisting}% -\index{quantity@\robustinline{quantity}!attribute of \robustinline{Real}}% -\index{unit@\robustinline{unit}!attribute of \robustinline{Real}}% -\index{displayUnit@\robustinline{displayUnit}!attribute of \robustinline{Real}}% -\index{min@\robustinline{min}!attribute of \robustinline{Real}}% -\index{max@\robustinline{max}!attribute of \robustinline{Real}}% -\index{start@\robustinline{start}!attribute of \robustinline{Real}}% -\index{fixed@\robustinline{fixed}!attribute of \robustinline{Real}}% -\index{nominal@\robustinline{nominal}!attribute of \robustinline{Real}}% -\index{unbounded@\robustinline{unbounded}!attribute of \robustinline{Real}}% -\index{stateSelect@\robustinline{stateSelect}!attribute of \robustinline{Real}} - -The \lstinline!nominal! attribute is meant to be used for scaling purposes and to -define tolerances in relative terms, see \cref{attributes-start-fixed-nominal-and-unbounded}. - -\begin{nonnormative} -For external functions in C89, \lstinline!RealType! maps to \lstinline[language=C]!double!. In the mapping proposed in Annex~F of the C99 standard, -\lstinline!RealType!/\lstinline[language=C]!double! matches the IEC~60559:1989 (ANSI/IEEE~754-1985) \lstinline[language=C]!double! format. -\end{nonnormative} +\end{lstlisting} -\subsection{Integer Type}\label{integer-type} +The nominal attribute is meant to be used for scaling purposes and to +define tolerances in relative terms, see \autoref{attributes-start-fixed-nominal-and-unbounded}. -The following is the predefined \lstinline!Integer!\indexinline{Integer} type: +\subsection{Integer Type}\doublelabel{integer-type} +The following is the predefined \lstinline!Integer! type: \begin{lstlisting}[language=modelica] type Integer // Note: Defined with Modelica syntax although predefined - IntegerType $\langle$$\mbox{\emph{value}}$$\rangle$; // Not an attribute; only accessed without dot-notation + IntegerType value; // Accessed without dot-notation parameter StringType quantity = ""; - parameter IntegerType min = -Inf, max = +Inf; + parameter IntegerType min=-Inf, max=+Inf; parameter IntegerType start = 0; // Initial value parameter BooleanType fixed = true, // default for parameter/constant; = false; // default for other variables equation - assert(min <= $\langle$$\mbox{\emph{value}}$$\rangle$ and $\langle$$\mbox{\emph{value}}$$\rangle$ <= max, "Variable value out of limit"); + assert(value >= min and value <= max, "Variable value out of limit"); end Integer; -\end{lstlisting}% -\index{quantity@\robustinline{quantity}!attribute of \robustinline{Integer}}% -\index{min@\robustinline{min}!attribute of \robustinline{Integer}}% -\index{max@\robustinline{max}!attribute of \robustinline{Integer}}% -\index{start@\robustinline{start}!attribute of \robustinline{Integer}}% -\index{fixed@\robustinline{fixed}!attribute of \robustinline{Integer}} - -The minimal recommended number range for \lstinline!IntegerType! is from -2147483648 to +2147483647, corresponding to a two's-complement 32-bit integer implementation. - -\subsection{Boolean Type}\label{boolean-type} +\end{lstlisting} -The following is the predefined \lstinline!Boolean!\indexinline{Boolean} type: +\subsection{Boolean Type}\doublelabel{boolean-type} +The following is the predefined \lstinline!Boolean! type: \begin{lstlisting}[language=modelica] type Boolean // Note: Defined with Modelica syntax although predefined - BooleanType $\langle$$\mbox{\emph{value}}$$\rangle$; // Not an attribute; only accessed without dot-notation + BooleanType value; // Accessed without dot-notation parameter StringType quantity = ""; parameter BooleanType start = false; // Initial value parameter BooleanType fixed = true, // default for parameter/constant; = false, // default for other variables end Boolean; -\end{lstlisting}% -\index{quantity@\robustinline{quantity}!attribute of \robustinline{Boolean}}% -\index{start@\robustinline{start}!attribute of \robustinline{Boolean}}% -\index{fixed@\robustinline{fixed}!attribute of \robustinline{Boolean}}% +\end{lstlisting} -\subsection{String Type}\label{string-type} +\subsection{String Type}\doublelabel{string-type} -The following is the predefined \lstinline!String!\indexinline{String} type: +The following is the predefined \lstinline!String! type: \begin{lstlisting}[language=modelica] type String // Note: Defined with Modelica syntax although predefined - StringType $\langle$$\mbox{\emph{value}}$$\rangle$; // Not an attribute; only accessed without dot-notation + StringType value; // Accessed without dot-notation parameter StringType quantity = ""; parameter StringType start = ""; // Initial value parameter BooleanType fixed = true, // default for parameter/constant; = false, // default for other variables end String; -\end{lstlisting}% -\index{quantity@\robustinline{quantity}!attribute of \robustinline{String}}% -\index{start@\robustinline{start}!attribute of \robustinline{String}}% -\index{fixed@\robustinline{fixed}!attribute of \robustinline{String}} +\end{lstlisting} -\subsection{Enumeration Types}\label{enumeration-types} +\subsection{Enumeration Types}\doublelabel{enumeration-types} A declaration of the form \begin{lstlisting}[language=modelica] type E = enumeration([enum-list]); -\end{lstlisting}% -\indexinline{enumeration} +\end{lstlisting} defines an enumeration type \lstinline!E! and the associated enumeration literals of the enum-list. The enumeration literals shall be distinct within the enumeration type. The names of the enumeration literals are defined @@ -1494,9 +1543,12 @@ \subsection{Enumeration Types}\label{enumeration-types} \end{lstlisting} \end{example} -An enumeration type is a simple type and the attributes are defined in \cref{attributes-of-enumeration-types}. -The \lstinline!Boolean! type name or an enumeration type name can be used to specify the dimension range for a dimension in an array declaration and to specify the range in a \lstinline!for!-loop range expression; see \cref{types-as-iteration-ranges}. -An element of an enumeration type can be accessed in an expression. +An enumeration type is a simple type and the attributes are defined in +\autoref{attributes-of-enumeration-types}. The \lstinline!Boolean! type name or an enumeration type name can +be used to specify the dimension range for a dimension in an array +declaration and to specify the range in a for loop range expression; see +\autoref{types-as-iteration-ranges}. An element of an enumeration type can be accessed in +an expression. \begin{nonnormative} Uses of elements of enumeration type in expressions include indexing into an array. @@ -1565,26 +1617,28 @@ \subsection{Enumeration Types}\label{enumeration-types} \end{lstlisting} \end{example} -\subsubsection{Attributes of Enumeration Types}\label{attributes-of-enumeration-types} +\subsubsection{Attributes of Enumeration Types}\doublelabel{attributes-of-enumeration-types} For each enumeration: \begin{lstlisting}[language=modelica] -type E = enumeration(e1, e2, $\ldots$, en); +type E=enumeration(e1, e2, ..., en); \end{lstlisting} + a new simple type is conceptually defined as + \begin{lstlisting}[language=modelica] type E // Note: Defined with Modelica syntax although predefined - EnumType $\langle$$\mbox{\emph{value}}$$\rangle$; // Not an attribute; only accessed without dot-notation + EnumType value; // Accessed without dot-notation parameter StringType quantity = ""; - parameter EnumType min = e1, max = en; + parameter EnumType min=e1, max=en; parameter EnumType start = e1; // Initial value parameter BooleanType fixed = true, // default for parameter/constant; = false; // default for other variables - constant EnumType e1 = $\ldots$; - $\ldots$ - constant EnumType en = $\ldots$; + constant EnumType e1=...; + ... + constant EnumType en=...; equation - assert(min <= $\langle$$\mbox{\emph{value}}$$\rangle$ and $\langle$$\mbox{\emph{value}}$$\rangle$ <= max, "Variable value out of limit"); + assert(value >= min and value <= max, "Variable value out of limit"); end E; \end{lstlisting} @@ -1594,32 +1648,33 @@ \subsubsection{Attributes of Enumeration Types}\label{attributes-of-enumeration- (\lstinline!quantity!, \lstinline!min!, \lstinline!max!, \lstinline!start!, \lstinline!fixed!) as enumeration literals. \end{nonnormative} -\subsubsection{Type Conversion of Enumeration Values to String or Integer}\label{type-conversion-of-enumeration-values-to-string-or-integer} +\subsubsection{Type Conversion of Enumeration Values to String or Integer}\doublelabel{type-conversion-of-enumeration-values-to-string-or-integer} -% TODO: Can't have angle brackets and \emph in the same mathescape due to LaTeXML issue: -% - https://github.com/brucemiller/LaTeXML/issues/1477 -% Once we cut the MathJax dependency, change to single mathescape for better character spacing. -The type conversion function \lstinline!Integer($\langle$$\mbox{\emph{expression of enumeration type}}$$\rangle$)! returns the ordinal number of the enumeration value \lstinline!E.enumvalue!, to which the expression is evaluated, where $\text{\lstinline!Integer(E.e1)!} = 1$, $\text{\lstinline!Integer(E.en)!} = n$, for an enumeration type \lstinline!E = enumeration(e1, $\ldots$, en)!. +The type conversion function \lstinline!Integer()! returns the ordinal number of the +enumeration value \lstinline!E.enumvalue!, to which the expression is evaluated, +where \lstinline!Integer(E.e1) =1, Integer(E.en) = n!, for an enumeration type +\lstinline!E=enumeration(e1, ..., en)!. -\lstinline!String(E.enumvalue)! gives the \lstinline!String! representation of the enumeration value. +\lstinline!String(E.enumvalue)! gives the string representation of the enumeration +value. \begin{example} \lstinline!String(E.Small)! gives \lstinline!"Small"!. \end{example} -See also \cref{numeric-functions-and-conversion-functions}. +See also \autoref{numeric-functions-and-conversion-functions}. -\subsubsection{Type Conversion of Integer to Enumeration Values}\label{type-conversion-of-integer-to-enumeration-values} +\subsubsection{Type Conversion of Integer to Enumeration Values}\doublelabel{type-conversion-of-integer-to-enumeration-values} Whenever an enumeration type is defined, a type conversion function with the same name and in the same scope as the enumeration type is implicitly defined. This function can be used in an expression to -convert an integer value to the corresponding (as described in \cref{type-conversion-of-enumeration-values-to-string-or-integer}) enumeration value. +convert an integer value to the corresponding (as described in \autoref{type-conversion-of-enumeration-values-to-string-or-integer}) enumeration value. -% TODO: Can't have angle brackets and \emph in the same mathescape due to LaTeXML issue: -% - https://github.com/brucemiller/LaTeXML/issues/1477 -% Once we cut the MathJax dependency, change to single mathescape for better character spacing. -For an enumeration type named \lstinline!EnumTypeName!, the expression \lstinline!EnumTypeName($\langle$$\mbox{\emph{Integer expression}}$$\rangle$)! returns the enumeration value \lstinline!EnumTypeName.e! such that \lstinline!Integer(EnumTypeName.e)! is equal to the original integer expression. +For an enumeration type named \lstinline!EnumTypeName!, the expression +\lstinline!EnumTypeName()! returns the +enumeration value \lstinline!EnumTypeName.e! such that \lstinline!Integer(EnumTypeName.e)! is +equal to the original integer expression. Attempting to convert an integer argument that does not correspond to a value of the enumeration type is an error. @@ -1636,29 +1691,53 @@ \subsubsection{Type Conversion of Integer to Enumeration Values}\label{type-conv \end{lstlisting} \end{example} +\subsubsection{Unspecified enumeration}\doublelabel{unspecified-enumeration} + +An enumeration type defined using \lstinline!enumeration(:)! is unspecified and can +be used as a replaceable enumeration type that can be freely redeclared +to any enumeration type. There can be no enumeration variables declared +using \lstinline!enumeration(:)! in a simulation model. -\subsubsection{Unspecified enumeration}\label{unspecified-enumeration} -An enumeration type defined using \lstinline!enumeration(:)!\index{enumeration@\robustinline{enumeration}!unspecified} is unspecified and can be used as a replaceable enumeration type that can be freely redeclared to any enumeration type. -There can be no enumeration variables declared using \lstinline!enumeration(:)! in a simulation model. +\subsection{Attributes start, fixed, nominal, and unbounded}\doublelabel{attributes-start-fixed-nominal-and-unbounded} -\subsection{Attributes start, fixed, nominal, and unbounded}\label{attributes-start-fixed-nominal-and-unbounded} +The attributes \lstinline!start! and \lstinline!fixed! define the initial conditions for a +variable. \lstinline!fixed=false! means an initial guess, i.e., value may be +changed by static analyzer. \lstinline!fixed=true! means a required value. The +resulting consistent set of values for ALL model variables is used as +initial values for the analysis to be performed. -The attributes \lstinline!start! and \lstinline!fixed! define the initial conditions for a variable. \lstinline!fixed = false! means an initial guess, i.e., value may be changed by static analyzer. \lstinline!fixed = true! means a required value. The resulting consistent set of values for \emph{all} model variables is used as initial values for the analysis to be performed. +The attribute \lstinline!nominal! gives the nominal value for the variable. The user +need not set it even though the standard does not define a default +value. The lack of default allows the tool to propagate the nominal +attribute based on equations, and if there is no value to propagate the +tool should use a non-zero value, it may use additional information +(e.g. min-attribute) to find a suitable value, and as last resort use 1. +If \lstinline!unbounded=true! it indicates that the state may grow without +bound, and the error in absolute terms shall be controlled. -The attribute \lstinline!nominal! gives the nominal value for the variable. The user need not set it even though the standard does not define a default value. The lack of default allows the tool to propagate the nominal attribute based on equations, and if there is no value to propagate the tool should use a non-zero value, it may use additional information (e.g.\ \lstinline!min! attribute) to find a suitable value, and as last resort use 1. If \lstinline!unbounded = true! it indicates that the state may grow without bound, and the error in absolute terms shall be controlled. +\begin{nonnormative} +The nominal value can be used by an analysis tool to determine appropriate tolerances or epsilons, or may be used for scaling. For example, +the tolerance for an integrator could be computed as \lstinline!tol*(abs(nominal)+(if x.unbounded then 0 else abs(x)))!. A default value +is not provided in order that in cases such as \lstinline!a=b!, where \lstinline!b! has a nominal value but not \lstinline!a!, the nominal +value can be propagated to the other variable). +\end{nonnormative} \begin{nonnormative} -The nominal value can be used by an analysis tool to determine appropriate tolerances or epsilons, or may be used for scaling. For example, the tolerance for an integrator could be computed as \lstinline!tol * (abs(nominal) + (if x.unbounded then 0 else abs(x)))!. A default value is not provided in order that in cases such as \lstinline!a = b!, where \lstinline!b! has a nominal value but not \lstinline!a!, the nominal value can be propagated to the other variable). +For external functions in C89, \lstinline!RealType! by default maps to \lstinline!double! and \lstinline!IntegerType! by default maps to +\lstinline!int!. In the mapping proposed in Annex~F of the C99 standard, \lstinline!RealType/double! matches the IEC 60559:1989 (ANSI/IEEE 754-1985) +\lstinline!double! format. Typically \lstinline!IntegerType! represents a 32-bit 2-complement signed integer. \end{nonnormative} -\subsection{Other Predefined Types}\label{other-predefined-types} +\subsection{Other Predefined Types}\doublelabel{other-predefined-types} -\subsubsection{StateSelect}\label{stateselect} +\subsubsection{StateSelect}\doublelabel{stateselect} -The predefined \lstinline!StateSelect!\indexinline{StateSelect} enumeration type is the type of the \lstinline!stateSelect! attribute of the \lstinline!Real! type. It is used to explicitly control state selection. +The predefined \lstinline!StateSelect! enumeration type is the type of the +\lstinline!stateSelect! attribute of the \lstinline!Real! type. It is used to explicitly control +state selection. \begin{lstlisting}[language=modelica] type StateSelect = enumeration( @@ -1675,26 +1754,31 @@ \subsubsection{StateSelect}\label{stateselect} ); \end{lstlisting} -\subsubsection{ExternalObject}\label{externalobject} +\subsubsection{ExternalObject}\doublelabel{externalobject} -See \cref{external-objects} for information about the predefined type \lstinline!ExternalObject!. +See \autoref{external-objects} for information about the predefined type +\lstinline!ExternalObject!. -\subsubsection{AssertionLevel}\label{assertionlevel} +\subsubsection{AssertionLevel}\doublelabel{assertionlevel} -The predefined \lstinline!AssertionLevel!\indexinline{AssertionLevel} enumeration type is used together with \lstinline!assert!, \cref{assert}. +The predefined \lstinline!AssertionLevel! enumeration type is used together with +\lstinline!assert!, \autoref{assert}. \begin{lstlisting}[language=modelica] -type AssertionLevel = enumeration(warning, error); +type AssertionLevel=enumeration(warning, error); \end{lstlisting} -\subsubsection{Connections}\label{connections} +\subsubsection{Connections}\doublelabel{connections} -The package \lstinline!Connections!\indexinline{Connections} is used for over-constrained connection graphs, \cref{equation-operators-for-overconstrained-connection-based-equation-systems}. +The package Connections is used for over-constrained connection graphs, +\autoref{equation-operators-for-overconstrained-connection-based-equation-systems}. -\subsubsection{Graphical Annotation Types}\label{graphical-annotation-types} +\subsubsection{Graphical Annotation Types}\doublelabel{graphical-annotation-types} -A number of ``predefined'' record types and enumeration types for graphical annotations are described in \cref{annotations}. -These types are not predefined in the usual sense since they cannot be referenced in ordinary Modelica code, only within annotations. +A number of ``predefined'' record types and enumeration types for +graphical annotations are described in \autoref{annotations}. These types are not +predefined in the usual sense since they cannot be referenced in +ordinary Modelica code, only within annotations. -\subsubsection{Clock Types}\label{clock-types} +\subsubsection{Clock Types}\doublelabel{clock-types} -See \cref{clocks-and-clocked-variables} and \cref{clock-constructors}. +See \autoref{clocks-and-clocked-variables} and \autoref{clock-constructors}. diff --git a/chapters/connectors.tex b/chapters/connectors.tex index 4b83b31fa..8e724a2de 100644 --- a/chapters/connectors.tex +++ b/chapters/connectors.tex @@ -1,26 +1,25 @@ -\chapter{Connectors and Connections}\label{connectors-and-connections} +\chapter{Connectors and Connections}\doublelabel{connectors-and-connections} -This chapter covers connectors, \lstinline!connect!-equations, and connections. +This chapter covers connectors, connect-equations, and connections. -Connectors and \lstinline!connect!-equations are designed so that different components can be connected graphically with well-defined semantics. -However, the graphical part is optional and found in \cref{annotations}. +The special functions \lstinline!cardinality!, \lstinline!rooted! (deprecated), +\lstinline!Connections.isRoot!, and \lstinline!Connections.rooted! may not be used to control them. -\section{Connect-Equations and Connectors}\label{connect-equations-and-connectors} +\section{Connect-Equations and Connectors}\doublelabel{connect-equations-and-connectors} -Connections between objects are introduced by \lstinline!connect!-equations in the equation part of a class. -A \lstinline!connect!-equation\index{connect@\robustinline{connect}!equation} has the following syntax: -\begin{lstlisting}[language=grammar] -connect(component-reference, component-reference); -\end{lstlisting} +Connections between objects are introduced by connect-equations in the +equation part of a class. A connect-equation has the following syntax: + +\textbf{connect} "(" component-reference "," component-reference ")" ";" \begin{nonnormative} -A \emph{connector} is an instance of a \lstinline!connector!\indexinline{connector} class. +A \emph{connector} is an instance of a connector class. \end{nonnormative} -The \lstinline!connect!-equation construct takes two references to connectors, each of which is either of the following forms: +The connect-equation construct takes two references to connectors, each of which is either of the following forms: \begin{itemize} \item - $c_1.c_2\ldots{}c_n$, + $c_1.c_2...c_n$, where $c_1$ is a connector of the class, $n$\textgreatereq 1 and $c_{i+1}$ is a connector element of $c_i$ for \lstinline!i=1:(n-1)!. @@ -41,15 +40,15 @@ \section{Connect-Equations and Connectors}\label{connect-equations-and-connector connector InPort = input Real; connector OutPort = output Real; block MatrixGain - input InPort u[size(A, 2)]; - output OutPort y[size(A, 1)]; - parameter Real A[:, :] = [1]; + input InPort u[size(A,2)]; + output OutPort y[size(A,1)]; + parameter Real A[:,:] = [1]; equation - y = A * u; + y=A*u; end MatrixGain; Modelica.Blocks.Sources.Sine sinSource[5]; - MatrixGain gain (A = 5 * identity(5)); - MatrixGain gain2(A = ones(2, 5)); + MatrixGain gain (A = 5*identity(5)); + MatrixGain gain2(A = ones(2,5)); OutPort x[2]; equation connect(sinSource.y, gain.u); // Legal @@ -63,86 +62,112 @@ \section{Connect-Equations and Connectors}\label{connect-equations-and-connector \item Elaborate expandable connectors. \item - Build connection sets from \lstinline!connect!-equations. + Build connection sets from connect-equations. \item Generate equations for the complete model. \end{itemize} -\subsection{Connection Sets}\label{connection-sets} +\subsection{Connection Sets}\doublelabel{connection-sets} -A connection set is a set of variables connected by means of \lstinline!connect!-equations. -A connection set shall contain either only flow variables or only non-flow variables. +A connection set is a set of variables connected by means of +connect-equations. A connection set shall contain either only flow +variables or only non-flow variables. -\subsection{Inside and Outside Connectors}\label{inside-and-outside-connectors} +\subsection{Inside and Outside Connectors}\doublelabel{inside-and-outside-connectors} -In an element instance \lstinline!M!, each connector element of \lstinline!M! is called an \firstuse{outside connector}\index{outside connector} with respect to \lstinline!M!. -Any other connector elements that is hierarchically inside \lstinline!M!, but not in one of the outside connectors of \lstinline!M!, is called an \firstuse{inside connector}\index{inside connector} with respect to \lstinline!M!. -This is done before resolving \lstinline!outer! elements to corresponding \lstinline!inner! ones. +In an element instance M, each connector element of M is called an +outside connector with respect to M. All other connector elements that +are hierarchically inside M, but not in one of the outside connectors of +M, is called an inside connector with respect to M. This is done before +resolving \lstinline!outer! elements to corresponding \lstinline!inner! ones. \begin{example} \begin{figure}[H] - \begin{center} - \includegraphics{innerouterconnector} - \end{center} - \caption{Example for inside and outside connectors.} +\includegraphics[scale=0.95]{innerouterconnector} +\caption{Example for inside and outside connectors} \end{figure} -The figure visualizes the following \lstinline!connect!-equations to the connector \lstinline!c! in the models \lstinline!m!$i$. -Consider the following \lstinline!connect!-equations found in the model for component \lstinline!m0!: +The figure visualizes the following \lstinline!connect! equations to +the connector \lstinline!c! in the models \lstinline!m!$i$. Consider the +following \lstinline!connect! equations found in the model for component \lstinline!m0!: \begin{lstlisting}[language=modelica] -connect(m1.c, m3.c); // m1.c and m3.c are inside connectors -connect(m2.c, m3.c); // m2.c and m3.c are inside connectors + connect(m1.c, m3.c); // m1.c and m3.c are inside connectors + connect(m2.c, m3.c); // m2.c and m3.c are inside connectors \end{lstlisting} -and in the model for component \lstinline!m3! (\lstinline!c.x! is a sub-connector inside \lstinline!c!): +and in the model for component \lstinline!m3! (\lstinline!c.x! is a sub-connector inside +\lstinline!c!): \begin{lstlisting}[language=modelica] -connect(c, m4.c); // c is an outside connector, m4.c is an inside connector -connect(c.x, m5.c); // c.x is an outside connector, m5.c is an inside connector -connect(c, d); // c is an outside connector, d is an outside connector + connect(c, m4.c); // c is an outside + connector, m4.c is an inside connector + connect(c.x, m5.c); // c.x is an outside + connector, m5.c is an inside connector + connect(c , d) ; // c is an outside connector, d is an outside connector \end{lstlisting} and in the model for component \lstinline!m6!: \begin{lstlisting}[language=modelica] -connect(d, m7.c); // d is an outside connector, m7.c is an inside connector + connect(d, m7.c); // d is an outside connector, m7.c is an inside connector \end{lstlisting} \end{example} -\subsection{Expandable Connectors}\label{expandable-connectors} +\subsection{Expandable Connectors}\doublelabel{expandable-connectors} -If the \lstinline!expandable!\indexinline{expandable} qualifier is present on a connector definition, all instances of that connector are referred to as \firstuse{expandable connectors}\index{expandable connector}. -Instances of connectors that do not possess this qualifier will be referred to as \firstuse{non-expandable connectors}\index{non-expandable connector}. +If the \lstinline!expandable! qualifier is present on a connector definition, all +instances of that connector are referred to as expandable connectors. +Instances of connectors that do not possess this qualifier will be +referred to as non-expandable connectors. -Before generating \willintroduce{connection equations}, non-parameter scalar variables and non-parameter array elements declared in expandable connectors are marked as only being -potentially present. -A non-parameter array element may be declared with array dimensions \lstinline!:! indicating that the size is unknown (note that the size of such a dimension cannot be determined using \lstinline!size!, see \cref{array-dimension-and-size-functions}). -This applies to both variables of simple types, and variables of structured types. +Before generating connection equations non-parameter scalar variables +and non-parameter array elements declared in expandable connectors are +marked as only being potentially present. A non-parameter array element +may be declared with array dimensions \lstinline!:! indicating that the size is +unknown. This applies to both variables of simple types, and variables +of structured types. Then connections containing expandable connectors are elaborated: \begin{itemize} \item - One connector in the \lstinline!connect!-equation must reference a declared component, and if the other connector is an undeclared element in a declared expandable connector it is handled as follows (elements that are only potentially present are not seen as declared): - \begin{itemize} - \item - The expandable connector instance is automatically augmented with a - new component having the used name and corresponding type. - \item - If the undeclared component is subscripted, an array variable is created, and a connection to the specific array element is performed. Introducing elements in an array gives an array with at least the specified elements, other elements are either not created or have a default value (i.e.\ as if they were only potentially present, and the same note regarding the use of \lstinline!size! also applies here). - \item - If the variable on the other side of the \lstinline!connect!-equation is \lstinline!input! or \lstinline!output! the new component will be either \lstinline!input! or \lstinline!output! to satisfy the restrictions in \cref{restrictions-of-connections-and-connectors} for a non-expandable connector. - \begin{nonnormative} - If the existing side refers to an inside connector (i.e.\ a connector of a component) the new variable will copy its causality, i.e.\ \lstinline!input! if \lstinline!input! and \lstinline!output! if \lstinline!output!, since the expandable connector must be an outside connector. - \end{nonnormative} - For an array the \lstinline!input!/\lstinline!output! property can be deduced separately for each array element. - \end{itemize} - + One connector in the connect equation must reference a declared + component, and if the other connector is an undeclared element in a + declared expandable connector it is handled as follows (elements that + are only potentially present are not seen as declared): +\begin{itemize} \item - When two expandable connectors are connected, each is augmented with the variables that are only declared in the other expandable connector (the new variables are neither \lstinline!input! nor \lstinline!output!). This is repeated until all connected expandable connector instances have matching variables. + The expandable connector instance is automatically augmented with a + new component having the used name and corresponding type. +\item + If the undeclared component is subscripted, an array variable is + created, and a connection to the specific array element is performed. + Introducing elements in an array gives an array with at least the + specified elements, other elements are either not created or have a + default value (i.e. as if they were only potentially present). +\item + If the variable on the other side of the connect-equation is input or + output the new component will be either input or output to satisfy the + restrictions in \autoref{restrictions-of-connections-and-connectors} for a non-expandable connector. \begin{nonnormative} - I.e.\ each of the connector instances is expanded to be the union of all connector variables. + If the existing side refers to an inside connector (i.e. a connector of a component) the new variable will copy its causality, i.e. input + if input and output if output, since the expandable connector must be an outside connector. \end{nonnormative} - + For an array the input/output property can be deduced separately for each array element. +\end{itemize} \item - The variables introduced in the elaboration follow additional rules for generating connection sets (given in \cref{generation-of-connection-equations}). - + When two expandable connectors are connected, each is augmented with + the variables that are only declared in the other expandable connector + (the new variables are neither input nor output). This is repeated + until all connected expandable connector instances have matching + variables. + \begin{nonnormative} + I.e. each of the connector instances is expanded to be the union of all connector variables. + \end{nonnormative} +\item + The variables introduced in the elaboration follow additional rules + for generating connection sets (given in \autoref{generation-of-connection-equations}). \item - If a variable appears as an \lstinline!input! in one expandable connector, it should appear as a non-\lstinline!input! in at least one other expandable connector instance in the same augmentation set. An augmentation set is defined as the set of connected expandable connector instances that through the elaboration will have matching variables. + If a variable appears as an input in one expandable connector, it + should appear as a non-input in at least one other expandable + connector instance in the same augmentation set. An augmentation set + is defined as the set of connected expandable connector instances that + through the elaboration will have matching variables. + \begin{example} \begin{lstlisting}[language=modelica] expandable connector EngineBus @@ -160,7 +185,7 @@ \subsection{Expandable Connectors}\label{expandable-connectors} Sensor sensor; Actuator actuator; equation - connect(bus.speed, sensor.speed); // sensor.speed is the non-input + connect(bus.speed, sensor.speed); // provides the non-input from sensor.speed connect(bus.speed, actuator.speed); end Engine; \end{lstlisting} @@ -170,8 +195,9 @@ \subsection{Expandable Connectors}\label{expandable-connectors} All components in an expandable connector are seen as connector instances even if they are not declared as such. \begin{nonnormative} - I.e.\ it is possible to connect to e.g.\ a \lstinline!Real! variable. + I.e. it is possible to connect to e.g. a \lstinline!Real! variable. \end{nonnormative} + \begin{example} \begin{lstlisting}[language=modelica] expandable connector EngineBus // has predefined signals @@ -196,13 +222,16 @@ \subsection{Expandable Connectors}\label{expandable-connectors} \end{example} \item - An expandable connector shall not contain a component declared with the prefix \lstinline!flow!\index{flow@\robustinline{flow}!in expandable connector}, but may contain non-expandable connector components with \lstinline!flow! components. + An expandable connector may not contain a component declared with the + prefix \lstinline!flow!, but may contain non-expandable connector components with + \lstinline!flow! components. + \begin{example} \begin{lstlisting}[language=modelica] import Interfaces=Modelica.Electrical.Analog.Interfaces; expandable connector ElectricalBus Interfaces.PositivePin p12, n12; // OK - flow Modelica.Units.SI.Current i; // Error + flow Modelica.Units.SI.Current i; // not allowed end ElectricalBus; model Battery @@ -216,11 +245,16 @@ \subsection{Expandable Connectors}\label{expandable-connectors} \end{example} \item - expandable connectors can only be connected to other expandable connectors. + expandable connectors can only be connected to other expandable + connectors. \end{itemize} - -If a \lstinline!connect!-equation references a potentially present variable, or variable element, in an expandable connector the variable or variable element is marked as being present, and due to the paragraphs above it is possible to deduce whether the bus variable shall be treated as input, or shall be treated as output in the \lstinline!connect!-equation. -That \lstinline!input! or \lstinline!output! prefix is added if no \lstinline!input!/\lstinline!output! prefix is present on the declaration. + If a connect equation references a potentially present variable, or + variable element, in an expandable connector the variable or variable + element is marked as being present, and due to the paragraphs above it + is possible to deduce whether the bus variable shall be treated as + input, or shall be treated as output in the connect equation. That + input or output prefix is added if no input/output prefix is present + on the declaration \begin{example} \begin{lstlisting}[language=modelica] @@ -232,39 +266,15 @@ \subsection{Expandable Connectors}\label{expandable-connectors} EmptyBus bus2; RealInput speed; equation - connect(speed, bus1.speed); // OK; only one undeclared and not subscripted. - connect(bus1.pressure, bus2.pressure); // Error; both undeclared. - connect(speed, bus2.speed[2]); // Introduces speed array (with element [2]). -end Controller; -\end{lstlisting} -\end{example} + connect(speed, bus1.speed); // ok, only one undeclared + // and it is unsubscripted -An expandable connector array component for which \lstinline!size! is not defined (see \cref{array-dimension-and-size-functions}) is referred to as a \firstuse{sizeless array component}\index{sizeless array component}. -Such a component shall not be used without subscripts, and the subscripts must slice the array so that the sizeless dimensions are removed. + connect(bus1.pressure, bus2.pressure); + // not allowed, both undeclared -\begin{example} -Valid and invalid uses of sizeless array components: -\begin{lstlisting}[language=modelica] -expandable connector EngineBus -end EngineBus; - -block Sensor - RealOutput speed; -end Sensor; - -model Engine - parameter Integer n = 1; - EngineBus bus; - Sensor sensor; - RealOutput sensorSpeeds[:]; -equation - /* Comments below refer to the use of sizeless array bus.speed. */ - connect(bus.speed[n], sensor.speed) ; // OK; subscript to scalar component. - connect(bus.speed, sensorSpeeds); // Error; missing subscripts. -public - Real s[:] = bus.speed; // Error; missing subscripts. - Real s[2] = bus.speed[{1, 3}]; // OK; subscript selects fixed size sub-array. -end Engine; + connect(speed, bus2.speed[2]); + // introduces speed array (with element [2]). +end Controller; \end{lstlisting} \end{example} @@ -278,7 +288,7 @@ \subsection{Expandable Connectors}\label{expandable-connectors} they do not contain the same components. \begin{nonnormative} -A tool may remove undefined variables in an expandable connector, or set them to the default value, e.g.\ zero for \lstinline!Real! variables. +A tool may remove undefined variables in an expandable connector, or set them to the default value, e.g. zero for \lstinline!Real! variables. \end{nonnormative} \begin{nonnormative} @@ -300,18 +310,15 @@ \subsection{Expandable Connectors}\label{expandable-connectors} \lstinline!inner! scope qualifier, all outer instances must also be taken into account during elaboration. \end{enumerate} -\end{nonnormative} - -\begin{example} -Engine system with sensors, controllers, actuator and plant that -exchange information via a bus (i.e.\ via expandable connectors): +\textbf{Example.} Engine system with sensors, controllers, actuator and plant that +exchange information via a bus (i.e. via expandable connectors): \begin{lstlisting}[language=modelica] import Modelica.Units.SI; import Modelica.Blocks.Interfaces.RealInput; // Plant Side model SparkPlug RealInput spark_advance; - $\ldots$ + ... end SparkPlug; expandable connector EngineBus @@ -325,7 +332,7 @@ \subsection{Expandable Connectors}\label{expandable-connectors} model Cylinder CylinderBus cylinder_bus; SparkPlug spark_plug; - $\ldots$ + ... equation connect(spark_plug.spark_advance, cylinder_bus.spark_advance); @@ -354,42 +361,61 @@ \subsection{Expandable Connectors}\label{expandable-connectors} The \lstinline!engine_bus! contains the following variable declarations: \begin{lstlisting}[language=modelica] -RealOutput engine_speed; -RealOutput engine_temp; -CylinderBus cylinder_bus[1]; -CylinderBus cylinder_bus[2]; -CylinderBus cylinder_bus[3]; -CylinderBus cylinder_bus[4]; + RealOutput engine_speed; + RealOutput engine_temp; + CylinderBus cylinder_bus[1]; + CylinderBus cylinder_bus[2]; + CylinderBus cylinder_bus[3]; + CylinderBus cylinder_bus[4]; \end{lstlisting} -\end{example} +\end{nonnormative} -\section{Generation of Connection Equations}\label{generation-of-connection-equations} +\section{Generation of Connection Equations}\doublelabel{generation-of-connection-equations} -When generating \firstuse{connection equations}\index{connection equations}, \lstinline!outer! elements are resolved to the corresponding \lstinline!inner! elements in the instance hierarchy (see instance hierarchy name lookup \cref{instance-hierarchy-name-lookup-of-inner-declarations}). -The arguments to each \lstinline!connect!-equation are resolved to two connector elements. +When generating connection equations, \lstinline!outer! elements are resolved to the +corresponding \lstinline!inner! elements in the instance hierarchy (see instance +hierarchy name lookup \autoref{instance-hierarchy-name-lookup-of-inner-declarations}). The arguments to each \lstinline!connect!-equation are +resolved to two connector elements. For every use of the \lstinline!connect!-equation \begin{lstlisting}[language=modelica] connect(a, b); \end{lstlisting} -the primitive components of \lstinline!a! and \lstinline!b! form a connection set, together with an indication of whether they are from an inside or an outside connector. The primitive elements are -of simple types or of types defined as \lstinline!operator record! (i.e.\ a component of an \lstinline!operator record! type is not split into sub-components). The elements of the connection sets -are tuples of primitive variables together with an indication of inside or outside; if the same tuple belongs to two connection sets those two sets are merged, until every tuple is only present in -one set. Composite connector types are broken down into primitive components. The \lstinline!outer! components are handled by mapping the objects to the corresponding \lstinline!inner! components, -and the inside indication is not influenced. The outer connectors are handled by mapping the objects to the corresponding inner connectors, and they are always treated as outside connectors. + +the primitive components of \lstinline!a! and \lstinline!b! form a connection set -- together +with an indication of whether they are from an inside or an outside +connector; the primitive elements are of simple types -- or of types +defined as \lstinline!operator record! (i.e. a component of an \lstinline!operator record! type +is not split into sub-components). The elements of the connection sets +are tuples of primitive variables together with an indication of inside +or outside; if the same tuple belongs to two connection sets those two +sets are merged, until every tuple is only present in one set. Composite +connector types are broken down into primitive components. The \lstinline!outer! +components are handled by mapping the objects to the corresponding \lstinline!inner! +components -- and the inside indication is not influenced. The outer +connectors are handled by mapping the objects to the corresponding inner +connectors -- and they are always treated as outside connectors. \begin{nonnormative} -Rationale: The inside/outside as part of the connection sets ensure that connections from different hierarchical levels are treated separately. -Connection sets are formed from the primitive elements and not from the connectors; this handles connections to parts of hierarchical connectors and also makes it easier to generate equations directly from the connection sets. -All variables in one connection set will either be flow variables or non-flow variables due to restriction on \lstinline!connect!-equations. -The mapping from an \lstinline!outer! to an \lstinline!inner! element must occur before merging the sets in order to get one zero-sum equation, and ensures that the equations for the \lstinline!outer! elements are all given for one side of the connector, and the \lstinline!inner! element can define the other side. +Rationale: The inside/outside as part of the connection sets +ensure that connections from different hierarchical levels are treated +separately. Connection sets are formed from the primitive elements and +not from the connectors; this handles connections to parts of +hierarchical connectors and also makes it easier to generate equations +directly from the connection sets. All variables in one connection set +will either be flow variables or non-flow variables due to restriction +on connect-equations. The mapping from an \lstinline!outer! to an \lstinline!inner! +element must occur before merging the sets in order to get one +zero-sum equation, and ensures that the equations for the \lstinline!outer! +elements are all given for one side of the connector, and the +\lstinline!inner! element can define the other side. \end{nonnormative} The following connection sets with just one member are also present (and merged): \begin{itemize} \item - Each primitive flow variable as inside connector. + Each primitive flow-variable as inside connector. \item Each flow variable \emph{added} during augmentation of expandable connectors, both as inside and as outside. @@ -409,19 +435,25 @@ \section{Generation of Connection Equations}\label{generation-of-connection-equa (zero-sum) variables of the form \begin{itemize} \item -$a_{1} = a_{2} = \ldots = a_{n}$ (neither flow nor stream variables) +\lstinline!a1 = a2 = ... = an; // neither flow nor stream variables! \item -$z_{1} + z_{2} + (-z_{3}) + \ldots + z_{n} = \mathbf{0}$ (flow variables) +\lstinline!z1 + z2 + (-z3) + ... + zn =! \small{\textbf{0}} \lstinline!; // flow-variables! \end{itemize} -The bold-face $\mathbf{0}$ represents an array or scalar zero of -appropriate dimensions (i.e.\ the same size as $z$). +The bold-face \textbf{0} represents an array or scalar zero of +appropriate dimensions (i.e. the same size as z). -For an \lstinline!operator record! type this uses the operator \lstinline!'0'! -- which must be defined in the operator record -- and all of the flow variables for the \lstinline!operator record! -must be of the same \lstinline!operator record! type. This implies that in order to have flow variables of an \lstinline!operator record! type the \lstinline!operator record! must define addition, -negation, and \lstinline!'0'!; and these operations should define an additive group. +For an \lstinline!operator record! type this uses the operator \lstinline!'0'! -- which must be +defined in the operator record; and all of the flow-variables for the +\lstinline!operator record! must be of the same \lstinline!operator record! type. This implies +that in order to have flow variables of an \lstinline!operator record! type the +\lstinline!operator record! must define addition, negation, and \lstinline!'0'!; and these +operations should define an additive group. -In order to generate equations for flow variables (using the \lstinline!flow!\indexinline{flow} prefix), the sign used for the connector variable $z_{i}$ above is +1 for inside connectors and -1 for outside connectors ($z_{3}$ in the example above). +In order to generate equations for flow variables (using the +\lstinline!flow! prefix), the sign used for the connector variable +\texttt{z\textsubscript{i}} above is +1 for inside connectors and -1 for outside +connectors (\texttt{z\textsubscript{3}} in the example above). \begin{example} Simple example: @@ -543,27 +575,38 @@ \section{Generation of Connection Equations}\label{generation-of-connection-equa This corresponds to a direct connection of the resistor. \end{example} -\section{Restrictions of Connections and Connectors}\label{restrictions-of-connections-and-connectors} +\section{Restrictions of Connections and Connectors}\doublelabel{restrictions-of-connections-and-connectors} \begin{itemize} \item - The \lstinline!connect!-equations (and the special functions for overdetermined connectors) can only be used in equations, and shall not be used inside \lstinline!if!-equations with conditions that are not parameter expressions, or in \lstinline!when!-equations. + The connect-equations (and the special functions for overdetermined + connectors) may only be used in equations and may not be used inside + if-equations with non-parametric condition, or in when-equations. \begin{nonnormative} - The \lstinline!for!-equations always have parameter expressions for the array expression. + For-equations always have parameter expressions for the array expression. \end{nonnormative} \item - A connector component shall not be declared with the prefix \lstinline!parameter! or \lstinline!constant!. - In the \lstinline!connect!-equation the primitive components may only connect parameter variables to parameter variables and constant variables to constant variables. + A connector component may not be declared with the prefix parameter or + constant. In the connect-equation the primitive components may only + connect parameter variables to parameter variables and constant + variables to constant variables. \item - The \lstinline!connect!-equation construct only accepts forms of connector references as specified in \cref{connect-equations-and-connectors}. + The connect-equation construct only accepts forms of connector + references as specified in \autoref{connect-equations-and-connectors}. \item - In a \lstinline!connect!-equation the two connectors must have the same named component elements with the same dimensions; recursively down to the primitive components. - The primitive components with the same name are matched and belong to the same connection set. + In a connect-equation the two connectors must have the same named + component elements with the same dimensions; recursively down to the + primitive components. The primitive components with the same name are + matched and belong to the same connection set. \item - The matched primitive components of the two connectors must have the same primitive types, and flow variables may only connect to other flow variables, stream variables only to other stream variables, and causal variables (\lstinline!input!/\lstinline!output!) only to causal variables (\lstinline!input!/\lstinline!output!). + The matched primitive components of the two connectors must have the + same primitive types, and flow-variables may only connect to other + flow-variables, stream-variables only to other stream-variables, and + causal variables (\lstinline!input!/\lstinline!output!) only to causal variables + (\lstinline!input!/\lstinline!output!). \item A connection set of causal variables (\lstinline!input!/\lstinline!output!) may at most - contain variables from one inside \lstinline!output! connector (for state-machines extended as specified in \cref{merging-connections-to-multiple-outputs}) or one public + contain variables from one inside \lstinline!output! connector or one public outside \lstinline!input! connector. \begin{nonnormative} I.e., a connection set may at most contain one source of a signal. @@ -584,13 +627,13 @@ \section{Restrictions of Connections and Connectors}\label{restrictions-of-conne connector that is not part of an expandable connector. \label{enum:exc-conn-case} \end{enumerate} \begin{nonnormative} -I.e., a connection set must -- unless the model or block is partial -- contain one source of a signal (\cref{enum:exc-conn-case} +I.e., a connection set must -- unless the model or block is partial -- contain one source of a signal (the last item (\autoref{enum:exc-conn-case}) covers the case where a connector of a component is left unconnected and the source given textually). \end{nonnormative} \item Variables from a protected outside connector must be part of a connection set containing at least one inside connector or one - declared public outside connector (i.e.\ it shall not be an implicitly + declared public outside connector (i.e. it may not be an implicitly defined part of an expandable connector). \begin{nonnormative} Otherwise it would not be possible to deduce the causality for the expandable connector element. @@ -599,22 +642,24 @@ \section{Restrictions of Connections and Connectors}\label{restrictions-of-conne In a connection set all variables having non-empty quantity attribute must have the same quantity attribute. \item - A \lstinline!connect!-equation shall not (directly or indirectly) connect two + A \lstinline!connect! equation may not (directly or indirectly) connect two connectors of \lstinline!outer! elements. \begin{nonnormative} - Indirectly is similar to them being part of the same connection set. However, connections to \lstinline!outer! elements are ``moved up'' before forming + Indirectly is similar to them being part of the same connection set -- however, connections to \lstinline!outer! elements are ``moved up'' before forming connection sets. Otherwise the connection sets could contain redundant information breaking the equation count for locally balanced models and blocks. \end{nonnormative} \item Subscripts in a connector reference shall be parameter expressions or the special operator \lstinline!:!. \item - Constants or parameters in connected components yield the appropriate \lstinline!assert!-statements to check that they have the same value; connections are not generated. + Constants or parameters in connected components yield the appropriate + assert statements to check that they have the same value; connections + are not generated. \item - For conditional connectors, see \cref{conditional-component-declaration}. + For conditional connectors, see \autoref{conditional-component-declaration}. \end{itemize} -\subsection{Balancing Restriction and Size of Connectors}\label{balancing-restriction-and-size-of-connectors} +\subsection{Balancing Restriction and Size of Connectors}\doublelabel{balancing-restriction-and-size-of-connectors} For each non-partial non-expandable connector class the number of flow variables shall be equal to the number of variables that are neither \lstinline!parameter!, @@ -622,7 +667,7 @@ \subsection{Balancing Restriction and Size of Connectors}\label{balancing-restri nor \lstinline!flow!. The \emph{number of variables} is the number of all elements in the connector class after expanding all records and arrays to a set of scalars of primitive types. The number of -variables of an overdetermined type or record class (see \cref{overconstrained-equation-operators-for-connection-graphs}) +variables of an overdetermined type or record class (see \autoref{overconstrained-equation-operators-for-connection-graphs}) is the size of the output argument of the corresponding \lstinline!equalityConstraint!() function. \begin{nonnormative} @@ -658,7 +703,14 @@ \subsection{Balancing Restriction and Size of Connectors}\label{balancing-restri end Frame_Illegal; \end{lstlisting} -The \lstinline!Frame_Illegal! connector (intended to be used in a simple multi-body package without over-determined connectors) is illegal since the number of flow and non-flow variables do not match. The solution is to create two connector classes, where two 3-vectors (e.g., \lstinline!a! and \lstinline!z!) are acausal \lstinline!Real! and the other variables are matching pairs of \lstinline!input! and \lstinline!output!. This ensures that the models can only be connected in a tree-structure or require a ``loop-breaker'' joint for every closed kinematic loop: +The \lstinline!Frame_Illegal! connector (intended to be used in a +simple MultiBody-package without over-determined connectors) is illegal +since the number of flow and non-flow variables do not match. The +solution is to create two connector classes, where two 3-vectors (e.g., +a and z) are acausal Real and the other variables are matching pairs of +\lstinline!input! and \lstinline!output!. This ensures that the models can only be +connected in a tree-structure or require a ``loop-breaker'' joint for +every closed kinematic loop: \begin{lstlisting}[language=modelica] connector Frame_a "correct connector" input Modelica.Units.SI.Position r0[3]; @@ -714,7 +766,7 @@ \subsection{Balancing Restriction and Size of Connectors}\label{balancing-restri \end{lstlisting} \end{example} -\section{Equation Operators for Overconstrained Connection-Based Equation Systems}\label{equation-operators-for-overconstrained-connection-based-equation-systems1} +\section{Equation Operators for Overconstrained Connection-Based Equation Systems}\doublelabel{equation-operators-for-overconstrained-connection-based-equation-systems1} There is a special problem regarding equation systems resulting from \emph{loops} in connection graphs where the connectors contain @@ -761,154 +813,144 @@ \section{Equation Operators for Overconstrained Connection-Based Equation System flow variables, that are not handled by the method described below. \end{nonnormative} -\subsection{Overconstrained Equation Operators for Connection Graphs}\label{overconstrained-equation-operators-for-connection-graphs} +\subsection{Overconstrained Equation Operators for Connection Graphs}\doublelabel{overconstrained-equation-operators-for-connection-graphs} -A type or record declaration may have an optional definition of function \lstinline!equalityConstraint!\indexinline{equalityConstraint} that shall have the following prototype: -% TODO: Can't have angle brackets and \emph in the same mathescape due to LaTeXML issue: -% - https://github.com/brucemiller/LaTeXML/issues/1477 -% Once we cut the MathJax dependency, change to single mathescape for better character spacing. +A type or record declaration may have an optional definition of function +\lstinline!equalityConstraint(..)! that shall have the following prototype: \begin{lstlisting}[language=modelica] type Type // overdetermined type - extends $\langle$$\mbox{\emph{base type}}$$\rangle$; + extends ; function equalityConstraint // non-redundant equality input Type T1; input Type T2; - output Real residue[$n$]; + output Real residue[ ]; algorithm - residue := $\ldots$; + residue := ... end equalityConstraint; end Type; record Record - $\langle$$\mbox{\emph{declaration of record fields}}$$\rangle$; + < declaration of record fields> function equalityConstraint // non-redundant equality input Record R1; input Record R2; - output Real residue[$n$]; + output Real residue[ ]; algorithm - residue := $\ldots$; + residue := ... end equalityConstraint; end Record; \end{lstlisting} -The array dimension $n$ of \lstinline!residue! shall be a constant \lstinline!Integer! expression that can be evaluated during translation, with $n \geq 0$. -The \lstinline!equalityConstraint! expresses the equality between the two type instances \lstinline!T1! and \lstinline!T2! or the record instances \lstinline!R1! and \lstinline!R2!, respectively, as the $n$ non-redundant equation residuals returned in \lstinline!residue!. -That is, the set of $n$ non-redundant equations stating that \lstinline!R1 = R2! is given by the equation (\lstinline!0! represents a vector of zeros of appropriate size): +The \lstinline!residue! output of the \lstinline!equalityConstraint(..)! function shall have +known size, say constant n. The function shall express the equality +between the two type instances \lstinline!T1! and \lstinline!T2! or the record instances +\lstinline!R1! and +\lstinline!R2!, respectively, with a non-redundant number $n \ge 0$ of equations. The +residues of these equations are returned in vector \lstinline!residue! of size +$n$. The set of n non-redundant equations stating that \lstinline!R1 = R2! is given by +the equation (\textbf{0} characterizes a vector of zeros of appropriate +size): \begin{lstlisting}[language=modelica] Record R1, R2; equation - 0 = Record.equalityConstraint(R1, R2); + 0 = Record.equalityConstraint(R1,R2); \end{lstlisting} \begin{nonnormative} If the elements of a record \lstinline!Record! are not independent from each other, the equation \lstinline!R1 = R2! contains redundant equations. \end{nonnormative} -A type class with an \lstinline!equalityConstraint! function declaration is called \firstuse{overdetermined type}\index{overdetermined!type}. -A record class with an \lstinline!equalityConstraint! function definition is called \firstuse{overdetermined record}\index{overdetermined!record}. -A connector that contains instances of overdetermined type and/or record classes is called \firstuse{overdetermined connector}\index{overdetermined!connector}. -An overdetermined type or record may neither have flow components nor may be used as a type of flow components. -If an array is used as argument to any of the \lstinline!Connections.*! functions it is treated as one unit -- unlike \lstinline!connect!, there is no special treatment of this case, compare \cref{connect-equations-and-connectors}. - -Every instance of an overdetermined type or record in an overdetermined connector is a node in a virtual connection graph that is used to determine when the standard equation \lstinline!R1 = R2! or when the equation \lstinline!0 = equalityConstraint(R1, R2)! has to be used for the generation of \lstinline!connect!-equations. -The edges of the virtual connection graph are implicitly defined by \lstinline!connect! and explicitly by \lstinline!Connections.branch!, see table below. -\lstinline!Connections! is a built-in package in global scope containing built-in operators. -Additionally, corresponding nodes of the virtual connection graph have to be defined as roots or as potential roots with functions \lstinline!Connections.root! and \lstinline!Connections.potentialRoot!, respectively. - -The overconstrained equation operators for connection graphs are listed below. Here, \lstinline!A! and \lstinline!B! are connector instances that may be hierarchically structured, e.g., \lstinline!A! may be an abbreviation for \lstinline!EnginePort.Frame!. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!connect(A, B)! & Optional spanning-tree edge & \Cref{modelica:optional-spanning-tree-edge}\\ -\lstinline!Connections.branch(A.R, B.R)! & Required spanning-tree edge & \Cref{modelica:Connections.branch}\\ -\lstinline!Connections.root(A.R)! & Definite root node & \Cref{modelica:Connections.root}\\ -\lstinline!Connections.potentialRoot(A.R, $\ldots$)! & Potential root node & \Cref{modelica:Connections.potentialRoot}\\ -\lstinline!Connections.isRoot(A.R)! & Predicate for being selected as root & \Cref{modelica:Connections.isRoot}\\ -\lstinline!Connections.rooted(A.R)! & Predicate for being closer to root & \Cref{modelica:Connections.rooted}\\ -\hline -\end{tabular} -\end{center} - -\begin{operatordefinition*}[connect]\label{modelica:optional-spanning-tree-edge}\index{connect@\robustinline{connect}!overconstrained equation operator} -\begin{synopsis}\begin{lstlisting} -connect(A, B) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Defines \firstuse{optional spanning-tree edge}\index{optional spanning-tree edge} from the overdetermined type or record instances in connector instance \lstinline!A! to the corresponding overdetermined type or record instances in connector instance \lstinline!B! for a virtual connection graph. -The types of the corresponding overdetermined type or record instances shall be the same. -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition}[Connections.branch] -\begin{synopsis}\begin{lstlisting} -Connections.branch(A.R, B.R) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Defines a \firstuse{required spanning-tree edge}\index{required spanning-tree edge} from the overdetermined type or record instance \lstinline!R! in connector instance \lstinline!A! to the corresponding overdetermined type or record instance \lstinline!R! in connector instance \lstinline!B! for a virtual connection graph. -This function can be used at all places where a \lstinline!connect!-equation is allowed. - -\begin{nonnormative} -% TODO: Can't have angle brackets and \emph in the same mathescape due to LaTeXML issue: -% - https://github.com/brucemiller/LaTeXML/issues/1477 -% Once we cut the MathJax dependency, change to single mathescape for better character spacing. -E.g., it is not allowed to use this function in a \lstinline!when!-clause. -This definition shall be used if in a model with connectors \lstinline!A! and \lstinline!B! the overdetermined records \lstinline!A.R! and \lstinline!B.R! are algebraically coupled in the model, e.g., due to \lstinline!B.R = f(A.R, $\langle$$\mbox{\emph{other unknowns}}$$\rangle$)!. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[Connections.root] -\begin{synopsis}\begin{lstlisting} -Connections.root(A.R) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The overdetermined type or record instance \lstinline!R! in connector instance \lstinline!A! is a (definite) \firstuse{root node}\index{definite root node}\index{root node!definite} in a virtual connection graph. - -\begin{nonnormative} +A type class with an \lstinline!equalityConstraint! function declaration is called +overdetermined type. A record class with an \lstinline!equalityConstraint! function +definition is called overdetermined record. A connector that contains +instances of overdetermined type and/or record classes is called +overdetermined connector. An overdetermined type or record may neither +have flow components nor may be used as a type of flow components. If an +array is used as argument to any of the Connections.* functions it is +treated as one unit -- there is no special treatment of this case -- +however, there is for connect -- see \autoref{connect-equations-and-connectors}. + +Every instance of an overdetermined type or record in an overdetermined +connector is a node in a virtual connection graph that is used to +determine when the standard equation \lstinline!R1 = R2! or when the equation +\lstinline!0 = equalityConstraint(R1, R2)! has to be used for the generation of +\lstinline!connect(...)! equations. The edges of the virtual connection graph are +implicitly defined by \lstinline!connect(..)! and explicitly by +\lstinline!Connections.branch(...)! statements, see table below. \lstinline!Connections! is a +built-in package in global scope containing built-in operators. +Additionally, corresponding nodes of the virtual connection graph have +to be defined as roots or as potential roots with functions +\lstinline!Connections.root(...)! and \lstinline!Connections.potentialRoot(...)!, respectively. +In the following table, \lstinline!A! and \lstinline!B! are connector instances that may be +hierarchically structured, e.g., \lstinline!A! may be an abbreviation for +\lstinline!EnginePort.Frame!. + +\begin{longtable}[]{|p{5.1cm}|p{10cm}|} +\hline \endhead +\lstinline!connect(A,B);! & +Defines \firstuse{optional spanning-tree edge} from the +overdetermined type or record instances in connector instance \lstinline!A! to the +corresponding overdetermined type or record instances in connector +instance \lstinline!B! for a virtual connection graph. The types of the +corresponding overdetermined type or record instances shall be the +same.\\ \hline +\lstinline!Connections.branch(A.R,B.R);! & +Defines a \firstuse{required spanning-tree edge} +from the overdetermined type or record instance \lstinline!R! in connector instance +\lstinline!A! to the corresponding overdetermined type or record instance \lstinline!R! in +connector instance \lstinline!B! for a virtual connection graph. This function can +be used at all places where a \lstinline!connect(..)! statement is allowed. +\par +\begin{nonnormative*} +E.g., it is not allowed to use this function in a when-clause. This definition shall be used if in a model with connectors \lstinline!A! and \lstinline!B! the overdetermined +records \lstinline!A.R! and \lstinline!B.R! are algebraically coupled in the model, e.g., due to \lstinline!B.R = f(A.R!, \textless{}other unknowns\textgreater{}). +\end{nonnormative*} +\\ \hline +\lstinline!Connections.root(A.R);! & The overdetermined type or record instance \lstinline!R! in +connector instance \lstinline!A! is a (definite) \firstuse{root node} in a virtual connection graph. +\par +\begin{nonnormative*} This definition shall be used if in a model with connector \lstinline!A! the overdetermined record \lstinline!A.R! is (consistently) assigned, e.g., from a parameter expressions. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[Connections.potentialRoot] -\begin{synopsis}\begin{lstlisting} -Connections.potentialRoot(A.R) -Connections.potentialRoot(A.R, priority=$p$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The overdetermined type or record instance \lstinline!R! in connector instance \lstinline!A! is a \firstuse{potential root node}\index{potential root node}\index{root node!potential} in a virtual connection graph with priority \lstinline!p! ($p \geq 0$). -If no second argument is provided, the priority is zero. \lstinline!p! shall be a parameter expression of type \lstinline!Integer!. -In a virtual connection subgraph without a \lstinline!Connections.root! definition, one of the potential roots with the lowest priority number is selected as root. - -\begin{nonnormative} -This definition may be used if in a model with connector \lstinline!A! the overdetermined record \lstinline!A.R! appears differentiated -- \lstinline!der(A.R)! -- together with the \emph{constraint equations} of \lstinline!A.R!, i.e., a non-redundant subset of \lstinline!A.R! maybe used as states. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[Connections.isRoot] -\begin{synopsis}\begin{lstlisting} -Connections.isRoot(A.R) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns true, if the overdetermined type or record instance \lstinline!R! in connector instance \lstinline!A! is selected as a root in the virtual connection graph. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[Connections.rooted] -\begin{synopsis}\begin{lstlisting} -Connections.rooted(A.R) -rooted(A.R) // deprecated! -\end{lstlisting}\end{synopsis} -\begin{semantics} -If the operator \lstinline!Connections.rooted(A.R)! is used, or the equivalent but deprecated operator \lstinline!rooted(A.R)!, then there must be exactly one \lstinline!Connections.branch(A.R, B.R)! involving \lstinline!A.R! (the argument of \lstinline!Connections.rooted! must be the first argument of \lstinline!Connections.branch!). In that case \lstinline!Connections.rooted(A.R)! returns true, if \lstinline!A.R! is closer to the root of the spanning tree than \lstinline!B.R!; otherwise false is returned. - -\begin{nonnormative} -This operator can be used to avoid equation systems by providing analytic inverses, see\linebreak[4] \lstinline!Modelica.Mechanics.MultiBody.Parts.FixedRotation!. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} +\end{nonnormative*} +\\ \hline +\begin{tabular}{@{}p{5.1cm}@{}} +\lstinline!Connections.potentialRoot(A.R);!\\ +\lstinline!Connections.potentialRoot(!\\ +\lstinline!A.R, priority = p)!; +\end{tabular} +& The overdetermined type or record instance \lstinline!R! in connector instance \lstinline!A! is +a \firstuse{potential root node} in a virtual connection graph with priority +\lstinline!p! ($p\ge 0$). If no second argument is provided, the priority is zero. +\lstinline!p! shall be a parameter expression of type \lstinline!Integer!. In a +virtual connection subgraph without a \lstinline!Connections.root! definition, one +of the potential roots with the lowest priority number is selected as +root. +\par +\begin{nonnormative*} +This definition may be used if in a model with connector \lstinline!A! the overdetermined record \lstinline!A.R! appears differentiated -- \lstinline!der(A.R)! -- together +with the \emph{constraint equations} of \lstinline!A.R!, i.e., a non-redundant subset of \lstinline!A.R! maybe used as states. +\end{nonnormative*} +%\strut +%\end{minipage} +\\ \hline +\lstinline!b = Connections.isRoot(A.R);! & Returns true, if the overdetermined type +or record instance \lstinline!R! in connector instance A is selected as a root in +the virtual connection graph.\\ \hline +\begin{tabular}{@{}p{5.1cm}@{}} +\lstinline!b = Connections.rooted(A.R);!\\ +\lstinline!b = rooted(A.R); // deprecated! +\end{tabular} +& If the operator \lstinline!Connections.rooted(A.R)! +is used, or the equivalent but deprecated operator \lstinline!rooted(A.R)!, then +there must be exactly one statement \lstinline!Connections.branch(A.R,B.R)! +involving \lstinline!A.R! (the argument of \lstinline!Connections.rooted! must be the first +argument of \lstinline!Connections.branch!). In that case \lstinline!Connections.rooted(A.R)! +returns true, if \lstinline!A.R! is closer to the root of the spanning tree than +\lstinline!B.R!; otherwise false is returned. +\par +\begin{nonnormative*} +This operator can be used to avoid equation systems by providing analytic inverses, see \lstinline!Modelica.Mechanics.MultiBody.Parts.FixedRotation!. +\end{nonnormative*} +\\ \hline +\end{longtable} \begin{nonnormative} Note, that \lstinline!Connections.branch!, \lstinline!Connections.root!, @@ -917,13 +959,15 @@ \subsection{Overconstrained Equation Operators for Connection Graphs}\label{over \end{nonnormative} -\subsection{Converting the Connection Graph into Trees and Generating Connection Equations}\label{converting-the-connection-graph-into-trees-and-generating-connection-equations} +\subsection{Converting the Connection Graph into Trees and Generating Connection Equations}\doublelabel{converting-the-connection-graph-into-trees-and-generating-connection-equations} -Before connection equations are generated, the virtual connection graph is transformed into a set of spanning trees by removing optional spanning tree edges from the graph. -This is performed in the following way: +Before \lstinline!connect(...)! equations are generated, the virtual connection +graph is transformed into a set of spanning trees by removing optional spanning tree edges +from the graph. This is performed in the following way: \begin{enumerate} \item - Every root node defined via the \lstinline!Connections.root!-equation is a definite root of one spanning tree. + Every root node defined via the \lstinline!Connections.root(..)! statement is + a definite root of one spanning tree. \item The virtual connection graph may consist of sets of subgraphs that are not connected together. Every subgraph in this set shall have at least @@ -931,7 +975,7 @@ \subsection{Converting the Connection Graph into Trees and Generating Connection graph of this set does not contain any root node, then one potential root node in this subgraph that has the lowest priority number is selected to be the root of that subgraph. The selection can be - inquired in a class with function \lstinline!Connections.isRoot!, see table + inquired in a class with function \lstinline!Connections.isRoot(..)!, see table above. \item If there are n selected roots in a subgraph, then optional spanning-tree edges @@ -939,27 +983,32 @@ \subsection{Converting the Connection Graph into Trees and Generating Connection trees with the selected root nodes as roots. \end{enumerate} -After this analysis, the \firstuse{connection equations}\index{connection equations!overconstrained} are generated in the following way: +After this analysis, the connection equations are generated in the +following way: \begin{enumerate} \item - For every optional spanning-tree edge (i.e., a \lstinline!connect(A, B)! equation), in one of the spanning trees, the connection equations are generated according to \cref{generation-of-connection-equations}. + For every optional spanning-tree edge (i.e., a \lstinline!connect(A, B)! + equation), in one of the spanning trees, the connection + equations are generated according to \autoref{generation-of-connection-equations}. \item - For every optional spanning-tree edge not in any of the spanning trees, the connection equations are generated according to \cref{generation-of-connection-equations}, except for overdetermined type or record instances \lstinline!R!. - Here the equations \lstinline!0 = R.equalityConstraint(A.R, B.R)! are generated instead of \lstinline!A.R = B.R!. + For every optional spanning-tree edge not in any of the spanning trees, the + connection equations are generated according to \autoref{generation-of-connection-equations}, except + for overdetermined type or record instances R. Here the equations + \lstinline!0 = R.equalityConstraint(A.R, B.R)! are generated instead + of \lstinline!A.R = B.R!. \end{enumerate} -\subsection{Examples of Overconstrained Connection Graphs}\label{examples-of-overconstrained-connection-graphs} +\subsection{Examples of Overconstrained Connection Graphs}\doublelabel{examples-of-overconstrained-connection-graphs} \begin{example} \begin{figure}[H] - \begin{center} - \includegraphics{overdetermined} - \end{center} - \caption{Example of a virtual connection graph.} +\caption{Example of a virtual connection graph.} +% Need to shrink a little to avoid overully +\includegraphics[scale=0.85]{overdetermined} \end{figure} \end{example} -\subsubsection{An Overdetermined Connector for Power Systems}\label{an-overdetermined-connector-for-power-systems} +\subsubsection{An Overdetermined Connector for Power Systems}\doublelabel{an-overdetermined-connector-for-power-systems} \begin{nonnormative} An overdetermined connector for power systems based on the @@ -971,7 +1020,7 @@ \subsubsection{An Overdetermined Connector for Power Systems}\label{an-overdeter function equalityConstraint input AC_Angle theta1; input AC_Angle theta2; - output Real residue[0] "No constraints"; + output Real residue[0] "No constraints" algorithm /* make sure that theta1 and theta2 from joining edges are identical */ assert(abs(theta1 - theta2) < 1.e-10, "Consistent angles"); @@ -982,7 +1031,8 @@ \subsubsection{An Overdetermined Connector for Power Systems}\label{an-overdeter import Modelica.Units.SI; AC_Angle theta; SI.Voltage v[3] "Voltages resolved in AC_Angle frame"; - flow SI.Current i[3] "Currents resolved in AC_Angle frame"; + flow SI.Current i[3] "Currents resolved in AC_Angle +frame"; end AC_Plug; \end{lstlisting} The currents and voltages in the connector are defined relatively @@ -998,22 +1048,21 @@ \subsubsection{An Overdetermined Connector for Power Systems}\label{an-overdeter \begin{lstlisting}[language=modelica] model AC_Inductor parameter Real X[3,3], Y[3,3]; // component constants - AC_Plug p; - AC_Plug n; - Real omega; + AC_plug p; + AC_plug n; equation Connections.branch(p.theta,n.theta); //edge in virtual graph // since n.theta = p.theta n.theta = p.theta; // pass angle theta between plugs - omega = der(p.theta); // frequency of source + omega = der (p.theta); // frequency of source zeros(3) = p.i + n.i; - X*der(p.i) + omega*Y*p.i = p.v - n.v; + X*der (p.i) + omega*Y*p.i = p.v - n.v; end AC_Inductor \end{lstlisting} At the place where the source frequency, i.e., essentially -variable theta, is defined, a \lstinline!Connections.root! must be present: +variable theta, is defined, a \lstinline!Connections.root(..)! must be present: \begin{lstlisting}[language=modelica] - AC_Plug p; + AC_plug p; equation Connections.root(p.theta); der(p.theta) = 2*Modelica.Constants.pi*50 // 50 Hz; @@ -1023,48 +1072,47 @@ \subsubsection{An Overdetermined Connector for Power Systems}\label{an-overdeter passed between components, in order to avoid redundant equations. \end{nonnormative} -\subsubsection{An Overdetermined Connector for 3-dimensional Mechanical Systems}\label{an-overdetermined-connector-for-3-dimensional-mechanical-systems} +\subsubsection{An Overdetermined Connector for 3-dimensional Mechanical Systems}\doublelabel{an-overdetermined-connector-for-3-dimensional-mechanical-systems} \begin{nonnormative} An overdetermined connector for 3-dimensional mechanical systems may be defined as: \begin{lstlisting}[language=modelica] -type TransformationMatrix = Real[3,3]; -type Orientation "Orientation from frame 1 to frame 2" - extends TransformationMatrix; - function equalityConstraint - input Orientation R1 "Rotation from inertial frame to frame 1"; - input Orientation R2 "Rotation from inertial frame to frame 2"; - output Real residue[3]; - protected - Orientation R_rel "Relative Rotation from frame 1 to frame 2"; - algorithm - R_rel := R2*transpose(R1); - /* - If frame_1 and frame_2 are identical, R_rel must be - the unit matrix. If they are close together, R_rel can be - linearized yielding: - R_rel = [ 1, phi3, -phi2; - -phi3, 1, phi1; - phi2, -phi1, 1 ]; - where phi1, phi2, phi3 are the small rotation angles around - axis x, y, z of frame 1 to rotate frame 1 into frame 2. - The atan2 is used to handle large rotation angles, but does not - modify the result for small angles. - */ - residue := { Modelica.Math.atan2(R_rel[2, 3], R_rel[1, 1]), - Modelica.Math.atan2(R_rel[3, 1], R_rel[2, 2]), - Modelica.Math.atan2(R_rel[1, 2], R_rel[3, 3])}; - end equalityConstraint; -end Orientation; - -connector Frame "3-dimensional mechanical connector" - import Modelica.Units.SI; - SI.Position r[3] "Vector from inertial frame to Frame"; - Orientation R "Orientation from inertial frame to Frame"; - flow SI.Force f[3] "Cut-force resolved in Frame"; - flow SI.Torque t[3] "Cut-torque resolved in Frame"; -end Frame; + type TransformationMatrix = Real[3,3]; + type Orientation "Orientation from frame 1 to frame 2" + extendsTransformationMatrix; + function equalityConstraint + input Orientation R1 "Rotation from inertial frame to frame 1"; + input Orientation R2 "Rotation from inertial frame to frame 2"; + output Real residue[3]; + protected + Orientation R_rel "Relative Rotation from frame 1 to frame 2"; + algorithm + R_rel := R2*transpose(R1); + /* If frame_1 and frame_2 are identical, R_rel must be +the unit matrix. If they are close together, R_rel can be +linearized yielding: +R_rel = [ 1, phi3, -phi2; +-phi3, 1, phi1; +phi2, -phi1, 1 ]; +where phi1, phi2, phi3 are the small rotation angles around +axis x, y, z of frame 1 to rotate frame 1 into frame 2. +The atan2 is used to handle large rotation angles, but does not +modify the result for small angles. +*/ + residue := { Modelica.Math.atan2(R_rel[2, 3], R_rel[1, 1]), + Modelica.Math.atan2(R_rel[3, 1], R_rel[2, 2]), + Modelica.Math.atan2(R_rel[1, 2], R_rel[3, 3])}; + end equalityConstraint; + end Orientation; + + connector Frame "3-dimensional mechanical connector" + import Modelica.Units.SI; + SI.Position r[3] "Vector from inertial frame to Frame"; + Orientation R "Orientation from inertial frame to Frame"; + flow SI.Force f[3] "Cut-force resolved in Frame"; + flow SI.Torque t[3] "Cut-torque resolved in Frame"; + end Frame; \end{lstlisting} A fixed translation from a frame \lstinline!A! to a frame \lstinline!B! may be defined as: \begin{lstlisting}[language=modelica] diff --git a/chapters/copyright.tex b/chapters/copyright.tex deleted file mode 100644 index fe2e8d38f..000000000 --- a/chapters/copyright.tex +++ /dev/null @@ -1,9 +0,0 @@ -Copyright \textcopyright{} 1998-2021, Modelica Association (\url{https://www.modelica.org}) - -All rights reserved. -Reproduction or use of editorial or pictorial content is permitted, i.e., this document can be freely distributed especially electronically, provided the copyright notice and these conditions are retained. -No patent liability is assumed with respect to the use of information contained herein. -While every precaution has been taken in the preparation of this document no responsibility for errors or omissions is assumed. - -The contributors to this and to previous versions of this document are listed in \cref{modelica-revision-history}. -All contributors worked voluntarily and without compensation. diff --git a/chapters/dae.tex b/chapters/dae.tex index ecb6999ae..589f345f0 100644 --- a/chapters/dae.tex +++ b/chapters/dae.tex @@ -1,4 +1,4 @@ -\chapter{Modelica DAE Representation}\label{modelica-dae-representation} +\chapter{Modelica DAE Representation}\doublelabel{modelica-dae-representation} In this appendix, the mapping of a Modelica model into an appropriate mathematical description form is discussed. @@ -9,165 +9,151 @@ \chapter{Modelica DAE Representation}\label{modelica-dae-representation} used components by: \begin{itemize} \item - Expanding all class definitions (flattening the inheritance tree) and + expanding all class definitions (flattening the inheritance tree) and adding the equations and assignment statements of the expanded classes for every instance of the model. \item - Replacing all \lstinline!connect!-equations by the corresponding equations of the connection set (see \cref{generation-of-connection-equations}). + replacing all connect-equations by the corresponding equations of the + connection set (see \autoref{generation-of-connection-equations}). \item - Mapping all algorithm sections to equation sets. + mapping all algorithm sections to equation sets. \item - Mapping all \lstinline!when!-clauses to equation sets (see \cref{when-equations}). + mapping all when-clauses to equation sets (see \autoref{when-equations}). \end{itemize} As a result of this transformation process, a set of equations is obtained consisting of differential, algebraic and discrete equations of -the following form where ($v := \lbrack p; t; \dot{x}; x; y; z; m; \text{\lstinline!pre!}(z); \text{\lstinline!pre!}(m)\rbrack$): +the following form where ($v:=\lbrack \dot{x}; x; y; t; m; \text{pre}(m); p\rbrack$ ): \begin{subequations} -\begin{equation}\label{eq:dae} -0 = f_{\mathrm{x}}(v, c) +\begin{equation} +c:=f_c(relation(v))\label{eq:crossing} \end{equation} -\begin{equation}\label{eq:dae-discrete-real} -0 = -\begin{cases} -f_{\mathrm{z}}(v, c) & \text{at events} \\ -z - \text{\lstinline!pre!}(z) & \text{otherwise} -\end{cases} +\begin{equation} +\dot{m}:=f_m(v, v) \end{equation} -\begin{equation}\label{eq:dae-discrete-valued} -m := f_{\mathrm{m}}(v, c) -\end{equation} -\begin{equation}\label{eq:crossing} -c := f_{\mathrm{c}}(\mathit{relation}(v)) +\begin{equation} +0=f_x(v, v)\label{eq:dae} \end{equation} \label{eq:hydrid-dae} \end{subequations} and where -\begin{itemize} -\item $p$: -Modelica variables declared as \lstinline!parameter! or \lstinline!constant!, i.e., variables without any time-dependency. - -\item $t$: -Modelica variable \lstinline!time!, the independent (real) variable. - -\item $x(t)$: -Modelica variables of type \lstinline!Real!, appearing differentiated. - -\item $y(t)$: -Continuous-time modelica variables of type \lstinline!Real! that do not appear differentiated (= algebraic variables). - -\item $z(t_{\mathrm{e}})$: -Discrete-time modelica variables of type \lstinline!Real!. These variables change their value only at event instants $t_{\mathrm{e}}$. \lstinline!pre(z)! are the values of $z$ immediately before the current event occurred. - -\item $m(t_{\mathrm{e}})$: -Modelica variables of discrete-valued types (\lstinline!Boolean!, \lstinline!Integer!, etc) which are unknown. These variables change their value only at event instants $t_{\mathrm{e}}$. \lstinline!pre(m)! are the values of $m$ immediately before the current event occurred. - -\item $c(t_{\mathrm{e}})$: -The conditions of all \lstinline!if!-expressions generated including \lstinline!when!-clauses after conversion, see \cref{when-equations}). - -\item $\mathit{relation}(v)$: -A relation containing variables $v_{i}$, e.g.\ $v_{1} > v_{2}$, $v_{3} \geq 0$. -\end{itemize} -For simplicity, the special cases of \lstinline!noEvent! and \lstinline!reinit! are not contained in the equations -above and are not discussed below. - -The key difference between the two groups of discrete-time variables $z$ and and $m$ here is how they are determined. The interpretation of the solved form of \eqref{eq:dae-discrete-valued} is that given values for everything else, there is a closed-form solution for $m$ in the form of a sequence of assignments to each of the variables of $m$ in turn -- there must be no cyclic dependencies between the equations used to solve for $m$. Further, each of the original model equations behind \eqref{eq:dae-discrete-valued} must be given in solved form, at most requiring flipping sides of the equation to obtain the used assignment form. The interpretation of the non-solved form of \eqref{eq:dae-discrete-real} at events, on the other hand, is that at events, the discrete-time \lstinline!Real! variables $z$ are solved together with the continuous-time variables using \eqref{eq:dae} and \eqref{eq:dae-discrete-real}. - -\begin{example} -The following model is illegal since there is no equation in solved form that can be used in \eqref{eq:dae-discrete-valued} to solve for the discrete-valued variable \lstinline!y!: -\begin{lstlisting}[language=modelica] -model M - Boolean x; - Boolean y; -equation - x = time >= 1.0; - not y = x; /* Equation in solved form, but not with respect to y. */ -end M; -\end{lstlisting} -\end{example} - -The generated set of equations is used for simulation and other analysis activities. -Simulation means that an initial value problem is solved, i.e., initial values have to be provided for the states $x$, \cref{initialization-initial-equation-and-initial-algorithm}. -The equations define a DAE\index{DAE} (Differential Algebraic Equations) which may have discontinuities, a variable structure and/or which are controlled by a discrete-event system. -Such types of systems are called \firstuse{hybrid DAEs}\index{hybrid DAE}. -Simulation is performed in the following way: +\begin{longtable}[]{|p{2cm}|p{12cm}|} +\hline \endhead +\textbf{p} & Modelica variables declared as \lstinline!parameter! or +\lstinline!constant!, i.e., variables without any +time-dependency.\\ \hline +\emph{t} & Modelica variable \lstinline!time!, the independent (real) +variable.\\ \hline +\textbf{x}(t) & Modelica variables of type \lstinline!Real!, appearing +differentiated.\\ \hline +\textbf{m}(t\textsubscript{e}) & Modelica variables of type +\lstinline!discrete Real!, \lstinline!Boolean!, \lstinline!Integer! which are unknown. These +variables change their value only at event instants t\textsubscript{e}. +\lstinline!pre(m)! are the values of m immediately before the current event +occurred.\\ \hline +\textbf{y}(t) & Modelica variables of type \lstinline!Real! which do not fall +into any other category (= algebraic variables).\\ \hline +c\textbf{(}t\textsubscript{e}) & The conditions of all if-expressions +generated including when-clauses after conversion, see \autoref{when-equations}).\\ \hline +\emph{relation}(\textbf{v}) & A relation containing variables +v\textsubscript{i}, e.g. v\textsubscript{1} \textgreater{} +v\textsubscript{2}, v\textsubscript{3} \textgreater{}= 0.\\ \hline + +\end{longtable} + +For simplicity, the special cases of the \lstinline!noEvent()! operator and of the +\lstinline!reinit()! operator are not contained in the equations above and are not +discussed below. + +The generated set of equations is used for simulation and other analysis +activities. Simulation means that an initial value problem is solved, +i.e., initial values have to be provided for the states x, \autoref{initialization-initial-equation-and-initial-algorithm}. +The equations define a DAE (Differential Algebraic Equations) which may +have discontinuities, a variable structure and/or which are controlled +by a discrete-event system. Such types of systems are called +\emph{hybrid DAEs}. Simulation is performed in the following way: \begin{enumerate} -\item\label{perform-simulation-integrate} - The DAE \eqref{eq:dae} is solved by a numerical integration method. In this - phase the conditions $c$ of the if- and \lstinline!when!-clauses, as well as the - discrete-time variables $z$ and $m$ are kept constant. Therefore, \eqref{eq:dae} is a +\item + The DAE (\ref{eq:dae}) is solved by a numerical integration method. In this + phase the conditions c of the if- and when-clauses, as well as the + discrete variables m are kept constant. Therefore, (\ref{eq:dae}) is a continuous function of continuous variables and the most basic requirement of numerical integrators is fulfilled. \item - During integration, all relations from \eqref{eq:crossing} are monitored. If one of + During integration, all relations from (\ref{eq:crossing}) are monitored. If one of the relations changes its value an event is triggered, i.e., the exact time instant of the change is determined and the integration is - halted. As discussed in \cref{events-and-synchronization}, relations which depend only on - time are usually treated in a special way, because this allows - determining the time instant of the next event in advance. + halted. As discussed in \autoref{events-and-synchronization}, relations which depend only on + time are usually treated in a special way, because this allows to + determine the time instant of the next event in advance. \item - At an event instant, \eqref{eq:hydrid-dae} is a mixed set of algebraic equations which is solved for the \lstinline!Real!, \lstinline!Boolean! and \lstinline!Integer! unknowns. + At an event instant, (\ref{eq:hydrid-dae}) is a mixed set of algebraic equations which + is solved for the Real, Boolean and Integer unknowns. \item - After an event is processed, the integration is restarted with \ref{perform-simulation-integrate}. + After an event is processed, the integration is restarted with 1. \end{enumerate} -Note, that both the values of the conditions $c$ as well as the values of -$z$ and $m$ (all discrete-time \lstinline!Real!, \lstinline!Boolean! and \lstinline!Integer! variables) are only changed at +Note, that both the values of the conditions c as well as the values of +m (all \lstinline!discrete Real!, \lstinline!Boolean! and \lstinline!Integer! variables) are only changed at an event instant and that these variables remain constant during continuous integration. At every event instant, new values of the -discrete-time variables $z$ and $m$, as well as of new initial values for the states $x$, are -determined. The change of discrete-time variables may characterize a new -structure of a DAE where elements of the state vector $x$ are +discrete variables m and of new initial values for the states x are +determined. The change of discrete variables may characterize a new +structure of a DAE where elements of the state vector x are \emph{disabled}. In other words, the number of state variables, algebraic variables and residue equations of a DAE may change at event instants by disabling the appropriate part of the DAE. For clarity of the equations, this is not explicitly shown by an additional index in -\eqref{eq:hydrid-dae}. +(\ref{eq:hydrid-dae}). At an event instant, including the initial event, the model equations are reinitialized according to the following iteration procedure: \begin{lstlisting}[language=modelica] -known variables: x, t, p -unkown variables: dx/dt, y, z, m, pre(z), pre(m), c - -// pre(z) = value of z before event occured -// pre(m) = value of m before event occured -loop - solve (1) for the unknowns, with pre(z) and pre(m) fixed - if z == pre(z) and m == pre(m) then break - pre(z) := z - pre(m) := m -end loop + known variables: x, t, p + unkown variables: dx/dt, y, m, pre(m), c + + // pre(m) = value of m before event occured + loop + solve (1) for the unknowns, with pre(m) fixed + if m == pre(m) then break + pre(m) := m + end loop \end{lstlisting} - -Clocked variables are handled similarly as $z$ and $m$ (depending on type), but using \lstinline!previous! instead of \lstinline!pre! and only solved in the first event iteration. - -Solving \eqref{eq:hydrid-dae} for the unknowns is non-trivial, because this set of equations contains not only \lstinline!Real!, but also discrete-valued unknowns. -Usually, in a first step these equations are sorted and in many cases the discrete-valued unknowns $m$ can be just computed by a forward evaluation sequence. -In some cases, there remain systems of equations involving $m$ due to cyclic dependencies with $y$ and $z$ (e.g.\ for ideal diodes, Coulomb friction elements), and specialized algorithms have to be used to solve them. - -Due to the construction of the equations by \emph{flattening} a Modelica model, the hybrid DAE \eqref{eq:hydrid-dae} contains a huge number of sparse equations. -Therefore, direct simulation of \eqref{eq:hydrid-dae} requires sparse matrix methods. -However, solving this initial set of equations directly with a numerical method is both unreliable and inefficient. -One reason is that many Modelica models, like the mechanical ones, have a DAE index of 2 or 3, i.e., the overall number of states of the model is less than the sum of the states of the sub-components. -In such a case, every direct numerical method has the difficulty that the numerical condition becomes worse, if the integrator step size is reduced and that a step size of zero leads to a singularity. -Another problem is the handling of idealized elements, such as ideal diodes or Coulomb friction. -These elements lead to mixed systems of equations having both \lstinline!Real! and \lstinline!Boolean! unknowns. -Specialized algorithms are needed to solve such systems. +Solving (\ref{eq:hydrid-dae}) for the unknowns is non-trivial, because this set of +equations contains not only Real, but also Boolean and Integer unknowns. +Usually, in a first step these equations are sorted and in many cases +the Boolean and Integer unknowns can be just computed by a forward +evaluation sequence. In some cases, there remain systems of equations +(e.g. for ideal diodes, Coulomb friction elements) and specialized +algorithms have to be used to solve them. + +Due to the construction of the equations by \emph{flattening} a Modelica +model, the hybrid DAE (\ref{eq:hydrid-dae}) contains a huge number of sparse equations. +Therefore, direct simulation of (\ref{eq:hydrid-dae}) requires sparse matrix methods. +However, solving this initial set of equations directly with a numerical +method is both unreliable and inefficient. One reason is that many +Modelica models, like the mechanical ones, have a DAE index of 2 or 3, +i.e., the overall number of states of the model is less than the sum of +the states of the sub-components. In such a case, every direct numerical +method has the difficulty that the numerical condition becomes worse, if +the integrator step size is reduced and that a step size of zero leads +to a singularity. Another problem is the handling of idealized elements, +such as ideal diodes or Coulomb friction. These elements lead to mixed +systems of equations having both Real and Boolean unknowns. Specialized +algorithms are needed to solve such systems. To summarize, symbolic transformation techniques are needed to transform -\eqref{eq:hydrid-dae} into a set of equations which can be numerically solved reliably. Most +(1) in a set of equations which can be numerically solved reliably. Most important, the algorithm of Pantelides should to be applied to differentiate certain parts of the equations in order to reduce the index. Note, that also explicit integration methods, such as Runge-Kutta -algorithms, can be used to solve \eqref{eq:dae}, after the index of \eqref{eq:dae} has been +algorithms, can be used to solve (\ref{eq:dae}), after the index of (\ref{eq:dae}) has been reduced by the Pantelides algorithm: During continuous integration, the -integrator provides $x$ and $t$. Then, \eqref{eq:dae} is a linear or nonlinear system -of equations to compute the algebraic variables $y$ and the state -% TODO: Structured formatting of inline "upright 'd' fraction". -derivatives $\mathrm{d}x/\mathrm{d}t$ and the model returns $\mathrm{d}x/\mathrm{d}t$ to the integrator by -solving these systems of equations. Often, \eqref{eq:dae} is just a linear system +integrator provides x and t. Then, (\ref{eq:dae}) is a linear or nonlinear system +of equations to compute the algebraic variables y and the state +derivatives dx/dt and the model returns dx/dt to the integrator by +solving these systems of equations. Often, (\ref{eq:dae}) is just a linear system of equations in these unknowns, so that the solution is straightforward. This procedure is especially useful for real-time simulation where usually explicit one-step methods are used. diff --git a/chapters/derivationofstream.tex b/chapters/derivationofstream.tex index 7fd0fe87a..8bffccdc7 100644 --- a/chapters/derivationofstream.tex +++ b/chapters/derivationofstream.tex @@ -1,26 +1,25 @@ -\chapter{Derivation of Stream Equations}\label{derivation-of-stream-equations} +\chapter{Derivation of Stream Equations}\doublelabel{derivation-of-stream-equations} This appendix contains a derivation of the equation for stream -connectors from \cref{stream-connectors}. +connectors from \autoref{stream-connectors}. -\section{Reasons for avoiding the actual mixing enthalpy in connector definitions}\label{reasons-for-avoiding-the-actual-mixing-enthalpy-in-connector-definitions} +\section{Reasons for avoiding the actual mixing enthalpy in connector definitions}\doublelabel{reasons-for-avoiding-the-actual-mixing-enthalpy-in-connector-definitions} -Consider a connection set with $n$ connectors, and denote the mass flow rates \lstinline!m_flow! by $\tilde{m}$. -The mixing enthalpy is defined by the mass balance (the general mass-balance for a component has -$\dot{m}=\sum\tilde{m}$ which simplifies for the mixing enthalpy where $m=0$ and thus $\dot{m}=0$) +Consider a connection set with \emph{n} connectors. The mixing enthalpy +is defined by the mass balance \begin{equation*} -0=\sum_{j=1}^n\tilde{m}_j +0=\sum_{j=1}^n\dot{m}_j \end{equation*} -and similarly the energy balance +and the energy balance \begin{equation*} -0=\sum_{j=1}^n\tilde{H}_j +0=\sum_{j=1}^n\dot{H}_j \end{equation*} with \begin{equation*} -\tilde{H}_j=\tilde{m}_j +\dot{H}_j=\dot{m}_j \begin{cases} -h_{\mathrm{mix}}&\text{if $\tilde{m}_j>0$}\\ -h_{\mathrm{outflow},j}&\text{if $\tilde{m}_j<=0$} +h_{mix}&\text{if $\dot{m}_j>0$}\\ +h_{outflow,j}&\text{if $\dot{m}_j<=0$} \end{cases} \end{equation*} Herein, mass flow rates are positive when entering models (exiting the @@ -28,10 +27,10 @@ \section{Reasons for avoiding the actual mixing enthalpy in connector definition inside the component, close to the connector, for the case of outflow. Expressed with variables used in the balance equations we arrive at: \begin{equation*} -h_{\mathrm{outflow},j}= +h_{outflow,j}= \begin{cases} -\frac{\tilde{H}_j}{\tilde{m}_j}&\text{if $\tilde{m}_j<0$}\\ -\textrm{arbitrary}&\text{if $\tilde{m}_j \geq 0$} +\frac{\dot{H}_j}{\dot{m}_j}&\text{if $\dot{m}_j<0$}\\ +\textrm{arbitrary}&\text{if $\dot{m}_j>=0$} \end{cases} \end{equation*} While these equations are suitable for device-oriented modeling, the @@ -42,79 +41,80 @@ \section{Reasons for avoiding the actual mixing enthalpy in connector definition equations. The stream connectors provide a suitable alternative. \begin{figure}[H] - \begin{center} - \includegraphics{fluidmix} - \end{center} - \caption{Exemplary connection set with three connected components and a common mixing enthalpy.} +\caption{Exemplary connection set with three connected components and a common mixing enthalpy} +\begin{center} +\includegraphics[width=3in,height=3in]{fluidmix} +\end{center} \end{figure} -\section{Rationale for the formulation of inStream}\label{rationale-for-the-formulation-of-the-instream-operator} +\section{Rationale for the formulation of the inStream() operator}\doublelabel{rationale-for-the-formulation-of-the-instream-operator} -For simplicity, the derivation of \lstinline!inStream! is shown at hand of 3 model components that are connected together. -The case for $N$ connections follows correspondingly. +For simplicity, the derivation of the inStream() operator is shown at +hand of 3 model components that are connected together. The case for N +connections follows correspondingly. The energy and mass balance equations for the connection set for 3 components are (see above): \begin{subequations} \begin{equation} \begin{split} -0=&\tilde{m}_1\cdot +0=&\dot{m}_1\cdot \begin{cases} -h_{\mathrm{mix}}&\text{if $\tilde{m}_1>0$}\\ -h_{\mathrm{outflow},1}&\text{if $\tilde{m}_1 \leq 0$} +h_{mix}&\text{if $\dot{m}_1>0$}\\ +h_{outflow,1}&\text{if $\dot{m}_1<=0$} \end{cases}\\ -+&\tilde{m}_2\cdot ++&\dot{m}_2\cdot \begin{cases} -h_{\mathrm{mix}}&\text{if $\tilde{m}_2>0$}\\ -h_{\mathrm{outflow},2}&\text{if $\tilde{m}_2 \leq 0$} +h_{mix}&\text{if $\dot{m}_2>0$}\\ +h_{outflow,2}&\text{if $\dot{m}_2<=0$} \end{cases}\\ -+&\tilde{m}_3\cdot ++&\dot{m}_3\cdot \begin{cases} -h_{\mathrm{mix}}&\text{if $\tilde{m}_3>0$}\\ -h_{\mathrm{outflow},3}&\text{if $\tilde{m}_3 \leq $} +h_{mix}&\text{if $\dot{m}_3>0$}\\ +h_{outflow,3}&\text{if $\dot{m}_3<=0$} \end{cases} \end{split} \label{eq:D1a} \end{equation} \begin{equation} -0=\tilde{m}_1+\tilde{m}_2+\tilde{m}_3 +0=\dot{m}_1+\dot{m}_2+\dot{m}_3 \label{eq:D1b} \end{equation} \label{eq:D1} \end{subequations} -The balance equations are implemented using a $\operatorname{max}$ operator in place of +The balance equations are implemented using a max() operator in place of the piecewise expressions, taking care of the different flow directions: \begin{subequations} \begin{equation} \begin{split} -0=&\operatorname{max}(\tilde{m}_1,0)h_{\mathrm{mix}}-\operatorname{max}(-\tilde{m}_1,0)h_{\mathrm{outflow},1}\\ -+&\operatorname{max}(\tilde{m}_2,0)h_{\mathrm{mix}}-\operatorname{max}(-\tilde{m}_2,0)h_{\mathrm{outflow},2}\\ -+&\operatorname{max}(\tilde{m}_3,0)h_{\mathrm{mix}}-\operatorname{max}(-\tilde{m}_3,0)h_{\mathrm{outflow},3} +0=&\text{max}(\dot{m}_1,0)h_{mix}-\text{max}(-\dot{m}_1,0)h_{outflow,1}\\ ++&\text{max}(\dot{m}_2,0)h_{mix}-\text{max}(-\dot{m}_2,0)h_{outflow,2}\\ ++&\text{max}(\dot{m}_3,0)h_{mix}-\text{max}(-\dot{m}_3,0)h_{outflow,3} \end{split} \label{eq:D2a} \end{equation} \begin{equation} \begin{split} -0=&\operatorname{max}(\tilde{m}_1,0)-\operatorname{max}(-\tilde{m}_1,0)\\ -+&\operatorname{max}(\tilde{m}_2,0)-\operatorname{max}(-\tilde{m}_2,0)\\ -+&\operatorname{max}(\tilde{m}_3,0)-\operatorname{max}(-\tilde{m}_3,0) +0=&\text{max}(\dot{m}_1,0)-\text{max}(-\dot{m}_1,0)\\ ++&\text{max}(\dot{m}_2,0)-\text{max}(-\dot{m}_2,0)\\ ++&\text{max}(\dot{m}_3,0)-\text{max}(-\dot{m}_3,0) \end{split} \label{eq:D2b} \end{equation} \label{eq:D2} \end{subequations} -Equation \eqref{eq:D2a} is solved for $h_{\mathrm{mix}}$ +Equation (\ref{eq:D2a}) is solved for $h_{mix}$ \begin{equation*} -h_{\mathrm{mix}}=\frac{\operatorname{max}(-\tilde{m}_1,0)h_{\mathrm{outflow},1}+\operatorname{max}(-\tilde{m}_2,0)h_{\mathrm{outflow},2}+\operatorname{max}(-\tilde{m}_3,0)h_{\mathrm{outflow},3}} -{\operatorname{max}(\tilde{m}_1,0)+\operatorname{max}(\tilde{m}_2,0)+\operatorname{max}(\tilde{m}_3,0)} +h_{mix}=\frac{\text{max}(-\dot{m}_1,0)h_{outflow,1}+\text{max}(-\dot{m}_2,0)h_{outflow,2}+\text{max}(-\dot{m}_3,0)h_{outflow,3}} +{\text{max}(\dot{m}_1,0)+\text{max}(\dot{m}_2,0)+\text{max}(\dot{m}_3,0)} \end{equation*} -Using \eqref{eq:D2b}, the denominator can be changed to: +Using (\ref{eq:D2b}), the denominator can be changed to: \begin{equation*} -h_{\mathrm{mix}}=\frac{\operatorname{max}(-\tilde{m}_1,0)h_{\mathrm{outflow},1}+\operatorname{max}(-\tilde{m}_2,0)h_{\mathrm{outflow},2}+\operatorname{max}(-\tilde{m}_3,0)h_{\mathrm{outflow},3}} -{\operatorname{max}(-\tilde{m}_1,0)+\operatorname{max}(-\tilde{m}_2,0)+\operatorname{max}(-\tilde{m}_3,0)} +h_{mix}=\frac{\text{max}(-\dot{m}_1,0)h_{outflow,1}+\text{max}(-\dot{m}_2,0)h_{outflow,2}+\text{max}(-\dot{m}_3,0)h_{outflow,3}} +{\text{max}(-\dot{m}_1,0)+\text{max}(-\dot{m}_2,0)+\text{max}(-\dot{m}_3,0)} \end{equation*} Above it was shown that an equation of this type does not yield properly formulated model equations. In the streams concept we therefore decide @@ -128,77 +128,77 @@ \section{Rationale for the formulation of inStream}\label{rationale-for-the-form it is therefore the mixing enthalpy under the assumption of fluid flowing into said model. -We establish this quantity using a dedicated operator $\text{\lstinline!inStream!}(h_{\mathrm{outflow},i})=h_{\mathrm{mix}}$ assuming that $\tilde{m}_{i} \geq 0$. This leads to -three different incarnations of ($n$ in the general case). This is +We establish this quantity using a dedicated operator $inStream(h_{outflow,i})=h_{mix}$ assuming that $\dot{m}_{i} >= 0$. This leads to +three different incarnations of (n in the general case). This is illustrated in the figure below. For the present example of three components in a connection set, this means the following. -\begin{align*} -\text{\lstinline!inStream!}(h_{\mathrm{outflow},1}) &= \frac{\operatorname{max}(-\tilde{m}_2,0)h_{\mathrm{outflow},2}+\operatorname{max}(-\tilde{m}_3,0)h_{\mathrm{outflow},3}}{\operatorname{max}(-\tilde{m}_2,0)+\operatorname{max}(-\tilde{m}_3,0)}\\ -\text{\lstinline!inStream!}(h_{\mathrm{outflow},2}) &= \frac{\operatorname{max}(-\tilde{m}_1,0)h_{\mathrm{outflow},1}+\operatorname{max}(-\tilde{m}_3,0)h_{\mathrm{outflow},3}}{\operatorname{max}(-\tilde{m}_1,0)+\operatorname{max}(-\tilde{m}_3,0)}\\ -\text{\lstinline!inStream!}(h_{\mathrm{outflow},3}) &= \frac{\operatorname{max}(-\tilde{m}_1,0)h_{\mathrm{outflow},1}+\operatorname{max}(-\tilde{m}_2,0)h_{\mathrm{outflow},2}}{\operatorname{max}(-\tilde{m}_1,0)+\operatorname{max}(-\tilde{m}_2,0)} -\end{align*} +\begin{eqnarray*} +inStream(h_{outflow,1})&=&\frac{\text{max}(-\dot{m}_2,0)h_{outflow,2}+\text{max}(-\dot{m}_3,0)h_{outflow,3}}{\text{max}(-\dot{m}_2,0)+\text{max}(-\dot{m}_3,0)}\\ +inStream(h_{outflow,2})&=&\frac{\text{max}(-\dot{m}_1,0)h_{outflow,1}+\text{max}(-\dot{m}_3,0)h_{outflow,3}}{\text{max}(-\dot{m}_1,0)+\text{max}(-\dot{m}_3,0)}\\ +inStream(h_{outflow,3})&=&\frac{\text{max}(-\dot{m}_1,0)h_{outflow,1}+\text{max}(-\dot{m}_2,0)h_{outflow,2}}{\text{max}(-\dot{m}_1,0)+\text{max}(-\dot{m}_2,0)} +\end{eqnarray*} \begin{figure}[H] - \begin{center} - \includegraphics{fluidmix3} - \end{center} - \caption{Exemplary connection set with three connected components.} +\caption{Exemplary connection set with three connected components} +\begin{center} +\includegraphics[width=3in,height=3in]{fluidmix3} +\end{center} \end{figure} In the general case of a connection set with \emph{n} components, similar considerations lead to the following. \begin{equation*} -\text{\lstinline!inStream!}(h_{\mathrm{outflow},i})=\frac{\sum_{j=1,\dotsc,n;j\neq i}\operatorname{max}(-\tilde{m}_j,0)h_{\mathrm{outflow},j}}{\sum_{j=1,\dotsc,n;j\neq i}\operatorname{max}(-\tilde{m}_j,0)} +inStream(h_{outflow,i})=\frac{\sum_{j=1,...,n;j\neq i}\text{max}(-\dot{m}_j,0)h_{outflow,j}}{\sum_{j=1,...,n;j\neq i}\text{max}(-\dot{m}_j,0)} \end{equation*} -\section{Special cases covered by inStream definition}\label{special-cases-covered-by-the-instream-operator-definition} - -\subsection{Stream connector is not connected (N = 1)}\label{stream-connector-is-not-connected-n-1} - -For this case, the return value of \lstinline!inStream! is arbitrary. +\section{Special cases covered by the inStream() operator definition}\doublelabel{special-cases-covered-by-the-instream-operator-definition} +\subsection{Stream connector is not connected (N=1):}\doublelabel{stream-connector-is-not-connected-n-1} +For this case, the return value of the \lstinline!inStream()! operator is arbitrary. Therefore, it is set to the outflow value. -\subsection{Connection of 2 stream connectors, one to one connections (N = 2)}\label{connection-of-2-stream-connectors-one-to-one-connections-n-2} +\subsection{Connection of 2 stream connectors, one to one connections (N=2):}\doublelabel{connection-of-2-stream-connectors-one-to-one-connections-n-2} -\begin{align*} -\text{\lstinline!inStream!}(h_{\mathrm{outflow},1}) &= \frac{\operatorname{max}(-\tilde{m}_2,0)h_{\mathrm{outflow},2}}{\operatorname{max}(-\tilde{m}_2,0)}=h_{\mathrm{outflow},2}\\ -\text{\lstinline!inStream!}(h_{\mathrm{outflow},2}) &= \frac{\operatorname{max}(-\tilde{m}_1,0)h_{\mathrm{outflow},1}}{\operatorname{max}(-\tilde{m}_1,0)}=h_{\mathrm{outflow},1} -\end{align*} +\begin{eqnarray*} +inStream(h_{outflow,1})&=&\frac{\text{max}(-\dot{m}_2,0)h_{outflow,2}}{\text{max}(-\dot{m}_2,0)}=h_{outflow,2}\\ +inStream(h_{outflow,2})&=&\frac{\text{max}(-\dot{m}_1,0)h_{outflow,1}}{\text{max}(-\dot{m}_1,0)}=h_{outflow,1} +\end{eqnarray*} -In this case, \lstinline!inStream! is continuous (contrary to $h_{\mathrm{mix}}$) and does not +In this case, \lstinline!inStream()! is continuous (contrary to $h_{mix}$) and does not depend on flow rates. The latter result means that this transformation may remove nonlinear systems of equations, which requires that either simplifications of the form $a * b / a = b$ must be provided, or that this case is treated directly. -\subsection{Connection of 3 stream connectors where one mass flow rate is identical to zero}\label{connection-of-3-stream-connectors-where-one-mass-flow-rate-is-identical-to-zero-n-3-and} - -The case where $N=3$ and $\tilde{m}_3=0$ occurs when a one-port sensor (like a temperature sensor) is connected to two connected components. -For the sensor, the \lstinline!min! attribute of the mass flow rate should be set to zero (no fluid exiting the component via this connector). +\subsection{Connection of 3 stream connectors where one mass flow rate is identical to zero:}\doublelabel{connection-of-3-stream-connectors-where-one-mass-flow-rate-is-identical-to-zero-n-3-and} +The case where N=3 and $\dot{m}_3=0$ occurs when a one-port sensor (like a temperature sensor) is +connected to two connected components. For the sensor, the min attribute +of the mass flow rate should be set to zero (no fluid exiting the +component via this connector). This simplification (and similar ones) can also be used if a tool determines that a mass flow rate is zero or non-negative. It is also possible to generalize this to the case where more than one sensor is connected. -The suggested implementation results in the following equations, and as indicated the last formula can be simplified further by using $\tilde{m}_3=0$: -\begin{align*} -\text{\lstinline!inStream!}(h_{\mathrm{outflow},1}) &= h_{\mathrm{outflow},2}\\ -\text{\lstinline!inStream!}(h_{\mathrm{outflow},2}) &= h_{\mathrm{outflow},1}\\ -\text{\lstinline!inStream!}(h_{\mathrm{outflow},3}) &= \frac{\operatorname{max}(-\tilde{m}_1,0)h_{\mathrm{outflow},1}+\operatorname{max}(-\tilde{m}_2,0)h_{\mathrm{outflow},2}}{\operatorname{max}(-\tilde{m}_1,0)+\operatorname{max}(-\tilde{m}_2,0)}\\ -&= -\begin{cases} -h_{\mathrm{outflow},2}&\text{if $\tilde{m}_1 \geq 0$}\\ -h_{\mathrm{outflow},1}&\text{if $\tilde{m}_1 < 0$ and $\tilde{m}_3 = 0$} +The suggested implementation results in +the following equations, and as indicated the last formula can be +simplified further by using $\dot{m}_3=0$: +\begin{eqnarray*} +inStream(h_{outflow,1})&=&h_{outflow,2}\\ +inStream(h_{outflow,2})&=&h_{outflow,1}\\ +inStream(h_{outflow,3})&=&\frac{\text{max}(-\dot{m}_1,0)h_{outflow,1}+\text{max}(-\dot{m}_2,0)h_{outflow,2}}{\text{max}(-\dot{m}_1,0)+\text{max}(-\dot{m}_2,0)}\\ +&=&\begin{cases} +h_{outflow,2}&\text{if $\dot{m}_1>=0$}\\ +h_{outflow,1}&\text{if $\dot{m}_1<0$ and $\dot{m}_3=0$} \end{cases} -\end{align*} +\end{eqnarray*} \begin{figure}[H] - \begin{center} - \includegraphics{fluidmix4} - \end{center} - \caption{Example series connection of multiple models with stream connectors.} +\caption{Example series connection of multiple models with stream connectors } +\begin{center} +\includegraphics[width=6in,height=3in]{fluidmix4} +\end{center} \end{figure} For the two components with finite mass flow rates (not the sensor), the properties discussed for two connected components still hold. The connection set equations reflect that the sensor does not any influence by discarding the flow rate of the latter. In several cases a non-linear -equation system is removed by this transformation. However, \lstinline!inStream! +equation system is removed by this transformation. However, \lstinline!inStream(..)! results in a discontinuous equation for the sensor, which is consistent with modeling the convective phenomena only. The discontinuous equation is uncritical, if the sensor variable is not used in a feedback loop @@ -206,7 +206,7 @@ \subsection{Connection of 3 stream connectors where one mass flow rate is identi part of an algebraic loop. Otherwise, it is advisable to regularize or filter the sensor signal. -\subsection{Connection of 3 stream connectors where two mass flow rates are positive (ideal splitting junction for uni-directional flow)}\label{connection-of-3-stream-connectors-where-two-mass-flow-rates-are-positive-ideal-splitting-junction-for-uni-directional-flow} +\subsection{Connection of 3 stream connectors where two mass flow rates are positive (ideal splitting junction for uni-directional flow)}\doublelabel{connection-of-3-stream-connectors-where-two-mass-flow-rates-are-positive-ideal-splitting-junction-for-uni-directional-flow} If uni-directional flow is present and an ideal splitter is modelled, the required flow direction should be defined in the connector instance @@ -215,46 +215,46 @@ \subsection{Connection of 3 stream connectors where two mass flow rates are posi \begin{lstlisting}[language=modelica] model m2 Fluidport c(m_flow(min=0)); - $\ldots$ + ... end m2; \end{lstlisting} Consider the case of and all other mass flow rates positive (with the min attribute set accordingly). Connecting \lstinline!m1.c! with \lstinline!m2.c! and \lstinline!m3.c!, such that + \begin{lstlisting}[language=modelica] -m2.c.m_flow.min = 0; // max(-m2.c.m_flow,0) = 0 -m3.c.m_flow.min = 0; // max(-m3.c.m_flow,0) = 0 + m2.c.m_flow.min = 0; // max(-m2.c.m_flow,0) = 0 + m3.c.m_flow.min = 0; // max(-m3.c.m_flow,0) = 0 \end{lstlisting} results in the following equation: \begin{equation*} -\text{\lstinline!inStream!}(h_{\mathrm{outflow},1})=\frac{\operatorname{max}(-\tilde{m}_2,0)h_{\mathrm{outflow},2}+\operatorname{max}(-\tilde{m}_3,0)h_{\mathrm{outflow},3}}{\operatorname{max}(-\tilde{m}_2,0)+\operatorname{max}(-\tilde{m}_3,0)}=\frac{0}{0} +inStream(h_{outflow,1})=\frac{\text{max}(-\dot{m}_2,0)h_{outflow,2}+\text{max}(-\dot{m}_3,0)h_{outflow,3}}{\text{max}(-\dot{m}_2,0)+\text{max}(-\dot{m}_3,0)}=\frac{0}{0} \end{equation*} -\lstinline!inStream! cannot be evaluated for a connector, on which +The \lstinline!inStream()! operator cannot be evaluated for a connector, on which the mass flow rate has to be negative by definition. The reason is that the value is arbitrary, which is why it is defined as follows. \begin{equation*} -\text{\lstinline!inStream!}(h_{\mathrm{outflow},1}):=h_{\mathrm{outflow},1} +inStream(h_{outflow,1}):=h_{outflow,1} \end{equation*} -For the remaining connectors, \lstinline!inStream! reduces to a simple result. -\begin{align*} -\text{\lstinline!inStream!}(h_{\mathrm{outflow},2}) &= \frac{\operatorname{max}(-\tilde{m}_1,0)h_{\mathrm{outflow},1}+\operatorname{max}(-\tilde{m}_3,0)h_{\mathrm{outflow},3}}{\operatorname{max}(-\tilde{m}_1,0)+\operatorname{max}(-\tilde{m}_3,0)} - = h_{\mathrm{outflow},1}\\ -\text{\lstinline!inStream!}(h_{\mathrm{outflow},3}) &= \frac{\operatorname{max}(-\tilde{m}_1,0)h_{\mathrm{outflow},1}+\operatorname{max}(-\tilde{m}_2,0)h_{\mathrm{outflow},2}}{\operatorname{max}(-\tilde{m}_1,0)+\operatorname{max}(-\tilde{m}_2,0)} - = h_{\mathrm{outflow},1} -\end{align*} +For the remaining connectors the inStream() operator reduces to a simple +result. +\begin{eqnarray*} +inStream(h_{outflow,2})&=\frac{\text{max}(-\dot{m}_1,0)h_{outflow,1}+\text{max}(-\dot{m}_3,0)h_{outflow,3}}{\text{max}(-\dot{m}_1,0)+\text{max}(-\dot{m}_3,0)}=h_{outflow,1}\\ +inStream(h_{outflow,3})&=\frac{\text{max}(-\dot{m}_1,0)h_{outflow,1}+\text{max}(-\dot{m}_2,0)h_{outflow,2}}{\text{max}(-\dot{m}_1,0)+\text{max}(-\dot{m}_2,0)}=h_{outflow,1} +\end{eqnarray*} Again, the previous non-linear algebraic system of equations is removed. This means that utilizing the information about uni-directional flow is very important. To summarize, if all mass flow rates are zero, the balance equations for -stream variables \eqref{eq:D1} and for flows \eqref{eq:D2} are identically fulfilled. In -such a case, any value of $h_{\mathrm{mix}}$ fulfills \eqref{eq:D1}, i.e., a unique +stream variables (\ref{eq:D1}) and for flows (\ref{eq:D2}) are identically fulfilled. In +such a case, any value of h\_mix fulfills (\ref{eq:D1}), i.e., a unique mathematical solution does not exist. This specification only requires that a solution fulfills the balance equations. Additionally, a recommendation is given to compute all unknowns in a unique way, by -providing an explicit formula for \lstinline!inStream!. Due to the +providing an explicit formula for the \lstinline!inStream! operator. Due to the definition, that only flows where the corresponding \lstinline!min! attribute is neither zero nor positive enter this formula, a meaningful physcial result is always obtained, even in case of zero mass flow rate. As a diff --git a/chapters/equations.tex b/chapters/equations.tex index 241569b97..e67fa3b37 100644 --- a/chapters/equations.tex +++ b/chapters/equations.tex @@ -1,30 +1,29 @@ -\chapter{Equations}\label{equations} +\chapter{Equations}\doublelabel{equations} -An \firstuse{equation}\index{equation} is part of a class definition. -A scalar equation relates scalar variables, i.e., constrains the values that these variables can take simultaneously. -When $n$-1 variables of an equation containing $n$ variables are known, the value of the $n$th variable can be inferred (solved for). -In contrast to an algorithm section, there is no order between the equations in an equation section and they can be solved separately. +\section{Equation Categories}\doublelabel{equation-categories} -\section{Equation Categories}\label{equation-categories} - -Equations in Modelica can be classified into different categories depending on the syntactic context in which they occur: +Equations in Modelica can be classified into different categories +depending on the syntactic context in which they occur: \begin{itemize} \item - Normal equality equations occurring in equation sections, including \lstinline!connect!-equations and other equation types of special syntactic form (\cref{equations-in-equation-sections}). + \emph{Normal equality equations} occurring in equation sections, + including connect-equations and other equation types of special + syntactic form (\autoref{equations-in-equation-sections}). \item - Declaration equations\index{declaration equation|hyperpageit}, which are part of variable, parameter, or constant declarations (\cref{declaration-equations}). + \emph{Declaration equations}, which are part of variable, parameter, + or constant declarations (\autoref{declaration-equations}). \item - Modification equations\index{modification equation|hyperpageit}, which are commonly used to modify attributes of classes (\cref{modifications}). + \emph{Modification equations}, which are commonly used to modify + attributes of classes (\autoref{modifications}). \item - \firstuse{Binding equations}\index{binding equation}, which include both declaration equations and element modification for the value of the variable itself. - These are considered equations when appearing outside functions, and then a component with a binding equation has its value bound to some expression. - (Binding equations can also appear in functions, see \cref{initialization-and-binding-equations-of-components-in-functions}.) + \emph{Binding equations}, which include both declaration equations and + modification equations (for the value itself). \item - \willintroduce{Initial equations}, which are used to express equations for solving initialization problems (\cref{initialization-initial-equation-and-initial-algorithm}). + \emph{Initial equations}, which are used to express equations for + solving initialization problems (\autoref{initialization-initial-equation-and-initial-algorithm}). \end{itemize} - -\section{Flattening and Lookup in Equations}\label{flattening-and-lookup-in-equations} +\section{Flattening and Lookup in Equations}\doublelabel{flattening-and-lookup-in-equations} A flattened equation is identical to the corresponding nonflattened equation. @@ -32,14 +31,7 @@ \section{Flattening and Lookup in Equations}\label{flattening-and-lookup-in-equa Names in an equation shall be found by looking up in the partially flattened enclosing class of the equation. -\section{Equations in Equation Sections}\label{equations-in-equation-sections} - -An equation section is comprised of the keyword \lstinline!equation!\index{equation@\robustinline{equation}} followed by a sequence of equations. -The formal syntax is as follows: -\begin{lstlisting}[language=grammar] -equation-section : - [ initial ] equation { equation ";" } -\end{lstlisting} +\section{Equations in Equation Sections}\doublelabel{equations-in-equation-sections} The following kinds of equations may occur in equation sections. The syntax is defined as follows: @@ -56,7 +48,7 @@ \section{Equations in Equation Sections}\label{equations-in-equation-sections} No statements are allowed in equation sections, including the assignment statement using the := operator. -\subsection{Simple Equality Equations}\label{simple-equality-equations} +\subsection{Simple Equality Equations}\doublelabel{simple-equality-equations} Simple equality equations are the traditional kinds of equations known from mathematics that express an equality relation between two @@ -70,7 +62,7 @@ \subsection{Simple Equality Equations}\label{simple-equality-equations} \end{lstlisting} The types of the left-hand-side and the right-hand-side of an equation need to be compatible in the same way as two arguments of binary -operators (\cref{type-compatible-expressions}). +operators (\autoref{type-compatible-expressions}). Three examples: \begin{itemize} @@ -82,20 +74,21 @@ \subsection{Simple Equality Equations}\label{simple-equality-equations} \begin{nonnormative} Note: According to the grammar the if-then-else expression in the second example needs to be enclosed in parentheses to avoid parsing -ambiguities. Also compare with \cref{assignments-from-called-functions-with-multiple-results} about calling +ambiguities. Also compare with \autoref{assignments-from-called-functions-with-multiple-results} about calling functions with several results in assignment statements. \end{nonnormative} -\subsection{For-Equations -- Repetitive Equation Structures}\label{for-equations-repetitive-equation-structures} +\subsection{For-Equations -- Repetitive Equation Structures}\doublelabel{for-equations-repetitive-equation-structures} -The syntax of a \lstinline!for!-equation\index{for@\robustinline{for}!equation}\index{loop@\robustinline{loop}!for-equation@\robustinline{for}-equation} is as follows: +The syntax of a for-equation is as follows: \begin{lstlisting}[language=grammar] for for-indices loop { equation ";" } end for ";" \end{lstlisting} -A \lstinline!for!-equation may optionally use several iterators (\lstinline[language=grammar]!for-indices!)\index{in@\robustinline{in}!for-equation@\robustinline{for}-equation}, see \cref{nested-for-loops-and-reduction-expressions-with-multiple-iterators} for more information: +For-equations may optionally use several iterators (for-indices), see +\autoref{nested-for-loops-and-reduction-expressions-with-multiple-iterators} for more information: \begin{lstlisting}[language=grammar] for-indices: for-index {"," for-index} @@ -104,44 +97,50 @@ \subsection{For-Equations -- Repetitive Equation Structures}\label{for-equations IDENT [ in expression ] \end{lstlisting} -The following is one example of a prefix of a \lstinline!for!for!-equation: +The following is one example of a prefix of a for-equation: \begin{lstlisting}[language=grammar] for IDENT in expression loop \end{lstlisting} -\subsubsection{Explicit Iteration Ranges of For-Equations}\label{explicit-iteration-ranges-of-for-equations} - -The \lstinline!expression! of a \lstinline!for!-equation shall be a vector expression, where more general array expressions are treated as vector of vectors or vector of matrices. -It is evaluated once for each \lstinline!for!-equation, and is evaluated in the scope immediately enclosing the \lstinline!for!-equation. -The expression of a \lstinline!for!-equation shall be a parameter expression. -The iteration range of a \lstinline!for!-equation can also be specified as \lstinline!Boolean! or as an enumeration type, see \cref{types-as-iteration-ranges} for more information. -The loop-variable (\lstinline!IDENT!) is in scope inside the loop-construct and shall not be assigned to. -For each element of the evaluated vector expression, in the normal order, the loop-variable gets the value of that element and that is used to evaluate the body of the \lstinline!for!-loop. +\subsubsection{Explicit Iteration Ranges of For-Equations}\doublelabel{explicit-iteration-ranges-of-for-equations} +The \lstinline!expression! of a for-equation shall be a vector expression, +where more general array expressions are treated as vector of vectors or vector of matrices. +It is evaluated once for each for-equation, and is evaluated in the scope +immediately enclosing the for-equation. The expression of a for-equation +shall be a parameter expression. The iteration range of a for-equation +can also be specified as Boolean or as an enumeration type, see +\autoref{types-as-iteration-ranges} for more information. The loop-variable (\lstinline!IDENT!) is in scope +inside the loop-construct and shall not be assigned to. +For each element of the evaluated vector expression, in the normal order, the loop-variable +gets the value of that element and that is used to evaluate the body of the for-loop. \begin{example} \begin{lstlisting}[language=modelica] -for i in 1 : 10 loop // i takes the values 1, 2, 3, $\ldots$, 10 +for i in 1:10 loop // i takes the values 1,2,3,...,10 for r in 1.0 : 1.5 : 5.5 loop // r takes the values 1.0, 2.5, 4.0, 5.5 -for i in {1, 3, 6, 7} loop // i takes the values 1, 3, 6, 7 +for i in {1,3,6,7} loop // i takes the values 1, 3, 6, 7 for i in TwoEnums loop // i takes the values TwoEnums.one, TwoEnums.two // for TwoEnums = enumeration(one,two) \end{lstlisting} -The loop-variable may hide other variables as in the following example. Using another name for the loop-variable is, however, strongly recommended. +The loop-variable may hide other variables as in the following +example. Using another name for the loop-variable is, however, strongly +recommended. \begin{lstlisting}[language=modelica] - constant Integer j = 4; + constant Integer j=4; Real x[j] equation for j in 1:j loop // The loop-variable j takes the values 1,2,3,4 - x[j] = j; // Uses the loop-variable j + x[j]=j; // Uses the loop-variable j end for; \end{lstlisting} \end{example} -\subsubsection{Implicit Iteration Ranges of For-Equations}\label{implicit-iteration-ranges-of-for-equations} +\subsubsection{Implicit Iteration Ranges of For-Equations}\doublelabel{implicit-iteration-ranges-of-for-equations} -The iteration range of a loop-variable may sometimes be inferred from its use as an array index. See \cref{implicit-iteration-ranges} for more information. +The iteration range of a loop variable may sometimes be inferred from +its use as an array index. See \autoref{implicit-iteration-ranges} for more information. \begin{example} \begin{lstlisting}[language=modelica] @@ -152,22 +151,27 @@ \subsubsection{Implicit Iteration Ranges of For-Equations}\label{implicit-iterat \end{lstlisting} \end{example} -\subsection{Connect-Equations}\label{connect-equations} +\subsection{Connect-Equations}\doublelabel{connect-equations} -A \lstinline!connect!-equation has the following syntax: +A connect-equation has the following syntax: \begin{lstlisting}[language=grammar] connect "(" component-reference "," component-reference ")" ";" \end{lstlisting} -These can be placed inside \lstinline!for!-equations and \lstinline!if!-equations; provided the indices of the \lstinline!for!-loop and conditions of the \lstinline!if!-equation are parameter expressions that do not depend on \lstinline!cardinality!, \lstinline!rooted!, \lstinline!Connections.rooted!, or \lstinline!Connections.isRoot!. -The \lstinline!for!-equations/\lstinline!if!-equations are expanded. -\lstinline!connect!-equations are described in detail in \cref{connect-equations-and-connectors}. +These can be placed inside for-equations and if-equations; provided the +indices of the for-loop and conditions of the if-clause are parameter +expressions that do not depend on cardinality, rooted, +Connections.rooted, or Connections.isRoot. The +for-equations/if-equations are expanded. Connect-equations are described +in detail in \autoref{connect-equations-and-connectors}. -The same restrictions apply to \lstinline!Connections.branch!, \lstinline!Connections.root!, and \lstinline!Connections.potentialRoot!; which after expansion are handled according to \cref{equation-operators-for-overconstrained-connection-based-equation-systems1}. +The same restrictions apply to Connections\allowbreak{}.branch, Connections\allowbreak{}.root, and +Connections\allowbreak{}.potentialRoot; which after expansion are handled according +to \autoref{equation-operators-for-overconstrained-connection-based-equation-systems}. -\subsection{If-Equations}\label{if-equations} +\subsection{If-Equations}\doublelabel{if-equations} -The \lstinline!if!-equations\index{if@\robustinline{if}!equation}\index{then@\robustinline{then}!if-equation@\robustinline{if}-equation}\index{else@\robustinline{else}!if-equation@\robustinline{if}-equation}\index{elseif@\robustinline{elseif}!if-equation@\robustinline{if}-equation} have the following syntax: +If-equations have the following syntax: \begin{lstlisting}[language=grammar] if expression then { equation ";" } @@ -179,23 +183,32 @@ \subsection{If-Equations}\label{if-equations} end if ";" \end{lstlisting} -The \lstinline!expression! of an \lstinline!if!- or \lstinline!elseif!-clause must be a scalar \lstinline!Boolean! expression. -One \lstinline!if!-clause, and zero or more \lstinline!elseif!-clauses, and an optional \lstinline!else!-clause together form a list of branches. -One or zero of the bodies of these \lstinline!if!-, \lstinline!elseif!- and \lstinline!else!-clauses is selected, by evaluating the conditions of the \lstinline!if!- and \lstinline!elseif!-clauses sequentially until a condition that evaluates to true is found. -If none of the conditions evaluate to true the body of the \lstinline!else!-clause is selected (if an \lstinline!else!-clause exists, otherwise no body is selected). -In an equation section, the equations in the body are seen as equations that must be satisfied. -The bodies that are not selected have no effect on that model evaluation. - -The \lstinline!if!-equations in equation sections which do not have exclusively parameter expressions as switching conditions shall have the same number of equations in each branch (a missing else is counted as zero equations and the number of equations is defined after expanding the equations to scalar equations). +The \lstinline!expression! of an if- or elseif-clause must be a scalar Boolean +expression. One if-clause, and zero or more elseif-clauses, and an +optional else-clause together form a list of branches. One or zero of +the bodies of these if-, elseif- and else-clauses is selected, by +evaluating the conditions of the if- and elseif-clauses sequentially +until a condition that evaluates to true is found. If none of the +conditions evaluate to true the body of the else-clause is selected (if +an else-clause exists, otherwise no body is selected). In an equation +section, the equations in the body are seen as equations that must be +satisfied. The bodies that are not selected have no effect on that model +evaluation. + +If-equations in equation sections which do not have exclusively +parameter expressions as switching conditions shall have the same number +of equations in each branch (a missing else is counted as zero equations +and the number of equations is defined after expanding the equations to +scalar equations). \begin{nonnormative} If this condition is violated, the single assignment rule would not hold, because the number of equations may change during simulation although the number of unknowns remains the same. \end{nonnormative} -\subsection{When-Equations}\label{when-equations} +\subsection{When-Equations}\doublelabel{when-equations} -The \lstinline!when!-equations\index{when@\robustinline{when}!equation}\index{then@\robustinline{then}!when-equation@\robustinline{when}-equation}\index{elsewhen@\robustinline{elsewhen}!when-equation@\robustinline{when}-equation} have the following syntax: +When-equations have the following syntax: \begin{lstlisting}[language=grammar] when expression then { equation ";" } @@ -204,11 +217,13 @@ \subsection{When-Equations}\label{when-equations} end when ";" \end{lstlisting} -The \lstinline!expression! of a \lstinline!when!-equation shall be a discrete-time \lstinline!Boolean! scalar or vector expression. -The equations within a \lstinline!when!-equation are activated only at the instant when the scalar expression or any of the elements of the vector expression becomes true. +The \lstinline!expression! of a when-equation shall be a discrete-time Boolean +scalar or vector expression. The statements within a when-equation are +activated when the scalar expression or any of the elements of the +vector expression becomes true. \begin{example} -The order between the equations in a \lstinline!when!-equation does not matter, e.g. +The order between the equations in a when-equation does not matter, e.g. \begin{lstlisting}[language=modelica] equation when x > 2 then @@ -219,61 +234,68 @@ \subsection{When-Equations}\label{when-equations} \end{lstlisting} \end{example} -\subsubsection{Defining When-Equations by If-Expressions in Equality Equations}\label{defining-when-equations-by-if-expressions-in-equality-equations} +\subsubsection{Defining When-Equations by If-Expressions in Equality Equations}\doublelabel{defining-when-equations-by-if-expressions-in-equality-equations} -A \lstinline!when!-equation: +A when-equation: \begin{lstlisting}[language=modelica] equation - when x > 2 then + when x>2 then v1 = expr1; v2 = expr2; end when; \end{lstlisting} -is conceptually equivalent to the following equations containing special \lstinline!if!-expressions + +is conceptually equivalent to the following equations containing special +if-expressions + \begin{lstlisting}[language=modelica] // Not correct Modelica - Boolean b(start = x.start > 2); + Boolean b(start=x.start>2); equation - b = x > 2; + b = x>2; v1 = if edge(b) then expr1 else pre(v1); v2 = if edge(b) then expr2 else pre(v2); \end{lstlisting} \begin{nonnormative} -The equivalence is conceptual since \lstinline!pre($\ldots$)! of a non discrete-time \lstinline!Real! variable or expression can only be used within a \lstinline!when!-clause. Example: +The equivalence is conceptual since \lstinline!pre()! of a non +discrete-time Real variable or expression can only be used within a +when-clause. Example: \begin{lstlisting}[language=modelica] - /* discrete */ Real x; + /* discrete*/ Real x; input Real u; output Real y; equation when sample() then - x = a * pre(x) + b * pre(u); + x = a*pre(x)+b*pre(u); end when; y = x; \end{lstlisting} -Here, \lstinline!x! is a discrete-time variable (whether it is declared with the \lstinline!discrete! prefix or not), but \lstinline!u! and \lstinline!y! cannot be discrete-time variables -(since they are not assigned in \lstinline!when!-clauses). However, \lstinline!pre(u)! is legal within the \lstinline!when!-clause, since the body of the \lstinline!when!-clause is only evaluated at events, and thus all expressions -are discrete-time expressions. +In this example x is a discrete-time variable (whether it is +declared with the discrete prefix or not), but u and y cannot be +discrete-time variables (since they are not assigned in when-clauses). +However, pre(u) is legal within the when-clause, since the body of the +when-clause is only evaluated at events, and thus all expressions are +discrete-time expressions. \end{nonnormative} -The start values of the introduced \lstinline!Boolean! variables are defined by the taking the start value of the when-condition, as above where \lstinline!b! is a parameter -variable. -The start value of the special functions \lstinline!initial!, \lstinline!terminal!, and \lstinline!sample! is \lstinline!false!. +The start-values of the introduced Boolean variables are defined by the +taking the start-value of the when-condition, as above where \lstinline!b! is a +parameter variable. The start-values of the special functions \lstinline!initial!, +\lstinline!terminal!, and \lstinline!sample! is false. -\subsubsection{Restrictions on Where a When-Equation may Occur}\label{restrictions-on-where-a-when-equation-may-occur} +\subsubsection{Restrictions on Equations within When-Equations}\doublelabel{restrictions-on-equations-within-when-equations} \begin{itemize} \item - \lstinline!when!-equations shall not occur inside initial equations. -\item - \lstinline!when!-equations cannot be nested. + When-statements may not occur inside initial equations. \item - \lstinline!when!-equations can only occur within \lstinline!if!-equations and \lstinline!for!-equations if the controlling expressions are exclusively parameter expressions. + When-equations cannot be nested. \end{itemize} \begin{example} -The following \lstinline!when!-equation is invalid: +The following when-equation is invalid: \begin{lstlisting}[language=modelica] when x > 2 then when y1 > 3 then @@ -283,96 +305,63 @@ \subsubsection{Restrictions on Where a When-Equation may Occur}\label{restrictio \end{lstlisting} \end{example} -\subsubsection{Restrictions on Equations within When-Equations}\label{restrictions-on-equations-within-when-equations} - -The equations within the \lstinline!when!-equation must have one of the following forms: +The equations within the when-equation must have one of the following +forms: \begin{itemize} +\item \lstinline!v = expr;! +\item \lstinline!(out1, out2, out3, ...) = function_call_name(in1, in2, ...);! \item - \lstinline!v = expr;! -\item - \lstinline!(out1, out2, out3, $\ldots$) = function_call_name(in1, in2, $\ldots$);! -\item - Operators \lstinline!assert!, \lstinline!terminate!, \lstinline!reinit!. + operators \lstinline!assert()!, \lstinline!terminate()!, \lstinline!reinit()! \item - The \lstinline!for!- and \lstinline!if!-equations if the equations within the \lstinline!for!- and \lstinline!if!-equations satisfy these requirements. + For- and if-equations if the equations within the for- and + if-equations satisfy these requirements. \item - The different branches of \lstinline!when!/\lstinline!elsewhen! must have the same set of component references on the left-hand side. + The different branches of when/elsewhen must have the same set of + component references on the left-hand side. \item - The branches of an \lstinline!if!-equation inside \lstinline!when!-equations must have the same set of component references on the left-hand side, unless all switching conditions of the \lstinline!if!-equation are parameter expressions. + The branches of an if-then-else clause inside when-equations must have + the same set of component references on the left-hand side, unless the + if-then-else have exclusively parameter expressions as switching + conditions. \end{itemize} -Any left hand side reference, (\lstinline!v!, \lstinline!out1!, \ldots), in a \lstinline!when!-clause must +Any left hand side reference, (\lstinline!v!, \lstinline!out1!, ...), in a when-clause must be a component reference, and any indices must be parameter expressions. \begin{nonnormative} -The needed restrictions on equations within a \lstinline!when!-equation becomes apparent with the following example: +The needed restrictions on equations within a when-equation +becomes apparent with the following example: \begin{lstlisting}[language=modelica] Real x, y; equation x + y = 5; when condition then - 2 * x + y = 7; // error: not valid Modelica + 2*x + y = 7; // error: not valid Modelica end when; \end{lstlisting} -When the equations of the \lstinline!when!-equation are not activated it is not clear which variable to hold constant, either \lstinline!x! or \lstinline!y!. +When the equations of the when-equation are not activated it is +not clear which variable to hold constant, either \lstinline!x! or \lstinline!y!. A corrected version of this example is: \begin{lstlisting}[language=modelica] Real x,y; equation x + y = 5; when condition then - y = 7 - 2 * x; // fine + y = 7 - 2*x; // fine end when; \end{lstlisting} -Here, variable \lstinline!y! is held constant when the \lstinline!when!-equation is deactivated and \lstinline!x! is computed from the first equation using the value of \lstinline!y! from the previous event instant. +Here, variable \lstinline!y! is held constant when the when-equation is +deactivated and \lstinline!x! is computed from the first equation using the +value of \lstinline!y! from the previous event instant. \end{nonnormative} -\begin{example} -The restrictions for \lstinline!if!-equations mean that both of the following variants are illegal: -\begin{lstlisting}[language=modelica] - Real x, y; -equation - if time < 1 then - when sample(1, 2) then - x = time; - end when; - else - when sample(1, 3) then - y = time; - end when; - end if; +\subsubsection{Application of the Single-assignment Rule to When-Equations}\doublelabel{application-of-the-single-assignment-rule-to-when-equations} - when sample(1, 2) then - if time < 1 then - y = time; - else - x = time; - end if; - end when; -\end{lstlisting} -whereas the restriction to parameter-expression is intended to allow: -\begin{lstlisting}[language=modelica] - parameter Boolean b = true; - parameter Integer n = 3; - Real x[n]; -equation - if b then - for i in 1 : n loop - when sample(i, i) then - x[i] = time; - end when; - end for; - end if; -\end{lstlisting} -\end{example} - -\subsubsection{Application of the Single-assignment Rule to When-Equations}\label{application-of-the-single-assignment-rule-to-when-equations} - -The Modelica single-assignment rule (\cref{synchronous-data-flow-principle-and-single-assignment-rule}) has implications for \lstinline!when!-equations: +The Modelica single-assignment rule (\autoref{synchronous-data-flow-principle-and-single-assignment-rule}) has implications for +when-equations: \begin{itemize} -\item - Two \lstinline!when!-equations shall \emph{not} define the same variable. +\item Two when-equations may \emph{not} define the same variable. \begin{nonnormative} Without this rule this may actually happen for the erroneous @@ -384,24 +373,27 @@ \subsubsection{Application of the Single-assignment Rule to When-Equations}\labe model DoubleWhenConflict Boolean close; // Erroneous model: close defined by two equations! equation - $\ldots$ + ... when condition1 then - $\ldots$ + ... close = true; end when; when condition2 then close = false; end when; - $\ldots$ + ... end DoubleWhenConflict; \end{lstlisting} -One way to resolve the conflict would be to give one of the two \lstinline!when!-equations higher priority. -This is possible by rewriting the \lstinline!when!-equation using \lstinline!elsewhen!, as in the \lstinline!WhenPriority! model below or using the statement version of the \lstinline!when!-construct, see \cref{when-statements}. +One way to resolve the conflict would be to give one of the two +when-equations higher priority. This is possible by rewriting the +when-equation using \lstinline!elsewhen!, as in the \lstinline!WhenPriority! model +below or using the statement version of the when-construct, see \autoref{when-statements}. \end{nonnormative} -\item - A \lstinline!when!-equation involving elsewhen-parts can be used to resolve assignment conflicts since the first of the when/elsewhen parts are given higher priority than later ones: +\item When-equations involving elsewhen-parts can be used to resolve + assignment conflicts since the first of the when/elsewhen parts are + given higher priority than later ones: \begin{nonnormative} Below it is well defined what happens if both conditions become \lstinline!true! at the same time instant since \lstinline!condition1! with @@ -410,92 +402,106 @@ \subsubsection{Application of the Single-assignment Rule to When-Equations}\labe model WhenPriority Boolean close; // Correct model: close defined by two equations! algorithm - $\ldots$ + ... when condition1 then close = true; elsewhen condition2 then close = false; end when; - $\ldots$ + ... end WhenPriority; \end{lstlisting} \end{nonnormative} \end{itemize} -\subsection{reinit}\label{reinit} +\subsection{reinit}\doublelabel{reinit} -\lstinline!reinit! can only be used in the body of a \lstinline!when!-equation. -It has the following syntax: +The \lstinline!reinit! operator can only be used in the body of a when-equation. It +has the following syntax: \begin{lstlisting}[language=modelica] reinit(x, expr); \end{lstlisting} -The operator reinitializes \lstinline!x! with \lstinline!expr! at an event instant. \lstinline!x! is a \lstinline!Real! variable (or an array of \lstinline!Real! variables) that must be selected as a state (resp., states), i.e.\ \lstinline!reinit! on \lstinline!x! implies \lstinline!stateSelect = StateSelect.always! on \lstinline!x!. \lstinline!expr! needs to be type-compatible with \lstinline!x!. \lstinline!reinit! can for the same variable (resp.\ array of variables) only be applied (either as an individual variable or as part of an array of variables) in one equation (having \lstinline!reinit! of the same variable in when and else-when of the same variable is allowed). In case of \lstinline!reinit! active during initialization (due to when initial), see \cref{initialization-initial-equation-and-initial-algorithm}. - -\lstinline!reinit! does not break the single assignment rule, because \lstinline!reinit(x, expr)! in equations evaluates \lstinline!expr! to a value, -then at the end of the current event iteration step it assigns this value to \lstinline!x! (this copying from values to reinitialized state(s) is -done after all other evaluations of the model and before copying \lstinline!x! to \lstinline!pre(x)!). +The operator reinitializes \lstinline!x! with \lstinline!expr! at an event instant. \lstinline!x! is a +\lstinline!Real! +variable (or an array of \lstinline!Real! variables) that must be selected as a +state (resp., states) , i.e. reinit on x implies +stateSelect=StateSelect.always on x. \lstinline!expr! needs to be type-compatible +with \lstinline!x!. The reinit operator can for the same variable (resp. array of +variables) only be applied (either as an individual variable or as part +of an array of variables) in one equation (having reinit of the same +variable in when and else-when of the same variable is allowed). In case +of reinit active during initialization (due to when initial), see +\autoref{initialization-initial-equation-and-initial-algorithm}. + +The reinit operator does not break the single assignment rule, because +reinit(x,expr) in equations evaluates expr to a value (value), then at +the end of the current event iteration step it assigns this value to x +(this copying from values to reinitialized state(s) is done after all +other evaluations of the model and before copying x to pre(x)). \begin{example} If a higher index system is present, i.e., constraints between state variables, some state variables need to be redefined to non-state variables. During simulation, non-state variables should be chosen in -such a way that variables with an applied \lstinline!reinit! are -selected as states at least when the corresponding \lstinline!when!-clauses become -active. If this is not possible, an error occurs, since otherwise -\lstinline!reinit! would be applied to a non-state variable. +such a way that variables with an applied \lstinline!reinit! operator are +selected as states at least when the corresponding when-clauses become +active. If this is not possible, an error occurs, since otherwise the +\lstinline!reinit! operator would be applied on a non-state variable. -Example for the usage of \lstinline!reinit! (bouncing ball): +Example for the usage of the \lstinline!reinit! operator (bouncing ball): \begin{lstlisting}[language=modelica] der(h) = v; der(v) = if flying then -g else 0; -flying = not (h <= 0 and v <= 0); +flying = not(h<=0 and v<=0); when h < 0 then - reinit(v, -e * pre(v)); + reinit(v, -e*pre(v)); end when \end{lstlisting} \end{example} -\subsection{assert}\label{assert} +\subsection{assert}\doublelabel{assert} -An equation or statement of one of the following forms is an assertion\index{assert@\robustinline{assert}!equation}: +An equation or statement of one of the following forms: \begin{lstlisting}[language=modelica] assert(condition, message); // Uses level=AssertionLevel.error assert(condition, message, assertionLevel); assert(condition, message, level = assertionLevel); \end{lstlisting} -Here, \lstinline!condition! is a \lstinline!Boolean! expression, \lstinline!message! is a \lstinline!String! expression, and \lstinline!assertionLevel! is an optional parameter expression of the built-in enumeration type \lstinline!AssertionLevel!. -It can be used in equation sections or algorithm sections. -\begin{nonnormative} -This means that \lstinline!assert! can be called as if it were a function with three formal parameters, the third formal parameter has the name \lstinline!level! and the default value \lstinline!AssertionLevel.error!. -\end{nonnormative} +is an assertion, where \lstinline!condition! is a Boolean expression, \lstinline!message! is a +string expression, and \lstinline!level! is a built-in enumeration with a default +value. It can be used in equation sections or algorithm sections. \begin{nonnormative} -A parameter expression is required for \lstinline!level! since it shall be evaluated at compile time. +This means that assert can be called as if it were a function with three formal parameters, the third formal parameter has the +name \lstinline!level! and the default value \lstinline!AssertionLevel.error!. \end{nonnormative} -If the \lstinline!condition! of an assertion is true, \lstinline!message! is not evaluated and the procedure call is ignored. -If the \lstinline!condition! evaluates to false, different actions are taken depending on the \lstinline!level! input: +If the \lstinline!condition! of an assertion is true, \lstinline!message! is not evaluated and +the procedure call is ignored. If the \lstinline!condition! evaluates to false +different actions are taken depending on the level input: \begin{itemize} \item - \lstinline!level = AssertionLevel.error!: - The current evaluation is aborted. - The simulation may continue with another evaluation. - If the simulation is aborted, \lstinline!message! indicates the cause of the error. + \lstinline!level = AssertionLevel.error!: The current evaluation is aborted. The + simulation may continue with another evaluation. If the simulation is aborted, \lstinline!message! indicates the + cause of the error. \begin{nonnormative} Ways to continue simulation with another evaluation include using a shorter step-size, or changing the values of iterationvariables. \end{nonnormative} - Failed assertions take precedence over successful termination, such that if the model first triggers the end of successful analysis by reaching the stop-time or explicitly with \lstinline!terminate!, but the evaluation with \lstinline!terminal()=true! triggers an assert, the analysis failed. + Failed assertions take precedence over successful termination, such + that if the model first triggers the end of successful analysis by + reaching the stop-time or explicitly with \lstinline!terminate()!, but the + evaluation with \lstinline!terminal()=true! triggers an assert, the analysis + failed. \item - \lstinline!level = AssertionLevel.warning!: - The current evaluation is not aborted. + \lstinline!level = AssertionLevel.warning!: The current evaluation is not aborted. \lstinline!message! indicates the cause of the warning. \begin{nonnormative} - It is recommended to report the warning only once when the condition becomes false, and it is reported that the condition is no longer violated when the condition returns to true. - The \lstinline!assert!-statement shall have no influence on the behavior of the model. - For example, by evaluating the condition and reporting the message only after accepted integrator steps. - \lstinline!condition! needs to be implicitly treated with \lstinline!noEvent! since otherwise events might be triggered that can lead to slightly changed simulation results. + It is recommended to report the warning only once when the condition becomes false, and it is reported that the condition is no longer + violated when the condition returns to true. The \lstinline!assert(..)! statement shall have no influence on the behavior of the model. + For example, by evaluating the condition and reporting the message only after accepted integrator steps. \lstinline!condition! needs to + be implicitly treated with \lstinline!noEvent(..)! since otherwise events might be triggered that can lead to slightly changed simulation results. \end{nonnormative} \end{itemize} @@ -514,52 +520,57 @@ \subsection{assert}\label{assert} but the simulation should continue without any further action. The corresponding code would be: \begin{lstlisting}[language=modelica] -assert(T > 250 and T < 400, "Medium model outside full accuracy range", AssertionLevel.warning); +assert(T > 250 and T < 400, "Medium model outside full accuracy range", AssertionLevel.warning); assert(T > 200 and T < 500, "Medium model outside feasible region"); \end{lstlisting} \end{nonnormative} -\subsection{terminate}\label{terminate} +\subsection{terminate}\doublelabel{terminate} -The \lstinline!terminate!\index{terminate@\robustinline{terminate}!equation@\robustinline{equation}}-equation or statement (using function syntax) successfully terminates the analysis which was carried out, see also \cref{assert}. -The termination is not immediate at the place where it is defined since not all variable results might be available that are necessary for a successful stop. -Instead, the termination actually takes place when the current integrator step is successfully finalized or at an event instant after the event handling has been completed before restarting the integration. +The \lstinline!terminate(...)! equation or statement (using function +syntax) successfully terminates the analysis which was carried out, +see also \autoref{assert}. The termination is not immediate at the place +where it is defined since not all variable results might be available +that are necessary for a successful stop. Instead, the termination +actually takes place when the current integrator step is successfully +finalized or at an event instant after the event handling has been +completed before restarting the integration. -\lstinline!terminate! takes a string argument indicating the reason for the success. +The terminate clause has a string argument indicating the reason for the success. \begin{example} -The intention of \lstinline!terminate! is to give more complex stopping criteria than a fixed point in time: +The intention of the terminate clause is to give more complex stopping criteria than a fixed point in time: \begin{lstlisting}[language=modelica] model ThrowingBall Real x(start=0); Real y(start=1); equation - der(x) = $\ldots$; - der(y) = $\ldots$; + der(x)=... + der(y)=... algorithm - when y < 0 then + when y<0 then terminate("The ball touches the ground"); end when; end ThrowingBall; \end{lstlisting} \end{example} -\subsection{Equation Operators for Overconstrained Connection-Based Equation Systems}\label{equation-operators-for-overconstrained-connection-based-equation-systems} +\subsection{Equation Operators for Overconstrained Connection-Based Equation Systems}\doublelabel{equation-operators-for-overconstrained-connection-based-equation-systems} -See \cref{equation-operators-for-overconstrained-connection-based-equation-systems1} for a description of this topic. +See \autoref{equation-operators-for-overconstrained-connection-based-equation-systems} for a description of this topic. -\section{Synchronous Data-flow Principle and Single Assignment Rule}\label{synchronous-data-flow-principle-and-single-assignment-rule} +\section{Synchronous Data-flow Principle and Single Assignment Rule}\doublelabel{synchronous-data-flow-principle-and-single-assignment-rule} Modelica is based on the synchronous data flow principle and the single assignment rule, which are defined in the following way: \begin{enumerate} -\item Discrete-time variables keep their values until these variables are explicitly changed. +\item Discrete variables keep their actual values until these variables are explicitly changed. Differentiated variables have \lstinline!der(x)! corresponding to the time-derivative of \lstinline!x!, -and \lstinline!x! is continuous, except when \lstinline!reinit! is triggered, see \cref{reinit}. +and \lstinline!x! is continuous, except when reinit is triggered - see \autoref{reinit}. Variable values can be accessed at any time instant during continuous integration and at event instants. \item At every time instant, during continuous integration and at event instants, -the equations express relations between variables which have to be fulfilled concurrently. +the equations express relations between variables which have to be fulfilled concurrently.. \item Computation and communication at an event instant does not take time. \begin{nonnormative} @@ -568,16 +579,13 @@ \section{Synchronous Data-flow Principle and Single Assignment Rule}\label{synch \item There must exist a perfect matching of variables to equations after flattening, where a variable can only be matched to equations that can contribute to solving for the variable -(\firstuse{perfect matching rule}\index{perfect matching rule} -- previously called \emph{single assignment rule}\index{single assignment rule|see{perfect matching rule}}); see also globally balanced \cref{balanced-models}. +(\firstuse{perfect matching rule} --- previously called \emph{single assignment rule}); see also globally balanced \autoref{balanced-models}. \end{enumerate} -\section{Events and Synchronization}\label{events-and-synchronization} - -An \firstuse{event}\index{event} is something that occurs instantaneously at a specific time or when a specific condition occurs. -Events are for example defined by the condition occurring in a \lstinline!when!-clause, \lstinline!if!-equation, or \lstinline!if!-expression. +\section{Events and Synchronization}\doublelabel{events-and-synchronization} The integration is halted and an event occurs whenever an event -generation expression, e.g.\ \lstinline!x > 2! o or \lstinline!floor(x)!, changes +generation expression, e.g. \lstinline!x > 2! o or \lstinline!floor(x)!, changes its value. An event generating expression has an internal buffer, and the value of the expression can only be changed at event instants. If the evaluated expression is inconsistent with the buffer, that will @@ -595,11 +603,17 @@ \section{Events and Synchronization}\label{events-and-synchronization} y = if u > uMax then uMax else if u < uMin then uMin else u; \end{lstlisting} -During continuous integration always the same \lstinline!if!-branch is evaluated. -The integration is halted whenever \lstinline!u-uMax! or \lstinline!u-uMin! crosses zero. -At the event instant, the correct \lstinline!if!-branch is selected and the integration is restarted. +During continuous integration always the same if-branch is +evaluated. The integration is halted whenever \lstinline!u-uMax! or \lstinline!u-uMin! +crosses zero. At the event instant, the correct if-branch is +selected and the integration is restarted. -Numerical integration methods of order $n$ ($n \geq 1$) require continuous model equations which are differentiable up to order $n$. This requirement can be fulfilled if \lstinline!Real! elementary relations are not treated literally but as defined above, because discontinuous changes can only occur at event instants and no longer during continuous integration. +Numerical integration methods of order $n$ ($n \geq 1$) require +continuous model equations which are differentiable up to order $n$. This +requirement can be fulfilled if Real elementary relations are not +treated literally but as defined above, because discontinuous changes +can only occur at event instants and no longer during continuous +integration. \end{example} \begin{nonnormative} @@ -613,7 +627,14 @@ \section{Events and Synchronization}\label{events-and-synchronization} exact event instant. \end{nonnormative} -Relations are taken literally also during continuous integration, if the relation or the expression in which the relation is present, are the argument of \lstinline!noEvent!. \lstinline!smooth! also allows relations used as argument to be taken literally. The \lstinline!noEvent! feature is propagated to all subrelations in the scope of the \lstinline!noEvent! application. For \lstinline!smooth! the liberty to not allow literal evaluation is propagated to all subrelations, but the smoothness property itself is not propagated. +Relations are taken literally also during continuous integration, if the +relation or the expression in which the relation is present, are the +argument of the \lstinline!noEvent(..)! function. The \lstinline!smooth(p,x)! operator also +allows relations used as argument to be taken literally. The \lstinline!noEvent! +feature is propagated to all subrelations in the scope of the \lstinline!noEvent! +function. For \lstinline!smooth! the liberty to not allow literal evaluation is +propagated to all subrelations, but the smooth-property itself is not +propagated. \begin{example} \begin{lstlisting}[language=modelica] @@ -622,37 +643,40 @@ \section{Events and Synchronization}\label{events-and-synchronization} z = smooth(0, if u > uMax then uMax elseif u < uMin then uMin else u); \end{lstlisting} -In this case \lstinline!x = y = z!, but a tool might generate events for \lstinline!z!. -The \lstinline!if!-expression is taken literally without inducing state events. +In this case \lstinline!x = y = z!, but a tool might generate events for \lstinline!z!. The +if-expression is taken literally without inducing state events. -The \lstinline!smooth! operator is useful, if e.g.\ the modeler can guarantee that the used \lstinline!if!-expressions fulfill at least the continuity requirement of integrators. -In this case the simulation speed is improved, since no state event iterations occur during integration. -The \lstinline!noEvent! operator is used to guard against \emph{outside domain} errors, e.g.\ \lstinline!y = if noEvent(x >= 0) then sqrt(x) else 0.! +The \lstinline!smooth! function is useful, if e.g. the modeler can guarantee that +the used if-clauses fulfill at least the continuity requirement of +integrators. In this case the simulation speed is improved, since no +state event iterations occur during integration. The \lstinline!noEvent! function is +used to guard against \emph{outside domain} errors, e.g. \lstinline!y = if noEvent(x>= 0) then sqrt(x) else 0.! \end{example} -All equations and assignment statements within \lstinline!when!-clauses and all assignment statements within \lstinline!function! classes are implicitly treated with \lstinline!noEvent!, i.e., relations within the scope of these operators never induce state or time events. +All equations and assignment statements within when-clauses and all +assignment statements within function classes are implicitly treated +with the noEvent function, i.e., relations within the scope of these +operators never induce state or time events. \begin{nonnormative} -Using state events in \lstinline!when!-clauses is unnecessary because the body of a \lstinline!when!-clause is not evaluated during continuous integration. +Using state events in when-clauses is unnecessary because the body of a when-clause is not evaluated during continuous integration. \end{nonnormative} \begin{example} -Two different errors caused by non-discrete-time expressions: \begin{lstlisting}[language=modelica] -when noEvent(x1 > 1) or x2 > 10 then // When-condition must be discrete-time - close = true; +Limit1 = noEvent(x1 > 1); // Error since Limit1 is a discrete-time variable +when noEvent(x1>1) or x2>10 then // error, when-conditions is not a discrete-time expression + Close = true; end when; -above1 = noEvent(x1 > 1); // Boolean equation must be discrete-time \end{lstlisting} -The when-condition rule is stated in \cref{when-equations}, and the rule for a non-\lstinline!Real! equation is stated in \cref{discrete-time-expressions}. \end{example} -Modelica is based on the synchronous data flow principle (\cref{synchronous-data-flow-principle-and-single-assignment-rule}). +Modelica is based on the synchronous data flow principle (\autoref{synchronous-data-flow-principle-and-single-assignment-rule}). \begin{nonnormative} The rules for the synchronous data flow principle guarantee that variables are always defined by a unique set of equations. It is -not possible that a variable is e.g.\ defined by two equations, which +not possible that a variable is e.g. defined by two equations, which would give rise to conflicts or non-deterministic behavior. Furthermore, the continuous and the discrete parts of a model are always automatically ``synchronized''. Example: @@ -691,7 +715,7 @@ \section{Events and Synchronization}\label{events-and-synchronization} \begin{nonnormative} As a consequence, synchronization of events has to be -explicitly programmed in the model, e.g.\ via counters. Example: +explicitly programmed in the model, e.g. via counters. Example: \begin{lstlisting}[language=modelica] Boolean fastSample, slowSample; Integer ticks(start=0); @@ -704,16 +728,16 @@ \section{Events and Synchronization}\label{events-and-synchronization} end when; algorithm when fastSample then // fast sampling - $\ldots$ + ... end when; algorithm when slowSample then // slow sampling (5-times slower) - $\ldots$ + ... end when; \end{lstlisting} -The \lstinline!slowSample! \lstinline!when!-clause is evaluated at every 5th occurrence of the -\lstinline!fastSample! \lstinline!when!-clause. +The \lstinline!slowSample! when-clause is evaluated at every 5th occurrence of the +\lstinline!fastSample! when-clause. \end{nonnormative} \begin{nonnormative} @@ -722,112 +746,134 @@ \section{Events and Synchronization}\label{events-and-synchronization} verification already at compile time. \end{nonnormative} -\section{Initialization, initial equation, and initial algorithm}\label{initialization-initial-equation-and-initial-algorithm} - -Before any operation is carried out with a Modelica model (e.g., simulation or linearization), initialization takes place to assign consistent values for all variables present in the model. -During this phase, called the \firstuse{initialization problem}\index{initialization problem}, also the derivatives (\lstinline!der!), and the pre-variables (\lstinline!pre!), are interpreted as unknown algebraic variables. -The initialization uses all equations and algorithms that are utilized in the intended operation (such as simulation or linearization). - -The equations of a \lstinline!when!-clause are active during initialization, if and only if they are explicitly enabled with \lstinline!initial()!, and only in one of the two forms -\lstinline!when initial() then! or \lstinline!when {$\ldots$, initial(), $\ldots$} then! (and similarly for \lstinline!elsewhen! and algorithms see below). In this case, the \lstinline!when!-clause equations remain active during the -whole initialization phase. In case of a \lstinline!reinit(x, expr)! being active during initialization (due to being inside \lstinline!when initial()!) this is interpreted as adding -\lstinline!x = expr! (the \lstinline!reinit!-equation) as an initial equation. +\section{Initialization, initial equation, and initial algorithm}\doublelabel{initialization-initial-equation-and-initial-algorithm} + +Before any operation is carried out with a Modelica model (e.g., +simulation or linearization), initialization takes place to assign +consistent values for all variables present in the model. During this +phase, also the derivatives, \lstinline!der(..)!, and the pre-variables, \lstinline!pre(..)!, +are interpreted as unknown algebraic variables. The initialization uses +all equations and algorithms that are utilized in the intended operation +(such as simulation or linearization). The equations of a +when-clause are active during initialization, if and only if they are +explicitly enabled with the \lstinline!initial()! operator; and only in one of the +two forms \lstinline!when initial() then! or \lstinline!when {...,initial(),...} then! +(and similarly for algorithms see below). In this case, the when-clause equations remain active during the +whole initialization phase. In case of a +\lstinline!reinit(x, expr)! being active during initialization (due to being inside +\lstinline!when initial()!) this is interpreted as adding \lstinline!x = expr! (the +\lstinline!reinit!-equation) as an initial equation. \begin{nonnormative} -If a \lstinline!when!-clause equation \lstinline!v = expr;! is not active during the initialization phase, the equation \lstinline!v = pre(v)! is added for -initialization. This follows from the mapping rule of \lstinline!when!-clause equations. If the condition of the \lstinline!when!-clause contains \lstinline!initial()!, -but not in one of the specific forms, the \lstinline!when!-clause is not active during initialization: \lstinline!when not initial() then print("simulation started"); end when;! +If a when-clause equation \lstinline!v = expr;! is not active during the initialization phase, the equation \lstinline!v = pre(v)! is added for +initialization. This follows from the mapping rule of when-clause equations. If the condition of the when-clause contains \lstinline!initial()!, +but not in one of the specific forms, the when-clause is not active during initialization: \lstinline!when not initial() then print("simulation started"); end when;! \end{nonnormative} -The algorithmic statements within a \lstinline!when!-statement are active during initialization, if and only they are explicitly enabled with \lstinline!initial()!, and only in one of the two forms \lstinline!when initial() then! or \lstinline!when {$\ldots$, initial(), $\ldots$} then!. -In this case, the algorithmic statements within the \lstinline!when!-statement remain active during the whole initialization phase. - -An active \lstinline!when!-clause inactivates the following \lstinline!elsewhen! (similarly as for \lstinline!when!-clauses during simulation), but apart from that -the first \lstinline!elsewhen initial() then! or \lstinline!elsewhen {$\ldots$, initial(), $\ldots$} then! is similarly active during initialization as -\lstinline!when initial() then! or \lstinline!when {$\ldots$, initial(), $\ldots$} then!. - -\begin{nonnormative} -That means that any subsequent \lstinline!elsewhen initial()! has no effect, -similarly as \lstinline!when false then!. -\end{nonnormative} +The algorithmic statements within a when-statement are active during initialization, if and only they are +explicitly enabled with the \lstinline!initial()! operator; and only in one of the +two forms \lstinline!when initial() then! or \lstinline!when {...,initial(),...} then!. +In this case, the algorithmic statements within the when-statement remain active during the whole initialization phase. \begin{nonnormative} -There is no special handling of inactive \lstinline!when!-statements during initialization, instead variables assigned in \lstinline!when!-statements are initialized using \lstinline!v := pre(v)! before the body of the algorithm (since they are discrete), see \cref{execution-of-an-algorithm-in-a-model}. +There is no special handling of inactive when-statements during initialization, instead +variables assigned in when-statements are initialized using \lstinline!v:=pre(v)! +before the body of the algorithm (since they are discrete), see \autoref{execution-of-an-algorithm-in-a-model}. \end{nonnormative} Further constraints, necessary to determine the initial values of all variables, can be defined in the following ways: \begin{enumerate} \item - As equations in an \lstinline!initial equation!\indexinline{initial equation} section or as assignments in an \lstinline!initial algorithm!\indexinline{initial algorithm} section. - The equations and assignments in these initial sections are purely algebraic, stating constraints between the variables at the initial time instant. - It is not allowed to use \lstinline!when!-clauses in these sections. + As equations in an \lstinline!initial equation! section or as assignments in an + \lstinline!initial algorithm! section. The equations and assignments in these + initial sections are purely algebraic, stating constraints between the + variables at the initial time instant. It is not allowed to use + when-clauses in these sections. \item - For a non-discrete-time \lstinline!Real! variable \lstinline!vc!, the equation \lstinline!pre(vc) = vc! is added to the initialization equations. + For all non-discrete (that is continuous-time) Real variables \lstinline!vc!, the + equation \lstinline!pre(vc) = vc! is added to the initialization + equations. \begin{nonnormative} If \lstinline!pre(vc)! is not present in the flattened model, a tool may choose not to introduce this equation, or if it was introduced it can eliminate it (to avoid the introduction of many dummy variables \lstinline!pre(vc)!). \end{nonnormative} \item - Implicitly by using the \lstinline!start!-attribute for variables with \lstinline!fixed = true!. With \lstinline!start! given by \lstinline!startExpression!: - \begin{itemize} - \item - For a non-discrete-time \lstinline!Real! variable \lstinline!vc!, the equation \lstinline!vc = startExpression! is added to the initialization equations. - \item - For a discrete-time variable \lstinline!vd!, the equation \lstinline!pre(vd) = startExpression! is added to the initialization equations. - \item - For a variable declared as \lstinline!constant! or \lstinline!parameter!, no equation is added to the initialization equations. - \end{itemize} + Implicitly by using the attributes \lstinline!start=value! and \lstinline!fixed=true! in the + declaration of variables: +\begin{itemize} +\item + For all non-discrete (that is continuous-time) Real variables \lstinline!vc!, the + equation \lstinline!vc = startExpression! is added to the initialization + equations, if \lstinline!start = startExpression! and \lstinline!fixed = true!. +\item + For all discrete variables \lstinline!vd!, the equation \lstinline!pre(vd) = startExpression! + is added to the initialization equations, if \lstinline!start = startExpression! + and \lstinline!fixed = true!. +\item + For all variables declared as constant and parameter, with \lstinline!fixed = true!; no equation is added to the initialization equations. +\end{itemize} \end{enumerate} -For constants and parameters, the attribute \lstinline!fixed! defaults to \lstinline!true!, which is the only allowed value for a constant. For other variables, -\lstinline!fixed! defaults to \lstinline!false!. +For constants and parameters, the attribute fixed is by default true. +For other variables fixed is by default false. For all variables +declared as constant it is an error to have \lstinline!fixed = false!. -\lstinline!start!-values of variables having \lstinline!fixed = false! can be used as initial guesses, in case iterative solvers are used in the initialization phase. +Start-values of variables having fixed = false can be used as initial +guesses, in case iterative solvers are used in the initialization phase. \begin{nonnormative} -In case of iterative solver failure, it is recommended to specially report those variables for which the solver needs an initial guess, but which only have the default value of the \lstinline!start!-attribute as defined in \cref{predefined-types-and-classes}, since the lack of appropriate initial guesses is a likely cause of the solver failure. +In case of iterative solver failure, it is recommended to specially report those variables for which the solver needs an initial guess, but which only have the default +value of the start attribute as defined in \autoref{predefined-types-and-classes}, since the lack of appropriate initial guesses is a likely cause of the solver failure. \end{nonnormative} -If a parameter has a modifier for the \lstinline!start!-attribute, does not have \lstinline!fixed = false!, and neither has a binding equation nor is part of a record having a binding equation, the modifier for the \lstinline!start!-attribute can be used to add a parameter binding equation assigning the parameter to that \lstinline!start! value. -In this case a diagnostic message is recommended in a simulation model. +If a parameter has a modifier for the \lstinline!start!-attribute, does not have +\lstinline!fixed=false!, and neither has a binding equation nor is part of a record +having a binding equation, the modifier for the start-attribute can be +used to add a parameter binding equation assigning the parameter to that +start-modifier. In this case a diagnostic message is recommended in a +simulation model. \begin{nonnormative} This is used in libraries to give non-zero defaults so that users can quickly combine models and simulate without setting parameters; but still easily find the parameters that need to be set. \end{nonnormative} -All variables declared as \lstinline!parameter! having \lstinline!fixed = false! are treated as unknowns during the initialization phase, i.e.\ there must be additional equations for them -- and -the \lstinline!start!-value can be used as a guess-value during initialization. +All variables declared as parameter having \lstinline!fixed = false! are treated as +unknowns during the initialization phase, i.e. there must be additional +equations for them -- and the start-value can be used as a guess-value +during initialization. \begin{nonnormative} In the case a parameter has both a binding equation and \lstinline!fixed = false! a diagnostics is recommended, but the parameter should be solved from the binding equation. -Non-discrete-time \lstinline!Real! variables \lstinline!vc! have exactly one initialization value since the rules above assure that during initialization -\lstinline!vc = pre(vc) = vc.startExpression! (if \lstinline!fixed = true!). +Non-discrete (that is continuous-time) \lstinline!Real! variables \lstinline!vc! have exactly one initialization value since the rules above assure that during initialization +\lstinline!vc = pre(vc) = vc.startExpression! (if \lstinline!fixed=true!). Before the start of the integration, it must be guaranteed that for all variables \lstinline!v!, \lstinline!v = pre(v)!. If this is not the case for some variables \lstinline!vi!, \lstinline!pre(vi) := vi! must be set and an event iteration at the initial time must follow, so the model is re-evaluated, until this condition is fulfilled. -A Modelica translator may first transform the continuous equations of a model, at least conceptually, to state space form. This may require to differentiate equations for index +A Modelica translator may first transform the continuous equations of a model, at least conceptually, to state space form. This may require to differentiate equations for index reduction, i.e., additional equations and, in some cases, additional unknown variables are introduced. This whole set of equations, together with the additional constraints -defined above, should lead to an algebraic system of equations where the number of equations and the number of all variables (including \lstinline!der! and \lstinline!pre! +defined above, should lead to an algebraic system of equations where the number of equations and the number of all variables (including \lstinline!der(..)! and \lstinline!pre(..)! variables) is equal. Often, this is a nonlinear system of equations and therefore it may be necessary to provide appropriate guess values (i.e., \lstinline!start! values and -\lstinline!fixed = false!) in order to compute a solution numerically. +\lstinline!fixed=false!) in order to compute a solution numerically. It may be difficult for a user to figure out how many initial equations have to be added, especially if the system has a higher index. A tool may add or remove initial equations -automatically such that the resulting system is structurally nonsingular. In these cases diagnostics are appropriate since the result is not unique and not necessarily what the user -expects. A missing initial value of a discrete-time variable which does not influence the simulation result, may be automatically set to the \lstinline!start! value or its default without -informing the user. For example, variables assigned in a \lstinline!when!-clause which are not accessed outside of the \lstinline!when!-clause and where \lstinline!pre! is not explicitly +automatically such that the resulting system is structurally nonsingular. In these cases diagnostics are appropriate since the result is not unique and may not be what the user +expects. A missing initial value of a discrete variable which does not influence the simulation result, may be automatically set to the start value or its default without +informing the user. For example, variables assigned in a when-clause which are not accessed outside of the when-clause and where the \lstinline!pre()! operator is not explicitly used on these variables, do not have an effect on the simulation. \end{nonnormative} +Examples:. + \begin{example} Continuous time controller initialized in steady-state: \begin{lstlisting}[language=modelica] Real y(fixed = false); // fixed=false is redundant equation - der(y) = a * y + b * u; + der(y) = a*y + b*u; initial equation der(y) = 0; \end{lstlisting} @@ -835,21 +881,21 @@ \section{Initialization, initial equation, and initial algorithm}\label{initiali This has the following solution at initialization: \begin{lstlisting}[language=modelica] der(y) = 0; -y = - b / a * u; +y = -b/a *u; \end{lstlisting} \end{example} \begin{example} -Continuous time controller initialized either in steady-state or by providing a \lstinline!start! value for state \lstinline!y!: +Continuous time controller initialized either in steady-state or by providing a start value for state \lstinline!y!: \begin{lstlisting}[language=modelica] parameter Boolean steadyState = true; parameter Real y0 = 0 "start value for y, if not steadyState"; Real y; equation - der(y) = a * y + b * u; + der(y) = a*y + b*u; initial equation if steadyState then - der(y) = 0; + der(y)=0; else y = y0; end if; @@ -857,11 +903,11 @@ \section{Initialization, initial equation, and initial algorithm}\label{initiali This can also be written as follows (this form is less clear): \begin{lstlisting}[language=modelica] - parameter Boolean steadyState = true; - Real y (start = 0, fixed = not steadyState); - Real der_y(start = 0, fixed = steadyState) = der(y); + parameter Boolean steadyState=true; + Real y (start=0, fixed=not steadyState); + Real der_y(start=0, fixed=steadyState) = der(y); equation - der(y) = a * y + b * u; + der(y) = a*y + b*u; \end{lstlisting} \end{example} @@ -871,7 +917,7 @@ \section{Initialization, initial equation, and initial algorithm}\label{initiali discrete Real y; equation when {initial(), sampleTrigger} then - y = a * pre(y) + b * u; + y = a*pre(y) + b*u; end when; initial equation y = pre(y); @@ -879,30 +925,29 @@ \section{Initialization, initial equation, and initial algorithm}\label{initiali This leads to the following equations during initialization: \begin{lstlisting}[language=modelica] -y = a * pre(y) + b * u; +y = a*pre(y) + b*u; y = pre(y); \end{lstlisting} -with the solution: + +With the solution: \begin{lstlisting}[language=modelica] -y := (b * u) / (1 - a); +y := (b*u)/(1-a) pre(y) := y; \end{lstlisting} \end{example} -\subsection{The Number of Equations Needed for Initialization}\label{the-number-of-equations-needed-for-initialization} +\subsection{The Number of Equations Needed for Initialization}\doublelabel{the-number-of-equations-needed-for-initialization} \begin{nonnormative} In general, for the case of a pure (first order) ordinary -differential equation (ODE) system with $n$ state variables and $m$ output -variables, we will have $n+m$ unknowns in the simulation problem. The ODE -initialization problem has $n$ additional unknowns corresponding to the +differential equation (ODE) system with n state variables and m output +variables, we will have n+m unknowns in the simulation problem. The ODE +initialization problem has n additional unknowns corresponding to the derivative variables. At initialization of an ODE we will need to find -the values of $2n+m$ variables, in contrast to just $n+m$ variables to be +the values of 2n+m variables, in contrast to just n+m variables to be solved for during simulation. -\end{nonnormative} -\begin{example} -Consider the following simple equation system: +\textbf{Example.} Consider the following simple equation system: \begin{lstlisting}[language=modelica] der(x1) = f1(x1); der(x2) = f2(x2); @@ -911,32 +956,38 @@ \subsection{The Number of Equations Needed for Initialization}\label{the-number- Here we have three variables with unknown values: two dynamic variables that also are state variables, \lstinline!x1! and \lstinline!x2!, i.e., -$n=2$, one output variable \lstinline!y!, i.e., $m=1$, and one input variable \lstinline!u! with +n=2, one output variable \lstinline!y!, i.e., m=1, and one input variable \lstinline!u! with known value. A consistent solution of the initial value problem providing initial values for \lstinline!x1!, \lstinline!x2!, \lstinline!der(x1)!, \lstinline!der(x2)!, and \lstinline!y! needs to be found. Two additional initial equations thus need to be provided to solve the initialization problem. -Regarding DAEs, only that at most $n$ additional equations are -needed to arrive at $2n+m$ equations in the initialization system. The +Regarding DAEs, only that at most n additional equations are +needed to arrive at 2n+m equations in the initialization system. The reason is that in a higher index DAE problem the number of dynamic continuous-time state variables might be less than the number of state -variables $n$. As noted in \cref{initialization-initial-equation-and-initial-algorithm} a tool may add/remove +variables n. As noted in \autoref{initialization-initial-equation-and-initial-algorithm} a tool may add/remove initial equations to fulfill this requirement, if appropriate diagnostics are given. -\end{example} +\end{nonnormative} -\subsection{Recommended selection of start values}\label{recommended-selection-of-start-values} +\subsection{Recommended selection of start-values}\doublelabel{recommended-selection-of-start-values} -In general many variables have \lstinline!start!-attributes that are not fixed and selecting a subset of these can give a consistent set of start values close to the user-expectations. -The following gives a non-normative procedure for finding such a subset. +In general many variables have start-values that are not fixed and +selecting a sub-set of these can give a consistent set of start-values +close to the user-expectations. The following gives a non-normative +procedure for finding such a sub-set. \begin{nonnormative} -A model has a hierarchical component structure. -Each component of a model can be given a unique model component hierarchy level number. -The top-level model has a level number of 1. -The level number increases by 1 for each level down in the model component hierarchy. -The model component hierarchy level number is used to give \lstinline!start!-attribute a confidence number, where a lower number means that the \lstinline!start!-attribute is more confident. -Loosely, if the \lstinline!start!-attribute is set or modified on level $i$ then the confidence number is $i$. -If a \lstinline!start!-attribute is set by a possibly hierarchical modifier at the top level, then this \lstinline!start!-attribute has the highest confidence, namely 1 irrespectively on what level, the variable itself is declared. +A model has a hierarchical component structure. Each component +of a model can be given a unique model component hierarchy level number. +The top level model has a level number of 1. The level number increases +by 1 for each level down in the model component hierarchy. The model +component hierarchy level number is used to give start values a +confidence number, where a lower number means that the start value is +more confident. Loosely, if the start value is set or modified on level +i then the confidence number is i. If a start value is set by a possibly +hierarchical modifier at the top level, then this start value has the +highest confidence, namely 1 irrespectively on what level, the variable +itself is declared. \end{nonnormative} diff --git a/chapters/functions.tex b/chapters/functions.tex index d4f57b178..4ec47eaea 100644 --- a/chapters/functions.tex +++ b/chapters/functions.tex @@ -1,36 +1,38 @@ -\chapter{Functions}\label{functions} +\chapter{Functions}\doublelabel{functions} This chapter describes the Modelica function construct. -\section{Function Declaration}\label{function-declaration} +\section{Function Declaration}\doublelabel{function-declaration} -A Modelica \firstuse{function}\index{function} is a specialized class (\cref{function-as-a-specialized-class}) using the keyword \lstinline!function!. -The body of a Modelica function is an algorithm section that contains procedural algorithmic code to be executed when the function is called, or alternatively an external function specifier (\cref{external-function-interface}). -Formal parameters are specified using the \lstinline!input!\indexinline{input} keyword, whereas results are denoted using the \lstinline!output!\indexinline{output} keyword. -This makes the syntax of function definitions quite close to Modelica class definitions, but using the keyword \lstinline!function! instead of \lstinline!class!. +A Modelica function is a specialized class (\autoref{function-as-a-specialized-class}) using the +keyword \lstinline!function!. The body of a Modelica function is an algorithm +section that contains procedural algorithmic code to be executed when +the function is called, or alternatively an external function specifier +(\autoref{external-function-interface}). Formal parameters are specified using the \lstinline!input! keyword, +whereas results are denoted using the \lstinline!output! keyword. This makes the +syntax of function definitions quite close to Modelica class +definitions, but using the keyword \lstinline!function! instead of \lstinline!class!. \begin{nonnormative} The structure of a typical function declaration is sketched by the following schematic function example: -% TODO: Can't have angle brackets and \emph in the same mathescape due to LaTeXML issue: -% - https://github.com/brucemiller/LaTeXML/issues/1477 -% Once we cut the MathJax dependency, change to single mathescape for better character spacing. -\begin{lstlisting}[language=modelica] -function $\mathit{functionname}$ +\begin{lstlisting}[language=modelica,escapechar=!] +function !\emph{functionname}! input TypeI1 in1; input TypeI2 in2; - input TypeI3 in3 = $\mathit{defaultExpr}_{1}$ "Comment" annotation($\ldots$); - $\ldots$ + input TypeI3 in3 = !\emph{default\_expr1}! "Comment" annotation(...); + ... output TypeO1 out1; - output TypeO2 out2 = $\mathit{defaultExpr}_{2}$; - $\ldots$ + output TypeO2 out2 = !\emph{default\_expr2}!; + ... protected - $\langle$$\mbox{\emph{local variables}}$$\rangle$ - $\ldots$ + !\emph{\textless{}local variables\textgreater{}}! + ... algorithm - $\langle$$\mbox{\emph{statements}}$$\rangle$ - $\ldots$ -end $\mathit{functionname}$; + ... + !\emph{\textless{}statements\textgreater{}}! + ... +end !\emph{functionname}!; \end{lstlisting} \end{nonnormative} @@ -43,13 +45,13 @@ \section{Function Declaration}\label{function-declaration} \begin{nonnormative} All internal parts of a function are optional; i.e., the following is also a legal function: -\begin{lstlisting}[language=modelica] -function $\mathit{functionname}$ -end $\mathit{functionname}$; +\begin{lstlisting}[language=modelica,escapechar=!] +function !\emph{functionname}! +end !\emph{functionname}!; \end{lstlisting} \end{nonnormative} -\subsection{Ordering of Formal Parameters}\label{ordering-of-formal-parameters} +\subsection{Ordering of Formal Parameters}\doublelabel{ordering-of-formal-parameters} The relative ordering between input formal parameter declarations is significant since that determines the matching between actual arguments @@ -65,30 +67,30 @@ \subsection{Ordering of Formal Parameters}\label{ordering-of-formal-parameters} \end{nonnormative} \begin{example} -\begin{lstlisting}[language=modelica] -function $\mathit{functionname}$ +\begin{lstlisting}[language=modelica,escapechar=!] +function !\emph{\textless{}functionname\textgreater{}}! output TypeO1 out1; // Intermixed declarations of inputs and outputs input TypeI1 in1; // not recommended since code becomes hard to read input TypeI2 in2; - $\ldots$ + ... output TypeO2 out2; input TypeI3 in3; - $\ldots$ -end $\mathit{functionname}$; + ... +end !\emph{\textless{}functionname\textgreater{}}!; \end{lstlisting} \end{example} -\subsection{Function return-statements}\label{function-return-statements} +\subsection{Function return-statements}\doublelabel{function-return-statements} -The \lstinline!return!-statement\indexinline{return} terminates the current function call, see \cref{function-call}. -It can only be used in an algorithm section of a function. -It has the following form: +The return-statement terminates the current function call, see \autoref{function-call}. +It can only be used in an algorithm section of a function. It has +the following form: \begin{lstlisting}[language=modelica] return; \end{lstlisting} \begin{example} -(Note that this could alternatively use \lstinline!break!:) +(Note that this could alternatively use break:) \begin{lstlisting}[language=modelica] function findValue "Returns position of val or 0 if not found" input Integer x[:]; @@ -107,51 +109,55 @@ \subsection{Function return-statements}\label{function-return-statements} \end{lstlisting} \end{example} -\subsection{Inheritance of Functions}\label{inheritance-of-functions} +\subsection{Inheritance of Functions}\doublelabel{inheritance-of-functions} It is allowed for a function to inherit and/or modify another function -following the usual rules for inheritance of classes (\cref{inheritance-modification-and-redeclaration}). +following the usual rules for inheritance of classes (\autoref{inheritance-modification-and-redeclaration}). \begin{nonnormative} -For example, it is possible to modify and extend a \lstinline!function! class to add default values for input variables. +For example, it is possible to modify and extend a function class to add default values for input variables. \end{nonnormative} -\section{Function as a Specialized Class}\label{function-as-a-specialized-class} +\section{Function as a Specialized Class}\doublelabel{function-as-a-specialized-class} -The function concept in Modelica is a specialized class (\cref{specialized-classes}). +The function concept in Modelica is a specialized class (\autoref{specialized-classes}). \begin{nonnormative} The syntax and semantics of a function have many similarities to those of the \lstinline!block! specialized class. A function has many of the properties -of a general class, e.g.\ being able to inherit other functions, or to redeclare or modify elements of a function declaration. +of a general class, e.g. being able to inherit other functions, or to redeclare or modify elements of a function declaration. \end{nonnormative} Modelica functions have the following restrictions compared to a general Modelica \lstinline!class!: \begin{itemize} \item - Only input and output formal parameters are allowed in the function's public variable section. + Each input formal parameter of the function must be prefixed by the + keyword input, and each result formal parameter by the keyword output. + All public variables are formal parameters. \item Input formal parameters are read-only after being bound to the actual - arguments or default values, i.e., they shall not be assigned values in + arguments or default values, i.e., they may not be assigned values in the body of the function. \item - A function shall \emph{not be used in connections}, shall not have - \emph{equations}, shall not have \emph{initial algorithms}. + A function may \emph{not be used in connections}, may not have + \emph{equations}, may not have \emph{initial algorithms}. \item A function can have at most \emph{one algorithm} section or \emph{one external function interface} (not both), which, if present, is the body of the function. \item - A function may only contain components of the specialized classes \lstinline!type!, \lstinline!record!, \lstinline!operator record!, and \lstinline!function!; and it must not contain, e.g., \lstinline!model!, \lstinline!block!, \lstinline!operator! or \lstinline!connector! components. -\item - A function may not contain components of type \lstinline!Clock!. + A function may only contain components of the restricted classes + \lstinline!type!, \lstinline!record!, \lstinline!operator record!, and \lstinline!function!; + and it must not contain e.g. + \lstinline!model!, \lstinline!block!, \lstinline!operator! or \lstinline!connector! + components. \item - The elements of a function shall not have prefixes \lstinline!inner!, or \lstinline!outer!. + The elements of a function may not have prefixes \lstinline!inner!, or \lstinline!outer!. \item A function may have zero or one external function interface, which, if present, is the external definition of the function. \item - For a function to be called in a simulation model, the function shall + For a function to be called in a simulation model, the function may not be partial, and the output variables must be assigned inside the function either in binding equations or in an algorithm section, or have an external function interface as its body, or be defined as a @@ -160,11 +166,23 @@ \section{Function as a Specialized Class}\label{function-as-a-specialized-class} \begin{nonnormative} It is a quality of implementation how much analysis a tool performs in order to determine if the output variables are computed. \end{nonnormative} - A function \emph{cannot contain} calls to the Modelica \emph{built-in operators} \lstinline!der!, \lstinline!initial!, \lstinline!terminal!, \lstinline!sample!, \lstinline!pre!, \lstinline!edge!, \lstinline!change!, \lstinline!reinit!, \lstinline!delay!, \lstinline!cardinality!, \lstinline!inStream!, \lstinline!actualStream!, to the operators of the built-in package \lstinline!Connections!, to the operators defined in \cref{synchronous-language-elements} and \cref{state-machines}, and is not allowed to contain \lstinline!when!-statements. -\item - The dimension \emph{sizes} not declared with colon (\lstinline!:!) of each array result or array local variable (i.e., a non-input component) of a function must be either given by the input formal parameters, or given by constant or parameter expressions, or by expressions containing combinations of those (\cref{initialization-and-binding-equations-of-components-in-functions}). -\item - For initialization of local variables of a function see \cref{initialization-and-binding-equations-of-components-in-functions}). + A function \emph{cannot contain} calls to the + Modelica \emph{built-in operators} \lstinline!der!, \lstinline!initial!, + \lstinline!terminal!, \lstinline!sample!, + \lstinline!pre!, \lstinline!edge!, \lstinline!change!, + \lstinline!reinit!, \lstinline!delay!, \lstinline!cardinality!, + \lstinline!inStream!, \lstinline!actualStream!, + to the operators of the built-in package \lstinline!Connections!, to the operators + defined in \autoref{synchronous-language-elements} and \autoref{state-machines}, and is not allowed to contain + when-statements. +\item + The dimension \emph{sizes} not declared with (:) of each array result + or array local variable (i.e., a non-input components) of a + function must be either given by the input formal parameters, or given + by constant or parameter expressions, or by expressions containing + combinations of those (\autoref{initialization-and-binding-equations-of-components-in-functions}). +\item + For initialization of local variables of a function see \autoref{initialization-and-binding-equations-of-components-in-functions}). \item Components of a function will inside the function behave as though they had discrete-time variability. @@ -174,23 +192,24 @@ \section{Function as a Specialized Class}\label{function-as-a-specialized-class} Modelica \lstinline!class!: \begin{itemize} \item - Functions can be called, \cref{function-call}. + Functions can be called, \autoref{function-call}. \begin{itemize} \item The calls can use a mix of positional and named arguments, see - \cref{positional-or-named-input-arguments-of-functions}. + \autoref{positional-or-named-input-arguments-of-functions}. \item - Instances of functions have a special meaning, see \cref{functional-input-arguments-to-functions}. + Instances of functions have a special meaning, see \autoref{functional-input-arguments-to-functions}. \item - The lookup of the \lstinline!function! class to be called is extended, see \cref{composite-name-lookup}. + The lookup of the function class to be called is extended, see + \autoref{composite-name-lookup}. \end{itemize} \item A function can be \emph{recursive}. \item A formal parameter or local variable may be initialized through a \emph{binding} (=) of a default value in its declaration, - see \cref{initialization-and-binding-equations-of-components-in-functions}. + see \autoref{initialization-and-binding-equations-of-components-in-functions}. Using assignment (:=) is deprecated. If a non-input component in the function uses a record class that contain one or more binding equations they are viewed as initialization of those component of the @@ -203,15 +222,16 @@ \section{Function as a Specialized Class}\label{function-as-a-specialized-class} A function may have an external function interface specifier as its body. \item - A function may have a \lstinline!return!-statement in its algorithm section body. + A function may have a return statement in its algorithm section body. \item - A function allows dimension sizes declared with colon (\lstinline!:!) to be resized for non-input array variables, see \cref{flexible-array-sizes-and-resizing-of-arrays-in-functions}. + A function allows dimension sizes declared with (:) to be resized for + non-input array variables, see \autoref{flexible-array-sizes-and-resizing-of-arrays-in-functions}. \item A function may be defined in a short function definition to be a function partial derivative. \end{itemize} -\section{Pure Modelica Functions}\label{pure-modelica-functions} +\section{Pure Modelica Functions}\doublelabel{pure-modelica-functions} Modelica functions are normally \emph{pure} which makes it easy for humans to reason about the code since they behave as mathematical @@ -221,10 +241,10 @@ \section{Pure Modelica Functions}\label{pure-modelica-functions} \item \emph{Pure} Modelica functions always give the same output values or errors for the same input values and only the output values influence - the simulation result, i.e.\ is seen as equivalent to a mathematical + the simulation result, i.e. is seen as equivalent to a mathematical map from input values to output values. Some input values may map to - errors. Pure functions are thus allowed to fail by calling \lstinline!assert!, or - \lstinline[language=C]!ModelicaError! in C code, or dividing by zero. Such errors will only be + errors. Pure functions are thus allowed to fail by calling assert, or + ModelicaError in C-code, or dividing by zero. Such errors will only be reported when and if the function is called. \emph{Pure} Modelica functions are not assumed to be thread-safe. \item @@ -235,18 +255,22 @@ \section{Pure Modelica Functions}\label{pure-modelica-functions} The declaration of functions follow these rules: \begin{itemize} \item - Functions defined in Modelica (non-external) are \emph{normally} assumed to be pure (the exception is the deprecated case below), if they are impure they shall be marked with the \lstinline!impure! keyword. - They can be explicitly marked as \lstinline!pure!\indexinline{pure}. + Functions defined in Modelica (non-external) are \emph{normally} + assumed to be pure (the exception is the deprecated case below), if + they are impure they shall be marked with the impure keyword. They can + be explicitly marked as pure. \begin{nonnormative} - However, since functions as default are pure it is not recommended to explicitly declare them as \lstinline!pure!. + However, since functions as default are pure it is not recommended to explicitly declare them as pure. \end{nonnormative} \item - External functions must be explicitly declared with \lstinline!pure! or \lstinline!impure!. -\item - If a function is declared as \lstinline!impure! any function extending from it shall be declared as \lstinline!impure!. + External functions must be explicitly declared with pure or 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!, diagnostics must be given if called in a simulation model. + A deprecated semantics is that external functions (and functions + defined in Modelica directly or indirectly calling them) without pure + or impure keyword are assumed to be impure -- but without any + restriction on calling them. Except for the function + Modelica.Utilities.Streams.print diagnostics must be given if called + in a simulation model. \end{itemize} Calls of pure functions used inside expression may be skipped if the @@ -269,7 +293,7 @@ \section{Pure Modelica Functions}\label{pure-modelica-functions} containing function calls while still preserving their semantics. For example, a tool may use common subexpression elimination to call a pure function just once, if it is called several times with identical input -arguments. However, since functions may fail we can e.g.\ only move a +arguments. However, since functions may fail we can e.g. only move a common function call from inside a loop to outside the loop if the loop is run at least once. \end{nonnormative} @@ -279,30 +303,35 @@ \section{Pure Modelica Functions}\label{pure-modelica-functions} maintaining this property for pure non-external functions. Regarding external functions, the external function implementor is responsible. Note that external functions can have side-effects as long as they do -not influence the internal Modelica simulation state, e.g.\ caching +not influence the internal Modelica simulation state, e.g. caching variables for performance or printing trace output to a log file. \end{nonnormative} -With the prefix keyword \lstinline!impure!\indexinline{impure} it is stated that a Modelica function is \emph{impure} and it is only allowed to call such a function from within: +With the prefix keyword \lstinline!impure! it is stated that a Modelica +function is \emph{impure} and it is only allowed to call such a function +from within: \begin{itemize} \item - Another function marked with the prefix \lstinline!impure!. + another function marked with the prefix \lstinline!impure! \item - A \lstinline!when!-equation. + a when-equation, \item - A \lstinline!when!-statement. + a when-statement, \item - \lstinline!pure(impureFunctionCall($\ldots$))! -- which allows calling impure functions in any pure context. + \lstinline!pure(impureFunctionCall(...))! - which allows calling impure + functions in any pure context, \item - Initial equations and initial algorithms. + in initial equations and initial algorithms, \item - Binding equations for components declared as parameter -- which is seen as syntactic sugar for having a parameter with \lstinline!fixed=false! and the binding as an initial equation. + in binding equations for components declared as parameter -- which is seen as + syntactic sugar for having a parameter with \lstinline!fixed=false! and the + binding as an initial equation. \begin{nonnormative} Thus, evaluation of the same function call at a later time during simulation is not guaranteed to result in the same value as when the parameter was initialized, seemingly breaking the declaration equation. \end{nonnormative} \item - Binding equations for external objects. + in binding equations for external objects. \end{itemize} For initial equations, initial algorithms, and bindings it is an error @@ -316,8 +345,10 @@ \section{Pure Modelica Functions}\label{pure-modelica-functions} allowed. \end{nonnormative} -By \cref{function-compatibility-or-function-subtyping-for-functions}, it follows that an impure function can only be passed as argument to a function formal parameter of impure type. -A function having a formal function parameter that is \lstinline!impure! must be marked \lstinline!pure! or \lstinline!impure!. +It is possible to mark a function formal parameter as \lstinline!impure!. Only if +the function formal parameter is marked \lstinline!impure!, it is allowed to pass an +\lstinline!impure! function to it. A function having a formal function parameter +marked \lstinline!impure! must be marked \lstinline!pure! or \lstinline!impure!. \begin{nonnormative} Comment: The semantics are undefined if the function call of an @@ -338,8 +369,7 @@ \section{Pure Modelica Functions}\label{pure-modelica-functions} impure function receiveRealSignal // impure function input HardwareDriverID id; output Real y; -external "C" - y = receiveSignal(id); + external "C" y = receiveSignal(id); end receiveRealSignal; \end{lstlisting} Examples of allowed optimizations of pure functions: @@ -347,41 +377,39 @@ \section{Pure Modelica Functions}\label{pure-modelica-functions} model M // Assume sin, cos, asin are pure functions with normal derivatives. input Real x[2]; input Real w; - Real y[2] = [cos(w), sin(w); -sin(w), cos(w)] * x; - Real z[2] = der(y); - Real a = 0 * asin(w); + Real y[2]=[cos(w),sin(w);-sin(w),cos(w)]*x; + Real z[2]=der (y); + Real a=0*asin(w); end M; \end{lstlisting} -A tool only needs to generate one call of the pure function \lstinline!cos(w)! in the model \lstinline!M! -- a single call used for both the two elements of the matrix, as well as for the derivative -of that matrix. A tool may also skip the possible error for \lstinline!asin(w)! and assume that \lstinline!a! is zero. +A tool only needs to generate one call of the pure function \lstinline!cos(w)! +in the model \lstinline!M! -- to handle the two elements of the matrix above, and +for the derivative of that matrix. A tool may also skip the possible +error for \lstinline!asin(w)! and assume that \lstinline!a! is zero. Examples of restrictions on optimizing pure functions: \begin{lstlisting}[language=modelica] - Real x = - if noEvent(abs(x)) < 1 then - asin(x) // Cannot move asin(x) out of if-branch. - else - 0; + Real x=if noEvent(abs(x))<1 then asin(x) else 0; // May not move asin(x) out of then algorithm assertCheck(p, T); // Must call function algorithm if b then - y := 2 * someOtherFunction(x); + y:=2*someOtherFunction(x); end if; - y := y + asin(x); - y := y + someOtherFunction(x); - // Cannot evaluate someOtherFunction(x) before asin(x) - unless b is true + y:=y+asin(x); + y:=y+someOtherFunction(x); + // May not evaluate someOtherFunction(x) before asin(x) - unless b is true // The reason is that asin(x) may fail and someOtherFunction may hang, // and it might be possible to recover from this error. \end{lstlisting} \end{example} -\section{Function Call}\label{function-call} +\section{Function Call}\doublelabel{function-call} -Function classes and record constructors (\cref{record-constructor-functions}) and enumeration type -conversions (\cref{type-conversion-of-integer-to-enumeration-values}) can be called as described in this section. +Function classes and record constructors (\autoref{record-constructor-functions}) and enumeration type +conversions (\autoref{type-conversion-of-integer-to-enumeration-values}) can be called as described in this section. -\subsection{Positional or Named Input Arguments of Functions}\label{positional-or-named-input-arguments-of-functions} +\subsection{Positional or Named Input Arguments of Functions}\doublelabel{positional-or-named-input-arguments-of-functions} A function call has optional positional arguments followed by zero, one or more named arguments, such as @@ -391,7 +419,7 @@ \subsection{Positional or Named Input Arguments of Functions}\label{positional-o \end{lstlisting} The formal syntax of a function call (simplified by removing reduction -expression, \cref{reduction-expressions}): +expression, \autoref{reduction-expressions}): \begin{lstlisting}[language=grammar] primary : component-reference function-call-args @@ -410,20 +438,29 @@ \subsection{Positional or Named Input Arguments of Functions}\label{positional-o function-argument : function-partial-application | expression \end{lstlisting} -The interpretation of a function call is as follows: First, a list of unfilled slots is created for all formal input parameters. If there are $N$ positional arguments, they are placed in the first -$N$ slots, where the order of the parameters is given by the order of the component declarations in the function definition. Next, for each named argument \lstinline!identifier = expression!, the -\lstinline!identifier! is used to determine the corresponding slot. The value of the argument is placed in the slot, filling it (it is an error if this slot is already filled). When all arguments -have been processed, the slots that are still unfilled are filled with the corresponding default value of the function definition. The default values may depend on other inputs (these dependencies -must be acyclical in the function) -- the values for those other inputs will then be substituted into the default values (this process may be repeated if the default value for that input depend on another input). The default values for inputs shall not depend on non-input variables in the function. The list of filled slots is used as the argument list for the call (it is an error if any -unfilled slots still remain). +The interpretation of a function call is as follows: First, a list of +unfilled slots is created for all formal input parameters. If there are +N positional arguments, they are placed in the first N slots, where the +order of the parameters is given by the order of the component +declarations in the function definition. Next, for each named argument +\lstinline!identifier = expression!, the \lstinline!identifier! is used to determine the +corresponding slot. The value of the argument is placed in the slot, +filling it (it is an error if this slot is already filled). When all arguments have been processed, the slots that are +still unfilled are filled with the corresponding default value of the +function definition. The default values may depend on other inputs +(these dependencies must be acyclical in the function) -- the values for +those other inputs will then be substituted into the default values +(this process may be repeated if the default value for that input depend +on another input). The default values for inputs may not depend on +non-input variables in the function. The list of filled slots is used as the argument list for the call (it is an error if any unfilled slots still remain). Special purpose operators with function syntax defined in the -specification shall not be called with named arguments, unless otherwise +specification may not be called with named arguments, unless otherwise noted. The type of each argument must agree with the type of the corresponding -parameter, except where the standard type coercion, \cref{standard-type-coercion}, can be used to make -the types agree. (See also \cref{scalar-functions-applied-to-array-arguments} on applying scalar functions +parameter, except where the standard type coercion, \autoref{standard-type-coercion}, can be used to make +the types agree. (See also \autoref{scalar-functions-applied-to-array-arguments} on applying scalar functions to arrays.) \begin{example} @@ -435,26 +472,26 @@ \subsection{Positional or Named Input Arguments of Functions}\label{positional-o input Real precision = 6 "number of significantdigits"; input Real length = 0 "minimum length of field"; output String string "number as string"; - $\ldots$ + ... end RealToString; \end{lstlisting} Then the following applications are equivalent: \begin{lstlisting}[language=modelica] -RealToString(2.0); -RealToString(2.0, 6, 0); -RealToString(2.0, 6); -RealToString(2.0, precision=6); -RealToString(2.0, length=0); -RealToString(2.0, 6, precision=6); // error: slot is used twice + RealToString(2.0); + RealToString(2.0, 6, 0); + RealToString(2.0, 6); + RealToString(2.0, precision=6); + RealToString(2.0, length=0); + RealToString(2.0, 6, precision=6); // error: slot is used twice \end{lstlisting} \end{example} -\subsection{Functional Input Arguments to Functions}\label{functional-input-arguments-to-functions} +\subsection{Functional Input Arguments to Functions}\doublelabel{functional-input-arguments-to-functions} A functional input argument to a function is an argument of function type. The declared type of such an input formal parameter in a function -can be the type-specifier of a partial function that has no replaceable -elements. It cannot be the type-specifier of a record or enumeration +can be the class-name of a partial function that has no replaceable +elements. It cannot be the class-name of a record or enumeration (i.e., record constructor functions and enumeration type conversions are not allowed in this context). Such an input formal parameter of function type can also have an optional functional default @@ -462,7 +499,7 @@ \subsection{Functional Input Arguments to Functions}\label{functional-input-argu \begin{example} \begin{lstlisting}[language=modelica] -function quadrature "Integrate function y=integrand(x) from x1 to x2" + function quadrature "Integrate function y=integrand(x) from x1 to x2" input Real x1; input Real x2; input Integrand integrand; // Integrand is a partial function, @@ -475,7 +512,7 @@ \subsection{Functional Input Arguments to Functions}\label{functional-input-argu end quadrature; partial function Integrand - input Real u; + input Real x; output Real y; end Integrand; \end{lstlisting} @@ -489,15 +526,16 @@ \subsection{Functional Input Arguments to Functions}\label{functional-input-argu \item as a function type-specifier (\lstinline!Parabola! example below), \item - as a function partial application (\cref{function-partial-application} below), + as a function partial application (\autoref{function-partial-application} below), \item as a function that is a component (i.e., a formal parameter of function type of the enclosing function), \item as a function partial application of a function that is a component - (example in \cref{function-partial-application} below). + (example in \autoref{function-partial-application} below). \end{enumerate} -In all cases the provided function must be function-compatible (\cref{function-compatibility}) with the corresponding formal parameter of function type. +In all cases the provided function must be \firstuse{function type compatible} +(\autoref{function-compatibility-or-function-subtyping-for-functions}) to the corresponding formal parameter of function type. \begin{example} A function as a positional input argument according to case (a): @@ -512,7 +550,7 @@ \subsection{Functional Input Arguments to Functions}\label{functional-input-argu The \lstinline!quadrature2! example below uses a function \lstinline!integrand! that is a component as input argument according to case (c): \begin{lstlisting}[language=modelica] -function quadrature2 "Integrate function y=integrand(x) from x1 to x2" + function quadrature2 "Integrate function y=integrand(x) from x1 to x2" input Real x1; input Real x2; input Integrand integrand; // Integrand is a partial function type @@ -523,12 +561,12 @@ \subsection{Functional Input Arguments to Functions}\label{functional-input-argu \end{lstlisting} \end{example} -\subsubsection{Function Partial Application}\label{function-partial-application} +\subsubsection{Function Partial Application}\doublelabel{function-partial-application} A function partial application is similar to a function call with certain formal parameters bound to expressions, the specific rules are specified in this section and are not identical to the ones for function -call in \cref{positional-or-named-input-arguments-of-functions}. A function partial application returns a partially +call in \autoref{positional-or-named-input-arguments-of-functions}. A function partial application returns a partially evaluated function that is also a function, with the remaining not bound formal parameters still present in the same order as in the original function declaration. A function partial application is specified by the @@ -536,7 +574,7 @@ \subsubsection{Function Partial Application}\label{function-partial-application} giving named formal parameter associations for the formal parameters to be bound, e.g.: \begin{lstlisting}[language=modelica] -function func_name($\ldots$, formal_parameter_name = expr, $\ldots$) + function func_name(..., formal_parameter_name = expr, ...) \end{lstlisting} \begin{nonnormative} @@ -546,9 +584,12 @@ \subsubsection{Function Partial Application}\label{function-partial-application} default values. \end{nonnormative} -The function created by the function partial application acts as the original function but with the bound formal input parameters(s) removed, i.e., they cannot be supplied arguments at function call. -The binding occurs when the partially evaluated function is created. -A partially evaluated function is function-compatible (\cref{function-compatibility}) with the same function where all bound arguments are removed. +The function created by the function partial application acts as the +original function but with the bound formal input parameters(s) removed, +i.e., they cannot be supplied arguments at function call. The binding +occurs when the partially evaluated function is created. A partially +evaluated function is \firstuse{function compatible} (see \autoref{function-compatibility-or-function-subtyping-for-functions}) to the +same function where all bound arguments are removed. \begin{nonnormative} Thus, for checking function type compatibility, bound formal parameters are ignored. @@ -585,7 +626,7 @@ \subsubsection{Function Partial Application}\label{function-partial-application} Function types are matching after removing the bound arguments \lstinline!A! and \lstinline!w! in a function partial application: \begin{lstlisting}[language=modelica] -function Sine2 "y = Sine2(A,w,x)" + function Sine2 "y = Sine2(A,w,x)" input Real A; input Real w; input Real x; // Note: x is now last in argument list. @@ -595,7 +636,8 @@ \subsubsection{Function Partial Application}\label{function-partial-application} end Sine2; area = quadrature(0, 1, integrand = function Sine2(A=2, w=3)); \end{lstlisting} -The partially evaluated \lstinline!Sine2! has only one argument: \lstinline!x! -- and is thus type compatible with \lstinline!Integrand!. +The partially evaluated \lstinline!Sine2! has only one argument: \lstinline!x! --- +and is thus type compatible with \lstinline!Integrand!. \end{example} \begin{example} @@ -633,7 +675,7 @@ \subsubsection{Function Partial Application}\label{function-partial-application} \end{lstlisting} \end{example} -\subsection{Output Formal Parameters of Functions}\label{output-formal-parameters-of-functions} +\subsection{Output Formal Parameters of Functions}\doublelabel{output-formal-parameters-of-functions} A function may have more than one output component, corresponding to multiple return values. The only way to use more than the first return @@ -642,7 +684,7 @@ \subsection{Output Formal Parameters of Functions}\label{output-formal-parameter the equation or assignment shall contain a list of component references within parentheses: -\lstinline!(out1, out2, out3) = f($\ldots$);! +\lstinline!(out1, out2, out3) = f(...);! The component references are associated with the output components according to their position in the list. Thus output component i is set @@ -669,11 +711,11 @@ \subsection{Output Formal Parameters of Functions}\label{output-formal-parameter Function \lstinline!eigen! to compute eigenvalues and optionally eigenvectors may be called in the following ways: \begin{lstlisting}[language=modelica] -ev = eigen(A); // calculate eigenvalues -x = isStable(eigen(A)); // used in an expression -(ev, vr) = eigen(A) // calculate eigenvectors -(ev,vr,vl) = eigen(A) // and also left eigenvectors -(ev,,vl) = eigen(A) // no right eigenvectors + ev = eigen(A); // calculate eigenvalues + x = isStable(eigen(A)); // used in an expression + (ev, vr) = eigen(A) // calculate eigenvectors + (ev,vr,vl) = eigen(A) // and also left eigenvectors + (ev,,vl) = eigen(A) // no right eigenvectors \end{lstlisting} The function may be defined as: \begin{lstlisting}[language=modelica] @@ -684,9 +726,8 @@ \subsection{Output Formal Parameters of Functions}\label{output-formal-parameter output Real leftEigenVectors [size(A,1),size(A,1)]; algorithm // The output variables are computed separately (and not, e.g., by one - // call of a Fortran function) in order that an optimizing compiler can - // remove unnecessary computations, if one or more output arguments are - // missing + // call of a Fortran function) in order that an optimizing compiler can remove + // unnecessary computations, if one or more output arguments are missing // compute eigenvalues // compute right eigenvectors using the computed eigenvalues // compute left eigenvectors using the computed eigenvalues @@ -702,14 +743,14 @@ \subsection{Output Formal Parameters of Functions}\label{output-formal-parameter \begin{example} The following are illegal: \begin{lstlisting}[language=modelica] -(x+1, 3.0, z/y) = f(1.0, 2.0); // Not a list of component references. -(x, y, z) + (u, v, w) // Not LHS of suitable eqn/assignment. + (x+1, 3.0, z/y) = f(1.0, 2.0); // Not a list of component references. + (x, y, z) + (u, v, w) // Not LHS of suitable eqn/assignment. \end{lstlisting} \end{example} -\subsection{Initialization and Binding Equations of Components in Functions}% -\label{initialization-and-binding-equations-of-components-in-functions}% -\label{initialization-and-declaration-assignments-of-components-in-functions} +\subsection{Initialization and Binding Equations of Components in Functions} +\doublelabel{initialization-and-binding-equations-of-components-in-functions} +\doublelabel{initialization-and-declaration-assignments-of-components-in-functions} Components in a function can be divided into three groups: \begin{itemize} @@ -722,10 +763,11 @@ \subsection{Initialization and Binding Equations of Components in Functions}% constants. \end{itemize} -When a function is called, components of the function do not have \lstinline!start!-attributes. -However, a binding equation\index{binding equation!in function} (\lstinline!= expression!) with an expression may be present for a component. +When a function is called components of a function do not have +start-attributes. However, a binding equation (\lstinline!= expression!) with +an expression may be present for a component. \begin{nonnormative} -\firstuse{Declaration assignments}\index{declaration assignment (deprecated)} of the form \lstinline!:= expression! are deprecated, but otherwise identical to binding equations. +Declaration assignments of the form \lstinline!:= expression! are deprecated, but otherwise identical to binding equations. \end{nonnormative} A binding equation for a non-input component initializes the @@ -733,33 +775,35 @@ \subsection{Initialization and Binding Equations of Components in Functions}% (before executing the algorithm section or calling the external function). These bindings must be executed in an order where a variable is not used before its binding equations has been executed; it is -an error if no such order exists (i.e.\ the binding must be acyclic). +an error if no such order exists (i.e. the binding must be acyclic). -% The first sentence below needs clarification: clearly, binding equation can also be used for components outside functions. Binding equations can only be used for components of a function. -If no binding equation is given for a non-input component the variable is uninitialized (except for record components where modifiers may also initialize that component). -It is an error to use (or return) an uninitialized variable in a function. -Binding equations for input formal parameters are interpreted as default arguments, as described in -\cref{positional-or-named-input-arguments-of-functions}. +If no binding equation is given for a non-input component the +variable is uninitialized (except for record components where modifiers +may also initialize that component). It is an error to use (or return) +an uninitialized variable in a function. Binding equations for input +formal parameters are interpreted as default arguments, as described in +\autoref{positional-or-named-input-arguments-of-functions}. \begin{nonnormative} -It is recommended to check for use of uninitialized variables statically -- if this is not possible a warning is recommended +It is recommended to check for use of uninitialized variables statically --- if this is not possible a warning is recommended combined with a run-time check. \end{nonnormative} \begin{nonnormative} The properties of components in functions described in this -section are also briefly described in \cref{function-as-a-specialized-class}. +section are also briefly described in \autoref{function-as-a-specialized-class}. \end{nonnormative} -\subsection{Flexible Array Sizes and Resizing of Arrays in Functions}\label{flexible-array-sizes-and-resizing-of-arrays-in-functions} +\subsection{Flexible Array Sizes and Resizing of Arrays in Functions}\doublelabel{flexible-array-sizes-and-resizing-of-arrays-in-functions} \begin{nonnormative} Flexible setting of array dimension sizes of arrays in -functions is also briefly described in \cref{function-as-a-specialized-class}. +functions is also briefly described in \autoref{function-as-a-specialized-class}. \end{nonnormative} -A dimension size not specified with colon (\lstinline!:!) for a non-input array component of a function must be given by the inputs or be constant. +A dimension size not specified with colon(\lstinline!:!) for a non-input array +component of a function must be given by the inputs or be constant. \begin{example} \begin{lstlisting}[language=modelica] @@ -772,12 +816,16 @@ \subsection{Flexible Array Sizes and Resizing of Arrays in Functions}\label{flex \end{lstlisting} \end{example} -A non-input array component declared in a function with a dimension size specified by colon (\lstinline!:!) and no binding equation, can change size according to these special rules: \begin{itemize} \item - Prior to execution of the function algorithm the dimension size is zero. + A non-input array component declared in a function with a dimension + size specified by colon(:) and no binding equation, can change + size according to these special rules:Prior to execution of the + function algorithm the dimension size is zero. \item - The entire array (without any subscripts) may be assigned with a corresponding array with arbitrary dimension size (the array variable is re-sized). + The entire array (without any subscripts) may be assigned with a + corresponding array with arbitrary dimension size (the array variable + is re-sized). \end{itemize} These rules also apply if the array component is an element of a record @@ -790,31 +838,40 @@ \subsection{Flexible Array Sizes and Resizing of Arrays in Functions}\label{flex input Real x[:]; output Real xpos[:]; algorithm - for i in 1 : size(x, 1) loop - if x[i] > 0 then - xpos := cat(1, xpos, x[i:i]); + for i in 1:size(x,1) loop + if x[i]>0 then + xpos:=cat(1,xpos,x[i:i]); end if; end for; end collectPositive; \end{lstlisting} \end{example} -\subsection{Scalar Functions Applied to Array Arguments}\label{scalar-functions-applied-to-array-arguments} +\subsection{Scalar Functions Applied to Array Arguments}\doublelabel{scalar-functions-applied-to-array-arguments} -Functions with one scalar return value can be applied to arrays element-wise, e.g.\ if \lstinline!A! is a vector of reals, then \lstinline!sin(A)! is a vector where each element is the result of applying the function \lstinline!sin! to the corresponding element in \lstinline!A!. -Only \lstinline!function! classes that are transitively non-replaceable (\cref{transitively-non-replaceable} and \cref{restrictions-on-base-classes-and-constraining-types-to-be-transitively-non-replaceable}) may be called vectorized. +Functions with one scalar return value can be applied to arrays +element-wise, e.g. if \lstinline!A! is a vector of reals, then \lstinline!sin(A)! is a vector +where each element is the result of applying the function \lstinline!sin! to the +corresponding element in \lstinline!A!. Only function classes that are transitively +non-replaceable (\autoref{transitively-non-replaceable} and \autoref{restrictions-on-base-classes-and-constraining-types-to-be-transitively-non-replaceable}) may be called vectorized. + +Consider the expression \lstinline!f(arg1,...,argn)!, an application of the function +\lstinline!f! to the arguments \lstinline!arg1,..., argn! is defined. + +For each passed argument, the type of the argument is checked against +the type of the corresponding formal parameter of the function. -Consider the expression \lstinline!f(arg1, $\ldots$, argn)!, an application of the function \lstinline!f! to the arguments \lstinline!arg1!, \ldots, \lstinline!argn!. -Potential vectorization of this call is defined as follows. -For each passed argument, the type of the argument is checked against the type of the corresponding formal parameter of the function: \begin{enumerate} -\item\label{argument-type-check-match} +\item If the types match, nothing is done. \item If the types do not match, and a type conversion can be applied, it is - applied. Continue with step~\ref{argument-type-check-match}. + applied. Continue with step 1. \item - If the types do not match, and no type conversion is applicable, the passed argument type is checked to see if it is an $n$-dimensional array of the formal parameter type. If it is not, the function call is invalid. If it is, we call this a \emph{foreach argument}. + If the types do not match, and no type conversion is applicable, the + passed argument type is checked to see if it is an n-dimensional array + of the formal parameter type. If it is not, the function call is + invalid. If it is, we call this a foreach argument. \item For all foreach arguments, the number and sizes of dimensions must match. If they do not match, the function call is invalid. @@ -823,13 +880,16 @@ \subsection{Scalar Functions Applied to Array Arguments}\label{scalar-functions- fashion, and the result has the type specified by the function definition. \item - The result of the function call expression is an $n$-dimensional array \lstinline!e! with the same dimension sizes as the foreach arguments. - Each element \lstinline!e[$i$, $\ldots$, $j$]! is the result of applying \lstinline!f! to arguments constructed from the original arguments in the following way: + The result of the function call expression is an n-dimensional array + with the same dimension sizes as the foreach arguments. Each element + ei,..,j is the result of applying f to arguments constructed from the + original arguments in the following way: \begin{itemize} \item If the argument is not a foreach argument, it is used as-is. \item - If the argument is a foreach argument, the element at index \lstinline![$i$, $\ldots$, $j$]! is used. + If the argument is a foreach argument, the element at index + \lstinline[mathescape=true]![i, $\ldots$, j]! is used. \end{itemize} \end{enumerate} @@ -838,9 +898,9 @@ \subsection{Scalar Functions Applied to Array Arguments}\label{scalar-functions- \begin{example} \begin{lstlisting}[language=modelica] -sin({a, b, c}) = {sin(a), sin(b), sin(c)} // argument is a vector -sin([a, b, c]) = [sin(a), sin(b), sin(c)] // argument may be a matrix -atan2({a, b, c}, {d, e, f}) = {atan2(a, d), atan2(b, e), atan2(c, f)} + sin({a, b, c}) = {sin(a), sin(b), sin(c)} // argument is a vector + sin([a,b,c]) = [sin(a),sin(b),sin(c)] // argument may be a matrix + atan({a,b,c},{d,e,f}) = {atan(a,d), atan(b,e), atan(c,f)} \end{lstlisting} This works even if the function is declared to take an array as one of its arguments. If \lstinline!pval! is defined as a function that takes @@ -849,17 +909,17 @@ \subsection{Scalar Functions Applied to Array Arguments}\label{scalar-functions- vector of vectors). The result type in this case will be a vector of \lstinline!Real!. \begin{lstlisting}[language=modelica] -pval([1,2;3,4]) = [pval([1,2]); pval([3,4])] -sin([1,2;3,4]) = [sin({1,2}); sin({3,4})] + pval([1,2;3,4]) = [pval([1,2]); pval([3,4])] + sin([1,2;3,4]) = [sin({1,2}); sin({3,4})] = [sin(1), sin(2); sin(3), sin(4)] \end{lstlisting} \begin{lstlisting}[language=modelica] -function Add - input Real e1, e2; - output Real sum1; -algorithm - sum1 := e1 + e2; -end Add; + function Add + input Real e1, e2; + output Real sum1; + algorithm + sum1 := e1 + e2; + end Add; \end{lstlisting} \lstinline!Add(1, [1,2,3])! adds one to each of the elements of the second argument giving the result \lstinline![2,3,4]!. However, it is illegal to @@ -867,13 +927,13 @@ \subsection{Scalar Functions Applied to Array Arguments}\label{scalar-functions- operators are more restrictive. \end{example} -\subsection{Empty Function Calls}\label{empty-function-calls} +\subsection{Empty Function Calls}\doublelabel{empty-function-calls} An \emph{empty} function call is a call that does not return any results. \begin{nonnormative} -An empty call is of limited use in Modelica since a function call without results does not contribute to the simulation, -but it is useful to check assertions and in certain cases for desired side-effects, see \cref{pure-modelica-functions}. +An empty call is of limited use in Modelica since a function call without results does not contribute to the simulation, and is not +allowed to have side-effects that influence the simulation state. \end{nonnormative} An empty call can occur either as a kind of ``null equation'' or ``null statement''. @@ -888,36 +948,38 @@ \subsection{Empty Function Calls}\label{empty-function-calls} \end{lstlisting} \end{example} -\section{Built-in Functions}\label{built-in-functions} +\section{Built-in Functions}\doublelabel{built-in-functions} There are basically four groups of built-in functions in Modelica: \begin{itemize} \item - Intrinsic mathematical and conversion functions, see \cref{numeric-functions-and-conversion-functions}. + Intrinsic mathematical and conversion functions, see \autoref{numeric-functions-and-conversion-functions}. \item Derivative and special operators with function syntax, - see \cref{derivative-and-special-purpose-operators-with-function-syntax}. + see \autoref{derivative-and-special-purpose-operators-with-function-syntax}. \item - Event-related operators with function syntax, see \cref{event-related-operators-with-function-syntax}. + Event-related operators with function syntax, see \autoref{event-related-operators-with-function-syntax}. \item - Built-in array functions, see \cref{built-in-array-functions}. + Built-in array functions, see \autoref{built-in-array-functions}. Note that when the specification references a function having the name of a built-in function it references the built-in function, not a user-defined function having the same name. \end{itemize} -\section{Record Constructor Functions}\label{record-constructor-functions} +\section{Record Constructor Functions}\doublelabel{record-constructor-functions} Whenever a record is defined, a record constructor function with the same name and in the same scope as the record class is implicitly defined according to the following rules: -% Warning: 'partial flatteing' doesn't seem to be defined. See 'partial instantitation'. -The declaration of the record is partially flattened including inheritance, modifications, redeclarations, and expansion of all names referring to declarations outside of the scope of the record to their fully qualified names. +The declaration of the record is partially flattened including +inheritance, modifications, redeclarations, and expansion of all names +referring to declarations outside of the scope of the record to their +fully qualified names. \begin{nonnormative} -The partial flattening is performed in order to remove potentially conflicting \lstinline!import!-clauses in the record constructor function due to flattening the inheritance tree. +The partial flattening is performed in order to remove potentially conflicting import statements in the record constructor function due to flattening the inheritance tree. \end{nonnormative} All record elements (i.e., components and local class @@ -946,7 +1008,7 @@ \section{Record Constructor Functions}\label{record-constructor-functions} is found in the global scope, and thus cannot be modified. \begin{nonnormative} -This allows constructing an instance of a record, with an +This allows to construct an instance of a record, with an optional modification, at all places where a function call is allowed. Examples: @@ -979,9 +1041,9 @@ \section{Record Constructor Functions}\label{record-constructor-functions} model Motor "Motor model" // using the generic MotorData MotorData data; - $\ldots$ + ... equation - $\ldots$ + ... end Motor; record MotorI123 = MotorData( // data of a specific motor @@ -999,10 +1061,10 @@ \section{Record Constructor Functions}\label{record-constructor-functions} model Robot import Motors.*; Motor motor1(data = MotorI123()); // just refer to data sheet - Motor motor2(data = MotorI123(inertia = 0.0012)); + Motor motor2(data = MotorI123(inertia=0.0012)); // data can still be modified (if no final declaration in record) Motor motor3(data = MotorI145()); - $\ldots$ + ... end Robot; \end{lstlisting} @@ -1036,12 +1098,11 @@ \section{Record Constructor Functions}\label{record-constructor-functions} The following record constructor functions are implicitly defined (the name of the output, given in italic below, is not defined; it should be chosen to not cause any conflict): -% henrikt-ma: TODO: Fix too long lines. \begin{lstlisting}[language=modelica,escapechar=!] package Demo; function Record1 input Real r0 = 0; - output Record1 $\mathit{result}$(r0 = r0); + output Record1 !\emph{result}!(r0 = r0); end Record1; function Record2 @@ -1055,7 +1116,7 @@ \section{Record Constructor Functions}\label{record-constructor-functions} input Real r5 = 5.0; input Real r6[n1]; input Real r7[n2]; - output Record2 $\mathit{result}$(r0=r0,c2=c2,n1=n1,n2=n2,r1=r1,r2=r2,r4=r4,r5=r5,r6=r6,r7=r7); + output Record2 !\emph{result}!(r0=r0,c2=c2,n1=n1,n2=n2,r1=r1,r2=r2,r4=r4,r5=r5,r6=r6,r7=r7); protected final constant Real c1 = 2.0; // referenced from r2 final parameter Real r3 = Modelica.Math.cos(r2); @@ -1063,11 +1124,10 @@ \section{Record Constructor Functions}\label{record-constructor-functions} end Demo; \end{lstlisting} and can be applied in the following way -% henrikt-ma: TODO: Fix too long lines. \begin{lstlisting}[language=modelica] -Demo.Record2 r1 = Demo.Record2(r0=1, c2=2, n1=2, n2=3, r1=1, r2=2,r4=5, r5=5, r6={1,2}, r7={1,2,3}); -Demo.Record2 r2 = Demo.Record2(1,2,2,3,1,2,5,5,{1,2},{1,2,3}); -parameter Demo.Record2 r3 = Demo.Record2(c2=2, n2=1, r1=1,r4=4, r6=1:5, r7={1}); + Demo.Record2 r1 = Demo.Record2(r0=1, c2=2, n1=2, n2=3, r1=1, r2=2,r4=5, r5=5, r6={1,2}, r7={1,2,3}); + Demo.Record2 r2 = Demo.Record2(1,2,2,3,1,2,5,5,{1,2},{1,2,3}); + parameter Demo.Record2 r3 = Demo.Record2(c2=2, n2=1, r1=1,r4=4, r6=1:5, r7={1}); \end{lstlisting} The above example is only used to show the different variants @@ -1075,7 +1135,7 @@ \section{Record Constructor Functions}\label{record-constructor-functions} simpler to just use a direct modifier. \end{nonnormative} -\subsection{Casting to Record}\label{casting-to-record} +\subsection{Casting to Record}\doublelabel{casting-to-record} A constructor of a record \lstinline!R! can be used to cast an instance m of a \lstinline!model!, \lstinline!block!, \lstinline!connector! class \lstinline!M! to a value of type \lstinline!R!, provided that for @@ -1083,7 +1143,7 @@ \subsection{Casting to Record}\label{casting-to-record} also a public component defined in \lstinline!M! with identical name and type. A nested record component of \lstinline!R! is handled as follows, if the corresponding component of \lstinline!M! is a \lstinline!model!/\lstinline!block!/\lstinline!connector! a nested record constructor is -called -- otherwise the component is used directly; and the resulting +called --- otherwise the component is used directly; and the resulting call/component is used as argument to the record constructor \lstinline!R!. If the corresponding component of \lstinline!R! in \lstinline!M! is a conditional component, it is an error. The instance \lstinline!m! is given as single (un-named) @@ -1091,10 +1151,11 @@ \subsection{Casting to Record}\label{casting-to-record} is replaced by a record constructor of type \lstinline!R! where all public components of \lstinline!M! that are present in \lstinline!R! are assigned to the corresponding components of \lstinline!R!. The record cast can be used in vectorized form -according to \cref{scalar-functions-applied-to-array-arguments}. +according to \autoref{scalar-functions-applied-to-array-arguments}. \begin{nonnormative} -The problem if \lstinline!R! would be a conditional component is that the corresponding binding would be illegal since it is not a \lstinline!connect!-equation. +The problem if \lstinline!R! would be a conditional component is that the corresponding binding would be illegal since it is not a +connect-statement. \end{nonnormative} \begin{nonnormative} @@ -1123,7 +1184,7 @@ \subsection{Casting to Record}\label{casting-to-record} Model1 sub1; protected Integer i1; - $\ldots$ + ... end Model2; record MyFlange @@ -1146,7 +1207,7 @@ \subsection{Casting to Record}\label{casting-to-record} Model2 s2[2]; MyRecord2 rec1 = MyRecord2(s1); MyRecord2 rec2[2] = MyRecord2(s2); - $\ldots$ + ... end Model; // Model is conceptually mapped to model ModelExpanded @@ -1161,151 +1222,53 @@ \subsection{Casting to Record}\label{casting-to-record} MyRecord2(r1=s2[2].r1, i2=s2[2].i2, sub1 = MyRecord1(b1=s2[2].sub1.b1, flange = MyFlange(tau=s2[2].sub1.flange.tau)}; - $\ldots$ + ... end ModelExpanded; \end{lstlisting} \end{example} -\section{Derivatives and Inverses of Functions}\label{derivatives-and-inverses-of-functions} - -The annotations listed below are related to differentiation and closed-form inverses of functions. -A function declaration can have \fmtannotationindex{derivative} annotations specifying derivative functions or preferably, for a function written in Modelica, use the \lstinline!smoothOrder! annotation to indicate that the tool can construct the derivative function automatically. -Partial derivatives are not provided via annotations, but using a certain type of short function definition described in \cref{partial-derivatives-of-functions}. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Annotation} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!smoothOrder! & Function smoothness guarantee & \Cref{modelica:smoothOrder}\\ -\lstinline!derivative! & Provide function derivative & \Cref{modelica:derivative}\\ -\lstinline!inverse! & Provide closed-form inverses & \Cref{modelica:inverse}\\ -\hline -\end{tabular} -\end{center} - -\begin{annotationdefinition}[smoothOrder] -\begin{synopsis}[grammar]\begin{lstlisting} -"smoothOrder" "=" UNSIGNED-NUMBER -"smoothOrder" - "(" - "normallyConstant" "=" IDENT - { "," "normallyConstant" "=" IDENT } - ")" - "=" UNSIGNED-NUMBER -\end{lstlisting}\end{synopsis} -\begin{semantics} -This annotation has only an effect within a function declaration. - -\lstinline!smoothOrder! defines the number of differentiations of the function, in order that all of the differentiated outputs are continuous provided all input arguments and their derivatives up to order \lstinline!smoothOrder! are continuous. - -\begin{nonnormative} -This means that the function is at least C\textsuperscript{smoothOrder}. -\lstinline!smoothOrder = 1! means that the function can be differentiated at least once in order that all output arguments are still continuous, provided the input arguments are continuous. -If a tool needs the derivative of a function, e.g.\ for index reduction or to compute an analytic Jacobian, the function can be differentiated analytically at least \lstinline!smoothOrder! times. -\end{nonnormative} - -The optional argument \lstinline!normallyConstant! of \lstinline!smoothOrder! defines that the function argument \lstinline!IDENT! is usually constant. - -\begin{nonnormative} -A tool might check whether the actual argument to \lstinline!IDENT! is a parameter expression at the place where the function is called. -If this is the case, the derivative of the function might be constructed under the assumption that the corresponding argument is constant, to enhance efficiency. -Typically, a tool would generate at most two different derivative functions of a function: -One, under the assumption that all \lstinline!normallyConstant! arguments are actually constant. -And one, under the assumption that all input arguments are time varying. -Based on the actual arguments of the function call either of the two derivative functions is used. - -This annotation is used by many functions of the \lstinline!Modelica.Fluid! library, such as\linebreak[4] \lstinline!Modelica.Fluid.Dissipation.PressureLoss.StraightPipe.dp_laminar_DP!, since geometric arguments to these functions are usually constant. -\end{nonnormative} -\end{semantics} -\end{annotationdefinition} - -\begin{annotationdefinition}[derivative] -\begin{synopsis}[grammar]\begin{lstlisting} -"derivative" [ derivative-constraints ] "=" name - -derivative-constraints : - "(" derivative-constraint { "," derivative-constraint } ")" - -derivative-constraint : - "order" = UNSIGNED-NUMBER - | "noDerivative" = IDENT - | "zeroDerivative" = IDENT -\end{lstlisting}\end{synopsis} -\begin{semantics} -This annotation has only an effect within a function declaration. - -The \lstinline!derivative! annotation can influence simulation time and accuracy, can be applied to both functions written in Modelica and to external functions, and may be used several times for the same function declaration. - -Each use of the \lstinline!derivative! annotation points to another \firstuse{derivative-function}\index{derivative-function} that expresses a derivative of the declared function, and the annotation can state that it is only valid under certain restrictions on the input arguments. -These restrictions are defined using the optional attributes \lstinline!order!, \lstinline!noDerivative!, and \lstinline!zeroDerivative!. -The \lstinline!order! may be specified at most once for each \lstinline!derivative! annotation, must be at least 1, and defaults to 1. -Specifying \lstinline!order! is only considered a restriction if $\text{\lstinline!order!} > 1$. - -For details abouts using the \lstinline!derivative! annotation, see \cref{using-the-derivative-annotation}. -\end{semantics} -\end{annotationdefinition} - -\begin{annotationdefinition}[inverse] -\begin{synopsis}[grammar]\begin{lstlisting} -"inverse" "(" function-inverse { "," function-inverse } ")" - -function-inverse : - IDENT "=" type-specifier function-call-args" -\end{lstlisting}\end{synopsis} -\begin{semantics} -A function with one output formal parameter may have one or more \fmtannotationindex{inverse} annotations to define inverses of this function. - -For details abouts using the \lstinline!inverse! annotation, see \cref{using-the-inverse-annotation}. -\end{semantics} -\end{annotationdefinition} - - -\subsection{Using the Derivative Annotation}\label{using-the-derivative-annotation} - -The given derivative-function must be a valid derivative if the \lstinline!derivative! annotation restrictions are satisfied, and can thus be used to compute the derivative in those cases. -There may be multiple restrictions on the derivative, in which case they must all be satisfied. -The restrictions also imply that some derivatives of some inputs are excluded from the call of the derivative (since they are not necessary). -When a function supplies multiple derivative-functions subject to different restrictions, the first one that can be used (i.e., satisfying the restrictions) will be used for each call. +\section{Declaring Derivatives of Functions}\doublelabel{declaring-derivatives-of-functions} + +Derivatives of functions can be declared explicitly using the \lstinline!derivative! +annotation, see \autoref{using-the-derivative-annotation}, whereas a function can be defined as a +partial derivative of another function using the \lstinline!der!-operator in a short +function definition, see \autoref{partial-derivatives-of-functions}. + +\subsection{Using the Derivative Annotation}\doublelabel{using-the-derivative-annotation} + +A function declaration can have an annotation \lstinline!derivative! specifying the +derivative function or preferably, for a function written in Modelica, +use the smoothOrder annotation to indicate that the tool can construct +the derivative function automatically, \autoref{annotations-for-code-generation}. The derivative +annotation can influence simulation time and accuracy and can be applied +to both functions written in Modelica and to external functions. A +derivative annotation can state that it is only valid under certain +restrictions on the input arguments. These restrictions are defined +using the following optional attributes: \lstinline!order! (only a restriction if +\lstinline!order>1!, the default for \lstinline!order! is 1), \lstinline!noDerivative!, and +\lstinline!zeroDerivative!. The given derivative-function can only be used to +compute the derivative of a function call if these restrictions are +satisfied. There may be multiple restrictions on the derivative, in +which case they must all be satisfied. The restrictions also imply that +some derivatives of some inputs are excluded from the call of the +derivative (since they are not necessary). A function may supply +multiple derivative functions subject to different restrictions, the +first one that can be used (i.e. satisfying the restrictions) will be +used for each call. \begin{nonnormative} This means that the most restrictive derivatives should be written first. \end{nonnormative} \begin{example} -The following model illustrates the requirement that a provided derivative must be valid. -That \lstinline!fder! is a valid derivative of \lstinline!f! means that it can be used safely to compute \lstinline!x2! by numeric integration: the function value, \lstinline!x1!, will up to numerical precision be matched by the integral of the derivative, \lstinline!x2!. -\begin{lstlisting}[language=modelica] -function f - input Real x; - output Real y; - annotation(derivative = fder); - external "C"; -end f; -model M - input Real u; - Real x1 "Directly from function"; - Real x2 "Integrated from derivative"; -equation - x1 = f(u); - der(x2) = der(x1); -initial equation - x2 = x1; -end M; -\end{lstlisting} -Note that tools are not required to use the provided derivative, and might solve the equations completely without numeric integration. -\end{example} - -\begin{example} -Use of \lstinline!order! to specify a second order derivative: \begin{lstlisting}[language=modelica] -function foo0 annotation(derivative = foo1); -end foo0; + function foo0 annotation(derivative=foo1); + end foo0; -function foo1 annotation(derivative(order=2) = foo2); -end foo1; + function foo1 annotation(derivative(order=2)=foo2); + end foo1; -function foo2 end foo2; + function foo2 end foo2; \end{lstlisting} \end{example} @@ -1324,13 +1287,20 @@ \subsection{Using the Derivative Annotation}\label{using-the-derivative-annotati and its derivative. \end{itemize} -If the Modelica function call is a $n$th derivative ($n \geq 1$), i.e.\ this function call has been derived from an $(n-1)$th derivative by differentiation inside the tool, an \lstinline!annotation(derivative(order=$n+1$) = $\ldots$)!, specifies the $(n+1)$th derivative, and the $(n+1)$th derivative call is constructed as follows: +If the Modelica function call is a nth derivative (n\textgreater{}=1), +i.e. this function call has been derived from an (n-1)th derivative by +differentiation inside the tool, an \lstinline!annotation(order=n+1)=...!, +specifies the (n+1)th derivative, and the (n+1)th derivative call is +constructed as follows: \begin{itemize} \item - The input arguments are appended with the $(n+1)$th derivative, which are constructed in order from the $n$th \lstinline!order! derivatives. + The input arguments are appended with the (n+1)th derivative, which + are constructed in order from the nth \lstinline!order! derivatives. \item - The output arguments are similar to the output argument for the $n$th derivative, but each output is one higher in derivative order. - The outputs must have the same type and declaration order for the function and its derivative. + The output arguments are similar to the output argument for the nth + derivative, but each output is one higher in derivative order. The + outputs must have the same type and declaration order for the function + and its derivative. \end{itemize} \begin{nonnormative} @@ -1345,56 +1315,59 @@ \subsection{Using the Derivative Annotation}\label{using-the-derivative-annotati Given the declarations \begin{lstlisting}[language=modelica] function foo0 - $\ldots$ + ... input Real x; input Boolean linear; - input $\ldots$; + input ...; output Real y; - $\ldots$ - annotation(derivative = foo1); + ... + annotation(derivative=foo1); end foo0; function foo1 - $\ldots$ + ... input Real x; input Boolean linear; - input $\ldots$; + input ...; input Real der_x; - $\ldots$ + ... output Real der_y; - $\ldots$ - annotation(derivative(order=2) = foo2); + ... + annotation(derivative(order=2)=foo2); end foo1; function foo2 - $\ldots$ + ... input Real x; input Boolean linear; - input $\ldots$; + input ...; input Real der_x; - $\ldots$; + ...; input Real der_2_x; - $\ldots$ + ... output Real der_2_y; - $\ldots$ + ... \end{lstlisting} the equation \begin{align*} (\ldots,\, y(t),\, \ldots) &= \text{\lstinline!foo0!}(\ldots,\, x(t),\, b,\ldots) \intertext{implies that:} -(\ldots,\, \udfrac{y(t)}{t},\, \ldots) &= -\text{\lstinline!foo1!}(\ldots,\, x(t),\, b,\, \ldots,\, \ldots,\, \udfrac{x(t)}{t},\, \ldots) +(\ldots,\, \pdfrac{y(t)}{t},\, \ldots) &= +\text{\lstinline!foo1!}(\ldots,\, x(t),\, b,\, \ldots,\, \ldots,\, \pdfrac{x(t)}{t},\, \ldots) \\ -(\ldots,\, \udfrac[2]{y(t)}{t},\, \ldots) &= -\text{\lstinline!foo2!}(\ldots,\, x(t),\, b,\, \ldots,\, \udfrac{x(t)}{t},\, \ldots,\, \ldots,\, \udfrac[2]{x(t)}{t},\, \ldots) +(\ldots,\, \pdfrac[2]{y(t)}{t},\, \ldots) &= +\text{\lstinline!foo2!}(\ldots,\, x(t),\, b,\, \ldots,\, \pdfrac{x(t)}{t},\, \ldots,\, \ldots,\, \pdfrac[2]{x(t)}{t},\, \ldots) \end{align*} \end{example} -An input or output to the function may be any simple type (\lstinline!Real!, \lstinline!Boolean!, \lstinline!Integer!, \lstinline!String! and enumeration types) or a record. -For a record containing \lstinline!Real! values, the corresponding derivative uses a derivative record that only contains the real-predefined types and sub-records containing reals (handled recursively) from the original record. -When using \lstinline!smoothOrder!, then the derivative record is automatically constructed. -The function must have at least one input containing reals. -The output list of the derivative function shall not be empty. +An input or output to the function may be any simple type (Real, +Boolean, Integer, String and enumeration types) or a record. For a +record containing Reals the corresponding derivative uses a derivative +record, that only contain the real-predefined types and sub-records +containing reals (handled recursively) from the original record. When +using smoothOrder, then the derivative record is automatically +constructed. The function must have at least one input containing reals. +The output list of the derivative function may not be empty. \begin{example} Here is one example use case with records mixing \lstinline!Real! and @@ -1416,8 +1389,8 @@ \subsection{Using the Derivative Annotation}\label{using-the-derivative-annotati input ThermodynamicState state "Thermodynamic state"; output Density d "Density"; algorithm - $\ldots$ - annotation(derivative = density_der); + ... + annotation(derivative=density_der); end density; function density_der @@ -1425,7 +1398,7 @@ \subsection{Using the Derivative Annotation}\label{using-the-derivative-annotati input ThermodynamicState_der state_der; output DensityDerivative d "Density derivative"; algorithm - $\ldots$ + ... end density_der; function setState_ph @@ -1434,7 +1407,7 @@ \subsection{Using the Derivative Annotation}\label{using-the-derivative-annotati input Integer phase = 0; output ThermodynamicState state; algorithm - $\ldots$ + ... annotation(derivative = setState_ph_der); end setState_ph; @@ -1446,61 +1419,64 @@ \subsection{Using the Derivative Annotation}\label{using-the-derivative-annotati input SpecificEnthalpyDerivative h_der; output ThermodynamicState_der state_der; algorithm - $\ldots$ + ... end setState_ph_der; -ThermodynamicState state1 = setState_ph(p=$\ldots$, h=$\ldots$, phase=$\ldots$); -Density rho1 = density(state1); -DensityDerivative d_rho1 = der(rho1); -Density rho2 = density(setState_ph(p=$\ldots$, h=$\ldots$, phase=$\ldots$)); -DensityDerivative d_rho2 = der(rho2); +ThermodynamicState state1 = setState_ph(p=..., h=..., phase=...); +Density rho1=density(state1); +DensityDerivative d_rho1=der (rho1); +Density rho2=density(setState_ph(p=..., h=..., phase=...)); +DensityDerivative d_rho2=der (rho2); \end{lstlisting} \end{example} \begin{itemize} \item - \lstinline[language=grammar]!zeroDerivative = $\mathit{inputVar}_{1}$ { , zeroDerivative = $\mathit{inputVar}_{2}$ }! + \lstinline!zeroDerivative=inputVar1 {, zeroDerivative=inputVar2 }! \end{itemize} -The derivative function is only valid if $\mathit{inputVar}_{1}$ (and $\mathit{inputVar}_{2}$ etc.) are independent of the variables the function call is differentiated with respect to (i.e.\ that the derivative of $\mathit{inputVar}_{1}$ is zero). -The derivative of $\mathit{inputVar}_{1}$ (and $\mathit{inputVar}_{2}$ etc.) are excluded from the argument list of the derivative-function. -If the derivative-function also specifies a derivative the common variables should have consistent \lstinline!zeroDerivative!. +The derivative function is only valid if \lstinline!inputVar1! (and \lstinline!inputVar2! etc.) +are independent of the variables the function call is differentiated +with respect to (i.e. that the derivative of \lstinline!inputVar1! is zero). The +derivative of \lstinline!inputVar1! (and \lstinline!inputVar2! etc.) are excluded from the +argument list of the derivative-function. If the derivative-function +also specifies a derivative the common variables should have consistent +\lstinline!zeroDerivative!. \begin{nonnormative} Assume that function \lstinline!f! takes a matrix and a scalar. Since the matrix argument is usually a parameter expression it is then useful to define the function as follows (the additional derivative = -\lstinline!fGeneralDer! is optional and can be used when the derivative of -the matrix or offset is non-zero). Note that the derivative annotation of \lstinline!fDer! must specify -\lstinline!zeroDerivative! for both \lstinline!y! and \lstinline!offset! as below, but the derivative annotation of \lstinline!fGeneralDer! shall not have -\lstinline!zeroDerivative! for either of them (it may specify \lstinline!zeroDerivative! for \lstinline!x_der!, +\lstinline!f_general_der! is optional and can be used when the derivative of +the matrix or offset is non-zero). Note that \lstinline!f_der! must have +\lstinline!zeroDerivative! for both \lstinline!y! and \lstinline!offset!, but \lstinline!f_general_der! may not have +\lstinline!zeroDerivative! for either of them (it may \lstinline!zeroDerivative! for \lstinline!x_der!, \lstinline!y_der!, or \lstinline!offset_der!). \begin{lstlisting}[language=modelica] function f "Simple table lookup" input Real x; input Real y[:, 2]; - input Real offset "Shortened to o below"; + input Real offset; output Real z; algorithm - $\ldots$ - annotation(derivative(zeroDerivative=y, zeroDerivative=offset) = fDer, - derivative = fGeneralDer); + ... + annotation(derivative(zeroDerivative=y, zeroDerivative=offset)= f_der, + derivative=f_general_der); end f; -function fDer "Derivative of simple table lookup" +function f_der "Derivative of simple table lookup" input Real x; input Real y[:, 2]; input Real offset; input Real x_der; output Real z_der; algorithm - $\ldots$ - annotation( - derivative(zeroDerivative=y, zeroDerivative=offset, order=2) = fDer2); -end fDer; + ... + annotation(derivative(zeroDerivative=y, zeroDerivative=offset, order=2) = f_der2); +end f_der; -function fDer2 "Second derivative of simple table lookup" +function f_der2 "Second derivative of simple table lookup" input Real x; input Real y[:, 2]; input Real offset; @@ -1508,10 +1484,10 @@ \subsection{Using the Derivative Annotation}\label{using-the-derivative-annotati input Real x_der2; output Real z_der2; algorithm - $\ldots$ -end fDer2; + ... +end f_der2; -function fGeneralDer "Derivative of table lookup taking +function f_general_der "Derivative of table lookup taking into account varying tables" input Real x; input Real y[:, 2]; @@ -1521,32 +1497,26 @@ \subsection{Using the Derivative Annotation}\label{using-the-derivative-annotati input Real offset_der; output Real z_der; algorithm - $\ldots$ - //annotation(derivative(order=2) = fGeneralDer2); -end fGeneralDer; -\end{lstlisting} -In the example above \lstinline!zeroDerivative=y! and \lstinline!zeroDerivative=offset! imply that -\begin{equation*} -\begin{aligned} -\udfrac{}{t}\text{\lstinline!f!}(x(t),\, y(t),\, o(t)) -&= \pdfrac{\text{\lstinline!f!}}{x} \udfrac{x}{t} + \pdfrac{\text{\lstinline!f!}}{y} \udfrac{y}{t} + \pdfrac{\text{\lstinline!f!}}{o} \udfrac{o}{t}\\ -&= \pdfrac{\text{\lstinline!f!}}{x} \udfrac{x}{t} + \pdfrac{\text{\lstinline!f!}}{y} \cdot 0 + \pdfrac{\text{\lstinline!f!}}{o} \cdot 0\\ -&= \pdfrac{\text{\lstinline!f!}}{x} \udfrac{x}{t}\\ -&= \text{\lstinline!fDer!} \cdot \udfrac{x}{t} -\end{aligned} -\end{equation*} + ... + //annotation(derivative(order=2) = f_general_der2); +end f_general_der; +\end{lstlisting} \end{nonnormative} \begin{itemize} \item - \lstinline[language=grammar]!noDerivative = $\mathit{inputVar}_{1}$! + \lstinline!noDerivative=inputVar1! \end{itemize} -The derivative of $\mathit{inputVar}_{1}$ is excluded from the argument list of the derivative-function. -This relies on assumptions on the arguments to the function; and the function should document these assumptions (it is not always straightforward to verify them). -In many cases even the undifferentiated function will only behave correctly under these assumptions. +The derivative of inputVar1 is excluded from the argument list of the +derivative-function. This relies on assumptions on the arguments to the +function; and the function should document these assumptions (it is not +always straightforward to verify them). In many cases even the +undifferentiated function will only behave correctly under these +assumptions. -The inputs excluded using \lstinline!zeroDerivative! or \lstinline!noDerivative! may be of any type (including types not containing reals). +The inputs excluded using zeroDerivative or noDerivative may be of any +type (including types not containing reals). \begin{nonnormative} Assume that function \lstinline!fg! is defined as a composition \lstinline!f(x, g(x))!. @@ -1565,101 +1535,106 @@ \subsection{Using the Derivative Annotation}\label{using-the-derivative-annotati input Real y; output Real z; algorithm - $\ldots$ - annotation(derivative(noDerivative=y) = h); + ... + annotation(derivative(noDerivative=y) = f_der); end f; -function h +function f_der input Real x; input Real y; input Real x_der; output Real z_der; algorithm - $\ldots$ -end h; + ... +end f_der; \end{lstlisting} This is useful if \lstinline!g! represents the major computational effort of \lstinline!fg!. - -Therefore \lstinline!h! indirectly includes the derivative with respect to \lstinline!y! as follows: -\begin{equation*} -\begin{aligned} -\udfrac{}{t}\text{\lstinline!fg!}(x(t)) -&= \udfrac{}{t}\text{\lstinline!f!}(x(t),\, \text{\lstinline!g!}(x(t)))\\ -&= \pdfrac{\text{\lstinline!f!}}{x} \udfrac{x}{t} + \pdfrac{\text{\lstinline!f!}}{y} \pdfrac{\text{\lstinline!g!}}{x} \udfrac{x}{t}\\ -&= \left(\pdfrac{\text{\lstinline!f!}}{x} + \pdfrac{\text{\lstinline!f!}}{y} \pdfrac{\text{\lstinline!g!}}{x} \right) \udfrac{x}{t}\\ -&= \text{\lstinline!h!}(x(t),\, y(t))) \udfrac{x}{t} -\end{aligned} -\end{equation*} \end{nonnormative} - -\subsection{Partial Derivatives of Functions}\label{partial-derivatives-of-functions} +\subsection{Partial Derivatives of Functions}\doublelabel{partial-derivatives-of-functions} A class defined as: \begin{lstlisting}[language=grammar] IDENT "=" der "(" name "," IDENT { "," IDENT } ")" comment \end{lstlisting} -is the partial derivative of a function, and may only be used as declarations of functions. -The semantics is that a function (and only a function) can be specified in this form, defining that it is the partial derivative of the function to the right of the equal sign (looked up in the same way as a short class definition, and the looked up name must be a function), and partially differentiated with respect to each \lstinline!IDENT! in order (starting from the first one). The \lstinline!IDENT! must be \lstinline!Real! inputs to the function. +is the partial derivative of a function, and may only be used as +declarations of functions. -The comment allows a user to comment the function (in the info-layer and as one-line description, and as icon). +The semantics is that a function (and only a function) can be +specified in this form, defining that it is the partial derivative of +the function to the right of the equal sign (looked up in the same way +as a short class definition - the looked up name must be a function), +and partially differentiated with respect to each \lstinline!IDENT! in order +(starting from the first one). The \lstinline!IDENT! must be Real inputs to the +function. + +The comment allows a user to comment the function (in the info-layer and +as one-line description, and as icon). \begin{example} The specific enthalpy can be computed from a Gibbs-function as follows: \begin{lstlisting}[language=modelica] function Gibbs - input Real p, T; + input Real p,T; output Real g; algorithm - $\ldots$ + ... end Gibbs; -function Gibbs_T = der(Gibbs, T); +function Gibbs_T=der(Gibbs, T); function specificEnthalpy - input Real p, T; + input Real p,T; output Real h; algorithm - h := Gibbs(p, T) - T * Gibbs_T(p, T); + h:=Gibbs(p,T)-T*Gibbs_T(p,T); end specificEnthalpy; \end{lstlisting} \end{example} +\section{Declaring Inverses of Functions}\doublelabel{declaring-inverses-of-functions} -\subsection{Using the Inverse Annotation}\label{using-the-inverse-annotation} - -If a function $f_1$ with one output formal parameter $y$ can be restricted to an informally defined domain and codomain, such that the mapping of the input formal parameter $u_{k}$ to $y$ is bijective for any fixed assignment to the other input formal parameters in the domain (see examples below), then it can be given an \fmtannotationindex{inverse} annotation to provide an explicit inverse $f_2$ to this mapping, provided that the function is only applied on this domain: - -The \lstinline!inverse! annotation takes the following form in a function declaration: -\begin{lstlisting}[language=modelica] +Every function with one output formal parameter may have one or more +\lstinline!inverse! annotations to define inverses of this function: +\begin{lstlisting}[language=modelica,mathescape=true] function $f_1$ input $A_1$ $u_1$; - $\ldots$ + ... input $T_1$ $u_k$; - $\ldots$ + ... input $A_m$ $u_m$ = $a_m$; - $\ldots$ + ... input $A_n$ $u_n$; - output $T_2$ $y$; + output $T_2$ y; algorithm - $\ldots$ - annotation(inverse($u_k$ = $f_2$($\ldots$, $y$, $\ldots$)); + ... + annotation(inverse($u_k$ =$f_2$(..., y, ....), $u_i$ =$f_3$(..., y, ...), ...)); end $f_1$; \end{lstlisting} -In addition to $y$, the formal call to $f_2$ in the annotation shall also pass the other formal parameters (excluding $u_{k}$) needed determine the inverse, see below. -The function $f_2$ must be an actual inverse, meaning that if $u_k$ is calculated as $u_k = f_2(\ldots,\, y,\, \ldots)$, then the equality $y = f_1(\ldots,\, u_k,\, \ldots)$ is satisfied up to a certain precision, for all values of the input arguments of $f_2(\ldots,\, y,\, \ldots)$ in the range and informal domain of $f_1$. +The meaning is that function $f_2$ is one inverse to +function $f_1$ where the previous output \lstinline!y! is now an +input and the previous input $u_k$ is now an output. More +than one inverse can be defined within the same inverse annotation. +Several inverses are separated by commas. -More than one inverse can be defined within the same \lstinline!inverse! annotation, separated by commas: -\begin{lstlisting}[language=modelica] -annotation(inverse($u_k$ = $f_2$($\ldots$, $y$, $\ldots$), $u_i$ = $f_3$($\ldots$, $y$, $\ldots$), $\ldots$)); -\end{lstlisting} +\begin{nonnormative} +The inverse requires that for all valid values of the input arguments of \lstinline[mathescape=true]!$f_2$(..., y, ...)! and $u_k$ being calculated as \lstinline[mathescape=true]!$u_k$ := $f_2$(..., y, ...)! implies +the equality \lstinline[mathescape=true]!y = $f_1$(..., $u_k$, ...,)! up to a certain precision. +\end{nonnormative} + +Function $f_1$ can have any number and types of formal +Function $f_1$ can have any number and types of formal +parameters with and without default value. The restriction is that the +\emph{number of unknown variables} (see \autoref{balanced-models}) in the output formal +parameter of both $f_1$ and $f_2$ must be +the same and that $f_2$ should have a union of output and formal +parameters that is the same or a sub-set of that union for $f_1$, but the order of the formal +parameters may be permuted. -Function $f_1$ can have any number and types of formal parameters with and without default value. -The restriction is that the \emph{number of unknown variables} (see \cref{balanced-models}) in the output formal parameter of both $f_1$ and $f_2$ must be the same and that $f_2$ should have a union of output and formal parameters that is the same or a subset of that union for $f_1$, but the order of the formal parameters may be permuted. \begin{example} -Inverse function with same union of formal parameters: +Same union of variables: \begin{lstlisting}[language=modelica] function h_pTX input Real p "pressure"; @@ -1667,8 +1642,8 @@ \subsection{Using the Inverse Annotation}\label{using-the-inverse-annotation} input Real X[:] "mass fractions"; output Real h "specific enthalpy"; algorithm - $\ldots$ - annotation(inverse(T = T_phX(p, h, X))); + ... + annotation(inverse(T = T_phX(p,h,X))); end h_pTX; function T_phX @@ -1677,202 +1652,46 @@ \subsection{Using the Inverse Annotation}\label{using-the-inverse-annotation} input Real X[:] "mass fractions"; output Real T "temperature"; algorithm - $\ldots$ + ... end T_phX; \end{lstlisting} \end{example} -The subset case is useful if $f_1$ computes the inverse of $f_2$ within a region, or up to a certain tolerance. +The sub-set case is useful if $f_1$ computes the inverse of $f_2$ within a region, or up to a certain tolerance. Then, $f_1$ may specify $f_2$ as inverse with fewer arguments, skipping the arguments for tolerance and/or the region. \begin{example} -Inverse function with subset of formal parameters: + \begin{lstlisting}[language=modelica] function inv_sine input Real x; input Real angleOrig; output Real angle; - // Finds sine(angle) = x with angle closest to angleOrig. + // Finds sine(angle)=x with angle closest to angleOrig. algorithm - $\ldots$ - annotation(inverse(x = sine(angle))); + ... + annotation(inverse(x=sine(angle))); end inv_sine; function sine input Real angle; output Real x; algorithm - x := sin(angle); + x:=sin(angle); // Note: No inverse. end sine; \end{lstlisting} \end{example} +\section{External Function Interface}\doublelabel{external-function-interface} -Tools are not expected to verify the bijectiveness requirement, meaning that it is the user's responsibility to ensure that this requirement is fulfilled, and that tools can rely on the requirement as an assumption for symbolic manipulations when an inverse function is provided. - -There is no guarantee that a provided inverse will be used, and no rule for at which stage of symbolic processing it could be applied. -Inlining a function means that the possibility to apply provided inverses is lost. -Hence, the recommended inlining annotations -- if any -- for use together with the \lstinline!inverse!-annotation is either \lstinline!Inline = false! or \lstinline!LateInline = true!. - -\begin{example} -If an inverse is provided, but the injectiveness part of the bijectiveness requirement is not fulfilled, this may introduce additional ambiguity to the solution of equations with multiple solutions. -Consider the following invalid use of the \lstinline!inverse! annotation: -\begin{lstlisting}[language=modelica] -model NotInjective - function square - input Real x; - output Real y = x^2; - annotation(inverse(x = sqrt(y))); // Invalid! - end square; - - parameter Real y0 = -1.0; - Real y(start = y0, fixed = true); - Real x(start = sign(y0) * sqrt(abs(y0))); // Good guess with same sign as y. -equation - der(y) = -y; - square(x) = abs(y); // Expecting continuous solution for x. -end NotInjective; -\end{lstlisting} -That the parameter \lstinline!y0! may have any sign means the sign of \lstinline!x! cannot be restricted in the informal domain of \lstinline!square!, and hence that the injectiveness requirement cannot be fulfilled. -Without the \lstinline!inverse! annotation, the nonlinear equation in \lstinline!x! and \lstinline!y! has an ambiguity, but it is generally expected that this is handled so that a continuous solution for \lstinline!x! is obtained, meaning that it will keep the same sign as \lstinline!y! throughout the simulation. -The additional ambiguity introduced by the \lstinline!inverse! annotation is that if the provided inverse is used to solve the nonlinear equation instead of using a generic nonlinear equation solver based on local search, then the solution with positive sign is always obtained. -The lack of guarantees that a provided inverse will be used thus implies a worse ambiguity than what was present in the model before introducing the \lstinline!inverse! annotation. -\end{example} - -\begin{example} -If an inverse is provided, but the surjectiveness part of the bijectiveness requirement is not fulfilled, this may introduce an invalid solution to equations that do not have a solution at all. -Consider the following invalid use of the \lstinline!inverse! annotation: -\begin{lstlisting}[language=modelica] -model NotSurjective - function cube - input Real x; - output Real y = x ^ 3; - end cube; - - function cbrtPos "Cubic root of positive number" - input Real y; - output Real x; - algorithm - assert(y > 0, "Argument must be positive."); - x := exp(log(y) / 3); - annotation(inverse(y = cube(x))); // Invalid! - end cbrtPos; - - Real x = 0.5 + sin(time); - Real y; -equation - cbrtPos(y) = x; // Calling cbrtPos requires y > 0. - annotation(experiment(StopTime = 10.0)); -end NotSurjective; -\end{lstlisting} -As the value of \lstinline!x! varies over the interval $[-1,\, 1]$, but the range of \lstinline!cbrtPos! is only $(0, \infty)$, the informal codomain of \lstinline!cbrtPos! cannot be restricted such that the surjectiveness is fulfilled. -A valid solution to the equation in \lstinline!x! and \lstinline!y! must satisfy $\text{\lstinline!y!} > 0$, and when no \lstinline!inverse! annotation is given, a violation will be detected by a nonlinear solver applied directly to the equation. -When the (invalid) inverse provided by the \lstinline!inverse! annotation is used, however, the equation gets transformed into -\begin{lstlisting}[language=modelica] - y = cube(x); -\end{lstlisting} -where the requirement $\text{\lstinline!y!} > 0$ can no longer be detected, resulting in a simulation result that does not fulfill the original model equations. -\end{example} -\section{Function Inlining and Event Generation}\label{function-inlining-and-event-generation} - -The annotations listed below affect inlining of functions and the related topic of event generation inside functions. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Annotation} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!Inline! & Inline function & \Cref{modelica:Inline}\\ -\lstinline!LateInline! & Inline after all symbolic transformations & \Cref{modelica:LateInline}\\ -\lstinline!InlineAfterIndexReduction! & Inline after index reduction & \Cref{modelica:InlineAfterIndexReduction}\\ -\lstinline!GenerateEvents! & Generate events for zero crossings in function & \Cref{modelica:GenerateEvents}\\ -\hline -\end{tabular} -\end{center} - -Inlining a function makes the statements of the function body accessible to symbolic operations, potentially leading to expression simplifications and more efficient solution of equations. -At the same time, another important consequence of inlining a function is that any annotations for derivatives or inverses are lost. -Hence, one needs to find the right balance between inlining too early (loss of provided derivatives and inverses) and too late (earlier stages of symbolic processing cannot benefit from symbolic simplifications). - -\begin{annotationdefinition}[Inline] -\begin{synopsis}[grammar]\begin{lstlisting} -"Inline" "=" ( false | true ) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Has only an effect within a function declaration. - -If \lstinline!Inline = true!, the model developer proposes to inline the function. -This means, that the body of the function is included at all places where the function is called. - -If \lstinline!Inline = false!, the model developer proposes to not inline the function. - -\begin{nonnormative} -\lstinline!Inline = true! is for example used in \lstinline!Modelica.Mechanics.MultiBody.Frames! and in functions of \lstinline!Modelica.Media! to have no overhead for function calls such as resolving a vector in a different coordinate system and at the same time the function can be analytically differentiated, e.g., for index reduction needed for mechanical systems. -\end{nonnormative} -\end{semantics} -\end{annotationdefinition} - -\begin{annotationdefinition}[LateInline] -\begin{synopsis}[grammar]\begin{lstlisting} -"LateInline" "=" ( false | true ) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Has only an effect within a function declaration. - -If \lstinline!LateInline = true!, the model developer proposes to inline the function after all symbolic transformations have been performed. - -\begin{nonnormative} -Late inlining is especially useful for differentiation and inversion of functions; for efficiency reasons it is then useful to replace all function calls with identical input arguments by one function call, before the inlining. -\end{nonnormative} - -If \lstinline!LateInline = false!, the model developer proposes to not inline the function after symbolic transformations have been performed. - -\lstinline!Inline = true, LateInline = false! is identical to \lstinline!Inline = true!. - -\lstinline!Inline = true, LateInline = true! is identical to \lstinline!LateInline = true!. - -\lstinline!Inline = false, LateInline = true! is identical to \lstinline!LateInline = true!. - -\begin{nonnormative} -This annotation is for example used in \lstinline!Modelica.Media.Water.IF97_Utilities.T_props_ph! to provide in combination with common subexpression elimination the automatic caching of function calls. -Furthermore, it is used in order that a tool is able to propagate specific enthalpy over connectors in the \lstinline!Modelica.Fluid! library. -\end{nonnormative} -\end{semantics} -\end{annotationdefinition} - -\begin{annotationdefinition}[InlineAfterIndexReduction] -\begin{synopsis}[grammar]\begin{lstlisting} -"InlineAfterIndexReduction" "=" ( false | true ) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Has only an effect within a function declaration. - -If \lstinline!true!, the model developer proposes to inline the function after the function is differentiated for index reduction, and before any other symbolic transformations are performed. -This annotation cannot be combined with annotations \lstinline!Inline! and \lstinline!LateInline!. -\end{semantics} -\end{annotationdefinition} - -\begin{annotationdefinition}[GenerateEvents] -\begin{synopsis}[grammar]\begin{lstlisting} -"GenerateEvents" "=" ( false | true ) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Has only an effect within a function declaration - -If \lstinline!GenerateEvents = true!, the model developer proposes that crossing functions in the function should generate events (one possibility of doing this is to inline the function and generate events for the inlined function). - -\end{semantics} -\end{annotationdefinition} - - -\section{External Function Interface}\label{external-function-interface} - -Here, the word \emph{function} is used to refer to an arbitrary external routine, whether or not the routine has a return value or returns its result via output parameters (or both). -The Modelica external function call interface provides the following: +Here, the word function is used to refer to an arbitrary external +routine, whether or not the routine has a return value or returns its +result via output parameters (or both). The Modelica external function +call interface provides the following: \begin{itemize} \item Support for external functions written in C (specifically C89) and - FORTRAN~77. Other languages, e.g.\ C++ and Fortran 90, may be supported + FORTRAN~77. Other languages, e.g. C++ and Fortran 90, may be supported in the future, and provided the function is link-compatible with C89 or FORTRAN~77 it can be written in any language. \item @@ -1900,33 +1719,36 @@ \section{External Function Interface}\label{external-function-interface} function IDENT description-string { component-clause ";" } [ protected { component-clause ";" } ] -external [ language-specification ] - [ external-function-call ] - [annotation ] ";" + external [ language-specification ] [ + external-function-call ] [annotation ] ";" [ annotation ";" ] end IDENT; -\end{lstlisting}% -\indexinline{external} +\end{lstlisting} -Components in the public part of an external function declaration shall be declared either as \lstinline!input! or \lstinline!output!. +Components in the public part of an external function declaration shall +be declared either as input or output. \begin{nonnormative} This is just as for any other function. The components in the protected part allow local variables for temporary storage to be declared. \end{nonnormative} -The \lstinline[language=grammar]!language-specification! must currently be one of \lstinline!"builtin"! (deprecated), \lstinline!"C"!, \lstinline!"C$\ldots$"! (for one of the specific C standards like C89, C99, and C11 -- specifying -that it relies on the C standard library of that version) or \lstinline!"FORTRAN 77"!. -Unless the external language is specified, it is assumed to be \lstinline!"C"!. +The \lstinline!language-specification! must currently be one of \lstinline!"builtin"!, +\lstinline!"C"!, \lstinline!"C..."! (for one of the specific C-standards like C89, C99, and C11 +-- which specifies that it relies on the C standard library of that +version) or \lstinline!"FORTRAN 77"!. Unless the external language is specified, it +is assumed to be \lstinline!"C"!. \begin{nonnormative} -The intended use of e.g.\ C99 is to detect if the user tries to link with a C99-function using a C89 compiler. +The intended use of e.g. C99 is to detect if the user tries to link with a C99-function using a C89 compiler. \end{nonnormative} -The deprecated \lstinline!"builtin"! specification is only used for the elementary mathematical functions described in \cref{built-in-mathematical-functions-and-external-built-in-functions}. -The external function call mechanism for \lstinline!"builtin"! functions is implementation-defined. +The \lstinline!"builtin"! specification is only used for functions that are defined +to be built-in in Modelica. The external-function call mechanism for +\lstinline!"builtin"! functions is implementation-defined. \begin{nonnormative} -Typically, for functions from the standard C library, the prototype of the function is provided but no \lstinline!Library! annotation. Currently, there are no other builtin functions defined in Modelica. +Typically, for functions from the standard C-library, the prototype of the function is provided but no library annotation. Currently, there are +no other builtin functions defined in Modelica. \end{nonnormative} \begin{example} @@ -1936,165 +1758,166 @@ \section{External Function Interface}\label{external-function-interface} function sin input Real x; output Real y; - external "builtin" - y = sin(x); + external "builtin" y=sin(x); end sin; end Math; end Modelica; model UserModel - parameter Real p = Modelica.Math.sin(2); + parameter Real p=Modelica.Math.sin(2); end UserModel; \end{lstlisting} \end{example} -The \lstinline[language=grammar]!external-function-call! specification allows functions whose prototypes do not match the default assumptions as defined below to be called. It also gives the name used to call the external function. If the external call is not given explicitly, this name is assumed to be the same as the Modelica name. +The external-function-call specification allows functions whose +prototypes do not match the default assumptions as defined below to be +called. It also gives the name used to call the external function. If +the external call is not given explicitly, this name is assumed to be +the same as the Modelica name. -The only permissible kinds of expressions in the argument list are component references, scalar constants, and the function \lstinline!size! applied to an array and a constant dimension number. -The annotations are used to pass additional information to the compiler when necessary. +The only permissible kinds of expressions in the argument list are +component references, scalar constants, and the function size applied to +an array and a constant dimension number. The annotations are used to +pass additional information to the compiler when necessary. A component reference to a component that is part of an input or output is treated the same way as a top-level input or output in the external call. -If the function has \lstinline!annotation(Include="includeDirective")!, \cref{annotations-for-external-libraries-and-include-files} it is assumed that it contains an actual prototype and no prototype shall be automatically generated. In that case the input argument pointers shall be const pointers (indicating that they do not modify the inputs), and non-const pointers are deprecated. The optional \lstinline[language=grammar]!external-function-call! is still used for determining the name of the function, and order of arguments, as described below. +If the function has \lstinline!annotation(Include="includeDirective")!, \autoref{annotations-for-external-libraries-and-include-files} +it is assumed that it contains an actual prototype and no prototype shall be automatically generated. +In that case the input argument pointers shall be const pointers (indicating that they do not modify the inputs), +and non-const pointers are deprecated. +The optional external-function-call is still used for determining the name of the function, and order of arguments, as described below. -\subsection{Argument type Mapping}\label{argument-type-mapping} +\subsection{Argument type Mapping}\doublelabel{argument-type-mapping} -The arguments of the external function are declared in the same order as in the Modelica declaration, unless specified otherwise in an explicit external function call. -Protected variables (i.e.\ temporaries) are passed in the same way as outputs, whereas constants and \lstinline!size! calls are passed as inputs. +The arguments of the external function are declared in the same order as +in the Modelica declaration, unless specified otherwise in an explicit +external function call. Protected variables (i.e. temporaries) are +passed in the same way as outputs, whereas constants and size-expression +are passed as inputs. -\subsubsection{Simple Types}\label{simple-types} +\subsubsection{Simple Types}\doublelabel{simple-types} Arguments of \emph{simple} types are by default mapped as follows for C: -\begin{center} -\begin{tabular}{l|l|l} -\hline -\multicolumn{1}{c|}{\tablehead{Modelica}} & \multicolumn{2}{c}{\tablehead{C}}\\ - & \multicolumn{1}{c}{\tablehead{Input}} & \multicolumn{1}{c}{\tablehead{Output}}\\ -\hline -\hline -\lstinline!Real! & \lstinline[language=C]!double! & \lstinline[language=C]!double *!\\ -\lstinline!Integer! & \lstinline[language=C]!int! & \lstinline[language=C]!int *!\\ -\lstinline!Boolean! & \lstinline[language=C]!int! & \lstinline[language=C]!int *!\\ -\lstinline!String! & \lstinline[language=C]!const char *! & \lstinline[language=C]!const char **!\\ -Enumeration type & \lstinline[language=C]!int! & \lstinline[language=C]!int *!\\ +\begin{longtable}[]{|l|l|l|} \hline -\end{tabular} -\end{center} - -An exception is made when the argument is of the form \lstinline!size($\ldots$, $\ldots$)!. In this case the corresponding C type is \lstinline!size_t!. - -Strings are \textsc{nul}-terminated (i.e., terminated by \lstinline[language=C]!'\0'!) to facilitate calling of C functions. -The valid return values for an external function returning a \lstinline!String! are: -\begin{itemize} -\item A string given as \lstinline!String! input to the external function. -\item A pointer to a C string literal. -\item A pointer returned by one of the string allocation functions in \cref{utility-functions-for-allocating-strings}. -\end{itemize} - -\begin{nonnormative} -The reason why it is not allowed to return a string allocated with, for instance, \lstinline[language=C]!malloc! is that there is no transfer of ownership when a string is returned from the external function. -The external code would remain the owner of such a string, and would be responsible for eventually releasing the memory at some point. -Consequently, the Modelica simulation environment would not be able to assume that only its own string deallocation routines could invalidate any of the strings returned by external functions. -\end{nonnormative} - -\lstinline!Boolean! values are mapped to C such that \lstinline!false! in Modelica is 0 in C and \lstinline!true! in Modelica is 1 in C. If the returned value from C is 0 it is treated as \lstinline!false! in Modelica; otherwise as \lstinline!true!. +\tablehead{Modelica} & \multicolumn{2}{c|}{\tablehead{C}}\\ +& \tablehead{Input} & \tablehead{Output}\\ \hline +\endhead +\lstinline!Real! & \lstinline!double! & \lstinline!double *!\\ \hline +\lstinline!Integer! & \lstinline!int! & \lstinline!int *!\\ \hline +\lstinline!Boolean! & \lstinline!int! & \lstinline!int *!\\ \hline +\lstinline!String! & \lstinline!const char *! & \lstinline!const char **!\\ \hline +\lstinline!Enumeration type! & \lstinline!int! & \lstinline!int *!\\ \hline +\end{longtable} + +An exception is made when the argument is of the form \lstinline!size!(\ldots{}, +\ldots{}). In this case the corresponding C-type is \lstinline!size_t!. + +Strings are NUL-terminated (i.e., terminated by '\lstinline!\0!') to +facilitate calling of C functions. When returning a non-literal string, +see \autoref{utility-functions-for-allocating-strings} for details on memory allocation. + +Boolean values are mapped to C such that false in Modelica is 0 in C and +true in Modelica is 1 in C. If the returned value from C +is 0 it is treated as false in Modelica; otherwise as true. \begin{nonnormative} -It is recommended that the C function should interpret any non-zero value as true. +It is recommended that the C-function should interpret any non-zero value as true. \end{nonnormative} Arguments of simple types are by default mapped as follows for FORTRAN~77: -\begin{center} -\begin{tabular}{l|l|l} -\hline -\multicolumn{1}{c|}{\tablehead{Modelica}} & \multicolumn{2}{c}{\tablehead{FORTRAN~77}}\\ - & \multicolumn{1}{c}{\tablehead{Input}} & \multicolumn{1}{c}{\tablehead{Output}}\\ -\hline -\hline -\lstinline!Real! & \lstinline[language=FORTRAN77]!DOUBLE PRECISION! & \lstinline[language=FORTRAN77]!DOUBLE PRECISION!\\ -\lstinline!Integer! & \lstinline[language=FORTRAN77]!INTEGER! & \lstinline[language=FORTRAN77]!INTEGER!\\ -\lstinline!Boolean! & \lstinline[language=FORTRAN77]!LOGICAL! & \lstinline[language=FORTRAN77]!LOGICAL!\\ -\lstinline!String! & \emph{Special} & \emph{Not available}\\ -Enumeration type & \lstinline[language=FORTRAN77]!INTEGER! & \lstinline[language=FORTRAN77]!INTEGER!\\ +\begin{longtable}[]{|l|l|l|} \hline -\end{tabular} -\end{center} +\tablehead{Modelica} & \multicolumn{2}{c|}{FORTRAN~77}\\ +& \tablehead{Input} & \tablehead{Output}\\ \hline +\endhead +\lstinline!Real! & \lstinline!DOUBLE PRECISION! & \lstinline!DOUBLE PRECISION!\\ \hline +\lstinline!Integer! & \lstinline!INTEGER! & \lstinline!INTEGER!\\ \hline +\lstinline!Boolean! & \lstinline!LOGICAL! & \lstinline!LOGICAL!\\ \hline +\lstinline!Enumeration type! & \lstinline!INTEGER! & \lstinline!INTEGER!\\ \hline +\lstinline!String! & \lstinline!Special! & \lstinline!Not Available!\\ \hline +\end{longtable} Sending string literals to FORTRAN~77 subroutines/functions is supported -for Lapack/Blas-routines, and the strings are \textsc{nul}-terminated for +for Lapack/Blas-routines, and the strings are NUL-terminated for compatibility with C. Returning strings from FORTRAN~77 subroutines/functions is currently not supported. -Enumeration types used as arguments are mapped to type int when calling an external C function, and to type \lstinline!INTEGER! when calling an external FORTRAN function. -The $i$th enumeration literal is mapped to integer value $i$, starting at 1. +Enumeration types used as arguments are mapped to type int when calling +an external C function, and to type \lstinline!INTEGER! when calling an external +FORTRAN function. The i:th enumeration literal is mapped to integer +value i, starting at one. Return values are mapped to enumeration types analogously: integer value 1 is mapped to the first enumeration literal, 2 to the second, etc. Returning a value which does not map to an existing enumeration literal for the specified enumeration type is an error. -\subsubsection{Arrays}\label{arrays-1} +\subsubsection{Arrays}\doublelabel{arrays-1} -Unless an explicit function call is present in the \lstinline!external!-clause, an array is passed by its address followed by $n$ arguments of type \lstinline!size_t! with the corresponding array dimension sizes, where $n$ is the number of dimensions. +Unless an explicit function call is present in the external declaration, +an array is passed by its address followed by n arguments of type +\lstinline!size_t! with the corresponding array dimension sizes, where n is the +number of dimensions. \begin{nonnormative} -The type \lstinline[language=C]!size_t! is a C unsigned integer type. +The type \lstinline!size_t! is a C unsigned integer type. \end{nonnormative} -Arrays are by default stored in row-major order when calling C functions and in column-major order when calling FORTRAN~77 functions. These defaults can be overridden by the \lstinline!arrayLayout! annotation. See the example below. - -The table below shows the mapping of an array argument in the absence of an explicit external function call when calling a C function. -The type \lstinline!T! is allowed to be any of the simple types which can be passed to C as defined in \cref{simple-types} or a record type as defined in \cref{records} and it is mapped to the type $T'$ as defined in these sections for input arguments. -Array inputs to C-functions are const-pointers, indicating that the arrays shall not be changed. - -\begin{center} -\begin{tabular}{l|l|l} -\hline -\multicolumn{1}{c|}{\tablehead{Modelica}} & \multicolumn{2}{c}{\tablehead{C}}\\ - & \multicolumn{1}{c}{\tablehead{Input}} & \multicolumn{1}{c}{\tablehead{Output}} \\ -\hline -\hline -\lstinline!T[$\mathit{dim}_{1}$]! & -\lstinline[language=C]!const $T'$ *, size_t $\mathit{dim}_{1}$! & -\lstinline[language=C]!$T'$ *, size_t $\mathit{dim}_{1}$! -\\ -\lstinline!T[$\mathit{dim}_{1}$, $\mathit{dim}_{2}$]! & -\lstinline[language=C]!const $T'$ *, size_t $\mathit{dim}_{1}$, size_t $\mathit{dim}_{2}$! & -\lstinline[language=C]!$T'$ *, size_t $\mathit{dim}_{1}$, size_t $\mathit{dim}_{2}$! -\\ -\lstinline!T[$\ldots$, $\mathit{dim}_{n}$]! & -\lstinline[language=C]!const $T'$ *, $\ldots$, size_t $\mathit{dim}_{n}$! & -\lstinline[language=C]!$T'$ *, $\ldots$, size_t $\mathit{dim}_{n}$! -\\ -\hline -\end{tabular} -\end{center} +Arrays are by default stored in row-major order when calling C functions +and in column-major order when calling FORTRAN~77 functions. These +defaults can be overridden by the array layout annotation. See the +example below. -The method used to pass array arguments to FORTRAN~77 functions in the absence of an explicit external function call is similar to the one defined above for C: first the address of the array, then the dimension sizes as integers. -See the table below. -The type T is allowed to be any of the simple types which can be passed to FORTRAN~77 as defined in \cref{simple-types} and it is mapped to the type $T'$ as defined in that section. +The table below shows the mapping of an array argument in the absence of +an explicit external function call when calling a C function. The type \lstinline!T! +is allowed to be any of the simple types which can be passed to C as +defined in \autoref{simple-types} or a record type as defined in +\autoref{records} and it is mapped to the type \lstinline!T'! as defined in these sections +for input arguments. -\begin{center} -\begin{tabular}{l|l} -\hline -\multicolumn{1}{c|}{\tablehead{Modelica}} & \multicolumn{1}{c}{\tablehead{FORTRAN~77}}\\ - & \multicolumn{1}{c}{\tablehead{Input and output}}\\ +\begin{longtable}[]{|l|l|} \hline +\tablehead{Modelica} & \tablehead{C}\\ \hline +& \tablehead{Input and Output}\\ \hline +\endhead +\lstinline[mathescape=true]!T[$\textit{dim}_{1}$]! & +\lstinline[mathescape=true,language=C]!T' *, size_t $\textit{dim}_{1}$! +\\ \hline +\lstinline[mathescape=true]!T[$\textit{dim}_{1}$, $\textit{dim}_{2}$]! & +\lstinline[mathescape=true,language=C]!T' *, size_t $\textit{dim}_{1}$, size_t$\textit{dim}_{2}$! +\\ \hline +\lstinline[mathescape=true]!T[$\textit{dim}_{1}$, $\ldots$, $\textit{dim}_{n}$]! & +\lstinline[mathescape=true,language=C]!T' *, size_t $\textit{dim}_{1}$, $\ldots$, size_t $\textit{dim}_{n}$! +\\ \hline +\end{longtable} + +The method used to pass array arguments to FORTRAN~77 functions in the +absence of an explicit external function call is similar to the one +defined above for C: first the address of the array, then the dimension +sizes as integers. See the table below. The type T is allowed to be any +of the simple types which can be passed to FORTRAN~77 as defined in +\autoref{simple-types} and it is mapped to the type T' as defined in that +section. + +\begin{longtable}[]{|l|l|} \hline -\lstinline!T[$\mathit{dim}_{1}$]! & -\lstinline[language=FORTRAN77]!$T'$, INTEGER $\mathit{dim}_{1}$! -\\ -\lstinline!T[$\mathit{dim}_{1}$, $\mathit{dim}_{2}$]! & -\lstinline[language=FORTRAN77]!$T'$, INTEGER $\mathit{dim}_{1}$, INTEGER $\mathit{dim}_{2}$! -\\ -\lstinline!T[$\mathit{dim}_{1}$, $\ldots$, $\mathit{dim}_{n}$]! & -\lstinline[language=FORTRAN77]!$T'$, INTEGER $\mathit{dim}_{1}$, $\ldots$, INTEGER $\mathit{dim}_{n}$! -\\ -\hline -\end{tabular} -\end{center} +\tablehead{Modelica} & \tablehead{FORTRAN~77}\\ \hline +& \tablehead{Input and Output}\\ \hline +\endhead +\lstinline[mathescape=true]!T[$\textit{dim}_{1}$]! & +\lstinline[mathescape=true,language=FORTRAN77]!T', INTEGER $\textit{dim}_{1}$! +\\ \hline +\lstinline[mathescape=true]!T[$\textit{dim}_{1}$, $\textit{dim}_{2}$]! & +\lstinline[mathescape=true,language=FORTRAN77]!T', INTEGER $\textit{dim}_{1}$, INTEGER $\textit{dim}_{2}$! +\\ \hline +\lstinline[mathescape=true]!T[$\textit{dim}_{1}$, $\ldots$, $\textit{dim}_{n}$]! & +\lstinline[mathescape=true,language=FORTRAN77]!T', INTEGER $\textit{dim}_{1}$, $\ldots$, INTEGER $\textit{dim}_{n}$! +\\ \hline +\end{longtable} \begin{example} The following two examples illustrate the default mapping of @@ -2109,7 +1932,7 @@ \subsubsection{Arrays}\label{arrays-1} \end{lstlisting} The corresponding C prototype is as follows: \begin{lstlisting}[language=C] -double foo(const double *, size_t, size_t, size_t); +double foo(double *, size_t, size_t, size_t); \end{lstlisting} If the external function is written in FORTRAN~77, i.e.: @@ -2117,19 +1940,19 @@ \subsubsection{Arrays}\label{arrays-1} function foo input Real a[:,:,:]; output Real x; -external "FORTRAN 77"; + external "FORTRAN 77"; end foo; \end{lstlisting} the default assumptions correspond to a FORTRAN~77 function defined as follows: -\begin{lstlisting}[language=FORTRAN77] +\begin{lstlisting}[language=fortran77] FUNCTION foo(a, d1, d2, d3) - DOUBLE PRECISION(d1, d2, d3) a - INTEGER d1 - INTEGER d2 - INTEGER d3 - DOUBLE PRECISION foo - $\ldots$ + DOUBLE PRECISION(d1,d2,d3) a + INTEGER d1 + INTEGER d2 + INTEGER d3 + DOUBLE PRECISION foo + ... END \end{lstlisting} \end{example} @@ -2149,12 +1972,11 @@ \subsubsection{Arrays}\label{arrays-1} input Integer i; output Real u1[size(y,1)]; output Integer u2[size(y,2)]; -external "FORTRAN 77" - myfoo(x, y, size(x,1), size(y,2), u1, i, u2); + external "FORTRAN 77" myfoo(x, y, size(x,1), size(y,2), u1, i, u2); end foo; \end{lstlisting} The corresponding FORTRAN~77 subroutine would be declared as follows: -\begin{lstlisting}[language=FORTRAN77] +\begin{lstlisting}[language=fortran77] SUBROUTINE myfoo(x, y, n, m, u1, i, u2) DOUBLE PRECISION(n) x DOUBLE PRECISION(n,m) y @@ -2163,7 +1985,7 @@ \subsubsection{Arrays}\label{arrays-1} DOUBLE PRECISION(n) u1 INTEGER i DOUBLE PRECISION(m) u2 - $\ldots$ + ... END \end{lstlisting} @@ -2177,13 +1999,13 @@ \subsubsection{Arrays}\label{arrays-1} annotation(arrayLayout = "columnMajor"); end fie; \end{lstlisting} -This corresponds to the following C prototype: +This corresponds to the following C-prototype: \begin{lstlisting}[language=C] -double fie(const double *, size_t, size_t); +double fie(double *, size\_t, size\_t); \end{lstlisting} \end{example} -\subsubsection{Records}\label{records} +\subsubsection{Records}\doublelabel{records} Mapping of record types is only supported for C. A Modelica record class that contains simple types, other record elements, is mapped as follows: @@ -2200,7 +2022,7 @@ \subsubsection{Records}\label{records} Arrays cannot be mapped. \end{itemize} -Records are passed by reference (i.e.\ a pointer to the record is being +Records are passed by reference (i.e. a pointer to the record is being passed). \begin{example} @@ -2219,41 +2041,43 @@ \subsubsection{Records}\label{records} \end{lstlisting} \end{example} -\subsection{Return Type Mapping}\label{return-type-mapping} - -If there is a single output parameter and no explicit call of the external function, or if there is an explicit external call in the form of an equation, in which case the LHS must be one of the output parameters, the external routine is assumed to be a value-returning function. -Otherwise the external function is assumed not to return anything; i.e., it is really a procedure or, in C, a void-function. +\subsection{Return Type Mapping}\doublelabel{return-type-mapping} -Mapping of the return type of functions is performed as indicated in the table below. -Storage for arrays as return values is allocated by the calling routine, so the dimensions of the returned array are fixed at call time. -See \cref{simple-types} regarding returning of \lstinline!String! values. +If there is a single output parameter and no explicit call of the +external function, or if there is an explicit external call in the form +of an equation, in which case the LHS must be one of the output +parameters, the external routine is assumed to be a value-returning +function. Mapping of the return type of functions is performed as +indicated in the table below. Storage for arrays as return values is +allocated by the calling routine, so the dimensions of the returned +array are fixed at call time. Otherwise the external function is assumed +not to return anything; i.e., it is really a procedure or, in C, a +void-function. \begin{nonnormative} -In the case of an external function not returning anything, argument type mapping according to \cref{simple-types} is performed in the absence +In the case of an external function not returning anything, argument type mapping according to \autoref{simple-types} is performed in the absence of any explicit external function call. \end{nonnormative} Return types are by default mapped as follows for C and FORTRAN~77: -\begin{center} -\begin{tabular}{l|l|l} -\hline -\multicolumn{1}{c|}{\tablehead{Modelica}} & \multicolumn{1}{c|}{\tablehead{C}} & \multicolumn{1}{c}{\tablehead{FORTRAN~77}}\\ +\begin{longtable}[]{|l|l|l|} \hline -\hline -\lstinline!Real! & \lstinline[language=C]!double! & \lstinline[language=FORTRAN77]!DOUBLE PRECISION!\\ -\lstinline!Integer! & \lstinline[language=C]!int! & \lstinline[language=FORTRAN77]!INTEGER!\\ -\lstinline!Boolean! & \lstinline[language=C]!int! & \lstinline[language=FORTRAN77]!LOGICAL!\\ -\lstinline!String! & \lstinline[language=C]!const char*! & \emph{Not allowed}\\ -\lstinline!T[$\mathit{dim}_{1}$, $\ldots$, $\mathit{dim}_{n}$]! & \emph{Not allowed} & \emph{Not allowed} \\ -Enumeration type & \lstinline[language=C]!int! & \lstinline[language=FORTRAN77]!INTEGER!\\ -Record & See \cref{records} & \emph{Not allowed}\\ -\hline -\end{tabular} -\end{center} - -The element type \lstinline!T! of an array can be any simple type as defined in \cref{simple-types} or, for C, a record type is returned as a value of the record type defined in \cref{records}. - -\subsection{Aliasing}\label{aliasing} +\tablehead{Modelica} & \tablehead{C} & \tablehead{FORTRAN~77}\\ \hline +\endhead +\lstinline!Real! & \lstinline!double! & \lstinline!DOUBLE PRECISION!\\ \hline +\lstinline!Integer! & \lstinline!int! & \lstinline!INTEGER!\\ \hline +\lstinline!Boolean! & \lstinline!int! & \lstinline!LOGICAL!\\ \hline +\lstinline!String! & \lstinline!const char*! & Not allowed.\\ \hline +\texttt{T}{[}$\texttt{dim}_1$, \ldots{}, $\texttt{dim}_{n}${]} & Not allowed. & Not allowed.\\ \hline +Enumeration type & \lstinline!int! & \lstinline!INTEGER!\\ \hline +Record & See \autoref{records}. & Not allowed.\\ \hline +\end{longtable} + +The element type \lstinline!T! of an array can be any simple type as defined in +\autoref{simple-types} or, for C, a record type is returned as a value of the +record type defined in \autoref{records}. + +\subsection{Aliasing}\doublelabel{aliasing} Any potential aliasing in the external function is the responsibility of the tool and not the user. An external function is not allowed to @@ -2265,9 +2089,8 @@ \subsection{Aliasing}\label{aliasing} function foo input Real x; input Real y; - output Real z = x; -external "FORTRAN 77" - myfoo(x, y, z); + output Real z=x; + external "FORTRAN 77" myfoo(x,y,z); end foo; \end{lstlisting} The following Modelica function: @@ -2276,20 +2099,20 @@ \subsection{Aliasing}\label{aliasing} input Real a; output Real b; algorithm - b := foo(a, a); - b := foo(b, 2 * b); + b:=foo(a,a); + b:=foo(b,2*b); end f; \end{lstlisting} can on most systems be transformed into the following C function: \begin{lstlisting}[language=C] double f(double a) { - extern void myfoo_(double*, double*, double*); - double b, temp1, temp2; + extern void myfoo_(double*,double*,double*); + double b,temp1,temp2; - myfoo_(&a, &a, &b); - temp1 = 2 * b; - temp2 = b; - myfoo_(&b, &temp1, &temp2); + myfoo_(&a,&a,&b); + temp1=2*b; + temp2=b; + myfoo_(&b,&temp1,&temp2); return temp2; } @@ -2299,7 +2122,7 @@ \subsection{Aliasing}\label{aliasing} inputs is to ensure that inputs can be stored in static memory and to avoid superfluous copying (especially of matrices). If the routine does not satisfy the requirements the interface must copy the input argument -to a temporary. This is rare but occurs e.g.\ in \lstinline!dormlq! in some +to a temporary. This is rare but occurs e.g. in \lstinline!dormlq! in some Lapack implementations. In those special cases the writer of the external interface have to copy the input to a temporary. If the first input was changed internally in myfoo the designer of the interface @@ -2307,11 +2130,10 @@ \subsection{Aliasing}\label{aliasing} \begin{lstlisting}[language=modelica] function foo input Real x; - protected Real xtemp = x; // Temporary used because myfoo changes its input + protected Real xtemp=x; // Temporary used because myfoo changes its input public input Real y; output Real z; -external "FORTRAN 77" - myfoo(xtemp, y, z); + external "FORTRAN 77" myfoo(xtemp,y,z); end foo; \end{lstlisting} @@ -2322,40 +2144,55 @@ \subsection{Aliasing}\label{aliasing} follow the standard and are unable to handle aliasing between input variables the tool must transform the first call of \lstinline!foo! into: \begin{lstlisting}[language=C] -temp1 = a; /* Temporary to avoid aliasing */ -myfoo_(&a, &temp1, &b); +temp1=a; /* Temporary to avoid aliasing */ +myfoo_(&a,&temp1,&b); \end{lstlisting} The use of the function \lstinline!foo! in Modelica is uninfluenced by these considerations. \end{example} -\subsection{Annotations for External Libraries and Include Files}\label{annotations-for-external-libraries-and-include-files} +\subsection{Annotations for External Libraries and Include Files}\doublelabel{annotations-for-external-libraries-and-include-files} -The following annotations are useful in the context of calling external functions from Modelica, and they should occur on the \lstinline!external!-clause and no other standard annotations should occur on the \lstinline!external!-clause. -They can all specify either a scalar value or an array of values as indicated below for the \lstinline!Library! annotation: +The following annotations are useful in the context of calling external +functions from Modelica, and they should occur on the external clause +and no other standard annotations should occur on the external-clause. +They can all specify either a scalar value or an array of values as +indicated below for annotation (Library=\ldots{}): \begin{itemize} \item - The \lstinline!annotation(Library="libraryName")!\annotationindex{Library}, used by the linker to include the library file where the compiled external function is available. + The \lstinline!annotation(Library="libraryName")!, used by the linker to include + the library file where the compiled external function is available. \item - The \lstinline!annotation(Library=("libraryName1", "libraryName2"))!, used by the linker to include the library files where the compiled external function is available and additional libraries used to implement it. - For shared libraries it is recommended to include all non-system libraries in this list. + The \lstinline!annotation(Library=("libraryName1","libraryName2"))!, used by the + linker to include the library files where the compiled external + function is available and additional libraries used to implement it. + For shared libraries it is recommended to include all non-system + libraries in this list. \item - The \lstinline!annotation(Include="includeDirective")!\annotationindex{Include}, used to include source files needed for calling the external function in the code generated by the Modelica compiler. - The included code should be valid C89 code. + The \lstinline!annotation(Include="includeDirective")!, used to include source files needed for calling the external function in the code + generated by the Modelica compiler. The included code should be valid C89 code. \begin{nonnormative} - Examples of files that can be included are header files or source files that contain the functions referenced in the external function declaration. + Examples of files that can be included are header files or source files that contain the + functions referenced in the external function declaration. \end{nonnormative} \item The - \lstinline!annotation(IncludeDirectory="modelica://ModelicaLibraryName/Resources/Include")!\annotationindex{IncludeDirectory}, used to specify a location for header files. - The preceding one is the default and need not be specified; but another location could be specified by using an URI name for the include directory, see \cref{external-resources}. + \lstinline!annotation(IncludeDirectory="modelica://ModelicaLibraryName/Resources/Include")!, + used to specify a location for header files. The preceding one is the + default and need not be specified; but another location could be + specified by using an URI name for the include directory, see \autoref{external-resources}. \item The - \lstinline!annotation(LibraryDirectory="modelica://ModelicaLibraryName/Resources/Library")!\annotationindex{LibraryDirectory}, used to specify a location for library files. - The preceding one is the default and need not be specified; but another location could be specified by using an URI name for the library directory, see \cref{external-resources}. - Different versions of one object library can be provided (e.g.\ for Windows and for Linux) by providing a \emph{platform} directory below the \lstinline!LibraryDirectory!. - If no platform directory is present, the object library must be present in the \lstinline!LibraryDirectory!. - The following \emph{platform} names are standardized: + \lstinline!annotation(LibraryDirectory="modelica://ModelicaLibraryName/Resources/Library")!, + used to specify a location for library files. The preceding one is the + default and need not be specified; but another location could be + specified by using an URI name for the library directory, see \autoref{external-resources}. + Different versions of one object library can be provided + (e.g. for Windows and for Linux) by providing a + \emph{platform} directory below the \lstinline!LibraryDirectory!. If no + platform directory is present, the object library must be present + in the \lstinline!LibraryDirectory!. The following \emph{platform} names are + standardized: \begin{itemize} \item \lstinline!"win32"! (Microsoft Windows 32 bit) @@ -2366,11 +2203,6 @@ \subsection{Annotations for External Libraries and Include Files}\label{annotati \item \lstinline!"linux64"! (Linux Intel 64 bit) \end{itemize} -\item - The - \lstinline!annotation(SourceDirectory="modelica://ModelicaLibraryName/Resources/Source")!\annotationindex{SourceDirectory}, gives the location for source files. - The preceding one is the default and need not be specified; but another location could be specified by using an URI name for the source directory, see \cref{external-resources}. - It is not specified how they are built. \end{itemize} The \filename{win32} or \filename{win64} directories may contain \filename{gcc47}, \filename{vs2010}, \filename{vs2012} @@ -2379,61 +2211,55 @@ \subsection{Annotations for External Libraries and Include Files}\label{annotati platforms. The library on Windows may refer to a lib-file (static library), both a lib- and dll-file (in this case the lib-file is an import-library), -or just a dll-file. It shall not refer to an obj-file. +or just a dll-file. It may not refer to an obj-file. If the directory for the specific compiler version is missing the platform specific directory is used. \begin{nonnormative} A tool may give diagnostics if the directory corresponding to the selected compiler version is missing. The directories may use symbolic links or use -a text-file as described below: e.g.\ a text-file \filename{vs2008} containing the text \emph{../win32/vs2005} (or \emph{vs2005}) suggesting that it is +a text-file as described below: e.g. a text-file \filename{vs2008} containing the text \emph{../win32/vs2005} (or \emph{vs2005}) suggesting that it is compatible with vs2005. \end{nonnormative} -The \lstinline!ModelicaLibraryName! used for \lstinline!IncludeDirectory!, \lstinline!LibraryDirectory!, and \lstinline!SourceDirectory! indicates the top-level class where the annotation is found in the Modelica source code. +The \lstinline!ModelicaLibraryName! used for \lstinline!IncludeDirectory! and \lstinline!LibraryDirectory! +indicates the top-level class where the annotation is found in the +Modelica source code. \begin{example} Use of external functions and of object libraries: \begin{lstlisting}[language=modelica] package ExternalFunctions model Example - Real x(start = 1.0), y(start = 2.0); + Real x(start=1.0),y(start=2.0); equation - der(x) = -ExternalFunc1(x); - der(y) = -ExternalFunc2(y); + der(x)=-ExternalFunc1(x); + der(y)=-ExternalFunc2(y); end Example; model OtherExample - Real x(start = 1.0); + Real x(start=1.0); equation - der(x) = -ExternalFunc3(x); + der(x)=-ExternalFunc3(x); end OtherExample; function ExternalFunc1 input Real x; output Real y; - external "C" - y = ExternalFunc1_ext(x) - annotation(Library = "ExternalLib1", - Include = "#include \"ExternalFunc1.h\"", - SourceDirectory = - "modelica://ExternalFunctions/Resources/Source"); - // The SourceDirectory is the default and thus redundant. + external "C" + y=ExternalFunc1_ext(x) annotation(Library="ExternalLib1",Include="#include \"ExternalFunc1.h\""); end ExternalFunc1; function ExternalFunc2 input Real x; output Real y; - external "C" - annotation(Library = "ExternalLib2", - Include = "#include \"ExternalFunc2.h\""); + external "C" annotation(Library="ExternalLib2", Include="#include \"ExternalFunc2.h\""); end ExternalFunc2; function ExternalFunc3 input Real x; output Real y; - external "C" - annotation(Include = "#include \"ExternalFunc3.c\""); + external "C" annotation(Include="#include \"ExternalFunc3.c\""); end ExternalFunc3; end ExternalFunctions; @@ -2447,36 +2273,28 @@ \subsection{Annotations for External Libraries and Include Files}\label{annotati package.mo // contains the Modelica code from above Resources Include // contains the include files - ExternalFunc1.h // C header file - ExternalFunc2.h // C header file - ExternalFunc3.c // C source file (not ideal) - Library // contains the object libraries for different platforms + ExternalFunc1.h // C-header file + ExternalFunc2.h // C-header file + ExternalFunc3.c // C-source file + Library // contains the object libraries for different + platforms win32 ExternalLib1.lib // static link library for VisualStudio ExternalLib2.lib // statically linking the dynamic link library ExternalLib2.dll // dynamic link library (with manifest) linux32 - libExternalLib1.a // static link library + libExternalLib1.a // static link library libExternalLib2.so // shared library - Source // Sources for library - Func1.c // C source for ExternalLib1.lib - Func2.c // C source for ExternalLib2.lib - HelperFunc.c // C source also included in ExternalLib2.lib MyExternalFunctions package.mo \end{lstlisting} -Note that calling the function \lstinline!MyExternalFunctions.ExternalFunc1! will use -the header and library files from \lstinline!ExternalFunction!, the \lstinline!ExternalFunctions.Example! will not use \filename{ExternalFunc3.c}, +Note that calling \lstinline!MyExternalFunctions.ExternalFunc1! will use +header and library files from \lstinline!ExternalFunction!, the \lstinline!ExternalFunctions.Example! will not use \filename{ExternalFunc3.c}, and one library file may contain multiple functions. -The C-source \filename{ExternalFunc3.c} will be included fully, and is not part of any library. -That is not ideal for C-code, but it works for small functions. - -It is not specified how the C-sources in \filename{Source} will be used to build the libraries. - Header file for the function in the dynamic link / shared library \filename{ExternalLib2} so that the desired functions are defined to be exported -for Microsoft VisualStudio and for GNU C compiler (note, for Linux it is +for Microsoft VisualStudio and for GNU C-compiler (note, for Linux it is recommended to use the compiler option \lstinline!-fPIC! to build shared libraries or object libraries that are later transformed to a shared library): @@ -2507,11 +2325,14 @@ \subsection{Annotations for External Libraries and Include Files}\label{annotati \end{lstlisting} \end{example} -The \lstinline!Library! name and the \lstinline!LibraryDirectory! name in the function annotation are mapped to a linkage directive in a compiler-dependent way thereby selecting the object library suited for the respective computer platform. +The Library name and the LibraryDirectory name in the function +annotation are mapped to a linkage directive in a compiler-dependent way +thereby selecting the object library suited for the respective computer +platform. -\subsection{Examples}\label{examples1} +\subsection{Examples}\doublelabel{examples1} -\subsubsection{Input Parameters, Function Value}\label{input-parameters-function-value} +\subsubsection{Input Parameters, Function Value}\doublelabel{input-parameters-function-value} \begin{example} Here all parameters to the external function are input @@ -2525,7 +2346,7 @@ \subsubsection{Input Parameters, Function Value}\label{input-parameters-function external; end foo; \end{lstlisting} -This corresponds to the following C prototype: +This corresponds to the following C-prototype: \begin{lstlisting}[language=C] double foo(double, int); \end{lstlisting} @@ -2540,7 +2361,7 @@ \subsubsection{Input Parameters, Function Value}\label{input-parameters-function \end{lstlisting} \end{example} -\subsubsection{Arbitrary Placement of Output Parameters, No External Function Value}\label{arbitrary-placement-of-output-parameters-no-external-function-value} +\subsubsection{Arbitrary Placement of Output Parameters, No External Function Value}\doublelabel{arbitrary-placement-of-output-parameters-no-external-function-value} \begin{example} In the following example, the external function call is given @@ -2552,11 +2373,10 @@ \subsubsection{Arbitrary Placement of Output Parameters, No External Function Va input Integer y; output Real u1; output Integer u2; -external "C" - myfoo(x, u1, y, u2); + external "C" myfoo(x, u1, y, u2); end foo; \end{lstlisting} -This corresponds to the following C prototype: +This corresponds to the following C-prototype: \begin{lstlisting}[language=C] void myfoo(double, double *, int, int *); \end{lstlisting} @@ -2566,11 +2386,11 @@ \subsubsection{Arbitrary Placement of Output Parameters, No External Function Va \end{lstlisting} Translated call in C: \begin{lstlisting}[language=C] -myfoo(2.4, &z1, 3, &i2); +myfoo(2.4, \&z1, 3, \&i2); \end{lstlisting} \end{example} -\subsubsection{External Function with Both Function Value and Output Variable}\label{external-function-with-both-function-value-and-output-variable} +\subsubsection{External Function with Both Function Value and Output Variable}\doublelabel{external-function-with-both-function-value-and-output-variable} \begin{example} The following external function returns two results: one @@ -2582,11 +2402,10 @@ \subsubsection{External Function with Both Function Value and Output Variable}\l input Integer y; output Real funcvalue; output Integer out1; -external "C" - funcvalue = myfoo(x, y, out1); + external "C" funcvalue = myfoo(x, y, out1); end foo; \end{lstlisting} -This corresponds to the following C prototype: +This corresponds to the following C-prototype: \begin{lstlisting}[language=C] double myfoo(double, int, int *); \end{lstlisting} @@ -2596,207 +2415,181 @@ \subsubsection{External Function with Both Function Value and Output Variable}\l \end{lstlisting} Translated call in C: \begin{lstlisting}[language=C] -z1 = myfoo(2.4, 3, &i2); +z1 = myfoo(2.4, 3, \&i2); \end{lstlisting} \end{example} -\subsection{Utility Functions}\label{utility-functions} +\subsection{Utility Functions}\doublelabel{utility-functions} -This section describes the utility functions declared in \filename{ModelicaUtilities.h}, which can be called in external Modelica functions written in C. +The following utility functions can be called in external Modelica +functions written in C. These functions are defined in file +\lstinline!ModelicaUtilities.h!: -\subsubsection{Utility Functions for Reporting Errors}\label{utility-functions-for-reporting-errors} +\subsubsection{Utility Functions for Reporting Errors}\doublelabel{utility-functions-for-reporting-errors} +The following functions produce a message in different ways. The +Message-functions only produce the message, but the Warning- and +Error-functions combine this with error handling as follows. -The functions listed below produce a message in different ways. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline[language=C]!ModelicaMessage($\mathit{string}$)! & Message with fixed string & \multirow{3}{*}{\Cref{modelica:ModelicaMessage-et-al}} \\ -\lstinline[language=C]!ModelicaWarning($\mathit{string}$)! & Warning with fixed string & \\ -\lstinline[language=C]!ModelicaError($\mathit{string}$)! & Error with fixed string & \\ -\hline -\lstinline[language=C]!ModelicaFormatMessage($\mathit{format}$, $\ldots$)! & Message with \lstinline[language=C]!printf! style formatting & \multirow{3}{*}{\Cref{modelica:ModelicaFormatMessage-et-al}} \\ -\lstinline[language=C]!ModelicaFormatWarning($\mathit{format}$, $\ldots$)! & Warning with \lstinline[language=C]!printf! style formatting & \\ -\lstinline[language=C]!ModelicaFormatError($\mathit{format}$, $\ldots$)! & Error with \lstinline[language=C]!printf! style formatting & \\ -\hline -\lstinline[language=C]!ModelicaVFormatMessage($\mathit{format}$, $\mathit{ap}$)! & Message with \lstinline[language=C]!vprintf! style formatting & \multirow{3}{*}{\Cref{modelica:ModelicaVFormatMessage-et-al}} \\ -\lstinline[language=C]!ModelicaVFormatWarning($\mathit{format}$, $\mathit{ap}$)! & Warning with \lstinline[language=C]!vprintf! style formatting & \\ -\lstinline[language=C]!ModelicaVFormatError($\mathit{format}$, $\mathit{ap}$)! & Error with \lstinline[language=C]!vprintf! style formatting & \\ -\hline -\end{tabular} -\end{center} +The Warning-functions view the message as a warning and can skip +duplicated messages similarly as an assert with +level=AssertionLevel.Warning in the Modelica code. -The \emph{Message}-functions only produce the message, but the \emph{Warning}- and \emph{Error}-functions combine this with error handling as follows. +The Error-functions never return to the calling function, but handle the +error similarly to an assert with level=AssertionLevel.Error in the +Modelica code. -The \emph{Warning}-functions view the message as a warning and can skip -duplicated messages similarly as an \lstinline!assert! with -\lstinline!level = AssertionLevel.Warning! in the Modelica code. +\begin{longtable}[]{|l|l|} +\hline \endhead +\vtop{\hbox{\strut \lstinline!ModelicaMessage!}\hbox{\strut \lstinline!ModelicaWarning!}\hbox{\strut +\lstinline!ModelicaError!}} +& \vtop{\hbox{\strut \emph{void Modelica\{Message,Warning,Error\}\newline +(const char* string)}}\hbox{\strut Output the message string (no format +control).}}\\ \hline +\vtop{\hbox{\strut \lstinline!ModelicaFormatMessage!}\hbox{\strut \lstinline!ModelicaFormatWarning!}\hbox{\strut +\lstinline!ModelicaFormatError!}} +& \vtop{\hbox{\strut \emph{void +ModelicaFormat\{Message,Warning,Error\}\newline +(const char* string,...)}}\hbox{\strut Output the message under the same +format control as the C-function \lstinline!printf!.}}\\ \hline +\vtop{\hbox{\strut \lstinline!ModelicaVFormatMessage!}\hbox{\strut \lstinline!ModelicaVFormatWarning!}\hbox{\strut +\lstinline!ModelicaVFormatError!}} +& \vtop{\hbox{\strut \emph{void +ModelicaVFormat\{Message,Warning,Error\}\newline +(const char*string, va\_list)}}\hbox{\strut Output the message under the +same format control as the C-function \lstinline!vprintf!.}}\\ \hline + +\end{longtable} + +\subsubsection{Utility Functions for Allocating Strings}\doublelabel{utility-functions-for-allocating-strings} +And then the string handling functions: +\begin{longtable}[]{|p{7cm}|p{8.2cm}|} +\hline \endhead +\lstinline!ModelicaAllocateString! & +\begin{tabular}{@{}p{8.cm}@{}} +\emph{char* ModelicaAllocateString(size\_t len)} \\ +Allocate memory for a writeable non-literal string which is used as a return argument of an external Modelica function. +It allocates \lstinline!len+1! characters and the last one is set to NUL. +If an error occurs, this function does +not return, but calls \lstinline!ModelicaError!. +\end{tabular}\\ \hline +\lstinline!ModelicaAllocateStringWithErrorReturn! & +\begin{tabular}{@{}p{8.cm}@{}} +\emph{char*\newline ModelicaAllocateStringWithErrorReturn(size\_t len)}\\ +Same as +\lstinline!ModelicaAllocateString!, except that in case of error, the function +returns 0. This allows the external function to close files and free +other open resources in case of error. After cleaning up resources use +\lstinline!ModelicaError! or \lstinline!ModelicaFormatError! to signal the +error. +\end{tabular}\\ \hline +\lstinline!ModelicaDuplicateString! & +\begin{tabular}{@{}p{8.cm}@{}} +\emph{char* ModelicaDuplicateString(const char*str)} \\ +Returns a writeable duplicate of the NUL-terminated string \lstinline!str!. +If an error occurs, this function does +not return, but calls \lstinline!ModelicaError!. +\end{tabular}\\ \hline +\lstinline!ModelicaDuplicateStringWithErrorReturn! & +\begin{tabular}{@{}p{8.cm}@{}} +\emph{char*\newline ModelicaDuplicateStringWithErrorReturn(const char*str)}\\ +Same as +\lstinline!ModelicaDuplicateString!, except that in case of error, the function +returns 0. This allows the external function to close files and free +other open resources in case of error. After cleaning up resources use +\lstinline!ModelicaError! or \lstinline!ModelicaFormatError! to signal the +error. +\end{tabular}\\ \hline +\end{longtable} -The \emph{Error}-functions never return to the calling function, but handle the -error similarly to an \lstinline!assert! with \lstinline!level = AssertionLevel.Error! in the -Modelica code. +The valid return values for an external function returning a \lstinline!String! are: +\begin{itemize} +\item A literal \lstinline!String!. +\item A string given as \lstinline!String! input to the external function +\item A string pointer returned by one the functions in the table above. +\end{itemize} -\begin{functiondefinition*}[ModelicaMessage, ModelicaWarning, ModelicaError]\label{modelica:ModelicaMessage-et-al}% -\indexinline{ModelicaMessage}\indexinline{ModelicaWarning}\indexinline{ModelicaError} -\begin{synopsis}[C]\begin{lstlisting} -void ModelicaMessage(const char* $\mathit{string}$) -void ModelicaWarning(const char* $\mathit{string}$) -void ModelicaError(const char* $\mathit{string}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Output the fixed message string (no format control). -\end{semantics} -\end{functiondefinition*} - -\begin{functiondefinition*}[ModelicaFormatMessage, ModelicaFormatWarning, ModelicaFormatError]\label{modelica:ModelicaFormatMessage-et-al}% -\indexinline{ModelicaFormatMessage}\indexinline{ModelicaFormatWarning}\indexinline{ModelicaFormatError} -\begin{synopsis}[C] -% Note that the "..." below are actual C code, and shouldn't be typeset as \ldots. -\begin{lstlisting} -void ModelicaFormatMessage(const char* $\mathit{format}$, ...) -void ModelicaFormatWarning(const char* $\mathit{format}$, ...) -void ModelicaFormatError(const char* $\mathit{format}$, ...) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Output the message under the same format control as the C function \lstinline[language=C]!printf!. -\end{semantics} -\end{functiondefinition*} - -\begin{functiondefinition*}[ModelicaVFormatMessage, ModelicaVFormatWarning, ModelicaVFormatError]\label{modelica:ModelicaVFormatMessage-et-al}% -\indexinline{ModelicaVFormatMessage}\indexinline{ModelicaVFormatWarning}\indexinline{ModelicaVFormatError} -\begin{synopsis}[C]\begin{lstlisting} -void ModelicaVFormatMessage(const char* $\mathit{format}$, va_list $\mathit{ap}$) -void ModelicaVFormatWarning(const char* $\mathit{format}$, va_list $\mathit{ap}$) -void ModelicaVFormatError(const char* $\mathit{format}$, va_list $\mathit{ap}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Output the message under the same format control as the C function \lstinline[language=C]!vprintf!. -\end{semantics} -\end{functiondefinition*} - -\subsubsection{Utility Functions for Allocating Strings}\label{utility-functions-for-allocating-strings} - -The functions listed below are related to string allocation. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline[language=C]!ModelicaAllocateString($\mathit{len}$)! & Allocate or error & \Cref{modelica:ModelicaAllocateString} \\ -\lstinline[language=C]!ModelicaAllocateStringWithErrorReturn($\mathit{len}$)! & Allocate or null& \Cref{modelica:ModelicaAllocateStringWithErrorReturn} \\ -\lstinline[language=C]!ModelicaDuplicateString($\mathit{str}$)! & Duplicate or error & \Cref{modelica:ModelicaDuplicateString} \\ -\lstinline[language=C]!ModelicaDuplicateStringWithErrorReturn($\mathit{str}$)! & Duplicate or null& \Cref{modelica:ModelicaDuplicateStringWithErrorReturn} \\ -\hline -\end{tabular} -\end{center} +Thus if an external wants to create a non-literal string it must be allocated with one of the functions in +this section, e.g., \lstinline!ModelicaAllocateString!. +After return of the external function, the Modelica +environment is responsible for the memory allocated with +ModelicaAllocateString (e.g., to free this memory, when appropriate). It +is not allowed to access memory that was allocated with +\lstinline!ModelicaAllocateString! in a previous call of this external function. -As described in \cref{simple-types}, an external function wanting to return a newly constructed string must allocate this string with one of the string allocation functions in this section. -The allocated memory is owned by the Modelica simulation environment, and may only be accessed by the external function during the currently executing external function call. -The string allocation functions can also be used to allocate temporary strings that are not returned from the external function, with the convenience of the Modelica simulation environment being responsible for deallocation after the return of the external function. -(This is particularly convenient for avoiding memory leaks in the event of abnormal termination of the external function, for example, via \lstinline[language=C]!ModelicaError!). +\begin{nonnormative} +Memory that is not passed to the Modelica simulation environment, such as memory that is freed before leaving the function, or in an \lstinline!ExternalObject!, +see~\autoref{external-objects}, should be allocated with the standard C-mechanisms, like \lstinline[language=C]!calloc(..)!. +\end{nonnormative} \begin{nonnormative} -Memory that is not passed to the Modelica simulation environment, such as memory that is freed before leaving the function, or in an \lstinline!ExternalObject!, see~\cref{external-objects}, may be allocated with the standard C mechanisms, like \lstinline[language=C]!malloc!. +The reason why one may not use, for instance, \lstinline[language=C]!malloc! for string allocation is that a Modelica simulation environment may have +its own allocation scheme, e.g., a special stack for local variables of a function. \end{nonnormative} -\begin{functiondefinition}[ModelicaAllocateString] -\begin{synopsis}[C]\begin{lstlisting} -char* ModelicaAllocateString(size_t $\mathit{len}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Allocates $\mathit{len}+1$ characters, and sets the last one to \textsc{nul}. -If an error occurs, this function does not return, but calls \lstinline[language=C]!ModelicaError!. -\end{semantics} -\end{functiondefinition} - -\begin{functiondefinition}[ModelicaAllocateStringWithErrorReturn] -\begin{synopsis}[C]\begin{lstlisting} -char* ModelicaAllocateStringWithErrorReturn(size_t $\mathit{len}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Same as \lstinline[language=C]!ModelicaAllocateString!, except that in case of error, the function returns 0. -This allows the external function to close files and free other open resources in case of error. -After cleaning up resources, use \lstinline[language=C]!ModelicaError! or \lstinline[language=C]!ModelicaFormatError! to signal the error. -\end{semantics} -\end{functiondefinition} - -\begin{functiondefinition}[ModelicaDuplicateString] -\begin{synopsis}[C]\begin{lstlisting} -char* ModelicaDuplicateString(const char* $\mathit{str}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns a writeable duplicate of the \textsc{nul}-terminated string $\mathit{str}$. -If an error occurs, this function does not return, but calls \lstinline[language=C]!ModelicaError!. -\end{semantics} -\end{functiondefinition} - -\begin{functiondefinition}[ModelicaDuplicateStringWithErrorReturn] -\begin{synopsis}[C]\begin{lstlisting} -char* ModelicaDuplicateStringWithErrorReturn(const char* $\mathit{str}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Same as \lstinline[language=C]!ModelicaDuplicateString!, except that in case of error, the function returns 0. -This allows the external function to close files and free other open resources in case of error. -After cleaning up resources, use \lstinline[language=C]!ModelicaError! or \lstinline[language=C]!ModelicaFormatError! to signal the error. -\end{semantics} -\end{functiondefinition} - -\subsection{External Objects}\label{external-objects} +\subsection{External Objects}\doublelabel{external-objects} External functions may need to store their internal memory between function calls. -Within Modelica this memory is defined as instance of the predefined class \lstinline!ExternalObject! according to the following rules: +Within Modelica this memory is defined as instance of the +predefined class \lstinline!ExternalObject! according to the following rules: \begin{itemize} \item - There is a predefined partial class \lstinline!ExternalObject!\indexinline{ExternalObject}. + There is a predefined partial class \lstinline!ExternalObject!. \begin{nonnormative} Since the class is partial, it is not possible to define an instance of this class. \end{nonnormative} \item - An external object class shall be directly extended from \lstinline!ExternalObject!, shall have exactly two function definitions, called \lstinline!constructor! and \lstinline!destructor!, and shall not contain other elements. + An external object class shall be directly extended from + \lstinline!ExternalObject!, shall have exactly two function definitions, called + \lstinline!constructor! and \lstinline!destructor!, and shall not contain other elements. The functions \lstinline!constructor! and \lstinline!destructor! shall not be replaceable. - It is not legal to call the \lstinline!constructor! and \lstinline!destructor! functions explicitly. -\item - The \lstinline!constructor! function is called exactly once before the first use of the object. - The \lstinline!constructor! shall have exactly one output argument in which the constructed instance derived from \lstinline!ExternalObject! is returned. - The arguments to the constructor must not -- directly nor indirectly -- depend on the external object being constructed. - The constructor shall initialize the object, and must not require any other calls to be made for the initialization to be complete (e.g., from an initial algorithm or initial equation). - - The constructor shall not assume that pointers sent to the external object will remain valid for the life-time of the external object. - An exception is that if the pointer to another external object is given as argument to the constructor, that pointer will remain valid as long as the other external object lives. -\item - For each completely constructed object, the \lstinline!destructor! is called exactly once, after the last use of the object, even if an error occurs. - The \lstinline!destructor! shall have no output arguments and the only input argument of the destructor shall be of the type derived from \lstinline!ExternalObject!. - The destructor shall delete the object, and must not require any other calls to be made for the deletion to be complete (e.g., from a \lstinline!when terminal()! clause). - \begin{nonnormative} - External objects may be a protected component (or part of one) in a function. - The constructor is in that case called at the start of the function call, and the destructor when the function returns, or when recovering from errors in the function. - \end{nonnormative} - \begin{nonnormative} - External objects may be an input (or part of an input) to a function, in that case the destructor is not called (since the external object is active before and after the function call). - Normally this is an external function, but it could be a non-external function as well (e.g.\ calling external functions one or more times). - The function input shall not have a default value using the constructor. - \end{nonnormative} \item - An external object class shall be of the specialized class \lstinline!class!. + The \lstinline!constructor! function is called exactly once before the first use + of the object. For each completely constructed object, the destructor + is called exactly once, after the last use of the object, even if an + error occurs. The \lstinline!constructor! shall have exactly one output argument + in which the constructed instance derived from \lstinline!ExternalObject! is + returned. The \lstinline!destructor! shall have no output arguments and the only + input argument of the destructor shall be of the type derived from + \lstinline!ExternalObject!. It is not legal to call explicitly the \lstinline!constructor! and + \lstinline!destructor! functions. The constructor shall initialize the object, and + must not require any other calls to be made for the initialization to + be complete (e.g., from an initial algorithm or initial equation). The + destructor shall delete the object, and must not require any other + calls to be made for the deletion to be complete (e.g., from a 'when + terminal()' clause). The constructor may not assume that pointers sent + to the external object will remain valid for the life-time of the + external object. \begin{nonnormative} - This is the only use of \lstinline!class!. + An exception is that if the pointer to another external object is given as argument to the constructor, that pointer will remain valid as long as the other external object lives. \end{nonnormative} + + \emph{External objects may be a protected component (or part of one) + in a function. The constructor is in that case called at the start of + the function call, and the destructor when the function returns, or + when recovering from errors in the function.} + + \emph{External objects may be an input (or part of an input) to a + function, in that case the destructor is not called (since the + external object is active before and after the function call). + Normally this is an external function, but it could be a non-external + function as well (e.g. calling external functions one or more times). + The function input may not have a default value using the + constructor.} \item - Classes derived from \lstinline!ExternalObject! can neither be used in an \lstinline!extends!-clause nor in a short class definition. + Classes derived from \lstinline!ExternalObject! can neither be used in an + extends-clause nor in a short class definition. \item - Only the constructor may return external objects and an external object + Only the constructor may return external objects and external object can only be bound in component declarations and neither modified later nor assigned to. - \begin{nonnormative} - It follows that a function cannot return a component containing an external object, since only the constructor may return an external object and the constructor exactly returns the external object. - \end{nonnormative} + + \emph{No function may return a component containing an external object + (since only the constructor may return an external object and the + constructor exactly returns the external object).} \item External functions may be defined which operate on the internal memory of an \lstinline!ExternalObject!. An \lstinline!ExternalObject! used as input argument or - return value of an external C function is mapped to the C type + return value of an external C-function is mapped to the C-type \lstinline!void*!. \end{itemize} @@ -2810,14 +2603,12 @@ \subsection{External Objects}\label{external-objects} input String fileName = ""; input String tableName = ""; output MyTable table; - external "C" - table = initMyTable(fileName, tableName); + external "C" table = initMyTable(fileName, tableName); end constructor; function destructor "Release storage of table" input MyTable table; - external "C" - closeMyTable(table); + external "C" closeMyTable(table); end destructor; end MyTable; \end{lstlisting} @@ -2838,11 +2629,10 @@ \subsection{External Objects}\label{external-objects} input MyTable table; input Real u; output Real y; -external "C" - y = interpolateMyTable(table, u); + external "C" y = interpolateMyTable(table, u); end interpolateTable; \end{lstlisting} -The external C functions may be defined in the following way: +The external C-functions may be defined in the following way: \begin{lstlisting}[language=C] typedef struct { /* User-defined datastructure of the table */ double* array; /* nrow*ncolumn vector */ diff --git a/chapters/inheritance.tex b/chapters/inheritance.tex index ce9ef1059..46b95e0f3 100644 --- a/chapters/inheritance.tex +++ b/chapters/inheritance.tex @@ -1,34 +1,39 @@ -\chapter{Inheritance, Modification, and Redeclaration}\label{inheritance-modification-and-redeclaration} - -One of the major benefits of object-orientation is the ability to \emph{extend} the behavior and properties of an existing class. -The original class, known as the \willintroduce{base class}, is extended to create a more specialized version of that class, known as the \willintroduce{derived class}. -In this process, the data and behavior of the original class in the form of variable declarations, equations, and certain other contents are reused, or \emph{inherited}, by the derived class. -In fact, the inherited contents is copied from the superclass into the derived class, but before copying certain operations, such as type expansion, checking, and modification, are performed on the inherited contents when appropriate. -This chapter describes the inheritance concept in Modelica, together with the related concepts modification and redeclaration. - -\section{Inheritance -- Extends Clause}\label{inheritance-extends-clause} - -The class \lstinline!A! is called a \firstuse{base class}\index{base class} of \lstinline!B!, if \lstinline!B! extends \lstinline!A!. -The converse relation is then expressed as \lstinline!B! being a \firstuse{derived class}\index{derived class} of \lstinline!A!, or as \lstinline!B! being \firstuse{derived from} \lstinline!A!. -This relation is specified by an \lstinline!extends!-clause in \lstinline!B! or in one of \lstinline!B!'s base classes. -A class inherits all elements from its base classes, and may modify all non-final elements inherited from base classes, as explained below. - -The \lstinline!extends!-clause is used to specify inheritance from a base class into an (enclosing) class containing the \lstinline!extends!-clause. -It is an unnamed element of a class definition that uses a name and an optional modification to specify a base class of the class defined using the class definition. -The syntax of the \lstinline!extends!-clause is as follows: +\chapter{Inheritance, Modification, and Redeclaration}\doublelabel{inheritance-modification-and-redeclaration} + +One of the major benefits of object-orientation is the ability to +\emph{extend} the behavior and properties of an existing class. The +original class, known as the \emph{base class}, is extended to create a +more specialized version of that class, known as the \emph{derived +class} or \emph{subclass}. In this process, the data and behavior of the +original class in the form of variable declarations, equations, and +certain other contents are reused, or \emph{inherited}, by the subclass. +In fact, the inherited contents is copied from the superclass into the +subclass, but before copying certain operations, such as type expansion, +checking, and modification, are performed on the inherited contents when +appropriate. This chapter describes the inheritance concept in Modelica, +together with the related concepts modification and redeclaration. + +\section{Inheritance---Extends Clause}\doublelabel{inheritance-extends-clause} + +The extends-clause is used to specify inheritance from a base class into +an (enclosing) class containing the extends-clause. The syntax of the +extends-clause is as follows: \begin{lstlisting}[language=grammar] extends-clause : extends name [ class-modification ] [annotation] -\end{lstlisting}% -\indexinline{extends} -The name of the base class is looked up in the partially flattened enclosing class (\cref{enclosing-classes}) of the \lstinline!extends!-clause. -The found base class is flattened with a new environment and the partially flattened enclosing class of the \lstinline!extends!-clause. -The new environment is the result of merging +\end{lstlisting} +The name of the base class is looked up in the partially flattened +enclosing class (\autoref{enclosing-classes}) of the extends-clause. The found base +class is flattened with a new environment and the partially flattened +enclosing class of the extends-clause. The new environment is the result +of merging + \begin{itemize} \item - arguments of all enclosing class environments that match names in the flattened base class + arguments of all enclosing class environments that match names in the + flattened base class \item - the optional \lstinline!class-modification! of the \lstinline!extends!-clause + the optional \lstinline!class-modification! of the extends-clause \end{itemize} in that order. @@ -39,30 +44,35 @@ \section{Inheritance -- Extends Clause}\label{inheritance-extends-clause} end A; class B - extends A(b = 2); + extends A(b=2); end B; class C - extends B(a = 1); + extends B(a=1); end C; \end{lstlisting} \end{example} -The elements of the flattened base class become elements of the flattened enclosing class, and are added at the place of the \lstinline!extends!-clause: specifically components and classes, the equation sections, algorithm sections, optional \lstinline!external!-clause, and the contents of the annotation at the end of the class, but excluding \lstinline!import!-clauses. +The elements of the flattened base class become elements of the +flattened enclosing class, and are added at the place of the +extends-clause: specifically components and classes, the equation +sections, algorithm sections, optional external clause, and the contents +of the annotation at the end of the class, but excluding import-clauses. \begin{nonnormative} From the example above we get the following flattened class: \begin{lstlisting}[language=modelica] class Cinstance - parameter Real a = 1; - parameter Real b = 2; + parameter Real a=1; + parameter Real b=2; end Cinstance; \end{lstlisting} -The ordering of the merging rules ensures that, given classes \lstinline!A! and \lstinline!B! defined above, +The ordering of the merging rules ensures that, given classes \lstinline!A! +and \lstinline!B! defined above, \begin{lstlisting}[language=modelica] class C2 - B bcomp(b = 3); + B bcomp(b=3); end C2; \end{lstlisting} yields an instance with \lstinline!bcomp.b = 3!, which overrides \lstinline!b = 2!. @@ -74,7 +84,7 @@ \section{Inheritance -- Extends Clause}\label{inheritance-extends-clause} Not already exist in the partially flattened enclosing class (i.e., have different names). \item - The new element is a long form of redeclare or uses the \lstinline!class extends A! syntax, see \cref{redeclaration}. + The new element is a long form of redeclare or uses the \lstinline!class extends A! syntax, see \autoref{redeclaration}. \item Be exactly identical to any element of the flattened enclosing class with the same name and the same level of protection (public or @@ -104,7 +114,7 @@ \section{Inheritance -- Extends Clause}\label{inheritance-extends-clause} Equations of the flattened base class that are syntactically equivalent to equations in the flattened enclosing class are discarded. This -feature is deprecated, and it is recommended to give a warning when +feature is deprecated, and it is recommend to give a warning when discarding them and for the future give a warning about all forms of equivalent equations due to inheritance. @@ -112,64 +122,74 @@ \section{Inheritance -- Extends Clause}\label{inheritance-extends-clause} Equations that are mathematically equivalent but not syntactically equivalent are not discarded, hence yield an overdetermined system of equations. \end{nonnormative} -\subsection{Multiple Inheritance}\label{multiple-inheritance} +\subsection{Multiple Inheritance}\doublelabel{multiple-inheritance} -Multiple inheritance is possible since multiple \lstinline!extends!-clauses can be present in a class. +Multiple inheritance is possible since multiple extends-clauses can be +present in a class. -\subsection{Inheritance of Protected and Public Elements}\label{inheritance-of-protected-and-public-elements} +\subsection{Inheritance of Protected and Public Elements}\doublelabel{inheritance-of-protected-and-public-elements} -If an \lstinline!extends!-clause is used under the \lstinline!protected! heading, all elements of the base class become protected elements of the current class. -If an \lstinline!extends!-clause is a public element, all elements of the base class are inherited with their own protection. -The eventual headings \lstinline!protected! and \lstinline!public! from the base class do not affect the consequent elements of the current class (i.e., headings \lstinline!protected! and \lstinline!public! are not inherited). +If an extends-clause is used under the \lstinline!protected! heading, all elements +of the base class become protected elements of the current class. If an +extends-clause is a public element, all elements of the base class are +inherited with their own protection. The eventual headings \lstinline!protected! and +\lstinline!public! from the base class do not affect the consequent elements of the +current class (i.e., headings \lstinline!protected! and \lstinline!public! are not inherited). -\subsection{Restrictions on the Kind of Base Class}\label{restrictions-on-the-kind-of-base-class} +\subsection{Restrictions on the Kind of Base Class}\doublelabel{restrictions-on-the-kind-of-base-class} -Since specialized classes of different kinds have different properties, see \cref{specialized-classes}, only specialized classes that are \emph{in some sense compatible} to each other can be derived from each other via inheritance. -The following table shows which kind of specialized class can be used in an \lstinline!extends!-clause of another kind of specialized class (the grey cells mark the few exceptional cases, where a specialized class can be derived from a specialized class of another kind): -% The PDF contains an excessive amount of vertical space here, but it seems like a bad idea to try to make it go away -% by adding LaTeX spacing commands that will cause problems later when things move around. -\begin{center} -% LaTeXML does not handle resizebox, so don't use it for HTML. -\ifpdf\resizebox{\textwidth}{!}{\else\fi% -\begin{tabular}{|c||c|c|c|c|c|c|c|c|c|c|c|c|} - \hline - & \multicolumn{12}{c|}{\tablehead{Base Class}} \\ - \hline - \tablehead{Derived} & \multirow{2}{*}{\lstinline!package!} & \multirow{2}{*}{\lstinline!operator!} & \multirow{2}{*}{\lstinline!function!} & \lstinline!operator! & \multirow{2}{*}{\lstinline!type!} & \multirow{2}{*}{\lstinline!record!} & \lstinline!operator! & \lstinline!expandable! & \multirow{2}{*}{\lstinline!connector!} & \multirow{2}{*}{\lstinline!block!} & \multirow{2}{*}{\lstinline!model!} & \multirow{2}{*}{\lstinline!class!} \\ - \tablehead{Class} & & & & \lstinline!function! & & & \lstinline!record! & \lstinline!connector! & & & & \\ +Since specialized classes of different kinds have different properties, +see \autoref{specialized-classes}, only specialized classes that are \emph{in some sense +compatible} to each other can be derived from each other via +inheritance. The following table shows which kind of specialized class +can be used in an extends clause of another kind of specialized class +(the grey cells mark the few exceptional cases, where a specialized +class can be derived from a specialized class of another kind): + +% LaTeXML does not handle resizebox. So don't use it for HTML + +\begin{table}[H] +% latexml does not like resizebox + \ifpdf\resizebox{\textwidth}{!}{\else\fi% + +\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|} \hline + & \multicolumn{12}{c|}{\textbf{Base Class}} \\ \hline - \lstinline!package! & yes & & & & & & & & & & & \cellcolor{lightgray}yes \\ + \textbf{Derived} & \multirow{2}{*}{package} & \multirow{2}{*}{operator} & \multirow{2}{*}{function} & operator & \multirow{2}{*}{type} & \multirow{2}{*}{record} & operator & expandable & \multirow{2}{*}{connector} & \multirow{2}{*}{block} & \multirow{2}{*}{model} & \multirow{2}{*}{class} \\ + \textbf{Class} & & & & function & & & record & connector & & & & \\ + \hline + package & yes & & & & & & & & & & & \cellcolor{lightgray}yes \\ \hline - \lstinline!operator! & & yes & & & & & & & & & & \cellcolor{lightgray}yes \\ + operator & & yes & & & & & & & & & & \cellcolor{lightgray}yes \\ \hline - \lstinline!function! & & & yes & & & & & & & & & \cellcolor{lightgray}yes \\ + function & & & yes & & & & & & & & & \cellcolor{lightgray}yes \\ \hline - \lstinline!operator! & & & \cellcolor{lightgray} & \multirow{2}{*}{yes} & & & & & & & & \cellcolor{lightgray} \\ - \lstinline!function! & & & \multirow{-2}{*}{\cellcolor{lightgray}yes} & & & & & & & & & \multirow{-2}{*}{\cellcolor{lightgray}yes} \\ + operator & & & \cellcolor{lightgray} & \multirow{2}{*}{yes} & & & & & & & & \cellcolor{lightgray} \\ + function & & & \multirow{-2}{*}{\cellcolor{lightgray}yes} & & & & & & & & & \multirow{-2}{*}{\cellcolor{lightgray}yes} \\ \hline - \lstinline!type! & & & & & yes & & & & & & & \cellcolor{lightgray}yes \\ + type & & & & & yes & & & & & & & \cellcolor{lightgray}yes \\ \hline - \lstinline!record! & & & & & & yes & & & & & & \cellcolor{lightgray}yes \\ + record & & & & & & yes & & & & & & \cellcolor{lightgray}yes \\ \hline - \lstinline!operator! & & & & & & & \multirow{2}{*}{yes} & & & & & \cellcolor{lightgray} \\ - \lstinline!record! & & & & & & & & & & & & \multirow{-2}{*}{\cellcolor{lightgray}yes} \\ + operator & & & & & & & \multirow{2}{*}{yes} & & & & & \cellcolor{lightgray} \\ + record & & & & & & & & & & & & \multirow{-2}{*}{\cellcolor{lightgray}yes} \\ \hline - \lstinline!expandable! & & & & & & & & \multirow{2}{*}{yes} & & & & \cellcolor{lightgray} \\ - \lstinline!connector! & & & & & & & & & & & & \multirow{-2}{*}{\cellcolor{lightgray}yes} \\ + expandable & & & & & & & & \multirow{2}{*}{yes} & & & & \cellcolor{lightgray} \\ + connector & & & & & & & & & & & & \multirow{-2}{*}{\cellcolor{lightgray}yes} \\ \hline - \lstinline!connector! & & & & & \cellcolor{lightgray}yes & \cellcolor{lightgray}yes & \cellcolor{lightgray}yes & & yes & & & \cellcolor{lightgray}yes \\ + connector & & & & & \cellcolor{lightgray}yes & \cellcolor{lightgray}yes & \cellcolor{lightgray}yes & & yes & & & \cellcolor{lightgray}yes \\ \hline - \lstinline!block! & & & & & & \cellcolor{lightgray}yes & & & & yes & & \cellcolor{lightgray}yes \\ + block & & & & & & \cellcolor{lightgray}yes & & & & yes & & \cellcolor{lightgray}yes \\ \hline - \lstinline!model! & & & & & & \cellcolor{lightgray}yes & & & & \cellcolor{lightgray}yes & yes & \cellcolor{lightgray}yes \\ + model & & & & & & \cellcolor{lightgray}yes & & & & \cellcolor{lightgray}yes & yes & \cellcolor{lightgray}yes \\ \hline - \lstinline!class! & & & & & & & & & & & & yes \\ + class & & & & & & & & & & & & yes \\ \hline -\end{tabular} -% Close resizebox. -\ifpdf}\else\fi% -\end{center} + \end{tabular} +% close resizebox + \ifpdf}\else\fi% +\end{table} If a derived class is inherited from another type of specialized class, then the result is a specialized class of the derived class type. @@ -178,8 +198,10 @@ \subsection{Restrictions on the Kind of Base Class}\label{restrictions-on-the-ki For example, if a \lstinline!block! inherits from a \lstinline!record!, then the result is a \lstinline!block!. \end{nonnormative} -All specialized classes can be derived from \lstinline!class!\indexinline{class}, provided that the resulting class fulfills the restriction of the specialized class. -A \lstinline!class! may only contain class definitions, annotations, and \lstinline!extends!-clauses (having any other contents is deprecated). +All specialized classes can be derived from \lstinline!class!, provided that the +resulting class fulfills the restriction of the specialized class. A \lstinline!class! may +only contain class-definitions, annotations, and extends-clauses (having +any other contents is deprecated). \begin{nonnormative} It is recommended to use the most specific specialized class. @@ -191,18 +213,17 @@ \subsection{Restrictions on the Kind of Base Class}\label{restrictions-on-the-ki own kind and from \lstinline!class!. \begin{nonnormative} -E.g.\ a package can only be base class for packages. -All other kinds of classes can use the \lstinline!import!-clause to use the contents of a package. +E.g. a package can only be base class for packages. All other kinds of classes can use the import statement to use the contents of a package. \end{nonnormative} \begin{example} \begin{lstlisting}[language=modelica] record RecordA - $\ldots$ + ... end RecordA; package PackageA - $\ldots$ + ... end PackageA; package PackageB @@ -219,105 +240,122 @@ \subsection{Restrictions on the Kind of Base Class}\label{restrictions-on-the-ki \end{lstlisting} \end{example} -\subsection{Restrictions on Base Classes and Constraining Types to be Transitively Non-Replaceable}\label{restrictions-on-base-classes-and-constraining-types-to-be-transitively-non-replaceable} +\subsection{Restrictions on Base Classes and Constraining Types to be Transitively Non-Replaceable}\doublelabel{restrictions-on-base-classes-and-constraining-types-to-be-transitively-non-replaceable} -The class name used after \lstinline!extends! for base classes and for constraining classes must use a class reference considered transitively non-replaceable, see definition in \cref{transitively-non-replaceable}. -For a replaceable component declaration without \lstinline[language=grammar]!constraining-clause! the class must use a class reference considered transitively non-replaceable. +The class name used after extends for base-classes and for constraining +classes must use a class reference considered transitively +non-replaceable, see definition in \autoref{transitively-non-replaceable}. +For a replaceable component declaration without constraining +clause the class must use a class reference considered transitively +non-replaceable. \begin{nonnormative} -The requirement to use a transitively non-replaceable name excludes the long form of redeclare, i.e.\ \lstinline!redeclare model extends M $\ldots$! where \lstinline!M! must be an inherited replaceable class. +The requirement to use a transitively non-replaceable name excludes the long form of redeclare, i.e. \lstinline!redeclare model extends M...! where +\lstinline!M! must be an inherited replaceable class. \end{nonnormative} \begin{nonnormative} -The rule for a replaceable component declaration without \lstinline[language=grammar]!constraining-clause! implies that constraining classes are always transitively non-replaceable -- both +The rule for a replaceable component declaration without constraining clause implies that constraining classes are always transitively non-replaceable --- both if explicitly given or implicitly by the declaration. \end{nonnormative} -\section{Modifications}\label{modifications} - -A \firstuse{modification}\index{modification} is part of an element. -It modifies the instance generated by that element. -A modification contains \willintroduce{element modifications} (e.g., \lstinline!vcc(unit = "V") = 1000!) and \willintroduce{element-redeclarations} (e.g., \lstinline!redeclare type Voltage = Real(unit="V")!). +\section{Modifications}\doublelabel{modifications} -There are three kinds of constructs in the Modelica language in which modifications can occur: +There are three kinds of constructs in the Modelica language in which +modifications can occur: \begin{itemize} \item - variable declarations + Variable declarations. \item - short class declarations + Short class declarations. \item - \lstinline!extends!-clauses + Extends-clauses. \end{itemize} -A modifier modifies one or more declarations from a class by changing some aspect(s) of the declarations. -The most common kind of modifier just changes the \emph{default value} or the \lstinline!start!-attribute in a binding equation; the value and/or \lstinline!start!-attribute should be compatible with the variable according to \cref{type-compatible-expressions}. - -An \firstuse{element modification}\index{element modification} overrides the declaration equation in the class used by the instance generated by the modified element. +A modifier modifies one or more declarations from a class by changing +some aspect(s) of the declarations. The most common kind of modifier +just changes the \emph{default value} or the \emph{start value} in a +binding equation; the value and/or start-value should be compatible with +the variable according to \autoref{type-compatible-expressions}. \begin{example} Modifying the default \lstinline!start! value of the \lstinline!altitude! variable: \begin{lstlisting}[language=modelica] -Real altitude(start = 59404); +Real altitude(start= 59404); \end{lstlisting} \end{example} -A modification (e.g., \lstinline!C1 c1(x = 5)!) is called a \firstuse{modification equation}\index{modification equation}, if the modified variable (here: \lstinline!c1.x!) is a non-parameter variable. +A modification (e.g. \lstinline!C1 c1(x = 5)!) is considered a modification equation, +if the modified variable (here: \lstinline!c1.x!) is a non-parameter variable. \begin{nonnormative} -The modification equation is created, if the modified component (here: \lstinline!c1!) is also created (see \cref{class-declarations}). In most cases -a modification equation for a non-parameter variable requires that the variable was declared with a declaration equation, see \cref{balanced-models}; +The modification equation is created, if the modified component (here: \lstinline!c1!) is also created (see \autoref{class-declarations}). In most cases +a modification equation for a non-parameter variable requires that the variable was declared with a declaration equation, see \autoref{balanced-models}; in those cases the declaration equation is replaced by the modification equation. \end{nonnormative} -A more dramatic change is to modify the \emph{type} and/or the \emph{prefixes} and possibly the \emph{dimension sizes} of a declared element. -This kind of modification is called an \firstuse{element-redeclaration}\index{element-redeclaration}\index{redeclaration!element} (\cref{redeclaration}) and requires the special keyword \lstinline!redeclare! to be used in the modifier in order to reduce the risk for accidental modeling errors. -In most cases a declaration that can be redeclared must include the prefix \lstinline!replaceable!\indexinline{replaceable} (\cref{redeclaration}). -The modifier value (and class for redeclarations) is found in the context in which the modifier occurs, see also \cref{simple-name-lookup}. +A more dramatic change is to modify the \emph{type} and/or the +\emph{prefixes} and possibly the \emph{dimension sizes} of a declared +element. This kind of modification is called a \emph{redeclaration} +(\autoref{redeclaration}) and requires the special keyword \lstinline!redeclare! to be used in +the modifier in order to reduce the risk for accidental modeling errors. +In most cases a declaration that can be redeclared must include the +prefix \lstinline!replaceable! (\autoref{redeclaration}). The modifier value (and class for +redeclarations) is found in the context in which the modifier occurs, +see also \autoref{simple-name-lookup}. \begin{example} Scope for modifiers: \begin{lstlisting}[language=modelica] model B parameter Real x; - package Medium = Modelica.Media.PartialMedium; + package Medium=Modelica.Media.PartialMedium; end B; model C - parameter Real x = 2; - package Medium = Modelica.Media.PartialMedium; - B b(x = x, redeclare package Medium = Medium); + parameter Real x=2; + package Medium=Modelica.Media.PartialMedium; + B b(x=x, redeclare package Medium=Medium); // The 'x' and 'Medium' being modified are declared in the model B. - // The modifiers '= x' and '= Medium' are found in the model C. + // The modifiers '=x' and '=Medium' are found in the model C. end C; model D - parameter Real x = 3; - package Medium = Modelica.Media.PartialMedium; - C c(b(x = x, redeclare package Medium = Medium)); + parameter Real x=3; + package Medium=Modelica.Media.PartialMedium; + C c(b(x=x, redeclare package Medium=Medium)); // The 'x' and 'Medium' being modified are declared in the model B. - // The modifiers '= x' and '= Medium' are found in the model D. + // The modifiers '=x' and '=Medium' are found in the model D. end D; \end{lstlisting} \end{example} When present, the description-string of a modifier overrides the existing description. -\subsection{Syntax of Modifications and Redeclarations}\label{syntax-of-modifications-and-redeclarations} +\subsection{Syntax of Modifications and Redeclarations}\doublelabel{syntax-of-modifications-and-redeclarations} -The syntax is defined in the grammar, \cref{modification}. +The syntax is defined in the grammar, \autoref{modification}. -\subsection{Modification Environment}\label{modification-environment} +\subsection{Modification Environment}\doublelabel{modification-environment} -The \firstuse{modification environment}\index{modification environment} of a class contains arguments which modify elements of the class (e.g., parameter changes) when the class is flattened. -The modification environment is built by merging class modifications, where outer modifications override inner modifications. +The modification environment contains arguments which modify elements of +the class (e.g., parameter changes). The modification environment is +built by merging class modifications, where outer modifications override +inner modifications. \begin{nonnormative} -This should not be confused with \lstinline!inner outer! prefixes described in \cref{instance-hierarchy-name-lookup-of-inner-declarations}. +This should not be confused with \lstinline!inner outer! prefixes described in \autoref{instance-hierarchy-name-lookup-of-inner-declarations}. \end{nonnormative} -\subsection{Merging of Modifications}\label{merging-of-modifications} +\subsection{Merging of Modifications}\doublelabel{merging-of-modifications} -Merging of modifiers means that outer modifiers override inner modifiers. The merging is hierarchical, and a value for an entire non-simple component overrides value modifiers for all components, and it is an error if this overrides a \lstinline!final! prefix for a component, or if value for a simple component would override part of the value of a non-simple component. When merging modifiers each modification keeps its own \lstinline!each! prefix. +Merging of modifiers means that outer modifiers override inner +modifiers. The merging is hierarchical, and a value for an entire +non-simple component overrides value modifiers for all components, and +it is an error if this overrides a final prefix for a component, or if +value for a simple component would override part of the value of a +non-simple component. When merging modifiers each modification keeps its +own each-prefix. \begin{example} The following larger example demonstrates several aspects: @@ -330,14 +368,16 @@ \subsection{Merging of Modifications}\label{merging-of-modifications} class C2 class C21 - $\ldots$ + ... end C21; end C2; class C3 extends C1; - C11 t(x = 3); // ok, C11 has been inherited from C1 - C21 u; // ok, even though C21 is inherited below + C11 t(x=3); + // ok, C11 has been inherited from C1 + C21 u; + // ok, even though C21 is inherited below extends C2; end C3; \end{lstlisting} @@ -349,16 +389,17 @@ \subsection{Merging of Modifications}\label{merging-of-modifications} end A; model B - parameter A a = A(2, 3); + parameter A a=A(2, 3); end B; model C - B b1(a(x = 4)); // Error since attempting to override value for a.x when a has a value. + B b1(a(x=4)); + // Error since attempting to override value for a.x when a has a value. end C; \end{lstlisting} The modification environment of the declaration of \lstinline!t! is -(\lstinline!x = 3!). The modification environment is built by merging class modifications, as shown by: +(\lstinline!x=3!). The modification environment is built by merging class modifications, as shown by: \begin{lstlisting}[language=modelica] class C1 parameter Real a; @@ -370,143 +411,157 @@ \subsection{Merging of Modifications}\label{merging-of-modifications} end C2; class C3 - parameter Real x1; // No default value - parameter Real x2 = 2; // Default value 2 - parameter C1 x3; // No default value for x3.a - parameter C2 x4(b = 4); // x4.b has default value 4 - parameter C1 x5(a = 5); // x5.a has default value 5 - extends C1; // No default value for inherited element a - extends C2(b = 6, c = 77); // Inherited b has default value 6 + parameter Real x1; + // No default value + parameter Real x2=2; + // Default value 2 + parameter C1 x3; + // No default value for x3.a + parameter C2 x4(b=4); + // x4.b has default value 4 + parameter C1 x5(a=5); + // x5.a has default value 5 + extends C1; + // No default value for inherited element a + extends C2(b=6, c=77); + // Inherited b has default value 6 end C3; class C4 - extends C3(x2 = 22, x3(a = 33), x4(c = 44), x5 = x3, a = 55, b = 66); + extends C3(x2=22, x3(a=33), x4(c=44), x5=x3, a=55, b=66); end C4; \end{lstlisting} -Outer modifications override inner modifications, e.g., \lstinline!b = 66! -overrides the nested class modification of extends \lstinline!C2(b = 6)!. -This is known as merging of modifications: merge\lstinline!((b = 66), (b = 6))! -becomes \lstinline!(b = 66)!. +Outer modifications override inner modifications, e.g., \lstinline!b=66! +overrides the nested class modification of extends \lstinline!C2(b=6)!. +This is known as merging of modifications: merge\lstinline!((b=66), (b=6))! +becomes \lstinline!(b=66)!. A flattening of class \lstinline!C4! will give an object with the following variables: -\begin{center} -\begin{tabular}{l|l} -\hline -\tablehead{Variable} & \tablehead{Default value}\\ -\hline -\hline -\lstinline!x1! & \textit{none}\\ % Look of \emph won't be as expected inside example. -\lstinline!x2! & 22\\ -\lstinline!x3.a! & 33\\ -\lstinline!x4.b! & 4\\ -\lstinline!x4.c! & 44\\ -\lstinline!x5.a! & \lstinline!x3.a!\\ -\lstinline!a! & 55\\ -\lstinline!b! & 66\\ -\lstinline!c! & 77\\ -\hline -\end{tabular} -\end{center} +\begin{longtable}[]{|@{}l|l@{}|} +\hline \endhead +\tablehead{Variable} & \tablehead{Default value}\\ \hline +\lstinline!x1! & \lstinline!none!\\ \hline +\lstinline!x2! & \lstinline!22!\\ \hline +\lstinline!x3.a! & \lstinline!33!\\ \hline +\lstinline!x4.b! & \lstinline!4!\\ \hline +\lstinline!x4.c! & \lstinline!44!\\ \hline +\lstinline!x5.a! & \lstinline!x3.a!\\ \hline +\lstinline!a! & \lstinline!55!\\ \hline +\lstinline!b! & \lstinline!66!\\ \hline +\lstinline!c! & \lstinline!77!\\ \hline +\end{longtable} \end{example} -\subsection{Single Modification}\label{single-modification} +\subsection{Single Modification}\doublelabel{single-modification} -Two arguments of a modification shall not modify the same element, attribute, or description-string. When using qualified names the different qualified names starting with the same identifier are merged into one modifier. If a modifier with a qualified name has the \lstinline!each! or \lstinline!final! prefix, that prefix is only seen as applied to the final part of the name. +Two arguments of a modification shall not modify the same element, +attribute, or description-string. When using qualified names the different +qualified names starting with the same identifier are merged into one +modifier. If a modifier with a qualified name has the each or +final-prefix that prefix is only seen as applied to the final part of +the name. \begin{example} \begin{lstlisting}[language=modelica] class C1 Real x[3]; end C1; -class C2 = C1(x = ones(3), x = ones(3)); // Error: x designated twice +class C2 = C1(x=ones(3), x=ones(3)); // Error: x designated twice class C3 class C4 Real x; end C4; - C4 a(final x.unit = "V", x.displayUnit = "mV", x = 5.0); + C4 a(final x.unit = "V", x.displayUnit="mV", x=5.0); // Ok, different attributes designated (unit, displayUnit and value) // identical to: - C4 b(x(final unit = "V", displayUnit = "mV") = 5.0)); + C4 b(x(final unit = "V", displayUnit="mV") = 5.0)); end C3; \end{lstlisting} The following examples are incorrect: \begin{lstlisting}[language=modelica] -m1(r = 1.5, r = 1.6) // Multiple modifier for r (its value) -m1(r = 1.5, r = 1.5) // Multiple modifier for r (its value) - even if identical -m1(r.start = 2, r(start = 3)) // Multiple modifier for r.start -m1(x.r = 1.5 "x", x.r(start = 2.0) "y")) // Multiple description-string for x.r -m1(r = R(), r(y = 2)) // Multiple modifier for r.y - both direct value and - // part of record +m1(r=1.5, r=1.6) // Multiple modifier for r (its value) +m1(r=1.5, r=1.5) // Multiple modifier for r (its value) - even if identical +m1(r.start=2, r(start=3)) // Multiple modifier for r.start +m1(x.r=1.5 "x", x.r(start=2.0) "y")) // Multiple description-string for x.r +m1(r=R(), r(y=2)) // Multiple modifier for r.y - both direct value and part of record \end{lstlisting} The following examples are correct: \begin{lstlisting}[language=modelica] -m1(r = 1.5, r(start = 2.0)) -m1(r = 1.6, r "x") -m1(r = R(), r(y(min = 2))) +m1(r=1.5, r(start=2.0)) +m1(r=1.6, r "x") +m1(r=R(), r(y(min=2))) \end{lstlisting} \end{example} -\subsection{Modifiers for Array Elements}\label{modifiers-for-array-elements} +\subsection{Modifiers for Array Elements}\doublelabel{modifiers-for-array-elements} The following rules apply to modifiers: \begin{itemize} \item - The \lstinline!each!\indexinline{each} keyword on a modifier requires that it is applied in an array declaration/modification, and the modifier is applied individually to each element of the enclosing array (with regard to the position of \lstinline!each!). - In case of nested modifiers this implies it is applied individually to each element of each element of the enclosing array; see example. - If the modified element is a vector and the modifier does not contain the \lstinline!each! prefix, the modification is split such that the first element in the vector is applied to the first element of the vector of elements, the second to the second element, until the last element of the vector is applied to the last element of the array; it is an error if these sizes do not match. - Matrices and general arrays of elements are treated by viewing those as vectors of vectors etc. + The \lstinline!each! keyword on a modifier requires that it is applied in an array + declaration/modification, and the modifier is applied individually to + each element of the array (in case of nested modifiers this implies it + is applied individually to each element of each element of the + enclosing array; see example). If the modified element is a vector and + the modifier does not contain the \lstinline!each!-prefix, the modification is + split such that the first element in the vector is applied to the + first element of the vector of elements, the second to the second + element, until the last element of the vector-expression is applied to + the last element of the array; it is an error if these sizes do not + match. Matrices and general arrays of elements are treated by viewing + those as vectors of vectors etc. \item - If a nested modifier is split, the split is propagated to all elements of the nested modifier, and if they are modified by the \lstinline!each! keyword the split is inhibited for those elements. - If the nested modifier that is split in this way contains re-declarations that are split, it is illegal. + If a nested modifier is split, the split is propagated to all elements + of the nested modifier, and if they are modified by the \lstinline!each!-keyword + the split is inhibited for those elements. If the nested modifier that + is split in this way contains re-declarations that are split it is + illegal. \end{itemize} \begin{example} \begin{lstlisting}[language=modelica] model C - parameter Real a[3]; + parameter Real a [3]; parameter Real d; end C; model B - C c[5](each a = {1, 2, 3}, d = {1, 2, 3, 4, 5}); - parameter Real b = 0; + C c[5](each a ={1,2,3}, d={1,2,3,4,5}); + parameter Real b=0; end B; \end{lstlisting} -This implies \lstinline!c[i].a[j] = j! and \lstinline!c[i].d = i!. +This implies that \lstinline!c[i].a[j]=j!, and \lstinline!c[i].d=i!. \begin{lstlisting}[language=modelica] model D - B b(each c.a = {3, 4, 5}, c.d = {2, 3, 4, 5, 6}); + B b(each c.a={3,4,5}, c.d={2,3,4,5,6}); // Equivalent to: - B b2(c(each a = {3, 4, 5}, d = {2, 3, 4, 5, 6})); + B b2(c(each a={3,4,5}, d={2,3,4,5,6})); end D; \end{lstlisting} -This implies \lstinline!b.c[i].a[j] = 2+j! and \lstinline!b.c[i].d = 1+i!. +This implies that \lstinline!b.c[i].a[j]=2+j! and \lstinline!b.c[i].d=1+i! \begin{lstlisting}[language=modelica] model E - B b[2](each c(each a = {1, 2, 3}, d = {1, 2, 3, 4, 5}), p = {1, 2}); + B b[2](each c(each a={1,2,3}, d={1,2,3,4,5}), p={1,2}); // Without the first each one would have to use: - B b2[2](c(each a = {1, 2, 3}, d = fill({1, 2, 3, 4, 5}, 2)), p = {1, 2}); + B b2[2](c(each a={1,2,3}, d=fill({1,2,3,4,5},2)), p={1,2}); end E; \end{lstlisting} -This implies \lstinline!b[k].c[i].a[j] = j!, \lstinline!b[k].c[i].d = i!, and \lstinline!b[k].p = k!. For \lstinline!c.a! the additional (outer) \lstinline!each! has no effect, but it is necessary for \lstinline!c.d!. - -Specifying array dimensions after the type works the same as specifying them after the variable name. +This implies that \lstinline!b[k].c[i].a[j]=j! and \begin{lstlisting}[language=modelica] -model F - Real fail1[2](each start = {1, 2}); // Illegal - Real work1[2](each start = 1); // Legal - Real[2] fail2(each start = {1, 2}); // Illegal - Real[2] work2(each start = 2); // Legal -end F; + b[k].c[i].d=i and b[k].p=k \end{lstlisting} +For \lstinline!c.a! the additional (outer) \lstinline!each! has no effect, but it is +necessary for \lstinline!c.d!. \end{example} -\subsection{Final Element Modification Prevention}\label{final-element-modification-prevention} +\subsection{Final Element Modification Prevention}\doublelabel{final-element-modification-prevention} -An element defined as final by the \lstinline!final!\indexinline{final} prefix in an element modification or declaration cannot be modified by a modification or by a redeclaration. All elements of a final element are also final. +An element defined as final by the \lstinline!final! prefix in an element +modification or declaration cannot be modified by a modification or by a +redeclaration. All elements of a final element are also final. \begin{nonnormative} Setting the value of a parameter in an experiment environment is conceptually treated as a modification. This implies that a final modification equation @@ -514,61 +569,45 @@ \subsection{Final Element Modification Prevention}\label{final-element-modificat \end{nonnormative} \begin{example} -Final component modification. \begin{lstlisting}[language=modelica] -type Angle = - Real(final quantity = "Angle", final unit = "rad", displayUnit = "deg"); +type Angle = Real (final quantity="Angle",final unit="rad",displayUnit="deg"); model TransferFunction - parameter Real b[:] = {1} "numerator coefficient vector"; - parameter Real a[:] = {1, 1} "denominator coefficient vector"; - $\ldots$ + parameter Real b[:]={1} "numerator coefficient vector"; + parameter Real a[:]={1,1} "denominator coefficient vector"; + ... end TransferFunction; model PI "PI controller" - parameter Real k = 1 "gain"; - parameter Real T = 1 "time constant"; - TransferFunction tf(final b = k * {T, 1}, final a = {T, 0}); + parameter Real k=1 "gain"; + parameter Real T=1 "time constant"; + TransferFunction tf(final b=k*{T,1}, final a={T,0}); end PI; model Test - PI c1(k = 2, T = 3); // fine, will indirectly change tf.b to 2 * {3, 1} - PI c2(tf(b = {1})); // error, b is declared as final + PI c1(k=2, T=3); + // fine, will indirectly change tf.b to 2*{3,1} + PI c2(tf(b={1})); + // error, b is declared as final end Test; \end{lstlisting} \end{example} -\begin{example} -Final class declaration. -\begin{lstlisting}[language=modelica] -model Test2 - final model MyTF = TransferFunction(b = {1, 2}); - /* Equivalently: - final model MyTF = TransferFunction(final a, final b = {1, 2}); - */ - MyTF tf1; // fine - MyTF tf2(a = {1, 2}); // error, all elements in MyTF are final - model M = MyTF(a = {4}); // error, all elements in MyTF are final - model TFX - extends MyTF; // fine - Real foo = 1.0; - end TFX; - TFX tfx(foo = 2.0); // fine, foo is not from MyRF - TFX tfx2(a = {1, 3}); // error, all elements from MyTF are final - model TFX3 = TFX(a = {1, 4}); // error, all elements from MyTF are final -end Test2; -\end{lstlisting} -\end{example} - -\section{Redeclaration}\label{redeclaration} +\section{Redeclaration}\doublelabel{redeclaration} -A \lstinline!redeclare!\indexinline{redeclare} construct in a modifier replaces the declaration of a local class or component with another declaration. -A \lstinline!redeclare! construct as an element replaces the declaration of a local class or component with another declaration. -Both \lstinline!redeclare! constructs work in the same way. -The \lstinline!redeclare! construct as an element requires that the element is inherited, and cannot be combined with a modifier of the same element in the \lstinline!extends!-clause. -For modifiers, the redeclare of classes uses the \lstinline[language=grammar]!short-class-definition! construct, which is a special case of normal class definitions and semantically behaves as the corresponding \lstinline[language=grammar]!class-definition!. +A redeclare construct in a modifier replaces the declaration of a local +class or component with another declaration. A redeclare construct as an +element replaces the declaration of a local class or component with +another declaration. Both redeclare constructs work in the same way. The +redeclare construct as an element requires that the element is +inherited, and cannot be combined with a modifier of the same element in +the extends-clause. For modifiers the redeclare of classes uses a +special short-class-definition construct; that is a subset of normal +class definitions and semantically behave as the corresponding +class-definition. -A modifier with the keyword \lstinline!replaceable!\indexinline{replaceable} is automatically seen as being a \lstinline!redeclare!. +A modifier with the keyword \lstinline!replaceable! is automatically seen as being a +redeclare. In redeclarations some parts of the original declaration is automatically inherited by the new declaration. This is intended to make @@ -584,21 +623,21 @@ \section{Redeclaration}\label{redeclaration} The groups that are valid for both classes and components: \begin{itemize} \item - \lstinline!public!, \lstinline!protected! + public, protected \item \lstinline!inner!, \lstinline!outer! \item - constraining type according to rules in \cref{constraining-type}. + constraining type according to rules in \autoref{constraining-type}. \end{itemize} The groups that are only valid for components: \begin{itemize} \item - \lstinline!flow!, \lstinline!stream! + flow, stream \item - \lstinline!discrete!, \lstinline!parameter!, \lstinline!constant! + discrete, parameter, constant \item - \lstinline!input!, \lstinline!output! + input, output \item array dimensions \end{itemize} @@ -627,9 +666,9 @@ \section{Redeclaration}\label{redeclaration} end HeatExchanger; HeatExchanger( - /*redeclare*/ replaceable /*parameter*/ GeoHorizontal geometry, - redeclare /*input*/ Modelica.Units.SI.Angle u /*[2]*/); - // The semantics ensure that parts in /*.*/ are automatically added + /*redeclare*/ replaceable /*parameter */ GeoHorizontal geometry, + redeclare /* input */ Modelica.Units.SI.Angle u /*[2]*/); + // The semantics ensure that parts in /*.*/ are automatically added // from the declarations in HeatExchanger. \end{lstlisting} @@ -637,40 +676,47 @@ \section{Redeclaration}\label{redeclaration} \begin{lstlisting}[language=modelica] model M replaceable Real [4] x[2]; - // Seen as syntactic sugar for "replaceable Real x[2, 4];" + // Seen as syntactic sugar for "replaceable Real x[2,4];" // Note the order. end M; -M m(redeclare Modelica.Units.SI.Length x[2, 4]); // Valid redeclare of the type +M m(redeclare Modelica.Units.SI.Length x[2,4]); // Valid redeclare of the type \end{lstlisting} \end{nonnormative} -\subsection{The class extends Redeclaration Mechanism}\label{the-class-extends-redeclaration-mechanism} +\subsection{The class extends Redeclaration Mechanism}\doublelabel{the-class-extends-redeclaration-mechanism} -A class declaration of the type \lstinline!redeclare class extends B($\ldots$)!, where \lstinline!class! as usual can be replaced by any other specialized class, replaces the inherited class \lstinline!B! with another declaration that extends the inherited class where the optional class-modification is applied to the inherited class. -Inherited \lstinline!B! here means that the class containing \lstinline!redeclare class extends B($\ldots$)! should also inherit another declaration of \lstinline!B! from one of its \lstinline!extends!-clauses. -The new declaration should explicitly include \lstinline!redeclare!. +A class declaration of the type \lstinline!redeclare class extends B(...)! , +where \lstinline!class! as usual can be replaced by any other specialized class, +replaces the inherited class \lstinline!B! with another declaration that extends the +inherited class where the optional class-modification is applied to the +inherited class. Inherited \lstinline!B! here means that the class +containing \lstinline!redeclare class extends B(...)! should also inherit +another declaration of \lstinline!B! from one of its extends-clauses. The new +declaration should explicitly include redeclare. \begin{nonnormative} Since the rule about applying the optional class-modification implies that all declarations are inherited with modifications applied, there is no need to apply modifiers to the new declaration. \end{nonnormative} -% henrikt-ma: Adding index entry for 'replaceable' here, since I can't find a place where the term is really explained in terms of using the corresponding keyword. -For \lstinline!redeclare class extends B($\ldots$)! the inherited class is subject to the same restrictions as a redeclare of the inherited element, and the original class \lstinline!B! should be \firstuse{replaceable}\index{replaceable}, and the new element is only replaceable if the new definition is replaceable. -In contrast to normal extends it is not subject to the restriction that \lstinline!B! should be transitively non-replaceable (since \lstinline!B! should be replaceable). +For \lstinline!redeclare class extends B(...)! the inherited class is subject +to the same restrictions as a redeclare of the inherited element, and +the original class \lstinline!B! should be replaceable, and the new element is only +replaceable if the new definition is replaceable. In contrast to normal +extends it is not subject to the restriction that \lstinline!B! should be +transitively non-replaceable (since \lstinline!B! should be replaceable). The syntax rule for \lstinline!class extends! construct is in the definition of the -\lstinline!class-specifier! nonterminal (see also class declarations in \cref{class-declarations}): +\lstinline!class-specifier! nonterminal (see also class declarations in \autoref{class-declarations}): \begin{lstlisting}[language=grammar] class-definition : [ encapsulated ] class-prefixes class-specifier -class-specifier : long-class-specifier | $\ldots$ +class-specifier : long-class-specifier | ... -long-class-specifier : $\ldots$ - | extends IDENT [ class-modification ] description-string - composition end IDENT +long-class-specifier : ... + | extends IDENT [ class-modification ] description-string composition end IDENT \end{lstlisting} The nonterminal \lstinline!class-definition! is referenced in several places in the grammar, including the following case which is used in some examples @@ -692,14 +738,14 @@ \subsection{The class extends Redeclaration Mechanism}\label{the-class-extends-r \begin{lstlisting}[language=modelica] package PowerTrain // library from someone else replaceable package GearBoxes - $\ldots$ + ... end GearBoxes; end PowerTrain; package MyPowerTrain extends PowerTrain; // use all classes from PowerTrain redeclare package extends GearBoxes // add classes to sublibrary - $\ldots$ + ... end GearBoxes; end MyPowerTrain; \end{lstlisting} @@ -710,39 +756,37 @@ \subsection{The class extends Redeclaration Mechanism}\label{the-class-extends-r constant Integer nX "number of substances"; replaceable partial model BaseProperties Real X[nX]; - $\ldots$ + ... end BaseProperties; replaceable partial function dynamicViscosity input Real p; - output Real eta; - $\ldots$ + output Real eta;... end dynamicViscosity; end PartialMedium; package MoistAir "Special type of medium" extends PartialMedium(nX=2); - redeclare model extends BaseProperties(T(stateSelect = StateSelect.prefer)) - // replaces BaseProperties by a new implementation and - // extends from Baseproperties with modification + redeclare model extends BaseProperties(T(stateSelect=StateSelect.prefer)) + // replaces BaseProperties by a new implementation and // extends from Baseproperties with modification // note, nX = 2 (!) equation - X = {0, 1}; - $\ldots$ + X = {0,1}; + ... end BaseProperties; redeclare function extends dynamicViscosity // replaces dynamicViscosity by a new implementation and // extends from dynamicViscosity algorithm - eta := 2 * p; + eta := 2*p; end dynamicViscosity; end MoistAir; \end{lstlisting} Note, since \lstinline!MostAir! extends from \lstinline!PartialMedium!, -constant \lstinline!nX! = 2 in package \lstinline!MoistAir! and the model +constant \lstinline!nX!=2 in package \lstinline!MoistAir! and the model \lstinline!BaseProperties! and the function \lstinline!dynamicViscosity! is present in \lstinline!MoistAir!. By the following definitions, the available \lstinline!BaseProperties! model is replaced by another implementation which @@ -765,7 +809,7 @@ \subsection{The class extends Redeclaration Mechanism}\label{the-class-extends-r // wrong model since nX has no value extends PartialMedium.BaseProperties; equation - X = {1, 0}; + X = {1,0}; end MoistAir_BaseProperties; model MoistAir_dynamicViscosity @@ -776,26 +820,54 @@ \subsection{The class extends Redeclaration Mechanism}\label{the-class-extends-r end MoistAir2; \end{lstlisting} -Here, the usual approach is used to extend (here from \lstinline!PartialMedium!) and in the modifier perform all redeclarations. In order to perform these redeclarations, corresponding implementations of all elements of \lstinline!PartialMedium! have to be given under a different name, such as \lstinline!MoistAir2.MoistAir_BaseProperties!, since the name \lstinline!BaseProperties! already exists due to \lstinline!extends PartialMedium!. Then it is possible in the modifier to redeclare \lstinline!PartialMedium.BaseProperties! to \lstinline!MoistAir2.MoistAir_BaseProperties!. Besides the drawback that the namespace is polluted by elements that have different names but the same implementation (e.g.\ \lstinline!MoistAir2.BaseProperties! is identical to \lstinline!MoistAir2.MoistAir_BaseProperties!) the whole construction does not work if arrays are present that depend on constants in \lstinline!PartialMedium!, such as \lstinline!X[nX]!: The problem is that \lstinline!MoistAir_BaseProperties! extends from \lstinline!PartialMedium.BaseProperties! where the constant \lstinline!nX! does not yet have a value. This means that the dimension of array \lstinline!X! is undefined and model \lstinline!MoistAir_BaseProperties! is wrong. With this construction, all constant definitions have to be repeated whenever these constants shall be used, especially in \lstinline!MoistAir_BaseProperties! and \lstinline!MoistAir_dynamicViscosity!. For larger models this is not practical and therefore the only practically useful definition is the complicated construction in the previous example with \lstinline!redeclare model extends BaseProperties!. - -To detect this issue the rule on lookup of composite names (\cref{composite-name-lookup}) ensures that \lstinline!PartialMedium.dynamicViscosity! is incorrect in a simulation model. +Here, the usual approach is used to extend (here from \lstinline!PartialMedium!) and +in the modifier perform all redeclarations. In order to perform these +redeclarations, corresponding implementations of all elements of \lstinline!PartialMedium! +have to be given under a different name, such as \lstinline!MoistAir2.MoistAir_BaseProperties!, since the name +\lstinline!BaseProperties! +already exists due to \lstinline!extends PartialMedium!. Then it is possible in +the modifier to redeclare \lstinline!PartialMedium.BaseProperties! to +\lstinline!MoistAir2.MoistAir_BaseProperties!. Besides the drawback that the +namespace is polluted by elements that have different names but the same +implementation (e.g. \lstinline!MoistAir2.BaseProperties! is identical to +\lstinline!MoistAir2.MoistAir_BaseProperties!) the whole construction does not work +if arrays are present that depend on constants in \lstinline!PartialMedium! , such as +\lstinline!X[nX]!: The problem is that \lstinline!MoistAir_BaseProperties! extends from +\lstinline!PartialMedium.BaseProperties! where the constant nX does not yet have a value. +This means that the dimension of array X is undefined and model +\lstinline!MoistAir_BaseProperties! is wrong. With this construction, all constant +definitions have to be repeated whenever these constants shall be used, +especially in \lstinline!MoistAir_BaseProperties! and \lstinline!MoistAir_dynamicViscosity!. +For larger models this is not practical and therefore the only +practically useful definition is the complicated construction in the +previous example with \lstinline!redeclare model extends BaseProperties!. + +To detect this issue the rule on lookup of composite names (\autoref{composite-name-lookup}) +ensures that \lstinline!PartialMedium.dynamicViscosity! is incorrect in a +simulation model. \end{nonnormative} -\subsection{Constraining Type}\label{constraining-type} +\subsection{Constraining Type}\doublelabel{constraining-type} -In a replaceable declaration the optional \lstinline[language=grammar]!constraining-clause! defines a constraining type. -Any modifications following the constraining type name are applied both for the purpose of defining the actual constraining type and they are automatically applied in the declaration and in any subsequent redeclaration. -The precedence order is that declaration modifiers override constraining type modifiers. +In a replaceable declaration the optional \lstinline!constraining-clause! defines a +constraining type. Any modifications following the constraining type +name are applied both for the purpose of defining the actual +constraining type and they are automatically applied in the declaration +and in any subsequent redeclaration. The precedence order is that +declaration modifiers override constraining type modifiers. -If the \lstinline[language=grammar]!constraining-clause! is not present in the original declaration (i.e., the non-redeclared declaration): +If the \lstinline!constraining-clause! is not present in the original declaration +(i.e., the non-redeclared declaration): \begin{itemize} \item The type of the declaration is also used as a constraining type. \item - The modifiers for subsequent redeclarations and constraining type are the modifiers on the component or \lstinline[language=grammar]!short-class-definition! if that is used in the original declaration, otherwise empty. + The modifiers for subsequent redeclarations and constraining type are + the modifiers on the component or short-class-definition if that is + used in the original declaration, otherwise empty. \end{itemize} -The syntax of a \lstinline[language=grammar]!constraining-clause!\indexinline{constrainedby} is as follows: +The syntax of a constraining-clause is as follows: \begin{lstlisting}[language=grammar] constraining-clause : constrainedby name [ class-modification ] @@ -809,21 +881,21 @@ \subsection{Constraining Type}\label{constraining-type} end A; class B - parameter Real x = 3.14, y; // B is a subtype of A + parameter Real x=3.14, y; // B is a subtype of A end B; class C - replaceable A a(x = 1); + replaceable A a(x=1); end C; class D - extends C(redeclare B a(y = 2)); + extends C(redeclare B a(y=2)); end D; \end{lstlisting} which is equivalent to defining \lstinline!D! as \begin{lstlisting}[language=modelica] class D - B a(x = 1, y = 2); + B a(x=1, y=2); end D; \end{lstlisting} @@ -832,7 +904,7 @@ \subsection{Constraining Type}\label{constraining-type} \begin{lstlisting}[language=modelica] model ElectricalSource replaceable SineSource source constrainedby MO(final n=5); - $\ldots$ + ... end ElectricalSource; model TrapezoidalSource @@ -846,13 +918,13 @@ \subsection{Constraining Type}\label{constraining-type} \begin{lstlisting}[language=modelica] model Circuit replaceable model NonlinearResistor = Resistor(R=100); - $\ldots$ + ... end Circuit; model Circuit2 extends Circuit( redeclare replaceable model NonlinearResistor - = ThermoResistor(T0 = 300)); + = ThermoResistor(T0=300)); // As a result of the modification on the base type, // the default value of R is 100 end Circuit2; @@ -860,14 +932,14 @@ \subsection{Constraining Type}\label{constraining-type} model Circuit3 extends Circuit2( redeclare replaceable model NonlinearResistor - = Resistor(R = 200)); + = Resistor(R=200)); // The T0 modification is not applied because it did not // appear in the original declaration end Circuit3; \end{lstlisting} \lstinline!Circuit2! is intended to illustrate that a user can still select -any resistor model (including the original one, as is done in \lstinline!Circuit3!), +any resistor model, including the original one - as is done in \lstinline!Circuit3!, since the constraining type is kept from the original declaration if not specified in the redeclare. Thus it is easy to select an advanced resistor model, without limiting the possible future changes. @@ -915,14 +987,19 @@ \subsection{Constraining Type}\label{constraining-type} replaceable type T=T1[n] constrainedby T2; replaceable T1[n] x constrainedby T2; \end{lstlisting} -In these examples the number of dimensions must be the same in \lstinline!T1! and \lstinline!T2!, as well as in a redeclaration. Normally \lstinline!T1! and \lstinline!T2! are scalar types, but both -could also be defined as array types (with the same number of dimensions). Thus if \lstinline!T2! is a scalar type (e.g.\ \lstinline!type T2 = Real!) then \lstinline!T1! must also be a scalar type, -and if \lstinline!T2! is defined as vector type (e.g.\ \lstinline!type T2 = Real[3]!) then \lstinline!T1! must also be vector type. +In these examples the number of dimensions must be the same in \lstinline!T1! +and \lstinline!T2!, as well as in a redeclaration. Normally \lstinline!T1! and \lstinline!T2! are scalar +types, but both could also be defined as array types -- with the same +number of dimensions. Thus if \lstinline!T2! is a scalar type (e.g. \lstinline!type T2 = Real!) +then \lstinline!T1! must also be a scalar type; and if \lstinline!T2! is defined as vector type + (e.g. \lstinline!type T2 = Real[3]!) then \lstinline!T1! must also be vector type. \end{example} -\subsubsection{Constraining-clause annotations}\label{constraining-clause-annotations} +\subsubsection{Constraining-clause annotations}\doublelabel{constraining-clause-annotations} -Description and annotations on the \lstinline[language=grammar]!constraining-clause! are applied to the entire declaration, and it is an error if they also appear on the definition. +Description and annotations on the constraining-clause are applied to +the entire declaration, and it is an error if they also appear on the +definition. \begin{nonnormative} The intent is that the description and/or annotation are at the end of the declaration, but it is not straightforward to specify this in the grammar. @@ -930,28 +1007,22 @@ \subsubsection{Constraining-clause annotations}\label{constraining-clause-annota \begin{example} \begin{lstlisting}[language=modelica] -replaceable model Load1 = - Resistor constrainedby TwoPin "The Load"; // Recommended -replaceable model Load2 = - Resistor "The Load" constrainedby TwoPin; // Identical to Load1 -replaceable model Load3 = - Resistor "The Load" constrainedby TwoPin "The Load"; // Error - -replaceable Resistor load1 - constrainedby TwoPin "The Load"; // Recommended -replaceable Resistor load2 - "The Load" constrainedby TwoPin; // Identical to load1 -replaceable Resistor load3 - "The Load" constrainedby TwoPin "The Load!"; // Error +replaceable model Load1=Resistor constrainedby TwoPin "The Load"; //Recommended +replaceable model Load2=Resistor "The Load" constrainedby TwoPin; //Identical to Load1 +replaceable model Load3=Resistor "The Load" constrainedby TwoPin "The Load"; //Error + +replaceable Resistor load1 constrainedby TwoPin "The Load"; //Recommended +replaceable Resistor load2 "The Load" constrainedby TwoPin; //Identical to load1 +replaceable Resistor load3 "The Load" constrainedby TwoPin "The Load!"; //Error \end{lstlisting} \end{example} -See also the examples in \cref{annotation-choices-for-suggested-redeclarations-and-modifications}. +See also the examples in \autoref{annotation-choices-for-suggested-redeclarations-and-modifications}. -\subsection{Restrictions on Redeclarations}\label{restrictions-on-redeclarations} +\subsection{Restrictions on Redeclarations}\doublelabel{restrictions-on-redeclarations} The following additional constraints apply to redeclarations (after -prefixes are inherited, \cref{redeclaration}): +prefixes are inherited, \autoref{redeclaration}): \begin{itemize} \item Only classes and components declared as replaceable can be redeclared with a new type, which must have an interface compatible with the constraining @@ -960,72 +1031,90 @@ \subsection{Restrictions on Redeclarations}\label{restrictions-on-redeclarations Redeclaration with the same type can be used to restrict variability and/or change array dimensions. \end{nonnormative} \item - An element declared as \lstinline!constant! cannot be redeclared. + An element declared as constant cannot be redeclared \item - An element declared as \lstinline!final! shall not be modified, and thus not redeclared. + An element declared as final may not be modified, and thus not + redeclared \item - Modelica does not allow a protected element to be redeclared as public, or a public element to be redeclared as protected. + Modelica does not allow a protected element to be redeclared as + public, or a public element to be redeclared as protected. \item - Array dimensions may be redeclared; provided the sub-typing rules in \cref{interface-compatibility-or-subtyping} are satisfied. + Array dimensions may be redeclared; provided the sub-typing rules in + \autoref{interface-compatibility-or-subtyping} are satisfied. \begin{nonnormative} - This is one example of redeclaration of non-replaceable elements. + This is one example of redeclare of non-replaceable elements. \end{nonnormative} \end{itemize} -\subsection{Annotation Choices for Suggested Redeclarations and Modifications}\label{annotation-choices-for-suggested-redeclarations-and-modifications} - -A declaration can have an annotation \fmtannotationindex{choices} containing modifiers on \lstinline!choice!, where each of them indicates a suitable redeclaration or modifications of the element. - -This is a hint for users of the model, and can also be used by the user interface to suggest reasonable redeclaration, where the string comments on the choice declaration can be used as textual explanations of the choices. -The annotation is not restricted to replaceable elements but can also be applied to non-replaceable elements, enumeration types, and simple variables. -For a \lstinline!Boolean! variable, a \lstinline!choices! annotation may contain the definition \lstinline!checkBox = true!, meaning to display a checkbox to input the values \lstinline!false! or \lstinline!true! in the graphical user interface. - -The annotation \lstinline!choicesAllMatching = true!\annotationindex{choicesAllMatching} on a replaceable element indicates that tools should automatically construct a menu with choices of elements usable for replacing it. -Exact criteria for inclusion in such a menu are not defined, but there shall be a a way to at least get a selection of classes, \lstinline!A.B.$\ldots$.X.Z!, that are either directly or indirectly derived by inheritance from the constraining class of the declaration, where \lstinline!A! to \lstinline!X! are non-partial packages, and \lstinline!Z! is non-partial. -This menu can be disabled using annotation \lstinline!choicesAllMatching = false!. +\subsection{Annotation Choices for Suggested Redeclarations and Modifications}\doublelabel{annotation-choices-for-suggested-redeclarations-and-modifications} + +A declaration can have an annotation \lstinline!choices! containing modifiers on +\lstinline!choice!, where each of them indicates a suitable redeclaration or +modifications of the element. + +This is a hint for users of the model, and can also be used by the user +interface to suggest reasonable redeclaration, where the string comments +on the choice declaration can be used as textual explanations of the +choices. The annotation is not restricted to replaceable elements but +can also be applied to non-replaceable elements, enumeration types, and +simple variables. For a Boolean variable, a choices annotation may +contain the definition \lstinline!checkBox = true!, meaning to display a checkbox to +input the values \lstinline!false! or \lstinline!true! in the graphical user interface. + +Choices menus of replaceable elements can be automatically constructed +showing the names of all classes that are either directly or indirectly +derived by inheritance from the constraining class of the declaration. +This can be recommended by having \lstinline!annotation choicesAllMatching = true!; and disabled by having +\lstinline!annotation choicesAllMatching = false!. \begin{nonnormative} -The behavior when \lstinline!choicesAllMatching! is not specified; ideally it should present (at least) the same choices as for \lstinline!choicesAllMatching = true;! but if it takes (too long) time to present the list it is better to have \lstinline!choicesAllMatching = false!. +The behavior when choicesAllMatching is not specified; +ideally it should present (at least) the same choices as for +\lstinline!choicesAllMatching = true;! but if it takes (too long) time to present +the list it is better to have \lstinline!choicesAllMatching = false!. \end{nonnormative} \begin{example} \begin{lstlisting}[language=modelica] -replaceable model MyResistor = Resistor +replaceable model MyResistor=Resistor annotation(choices( - choice(redeclare model MyResistor=lib2.Resistor(a={2}) "$\ldots$"), - choice(redeclare model MyResistor=lib2.Resistor2 "$\ldots$"))); + choice(redeclare model MyResistor=lib2.Resistor(a={2}) "..."), + choice(redeclare model MyResistor=lib2.Resistor2 "..."))); -replaceable Resistor Load(R = 2) constrainedby TwoPin +replaceable Resistor Load(R=2) constrainedby TwoPin annotation(choices( - choice(redeclare lib2.Resistor Load(a={2}) "$\ldots$"), - choice(redeclare Capacitor Load(L=3) "$\ldots$"))); + choice(redeclare lib2.Resistor Load(a={2}) "..."), + choice(redeclare Capacitor Load(L=3) "..."))); -replaceable FrictionFunction a(func = exp) constrainedby Friction +replaceable FrictionFunction a(func=exp) constrainedby Friction annotation(choices( - choice(redeclare ConstantFriction a(c=1) "$\ldots$"), - choice(redeclare TableFriction a(table="$\ldots$") "$\ldots$"), - choice(redeclare FunctionFriction a(func=exp) "$\ldots$"))); + choice(redeclare ConstantFriction a(c=1) "..."), + choice(redeclare TableFriction a(table="...") "..."), + choice(redeclare FunctionFriction a(func=exp) "..."))); replaceable package Medium = Modelica.Media.Water.ConstantPropertyLiquidWater - constrainedby Modelica.Media.Interfaces.PartialMedium - annotation(choicesAllMatching = true); + constrainedby Modelica.Media.Interfaces.PartialMedium + annotation (choicesAllMatching=true); \end{lstlisting} -It can also be applied to nonreplaceable declarations, e.g.\ to describe enumerations. +It can also be applied to nonreplaceable declarations, e.g. to +describe enumerations. \begin{lstlisting}[language=modelica] -type KindOfController = Integer(min = 1, max = 3) +type KindOfController=Integer(min=1,max=3) annotation(choices( - choice = 1 "P", - choice = 2 "PI", - choice = 3 "PID")); + choice=1 "P", + choice=2 "PI", + choice=3 "PID")); model A parameter KindOfController x; end A; -A a(x = 3 "PID"); +A a(x=3 "PID"); \end{lstlisting} -It can also be applied to \lstinline!Boolean! variables to define a check box. +It can also be applied to Boolean variables to define a check +box. \begin{lstlisting}[language=modelica] -parameter Boolean useHeatPort = false annotation(choices(checkBox = true)); +parameter Boolean useHeatPort=false annotation(choices(checkBox=true)); \end{lstlisting} + \end{example} diff --git a/chapters/interface.tex b/chapters/interface.tex index a518e488f..fd40b6876 100644 --- a/chapters/interface.tex +++ b/chapters/interface.tex @@ -1,69 +1,84 @@ -\chapter{Interface or Type Relationships}\label{interface-or-type-relationships} +\chapter{Interface or Type Relationships}\doublelabel{interface-or-type-relationships} -A class or component, e.g.\ denoted \lstinline!A!, can in some cases be used at a -location designed for another class or component, e.g.\ denoted \lstinline!B!. In -Modelica this is the case for replaceable classes (see \cref{redeclaration}) and -for \lstinline!inner!/\lstinline!outer! elements (see \cref{instance-hierarchy-name-lookup-of-inner-declarations}). +A class or component, e.g. denoted \lstinline!A!, can in some cases be used at a +location designed for another class or component, e.g. denoted \lstinline!B!. In +Modelica this is the case for replaceable classes (see \autoref{redeclaration}) and +for \lstinline!inner!/\lstinline!outer! elements (see \autoref{instance-hierarchy-name-lookup-of-inner-declarations}). Replaceable classes are the primary mechanism to create very flexible models. In this chapter, the precise rules are defined when \lstinline!A! can be used at a location designed for \lstinline!B!. The restrictions are defined in terms of compatibility rules -(\cref{interface-compatibility-or-subtyping} and \cref{plug-compatibility-or-restricted-subtyping}) between ``interfaces'' (\cref{the-concepts-of-type-interface-and-subtype}); this can -also be viewed as sub-typing (\cref{the-concepts-of-type-interface-and-subtype}). - -\section{Interface Terminology}\label{interface-terminology} - -In this chapter, two kinds of terminology is used for identical concepts to get better understanding (e.g.\ by both engineers and computer scientists). -A short summary of the terms is given in the following table. -The details are defined in the rest of this chapter. - -\begin{definition}[Type \emph{or} interface]\index{type!interface}\index{interface} -The ``essential'' part of the public declaration sections of a class +(\autoref{interface-compatibility-or-subtyping} and \autoref{plug-compatibility-or-restricted-subtyping}) between ''interfaces'' (\autoref{the-concepts-of-type-interface-and-subtype}); this can +also be viewed as sub-typing (\autoref{the-concepts-of-type-interface-and-subtype}). + +In this chapter, two kinds of terminology is used for identical concepts +to get better understanding (e.g. by both engineers and computer +scientists). A short summary of the terms is given in the following +table. The details are defined in the rest of this chapter. + +\begin{longtable}{|p{4cm}|p{8cm}|} +\hline \endhead +\textbf{term} & \textbf{description}\\ \hline +type or interface +& The ``essential'' part of the public declaration sections of a class that is needed to decide whether \lstinline!A! can be used instead of \lstinline!B!. \par \begin{nonnormative*} -E.g.\ a declaration \lstinline!Real x! is part of the type (also called \emph{interface}), but \lstinline!import A! is not. +E.g. a declaration \lstinline!Real x! is part of the type (also called \emph{interface}), but \lstinline!import A! is not. \end{nonnormative*} -\end{definition} - -\begin{definition}[Class type \emph{or} inheritance interface]\index{class type}\index{type!class}\index{inheritance interface}\index{interface!inheritance} -The ``essential'' part of the public \emph{and protected} declaration sections of a class that is needed to decide whether \lstinline!A! can be used instead of \lstinline!B!. The class type, also -called inheritance interface, is needed when inheritance takes place, since then the protected declarations have to be taken into account. -\end{definition} - -\begin{definition}[Subtype \emph{or} compatible interface]\index{subtype}\index{compatible interface}\index{interface!compatible} -\lstinline!A! is a subtype of \lstinline!B!, or equivalently, the interface of \lstinline!A! is compatible to the interface of \lstinline!B!, if the ``essential'' part of the public declaration -sections of \lstinline!B! is also available in \lstinline!A!. +\\ \hline +\begin{tabular}{@{}p{4cm}@{}} +class type or\\ +inheritance interface +\end{tabular} +& +The ``essential'' part of the public \emph{and protected} declaration +sections of a class that is needed to decide whether \lstinline!A! can be used +instead of \lstinline!B!. The class type, also called inheritance interface, is +needed when inheritance takes place, since then the protected +declarations have to be taken into account.\\ \hline +\begin{tabular}{@{}p{4cm}@{}} +subtype or\\ +compatible interface +\end{tabular} & +\lstinline!A! is a subtype of \lstinline!B!, or equivalently, the interface of \lstinline!A! is compatible +to the interface of \lstinline!B!, if the ``essential'' part of the public +declaration sections of \lstinline!B! is also available in \lstinline!A!. \par \begin{nonnormative*} -E.g., if \lstinline!B! has a declaration \lstinline!Real x!, this declaration must also be present in \lstinline!A!. If \lstinline!A! has a declaration \lstinline!Real y!, this declaration must -not be present in \lstinline!B!. +E.g., if \lstinline!B! has a declaration \lstinline!Real x!, this declaration must also be present in \lstinline!A!. If \lstinline!A! has a +declaration \lstinline!Real y!, this declaration must not be present in \lstinline!B!. \end{nonnormative*} -\end{definition} - -If \lstinline!A! is a subtype of \lstinline!B!, then \lstinline!B! is said to be a \firstuse{supertype}\index{supertype} of \lstinline!A!. - -\begin{definition}[Restricted subtype \emph{or} plug compatible interface]\index{restricted subtype}\index{subtype!restricted}\index{plug compatible interface}\index{interface!plug compatible} -\lstinline!A! is a restricted subtype of \lstinline!B!, or equivalently, the interface of \lstinline!A! is plug compatible to the interface of \lstinline!B!, if \lstinline!A! is a subtype of -\lstinline!B! and if connector components in \lstinline!A! that are not in \lstinline!B!, are default connectable. +\\ \hline +\begin{tabular}{@{}p{4cm}@{}} +restricted subtype or plug compatible interface +\end{tabular} & +\lstinline!A! is a restricted subtype of \lstinline!B!, or equivalently, the interface of \lstinline!A! is +plug compatible to the interface of \lstinline!B!, if \lstinline!A! is a subtype of \lstinline!B! and if +connector components in \lstinline!A! that are not in \lstinline!B!, are default connectable. \begin{nonnormative} -E.g.\ it is not allowed that these connectors have variables with the \lstinline!input! prefix, because then they must be connected. +E.g. it is not allowed that these connectors have variables with the \lstinline!input! prefix, because then they must be connected. \end{nonnormative} -A model or block \lstinline!A! cannot be used instead of \lstinline!B!, if the particular situation does not allow to make a connection to these additional connectors. In such a case the stricter -\emph{plug compatible} is required for a redeclaration. -\end{definition} - -\begin{definition}[Function subtype \emph{or} function compatible interface]\index{function subtype}\index{subtype!function}\index{function compatible interface}\index{interface!function compatible} -\lstinline!A! is a function subtype of \lstinline!B!, or equivalently, the interface of \lstinline!A! is function compatible to the interface of \lstinline!B!, if \lstinline!A! is a subtype of -\lstinline!B! and if the additional arguments of function \lstinline!A! that are not in function \lstinline!B! are defined in such a way, that \lstinline!A! can be called at places where -\lstinline!B! is called. +A model or block \lstinline!A! cannot be used instead of \lstinline!B!, if the particular +situation does not allow to make a connection to these additional +connectors. In such a case the stricter \emph{plug compatible} is required +for a redeclaration.\\ \hline +\begin{tabular}{@{}p{4cm}@{}} +function subtype or\\ +function compatible interface +\end{tabular} & +\lstinline!A! is a function subtype of \lstinline!B!, or equivalently, the interface of \lstinline!A! is +function compatible to the interface of \lstinline!B!, if \lstinline!A! is a subtype of \lstinline!B! and if +the additional arguments of function \lstinline!A! that are not in function \lstinline!B! are +defined in such a way, that \lstinline!A! can be called at places where \lstinline!B! is called. \par \begin{nonnormative*} -E.g.\ an additional argument must have a default value. +E.g. an additional argument must have a default value. \end{nonnormative*} -\end{definition} +\\ \hline +\end{longtable} -\section{The Concepts of Type, Interface and Subtype}\label{the-concepts-of-type-interface-and-subtype} +\section{The Concepts of Type, Interface and Subtype}\doublelabel{the-concepts-of-type-interface-and-subtype} A \emph{type} can conceptually be viewed as a \emph{set of values}. When we say that the variable \lstinline!x! has the type \lstinline!Real!, we mean that the value of @@ -84,15 +99,15 @@ \section{The Concepts of Type, Interface and Subtype}\label{the-concepts-of-type The type \lstinline!Integer! is not a subtype of \lstinline!Real! in Modelica even though the set of primitive integer values is a subset of the primitive real values since there are some attributes of \lstinline!Real! that are not part of \lstinline!Integer! -(\cref{predefined-types-and-classes}). +(\autoref{predefined-types-and-classes}). -The concept of \emph{interface} as defined in \cref{interface-or-type} and used in +The concept of \emph{interface} as defined in \autoref{interface-or-type} and used in this document is equivalent to the notion of type based on sets in the following sense: An element is characterized by its interface defined by some attributes -(\cref{interface-or-type}). The \emph{type} of the element is the set of values -having the same interface, i.e.\ the same attributes. +(\autoref{interface-or-type}). The \emph{type} of the element is the set of values +having the same interface, i.e. the same attributes. A \emph{subtype} \lstinline!A1! in relation to another type \lstinline!A!, means that the elements of the set corresponding to \lstinline!A1! is a subset of the set @@ -108,37 +123,45 @@ \section{The Concepts of Type, Interface and Subtype}\label{the-concepts-of-type An instance \lstinline!r2!: \lstinline!R2 r2;! -The type \lstinline!R! of \lstinline!r! can be viewed as the set of all record values having the attributes defined by the interface of \lstinline!R!, e.g.\ the infinite set \{\lstinline!R(b=false, x=1.2)!, \lstinline!R(b=false, x=3.4)!, \lstinline!R(b=true, x=1.2)!, \lstinline!R(b=true, x=1.2, y=2)!, \lstinline!R(b=true, x=1.2, a=2)!, $\ldots$\}. -The statement that \lstinline!r! has the type (or interface) \lstinline!R! means that the value of \lstinline!r! s to this infinite set. +The type \lstinline!R! of \lstinline!r! can be viewed as the set of all +record values having the attributes defined by the interface of +\lstinline!R!, e.g. the infinite set \lstinline!{R(b=false,x=1.2)!, \lstinline!R(b=false, x=3.4)!, +\lstinline!R(b=true, x=1.2)!, \lstinline!R(b=true, x=1.2, y=2)!, +\lstinline!R(b=true, x=1.2, a=2),...)!. The statement that \lstinline!r! has the type (or +interface) \lstinline!R! means that the value of \lstinline!r! s to this +infinite set. The type \lstinline!R2! is a subtype of \lstinline!R! since its instances fulfill the additional property of having the component \lstinline!Real y;! in all its values. \begin{figure}[H] - \begin{center} - \includegraphics{subtype} - \end{center} - \caption{The type \lstinline!R! can be defined as the set of record values containing \lstinline!x! and \lstinline!b!. The subtype \lstinline!R2! is the subset of values that all contain - \lstinline!x!, \lstinline!b!, and \lstinline!y!.} +\caption{The type \lstinline!R! can be defined as the set of +record values containing \lstinline!x! and \lstinline!b!. The subtype \lstinline!R2! is the subset of values +that all contain \lstinline!x!, \lstinline!b!, and \lstinline!y!.} +\includegraphics[width=9cm]{subtype} \end{figure} \end{example} -\section{Interface or Type}\label{interface-or-type} +\section{Interface or Type}\doublelabel{interface-or-type} -Based on a flattened class or component we can construct an interface for that flattened class or component. -The \firstuse{interface}\index{interface} or \firstuse{type}\index{type} (the terms \emph{interface} and \emph{type} are equivalent and can be used interchangeably, and are different from \emph{inheritance interface} and \emph{class type}) is defined as the following information about the flattened element itself: +Based on a flattened class or component we can construct an interface +for that flattened class or component. The interface or type +(the terms \emph{interface} and \emph{type} are equivalent and can be used +interchangeably) is defined as the following information about the +flattened element itself: \begin{itemize} \item Whether it is replaceable or not. \item Whether the class itself or the class of the component is transitively - non-replaceable (\cref{transitively-non-replaceable}), and if not, the reference to the + non-replaceable (\autoref{transitively-non-replaceable}), and if not, the reference to the replaceable class it refers to. \item Whether it is a component or a class. \item Additional information about the element: + \begin{itemize} \item The \lstinline!flow! or \lstinline!stream! prefix. @@ -165,10 +188,13 @@ \section{Interface or Type}\label{interface-or-type} \lstinline!IntegerType!, \lstinline!StringType! or \lstinline!BooleanType!). \end{itemize} \item - Only for an \lstinline!operator record! class and classes derived from \lstinline!ExternalObject!: the full name of the operator record base class (i.e.\ the one containing the operations), or the derived class. - See \cref{overloaded-operators} and \cref{external-objects}. - - The following item does not apply for an \lstinline!operator record! class or class derived from \lstinline!ExternalObject!, since the type is already uniquely defined by the full name. + Only for an \lstinline!operator record! class and classes derived from + \lstinline!ExternalObject!: the full name of the operator record base-class (i.e. + the one containing the operations), or the derived class. See + \autoref{overloaded-operators} and \autoref{external-objects}.\\ + The following item does not apply for an \lstinline!operator record! class or + class derived from \lstinline!ExternalObject!, since the type is already uniquely + defined by the full name. \item For each named public element of the class or component (including both local and inherited named elements) a tuple comprised of: @@ -183,55 +209,68 @@ \section{Interface or Type}\label{interface-or-type} \end{itemize} \end{itemize} -The corresponding \emph{constraining} interface is constructed based on the \emph{constraining} type (\cref{constraining-type}) of the declaration (if replaceable -- otherwise same as actual -type) and with the \emph{constraining} interface for the named elements. +The corresponding \emph{constraining} interface is constructed based on +the \emph{constraining} type (\autoref{constraining-type}) of the declaration (if +replaceable -- otherwise same as actual type) and with the +\emph{constraining} interface for the named elements. In a class all references to elements of that class should be limited to their constraining interface. \begin{nonnormative} -The \emph{constraining interface} consists of only the public elements, and if the declaration is replaceable the element is limited to the constraining interface. +The \emph{constraining interface} constsists of only the public elements, and if the declaration is replaceable the element is limited to the constraining interface. \end{nonnormative} \begin{nonnormative} -The public interface does not contain all of the information about the class or component. -When using a class as a base class we also need protected elements, and for internal type-checking we need e.g.\ import-elements. -However, the information is sufficient for checking compatibility and for using the class to flatten components. +The public interface does not contain all of the information +about the class or component. When using a class as a base-class we also +need protected elements, and for internal type-checking we need e.g. +import-elements. However, the information is sufficient for checking +compatibility and for using the class to flatten components. \end{nonnormative} -\subsection{Transitively non-Replaceable}\label{transitively-non-replaceable} +\subsection{Transitively non-Replaceable}\doublelabel{transitively-non-replaceable} \begin{nonnormative} -In several cases it is important that no new elements can be added to the interface of a class, especially considering short class definitions. -Such classes are defined as \willintroduce{transitively non-replaceable}. +In several cases it is important that no new elements can be +added to the interface of a class, especially considering short class +definitions. Such classes are defined as transitively +non-replaceable. \end{nonnormative} -A class reference is \firstuse{transitively non-replaceable}\index{transitively non-replaceable} iff (i.e.\ \emph{if and only if}) all parts of the name satisfy the following: +A class reference is transitively non-replaceable iff (i.e. \emph{if and +only if}) all parts of the name satisfy the following: \begin{itemize} \item If the class definition is long it is transitively non-replaceable if not declared replaceable. \item - If the class definition is short (i.e.\ \lstinline!class A = P.B!) it is + If the class definition is short (i.e. \lstinline!class A = P.B!) it is transitively non-replaceable if it is non-replaceable and equal to class reference (\lstinline!P.B!) that is transitively non-replaceable. \end{itemize} \begin{nonnormative} -According to \cref{restrictions-on-base-classes-and-constraining-types-to-be-transitively-non-replaceable}, for a hierarchical name all parts of the name must be transitively non-replaceable, i.e.\ in \lstinline!extends A.B.C! this implies that \lstinline!A.B.C! must be transitively non-replaceable, as well as \lstinline!A! and \lstinline!A.B!, with the exception of the \emph{class extends redeclaration mechanism} see \cref{the-class-extends-redeclaration-mechanism}. +According to \autoref{restrictions-on-base-classes-and-constraining-types-to-be-transitively-non-replaceable}, for a hierarchical name all +parts of the name must be transitively non-replaceable, i.e. in \lstinline!extends A.B.C! this implies that \lstinline!A.B.C! must be transitively +non-replaceable, as well as \lstinline!A! and \lstinline!A.B!, with the exception of the \emph{class +extends redeclaration mechanism} see \autoref{the-class-extends-redeclaration-mechanism}. \end{nonnormative} -\subsection{Inheritance Interface or Class Type}\label{inheritance-interface-or-class-type} +\subsection{Inheritance Interface or Class Type}\doublelabel{inheritance-interface-or-class-type} -For inheritance, the interface also must include protected elements; this is the only change compared to above. +For inheritance the interface also must include protected elements; this +is the only change compared to above. -Based on a flattened class we can construct an \firstuse{inheritance interface}\index{inheritance interface}\index{interface!inheritance} or \firstuse{class type}\index{class type}\index{type!class} for that flattened class. -The inheritance interface or class type is defined as the following information about the flattened element itself: +Based on a flattened class we can construct an inheritance interface or +class type for that flattened class. The inheritance interface or class +type is defined as the following information about the flattened element +itself: \begin{itemize} \item Whether it is replaceable or not. \item Whether the class itself or the class of the component is transitively - non-replaceable (\cref{transitively-non-replaceable}), and if not the reference to + non-replaceable (\autoref{transitively-non-replaceable}), and if not the reference to replaceable class it refers to. \item For each named element of the class (including both local and @@ -283,7 +322,7 @@ \subsection{Inheritance Interface or Class Type}\label{inheritance-interface-or- \end{itemize} \end{itemize} -\section{Interface Compatibility or Subtyping}\label{interface-compatibility-or-subtyping} +\section{Interface Compatibility or Subtyping}\doublelabel{interface-compatibility-or-subtyping} An interface of a class or component \lstinline!A! is compatible with an interface of a class or component \lstinline!B! (or the constraining interface of \lstinline!B!), or @@ -293,22 +332,22 @@ \section{Interface Compatibility or Subtyping}\label{interface-compatibility-or- \lstinline!A! is a class if and only if \lstinline!B! is a class (and thus: \lstinline!A! is a component if and only if \lstinline!B! is a component). \item - If \lstinline!A! has an \lstinline!operator record! base class then \lstinline!B! must also have one and it must be the same. - If \lstinline!A! does not have an operator record base class then \lstinline!B! shall not have one. - See \cref{overloaded-operators}. + If \lstinline!A! has an \lstinline!operator record! base-class then \lstinline!B! must also have one and + it must be the same. If \lstinline!A! does not have an operator record base-class + then \lstinline!B! may not have one. See \autoref{overloaded-operators}. \item If \lstinline!A! is derived from \lstinline!ExternalObject!, then \lstinline!B! must also be derived from \lstinline!ExternalObject! and have the same full name. If \lstinline!A! is not derived from - \lstinline!ExternalObject! then \lstinline!B! shall not be derived from \lstinline!ExternalObject!. See - \cref{external-objects}. + \lstinline!ExternalObject! then \lstinline!B! may not derived from \lstinline!ExternalObject!. See + \autoref{external-objects}. \item - If \lstinline!B! is not replaceable then \lstinline!A! shall not be replaceable. + If \lstinline!B! is not replaceable then \lstinline!A! may not be replaceable. \item If \lstinline!B! is transitively non-replaceable then \lstinline!A! must be transitively - non-replaceable (\cref{transitively-non-replaceable}). For all elements of the inheritance + non-replaceable (\autoref{transitively-non-replaceable}). For all elements of the inheritance interface of \lstinline!B! there must exist a compatible element with the same name and visibility in the inheritance interface of \lstinline!A!. The interface - of \lstinline!A! shall not contain any other elements. + of \lstinline!A! may not contain any other elements. \begin{nonnormative} We might even extend this to say that \lstinline!A! and \lstinline!B! should have the same contents, as in the additional restrictions below. \end{nonnormative} @@ -322,7 +361,9 @@ \section{Interface Compatibility or Subtyping}\label{interface-compatibility-or- component interface of \lstinline!B! there must thus exist a plug-compatible element with the same name in the component interface of \lstinline!A!. \item - Additional restrictions on the additional information. These elements should either match or have a natural total order: + Additional restrictions on the additional information. These elements + should either match or have a natural total order: + \begin{itemize} \item If \lstinline!B! is a non-replaceable long class definition \lstinline!A! must also be a @@ -330,14 +371,21 @@ \section{Interface Compatibility or Subtyping}\label{interface-compatibility-or- \item The \lstinline!flow! or \lstinline!stream! prefix should be matched for compatibility. \item - Declared variability is ordered \lstinline!constant! \textless{} \lstinline!parameter! \textless{} \lstinline!discrete! \textless{} continuous-time (\lstinline!Real! without prefix), and \lstinline!A! is only compatible with \lstinline!B! if the declared variability in \lstinline!A! is less than or equal the variability in \lstinline!B!. + Variability is ordered \lstinline!constant! \textless{} \lstinline!parameter! \textless{} + \lstinline!discrete! \textless{} continuous-time (\lstinline!Real! without prefix), and \lstinline!A! is + only compatible with \lstinline!B! if the declared variability in \lstinline!A! is less than + or equal the variability in \lstinline!B!. \begin{nonnormative} - For a redeclaration of an element the variability prefix is as default inherited by the redeclaration (i.e.\ no need to repeat \lstinline!parameter! when redeclaring a parameter). + For a redeclaration of an element the variability prefix is as default inherited by the redeclaration (i.e. no need to repeat \lstinline!parameter! + when redeclaring a parameter). \end{nonnormative} \item - The \lstinline!input! and \lstinline!output! prefixes must be matched. This ensures that the rules regarding inputs/outputs for matching connectors and (non-connector inputs) are preserved, as well as the restriction on blocks. + The input and output prefixes must be matched. This ensures that the + rules regarding inputs/outputs for matching connectors and + (non-connector inputs) are preserved, as well as the restriction on + blocks. \begin{nonnormative} - For a redeclaration of an element the \lstinline!input! or \lstinline!output! prefix is inherited from the original declaration. + For a redeclaration of an element the input or output prefix is inherited from the original declaration. \end{nonnormative} \item The \lstinline!inner! and/or \lstinline!outer! prefixes should be matched. @@ -351,13 +399,18 @@ \section{Interface Compatibility or Subtyping}\label{interface-compatibility-or- \item The number of array dimensions in \lstinline!A! and \lstinline!B! must be matched. \item - Conditional components are only compatible with conditional components. The conditions must have equivalent contents (similar to array sizes, except there is no \lstinline!:! for conditional - components). + Conditional components are only compatible with conditional + components. The conditions must have equivalent contents (similar as + array sizes -- except there is no \lstinline!:! for conditional components). \begin{nonnormative} For a redeclaration of an element the conditional part is inherited from the original. \end{nonnormative} \item - A \lstinline!function! class is only compatible with a \lstinline!function! class, a \lstinline!package! class only compatible with a \lstinline!package! class, a \lstinline!connector! class only with a \lstinline!connector! class, a \lstinline!model! or \lstinline!block! class only compatible with a \lstinline!model! or \lstinline!block! class, and a \lstinline!type! or \lstinline!record! class only compatible with a \lstinline!type! or \lstinline!record! class. + A function class is only compatible with a function class, a package + class only compatible with a package class, a connector class only + with a connector class, a model or block class only compatible with + a model or block class, and a type or record class only compatible + with a type or record class. \item If \lstinline!B! is an enumeration type \lstinline!A! must also be an enumeration type and vice versa. If \lstinline!B! is an enumeration type not defined as \lstinline!(:)! then \lstinline!A! @@ -375,8 +428,8 @@ \section{Interface Compatibility or Subtyping}\label{interface-compatibility-or- \end{nonnormative} Plug-compatibility is a further restriction of compatibility (subtyping) -defined in \cref{plug-compatibility-or-restricted-subtyping}, and further restricted for functions, see -\cref{function-compatibility-or-function-subtyping-for-functions}. For a replaceable declaration or modifier the default class +defined in \autoref{plug-compatibility-or-restricted-subtyping}, and further restricted for functions, see +\autoref{function-compatibility-or-function-subtyping-for-functions}. For a replaceable declaration or modifier the default class must be compatible with the constraining class. For a modifier the following must apply: @@ -385,22 +438,32 @@ \section{Interface Compatibility or Subtyping}\label{interface-compatibility-or- The modified element should exist in the element being modified. \item The modifier should be compatible with the element being modified, and - in most cases also plug-compatible, \cref{plug-compatibility-or-restricted-subtyping}. + in most cases also plug-compatible, \autoref{plug-compatibility-or-restricted-subtyping}. \end{itemize} \begin{nonnormative} -If the original constraining flat class is legal (no references to unknown elements and no illegal use of class/component), and modifiers legal as above, then the resulting flat class will be legal -(no references to unknown elements and no illegal use of class/component and compatible with original constraining class) and references refer to similar entities. +If the original constraining flat class is legal (no references +to unknown elements and no illegal use of class/component), and +modifiers legal as above -- then the resulting flat class will be legal +(no references to unknown elements and no illegal use of class/component +and compatible with original constraining class) and references refer to +similar entities. \end{nonnormative} -\section{Plug-Compatibility or Restricted Subtyping}\label{plug-compatibility-or-restricted-subtyping} +\section{Plug-Compatibility or Restricted Subtyping}\doublelabel{plug-compatibility-or-restricted-subtyping} \begin{nonnormative} -If a sub-component is redeclared, see \cref{redeclaration}, it is impossible to connect to any new connector. A connector with \lstinline!input! prefix must be connected to, and since one cannot connect across hierarchies, one should not be allowed to introduce such a connector at a level where a connection is not possible. Therefore all public components present in the interface \lstinline!A! that are not present in \lstinline!B! must be connected by default. +If a sub-component is redeclared, see \autoref{redeclaration}, it is +impossible to connect to any new connector. A connector with input +prefix must be connected to, and since one cannot connect across +hierarchies, one should not be allowed to introduce such a connector at +a level where a connection is not possible. Therefore all public +components present in the interface A that are not present in B must be +connected by default. \end{nonnormative} -\begin{definition}[Plug-compatibility (= restricted subtyping)]% -\index{plug-compatibility}\index{restricted subtype|seealso{plug-compatibility}}% +\textbf{Definition 5: Plug-compatibility (= restricted subtyping)} + An interface \lstinline!A! is plug-compatible with (a restricted subtype of) an interface \lstinline!B! (or the constraining interface of \lstinline!B!) iff: \begin{itemize} @@ -410,9 +473,9 @@ \section{Plug-Compatibility or Restricted Subtyping}\label{plug-compatibility-or All public components present in \lstinline!A! but not in \lstinline!B! must be default-connectable (as defined below). \end{itemize} -\end{definition} -\begin{definition}[Default connectable]\index{default connectable} +\textbf{Definition 6: Default connectable} + A component of an interface is default-connectable iff: \begin{itemize} \item @@ -432,7 +495,6 @@ \section{Plug-Compatibility or Restricted Subtyping}\label{plug-compatibility-or binding equation or all of its sub-components must have binding equations. \end{itemize} -\end{definition} Based on the above definitions, there are the following restrictions: \begin{itemize} @@ -459,13 +521,13 @@ \section{Plug-Compatibility or Restricted Subtyping}\label{plug-compatibility-or partial model FrictionElement extends TwoFlanges; - $\ldots$ + ... end FrictionElement; model Clutch "compatible - but not plug-compatible with FrictionElement" Modelica.Blocks.Interfaces.RealInput pressure; extends FrictionElement; - $\ldots$ + ... end Clutch; model DriveLineBase @@ -492,21 +554,34 @@ \section{Plug-Compatibility or Restricted Subtyping}\label{plug-compatibility-or end UseDriveLine; \end{lstlisting} -If a subcomponent is redeclared, it is impossible to connect to any new connector. Thus any new connectors must work without being connected, i.e., the default connection of flow variables. That fails for inputs (and expandable connectors may contain inputs). For parameters and non-connector inputs it would be possible to provide bindings in a derived class, but that would require hierarchical modifiers and it would be bad modeling practice that a hierarchical modifier must be used in order to make a model valid. A replaceable class might be used as the class for a sub-component, therefore plug-compatibility is required not only for replaceable sub-components, but also for replaceable classes. +If a subcomponent is redeclared, it is impossible to connect to +any new connector. Thus any new connectors must work without being +connected, i.e., the default connection of flow-variables. That fails +for inputs (and expandable connectors may contain inputs). For +parameters and non-connector inputs it would be possible to provide +bindings in a derived class, but that would require hierarchical +modifiers and it would be bad modeling practice that a hierarchical +modifier must be used in order to make a model valid. A replaceable +class might be used as the class for a sub-component, therefore +plug-compatibility is required not only for replaceable sub-components, +but also for replaceable classes. \end{nonnormative} -\section{Function-Compatibility or Function-Subtyping for Functions}\label{function-compatibility-or-function-subtyping-for-functions} +\section{Function-Compatibility or Function-Subtyping for Functions}\doublelabel{function-compatibility-or-function-subtyping-for-functions} \begin{nonnormative} Functions may be called with either named or positional arguments, and thus both the name and order is significant. If a -function is redeclared, see \cref{redeclaration}, any new arguments must +function is redeclared, see \autoref{redeclaration}, any new arguments must have defaults (and be at the end) in order to preserve the meaning of existing calls. \end{nonnormative} -\begin{definition}[Function-compatibility or function-subtyping for functions]\label{function-compatibility}\index{function-compatibility}\index{subtype!functions} -A \lstinline!function! class \lstinline!A! is \emph{function-compatible with or a function subtype of} \lstinline!function! class \lstinline!B! iff (the terms \emph{function-compatible} and \emph{function subtype} of are synonyms and used interchangeably): +\textbf{Definition 7: Function-Compatibility or Function-Subtyping for Functions} + +A function class \lstinline!A! is \emph{function-compatible with or a function +subtype of} function class \lstinline!B! iff (the terms \emph{function-compatible} +and \emph{function subtype} of are synonyms and used interchangeably): \begin{itemize} \item \lstinline!A! is compatible to (subtype of) \lstinline!B!. @@ -524,10 +599,7 @@ \section{Function-Compatibility or Function-Subtyping for Functions}\label{funct \item A public input component of \lstinline!A! not present in \lstinline!B! must have a binding assignment. -\item - If \lstinline!A! is impure, then \lstinline!B! must also be impure, compare \cref{pure-modelica-functions}. \end{itemize} -\end{definition} Based on the above definition the following restriction holds: \begin{itemize} @@ -569,7 +641,7 @@ \section{Function-Compatibility or Function-Subtyping for Functions}\label{funct function sunGravity = PointMassGravity (m=2e30); Body planet1(redeclare function gravity = sunGravity); Body planet2(redeclare function gravity = PointMassGravity (m=2e30)); - $\ldots$ + ... end PlanetSimulation; \end{lstlisting} @@ -579,33 +651,43 @@ \section{Function-Compatibility or Function-Subtyping for Functions}\label{funct \lstinline!GravityInterface!. \end{example} -\section{Type Compatible Expressions}\label{type-compatible-expressions} +\section{Type Compatible Expressions}\doublelabel{type-compatible-expressions} -Certain expressions consist of an operator applied to two or more type compatible subexpressions (\lstinline!A! and \lstinline!B!), including binary operators, e.g. \lstinline!A + B!, \lstinline!if!-expressions, e.g.\ \lstinline!if x then A else B!, and array expressions, e.g.\ \lstinline!{A, B}!. -The resulting type of the expression in case of two type compatible subexpressions \lstinline!A! and \lstinline!B! is defined as follows: +Certain expressions consist of an operator applied to two or more type +compatible sub-expressions (\lstinline!A! and \lstinline!B!), including binary operators, e.g. +\lstinline!A + B!, if-expressions, e.g. \lstinline!if x then A else B!, and array expressions, +e.g. \lstinline!{A, B}!. The resulting type of the expression in case of two type +compatible subexpressions \lstinline!A! and \lstinline!B! is defined as follows: \begin{itemize} \item - If \lstinline!A! is a record expression \lstinline!B! must also be a record expression with the same named elements. The type compatible expression is a record comprised of named elements that are compatible with the corresponding named elements of both \lstinline!A! and \lstinline!B!. - In an array expression the two records may contain elements with different sizes, but apart from that they must be of compatible types. - That generates a heterogenous array of records, see \cref{arrays}. -\item - If \lstinline!A! is an array expression then \lstinline!B! must also be an array expression, and \lstinline!ndims(A)! = \lstinline!ndims(B)!. - The type compatible expression is an array expression with elements compatible with the elements of both \lstinline!A! and \lstinline!B!. - If both \lstinline!size(A)! and \lstinline!size(B)! are known and \lstinline!size(A)! = \lstinline!size(B)! then this defines the size of the type compatible expression, otherwise the size of the expression is not known until the expression is about to be evaluated. - In case of an \lstinline!if!-expression the size of the type compatible expression is defined based on the branch selected, and for other cases \lstinline!size(A)! = \lstinline!size(B)! must hold at this point. + If \lstinline!A! is a record-expression \lstinline!B! must also be a record-expression with + the same named elements. The type compatible expression is a record + comprised of named elements that are compatible with the corresponding + named elements of both \lstinline!A! and \lstinline!B!. +\item + If \lstinline!A! is an array expression then \lstinline!B! must also be an array expression, + and \lstinline!ndims(A)! = \lstinline!ndims(B)!. The type compatible expression is an array + expression with elements compatible with the elements of both \lstinline!A! and \lstinline!B!. + If both \lstinline!size(A)! and \lstinline!size(B)! are known + and \lstinline!size(A)! = \lstinline!size(B)! then this + defines the size of the type compatible expression, otherwise the size + of the expression is not known until the expression is about to be + evaluated. In case of an if-expression the size of the type compatible + expression is defined based on the branch selected, and for other + cases \lstinline!size(A)! = \lstinline!size(B)! must hold at this point. \item If \lstinline!A! is a scalar expression of a simple type \lstinline!B! must also be a scalar expression of a simple type. \item If \lstinline!A! is a \lstinline!Real! expression then \lstinline!B! must be a \lstinline!Real! or \lstinline!Integer! expression - and the type compatible expression is \lstinline!Real!, compare \cref{standard-type-coercion}. + and the type compatible expression is \lstinline!Real!, compare \autoref{standard-type-coercion}. \item If \lstinline!A! is an \lstinline!Integer! expression then \lstinline!B! must be a \lstinline!Real! or \lstinline!Integer! expression. For exponentiation and division the type compatible - expression is \lstinline!Real! (even if both \lstinline!A! and \lstinline!B! are \lstinline!Integer!) see \cref{exponentiation-of-scalars-of-numeric-elements} - and \cref{division-of-scalars-or-numeric-arrays-by-numeric-scalars}, in + expression is \lstinline!Real! (even if both \lstinline!A! and \lstinline!B! are \lstinline!Integer!) see \autoref{exponentiation-of-scalars-of-numeric-elements} + and \autoref{division-of-scalars-or-numeric-arrays-by-numeric-scalars}, in other cases the type compatible expression is \lstinline!Real! or \lstinline!Integer! (same as - \lstinline!B!), compare \cref{standard-type-coercion}. + \lstinline!B!), compare \autoref{standard-type-coercion}. \item If \lstinline!A! is a \lstinline!Boolean! expression then \lstinline!B! must be a \lstinline!Boolean! expression and the type compatible expression is \lstinline!Boolean!. @@ -619,11 +701,14 @@ \section{Type Compatible Expressions}\label{type-compatible-expressions} of an enumeration type with the same enumeration literals in the same order. \item - If \lstinline!A! has an \lstinline!operator record! base class then \lstinline!B! must also have an \lstinline!operator record! base class, and it must be the same, and otherwise neither \lstinline!A! nor \lstinline!B! may have an \lstinline!operator record! base class. - This is also the \lstinline!operator record! base class for the expression e.g.\ for \lstinline!if (cond) then A else B!. + If \lstinline!A! has an \lstinline!operator record! base-class then \lstinline!B! must also have an + \lstinline!operator record! base-class, and it must be the same, and otherwise + neither \lstinline!A! nor \lstinline!B! may have an \lstinline!operator record! base-class. This is also + the \lstinline!operator record! base-class for the expression e.g. for + \lstinline!if (cond) then A else B!. \item If \lstinline!A! is derived from \lstinline!ExternalObject! then \lstinline!B! must also be derived from \lstinline!ExternalObject! and they must have the same full name; and otherwise neither \lstinline!A! nor \lstinline!B! may be derived from \lstinline!ExternalObject!. The common full - name also defines the type of the expression, e.g.\ for \lstinline!if (cond) then A else B!. + name also defines the type of the expression, e.g. for \lstinline!if (cond) then A else B!. \end{itemize} diff --git a/chapters/introduction.tex b/chapters/introduction.tex index b53aea21c..14a4f8105 100644 --- a/chapters/introduction.tex +++ b/chapters/introduction.tex @@ -1,19 +1,18 @@ -\chapter{Introduction}\label{introduction1} - -\section{Overview of Modelica}\label{overview-of-modelica} - +\chapter{Introduction}\doublelabel{introduction1} +\section{Overview of Modelica}\doublelabel{overview-of-modelica} Modelica is a language for modeling of physical systems, designed to support effective library development and model exchange. It is a modern language built on acausal modeling with mathematical equations and object-oriented constructs to facilitate reuse of modeling knowledge. -\section{Scope of the Specification}\label{scope-of-the-specification} +\section{Scope of the Specification}\doublelabel{scope-of-the-specification} The semantics of the Modelica language is specified by means of a set of rules for translating any class described in the Modelica language to a flat Modelica structure. -A class (of specialized class \lstinline!model!, \lstinline!class! or \lstinline!block!) intended to be simulated on its own is called a \firstuse{simulation model}\index{simulation model}. +A class (of specialized class model, class or block) intended to be +simulated on its own is called a simulation model. The flat Modelica structure is also defined for other cases than simulation models; including functions (can be used to provide @@ -29,12 +28,22 @@ \section{Scope of the Specification}\label{scope-of-the-specification} satisfying the semantic restrictions does not guarantee that the model can be initialized from the initial conditions and simulated. -Modelica was designed to facilitate symbolic transformations of models, especially by mapping basically every Modelica language construct to equations in the flat Modelica structure. -Many Modelica models, especially in the associated Modelica Standard Library, are higher index systems, and can only be reasonably simulated if symbolic index reduction is performed, i.e., equations are differentiated and appropriate variables are selected as states, so that the resulting system of equations can be transformed to state space form (at least locally numerically), i.e., a hybrid DAE of index zero. -In order to allow this structural analysis, a tool may reject simulating a model if parameters cannot be evaluated during translation -- due to calls of external functions or initial equations/initial algorithms for \lstinline!fixed = false! parameters. -Accepting such models is a quality of implementation issue. -The Modelica specification does not define how to simulate a model. -However, it defines a set of equations that the simulation result should satisfy as well as possible. +Modelica was designed to facilitate symbolic transformations of models, +especially by mapping basically every Modelica language construct to +continuous or instantaneous equations in the flat Modelica structure. +Many Modelica models, especially in the associated Modelica Standard +Library, are higher index systems, and can only be reasonably simulated +if symbolic index reduction is performed, i.e., equations are +differentiated and appropriate variables are selected as states, so that +the resulting system of equations can be transformed to state space form +(at least locally numerically), i.e., a hybrid DAE of index zero. In +order to allow this structural analysis, a tool may reject simulating a +model if parameters cannot be evaluated during translation - due to +calls of external functions or initial equations/initial algorithms for +fixed=false parameters. Accepting such models is a quality of +implementation issue. The Modelica specification does not define how to +simulate a model. However, it defines a set of equations that the +simulation result should satisfy as well as possible. The key issues of the translation (or flattening) are: \begin{itemize} @@ -43,7 +52,7 @@ \section{Scope of the Specification}\label{scope-of-the-specification} \item Parameterization of base classes, local classes and components \item - Generation of connection equations from \lstinline!connect!-equations + Generation of connection equations from connect-equations \end{itemize} The flat hybrid DAE form consists of: @@ -63,50 +72,59 @@ \section{Scope of the Specification}\label{scope-of-the-specification} section (number of equations = number of different assigned variables). \item - The \lstinline!when!-clauses where every \lstinline!when!-clause is treated as a set of conditionally evaluated equations, which are functions of the variables occurring in the clause (number of equations = number of different assigned variables). + When-clauses where every when-clause is treated as a set of + conditionally evaluated equations, also called instantaneous + equations, which are functions of the variables occurring in the + clause (number of equations = number of different assigned variables). \end{itemize} -Therefore, a flat hybrid DAE is seen as a set of equations where some of the equations are only conditionally evaluated. -Initial setup of the model is specified using \lstinline!start!-attributes and equations that hold only during initialization. +Therefore, a flat hybrid DAE is seen as a set of equations where some of +the equations are only conditionally evaluated (e.g. instantaneous +equations are only evaluated when the corresponding when-condition +becomes true). Initial setup of the model is specified using +start-values and instantaneous equations that hold at the initial time +only. -A Modelica class may also contain annotations, i.e.\ formal comments, +A Modelica class may also contain annotations, i.e. formal comments, which specify graphical representations of the class (icon and diagram), documentation text for the class, and version information. -\section{Some Definitions}\label{some-definitions} - -The semantic specification should be read together with the Modelica grammar. -Non-normative text, i.e., examples and comments, are enclosed in {[}\ldots{]} and set in italics. -Explanations of many terms can be found using the document index in \cref{document-index}. -Some important terms are defined below. - -\begin{definition}[Component]\index{component} -An element defined by the production \lstinline[language=grammar]!component-clause! in the Modelica grammar (basically a variable or an instance of a class) -\end{definition} - -\begin{definition}[Element]\index{element} -Class definition, \lstinline!extends!-clause, or \lstinline[language=grammar]!component-clause! declared in a class (basically a class reference or a component in a declaration). -\end{definition} - -\begin{definition}[Flattening]\index{flattening} -The translation of a model described in Modelica to the corresponding model described as a hybrid DAE, involving expansion of inherited base classes, parameterization of base classes, local classes -and components, and generation of connection equations from \lstinline!connect!-equations (basically, mapping the hierarchical structure of a model into a set of differential, algebraic and discrete equations together with the corresponding variable declarations and function definitions from the model). -\end{definition} - -% More terms that would be useful to define here: -% - translation (for phrases such as "during translation") -% - deprecated -% - quality of implementation -% - simulator - -\section{Notation and Grammar}\label{notation-and-grammar} - -The meta symbols (of the extended BNF-grammar) are defined in~\cref{lexical-conventions}. +\section{Some Definitions}\doublelabel{some-definitions} + +The semantic specification should be read together with the Modelica +grammar. Non-normative text, i.e., examples and comments, are enclosed +in {[}\ldots{]} and set in italics. Additional terms are explained +in the glossary in \autoref{glossary}. Some important terms are: +\par% The 'tabular' environment doesn't take care of breaking the current line. +\begin{tabular}{|l|p{10cm}|} +\hline +\tablehead{Term} & \tablehead{Definition} \\ +\hline +Component & An element defined by the production +\lstinline!component-clause! in the Modelica grammar (basically a +variable or an instance of a class)\\ +Element & Class definitions, extends-clauses and +component-clauses declared in a class (basically a class +reference or a component in a declaration).\\ +Flattening & The translation of a model described in Modelica to the +corresponding model described as a hybrid DAE, involving expansion of +inherited base classes, parameterization of base classes, local classes +and components, and generation of connection equations from +connect-equations (basically, mapping the hierarchical structure of a +model into a set of differential, algebraic and discrete equations +together with the corresponding variable declarations and function +definitions from the model).\\ +\hline +\end{tabular} + +\section{Notation and Grammar}\doublelabel{notation-and-grammar} + +The meta symbols (of the extended BNF-grammar) are defined in~\autoref{lexical-conventions}. Boldface denotes keywords of the Modelica language. Keywords are -reserved words and shall not be used as identifiers, with the exception of +reserved words and may not be used as identifiers, with the exception of \lstinline!initial! which is a keyword in section headings, and \lstinline!der! which is a keyword for declaration functions, but it is also possible to call the -functions \lstinline!initial! and \lstinline!der!. +functions \lstinline!initial()! and \lstinline!der(...)!. -See \cref{modelica-concrete-syntax} for a full lexical specification and grammar. +See \autoref{modelica-concrete-syntax} for a full lexical specification and grammar. diff --git a/chapters/lexicalstructure.tex b/chapters/lexicalstructure.tex index d29d8881a..bdcce51d1 100644 --- a/chapters/lexicalstructure.tex +++ b/chapters/lexicalstructure.tex @@ -1,4 +1,4 @@ -\chapter{Lexical Structure}\label{lexical-structure} +\chapter{Lexical Structure}\doublelabel{lexical-structure} This chapter describes several of the basic building blocks of Modelica such as characters and lexical units including identifiers and literals. @@ -11,19 +11,23 @@ \chapter{Lexical Structure}\label{lexical-structure} comments are detected by the lexical analyzer before being thrown away. The information presented here is derived from the more formal -specification in \cref{modelica-concrete-syntax}. +specification in \autoref{modelica-concrete-syntax}. -\section{Character Set}\label{character-set} +\section{Character Set}\doublelabel{character-set} The character set of the Modelica language is Unicode, but restricted to the Unicode characters corresponding to 7-bit ASCII characters in -several places; for details see \cref{lexical-conventions}. +several places; for details see \autoref{lexical-conventions}. -\section{Comments}\label{comments} +\section{Comments}\doublelabel{comments} -There are two kinds of comments in Modelica which are not lexical units in the language and therefore are treated as white-space by a Modelica translator. -The white-space characters are space, tabulator, and line separators (carriage return and line feed); and white-space cannot occur inside tokens, e.g., \lstinline!<=! must be written as two characters without space or comments between them. -The following comment variants are available: +There are two kinds of comments in Modelica which are not lexical units +in the language and therefore are treated as whitespace by a Modelica +translator. The whitespace characters are space, tabulator, and line +separators (carriage return and line feed); and whitespace cannot occur +inside tokens, e.g., \textless{}= must be written as two characters +without space or comments between them. The following comment variants are +available: %TODO-FORMAT should be a table instead of lstlisting? \begin{lstlisting}[language=modelica] // comment & Characters from // to the end of the line are ignored. @@ -40,7 +44,7 @@ \section{Comments}\label{comments} /* Commented out - erroneous comment, invalid nesting of comments! /* This is an interesting model */ model interesting - $\ldots$ + ... end interesting; */ \end{lstlisting} @@ -51,66 +55,61 @@ \section{Comments}\label{comments} beginning of a class definition. For example: \begin{lstlisting}[language=modelica] model TempResistor "Temperature dependent resistor" - $\ldots$ + ... parameter Real R "Resistance for reference temp."; - $\ldots$ + ... end TempResistor; \end{lstlisting} -\section{Identifiers, Names, and Keywords}\label{identifiers-names-and-keywords} +\section{Identifiers, Names, and Keywords}\doublelabel{identifiers-names-and-keywords} + +\emph{Identifiers} are sequences of letters, digits, and other +characters such as underscore, which are used for \emph{naming} various +items in the language. Certain combinations of letters are +\emph{keywords} represented as \emph{reserved} words in the Modelica +grammar and are therefore not available as identifiers. + +\subsection{Identifiers}\doublelabel{identifiers} + +Modelica \emph{identifiers}, used for naming classes, variables, +constants, and other items, are of two forms. The first form always +starts with a letter or underscore (\_), followed by any number of +letters, digits, or underscores. Case is significant, i.e., the names +\lstinline!Inductor! and \lstinline!inductor! are different. The second form \lstinline!(Q-IDENT)! starts +with a single quote, followed by a sequence of any printable ASCII +character, where single-quote must be preceded by backslash, and +terminated by a single quote, e.g. \lstinline!'12H'!, \lstinline!'13\'H'!, +\lstinline!'+foo'!. Control characters in quoted identifiers have to use string +escapes. +The single quotes are part of the identifier, i.e., \lstinline!'x'! and \lstinline!x! +are distinct identifiers. The redundant escapes (\lstinline!'\?'! and \lstinline!'\"'!) are the same as the corresponding non-escaped +variants (\lstinline!'?'! and \lstinline!'"'!), but are only for use in Modelica source code. +A full BNF definition of the Modelica syntax and +lexical units is available in \autoref{modelica-concrete-syntax}. -\willintroduce{Identifiers} are sequences of letters, digits, and other characters such as underscore, which are used for \emph{naming} various items in the language. -Certain combinations of letters are \willintroduce{keywords} represented as \emph{reserved} words in the Modelica grammar and are therefore not available as identifiers. - -\subsection{Identifiers}\label{identifiers} - -Modelica \firstuse{identifiers}\index{identifier}, used for naming classes, variables, constants, and other items, are of two forms. -The first form always starts with a letter or underscore (`\_'), followed by any number of letters, digits, or underscores. -Case is significant, i.e., the identifiers \lstinline!Inductor! and \lstinline!inductor! are different. -The second form (\lstinline[language=grammar]!Q-IDENT!) starts with a single quote, followed by a sequence of any printable ASCII character, where single-quote must be preceded by backslash, and terminated by a single quote, e.g.\ \lstinline!'12H'!, \lstinline!'13\'H'!, \lstinline!'+foo'!. -Control characters in quoted identifiers have to use string escapes. -The single quotes are part of the identifier, i.e., \lstinline!'x'! and \lstinline!x! are distinct identifiers. -The redundant escapes (\lstinline!'\?'! and \lstinline!'\"'!) are the same as the corresponding non-escaped variants (\lstinline!'?'! and \lstinline!'"'!), but are only for use in Modelica source code. -A full BNF definition of the Modelica syntax and lexical units is available in \cref{modelica-concrete-syntax}. - -% For easy maintenance, the lexing rules below should be a substring of the full lexing rules in \cref{lexical-conventions}. \begin{lstlisting}[language=grammar] -IDENT = NON-DIGIT { DIGIT | NON-DIGIT } | Q-IDENT -Q-IDENT = "'" { Q-CHAR | S-ESCAPE } "'" -NON-DIGIT = "_" | letters "a" $\ldots$ "z" | letters "A" $\ldots$ "Z" -DIGIT = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" -Q-CHAR = NON-DIGIT | DIGIT | "!" | "#" | "$\mbox{\textdollar}$" | "%" | "&" | "(" | ")" - | "*" | "+" | "," | "-" | "." | "/" | ":" | ";" | "<" | ">" | "=" - | "?" | "@" | "[" | "]" | "^" | "{" | "}" | "|" | "~" | " " | """ -S-ESCAPE = "\'" | "\"" | "\?" | "\\" - | "\a" | "\b" | "\f" | "\n" | "\r" | "\t" | "\v" +IDENT = NONDIGIT { DIGIT | NONDIGIT } | Q-IDENT +Q-IDENT = "'" { Q-CHAR | S-ESCAPE | """ } "'" +NONDIGIT = "_" | letters "a" ... "z" | letters "A" ... "Z" +DIGIT = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 +Q-CHAR = NONDIGIT | DIGIT | "!" | "#" | "$" | "%" | "&" | "(" | ")" | "*" | "+" | "," | "-" | "." | "/" | ":" | ";" | "<" | ">" | "=" | "?" | "@" | "[" | "]" | "^" | "{" | "}" | "|" | "~" | " " +S-ESCAPE = "\'" | "\"" | "\?" | "\\" | "\a" | "\b" | "\f" | "\n" | "\r" | "\t" | "\v" \end{lstlisting} -\subsection{Names}\label{names} - -A \firstuse{name}\index{name} is an identifier with a certain interpretation or meaning. -For example, a name may denote an \lstinline!Integer! variable, a \lstinline!Real! variable, a function, a type, etc. -A name may have different meanings in different parts of the code, i.e., different scopes. -The interpretation of identifiers as names is described in more detail in \cref{scoping-name-lookup-and-flattening}. -The meaning of package names is described in more detail in \cref{packages}. - -\begin{example} -A name: \lstinline!Ele.Resistor! -\end{example} +\subsection{Names}\doublelabel{names} -A \firstuse{component reference}\index{component!reference} is an expression containing a sequence of identifiers and indices. -A component reference is equivalent to the referenced object, which must be a component. -A component reference is resolved (evaluated) in the scope of a class (\cref{component-declarations}), or expression for the case of a local iterator variable (\cref{slice-operation}). +A \emph{name} is an identifier with a certain interpretation or meaning. +For example, a name may denote an \lstinline!Integer! variable, a \lstinline!Real! variable, a +function, a type, etc. A name may have different meanings in different +parts of the code, i.e., different scopes. The interpretation of +identifiers as names is described in more detail in \autoref{scoping-name-lookup-and-flattening}. The +meaning of package names is described in more detail in \autoref{packages}. -\begin{example} -A component reference: \lstinline!Ele.Resistor.u[21].r! -\end{example} +\subsection{Modelica Keywords}\doublelabel{modelica-keywords} -\subsection{Modelica Keywords}\label{modelica-keywords} - -The following Modelica \firstuse{keywords}\index{keyword} are reserved words and shall not be used as identifiers, except as listed in \cref{lexical-conventions}: -\begin{center} -\begin{tabular}{l l l l l} +The following Modelica \emph{keywords} are reserved words and may not be +used as identifiers, except as listed in \autoref{lexical-conventions}: +\begin{longtable}[c]{@{}lllll@{}} \lstinline!algorithm! & \lstinline!discrete! & \lstinline!false! & \lstinline!loop! & \lstinline!pure!\\ \hline \lstinline!and! & \lstinline!each! & \lstinline!final! & \lstinline!model! & \lstinline!record!\\ \hline \lstinline!annotation! & \lstinline!else! & \lstinline!flow! & \lstinline!not! & \lstinline!redeclare!\\ \hline @@ -122,22 +121,28 @@ \subsection{Modelica Keywords}\label{modelica-keywords} \lstinline!connector! & \lstinline!equation! & \lstinline!in! & \lstinline!parameter! & \lstinline!type!\\ \hline \lstinline!constant! & \lstinline!expandable! & \lstinline!initial! & \lstinline!partial! & \lstinline!when!\\ \hline \lstinline!constrainedby! & \lstinline!extends! & \lstinline!inner! & \lstinline!protected! & \lstinline!while!\\ \hline -\lstinline!der! & \lstinline!external! & \lstinline!input! & \lstinline!public! & \lstinline!within!\\ -\end{tabular} -\end{center} - -\section{Literal Constants}\label{literal-constants} - -\firstuse{Literals}\index{literal} (or \emph{literal constants}) are unnamed constants used to build expressions, and have different forms depending on their type. -Each of the predefined types in Modelica has a way of expressing unnamed constants of the corresponding type, which is presented in the ensuing subsections. -Additionally, array literals and record literals can be expressed. - -\subsection{Floating Point Numbers}\label{floating-point-numbers} - -A floating point number is expressed as a decimal number in the form of a sequence of decimal digits followed by a decimal point, followed by decimal digits, followed by an exponent indicated by \lstinline!E! or \lstinline!e! followed by a sign and one or more decimal digits. -The various parts can be omitted, see \lstinline[language=grammar]!UNSIGNED-REAL! in~\cref{lexical-conventions} for details and also the examples below. -The minimal recommended range is that of IEEE double precision floating point numbers, for which the largest representable positive number is $1.7976931348623157\times10^{308}$ and the smallest positive number is $2.2250738585072014\times 10^{-308}$. -For example, the following are floating point number literal constants: +\lstinline!der! & \lstinline!external! & \lstinline!input! & \lstinline!public! & \lstinline!within!\\ \hline +\end{longtable} + +\section{Literal Constants}\doublelabel{literal-constants} + +Literal constants are unnamed constants that have different forms +depending on their type. Each of the predefined types in Modelica has a +way of expressing unnamed constants of the corresponding type, which is +presented in the ensuing subsections. Additionally, array literals and +record literals can be expressed. + +\subsection{Floating Point Numbers}\doublelabel{floating-point-numbers} + +A floating point number is expressed as a decimal number in the form of +a sequence of decimal digits followed by a decimal point, followed by decimal digits, +followed by an exponent indicated by E or e followed by a sign +and one or more decimal digits. The various parts can be omitted, see \lstinline!UNSIGNED_REAL! in~\autoref{lexical-conventions} for +details and also the examples below. The minimal recommended range is +that of IEEE double precision floating point numbers, for which the +largest representable positive number is 1.7976931348623157E+308 and the +smallest positive number is 2.2250738585072014E-308. For example, the +following are floating point number literal constants: \begin{lstlisting}[language=modelica] 22.5, 3.141592653589793, 1.2E-35 \end{lstlisting} @@ -151,45 +156,44 @@ \subsection{Floating Point Numbers}\label{floating-point-numbers} Note that \lstinline!13! is not in this list, since it is not a floating point number, but can be converted to a floating point number. -\subsection{Integer Literals}\label{integer-literals} +\subsection{Integer Literals}\doublelabel{integer-literals} -Literals of type \lstinline!Integer! are sequences of decimal digits, e.g.\ as in the integer numbers \lstinline!33!, \lstinline!0!, \lstinline!100!, \lstinline!30030044!. -The range of supported \lstinline!Integer! literals shall be at least large enough to represent the largest positive \lstinline!IntegerType! value, see \cref{integer-type}. +Literals of type \lstinline!Integer! are sequences of decimal digits, e.g. as in the +integer numbers \lstinline!33!, \lstinline!0!, \lstinline!100!, \lstinline!30030044!. The minimal +recommended number range is from -2147483648 to +2147483647 corresponding to a +two's-complement 32-bit integer implementation. \begin{nonnormative} Negative numbers are formed by unary minus followed by an integer literal. \end{nonnormative} -\subsection{Boolean Literals}\label{boolean-literals} - -The two \lstinline!Boolean! literal values are \lstinline!true!\indexinline{true} and \lstinline!false!\indexinline{false}. - -\subsection{Strings}\label{strings} - -String literals appear between double quotes as in \lstinline!"between"!. -Any character in the Modelica language character set (see \cref{lexical-conventions} for allowed characters) apart from double quote (\lstinline!"!) and backslash (\lstinline!\!), including new-line, can be \emph{directly} included in a string without using an escape sequence. -Certain characters in string literals can be represented using escape sequences\index{escape sequence!string literal}, i.e., the character is preceded by a backslash (\lstinline!\!) within the string. -Those characters are: -\begin{center} -\begin{tabular}{c l} -\hline -\tablehead{Character} & \tablehead{Description}\\ -\hline -\hline -\lstinline!\'! & Single quote, may also appear without backslash in string constants\\ -\lstinline!\"! & Double quote\\ -\lstinline!\?! & Question-mark, may also appear without backslash in string constants\\ -\lstinline!\\! & Backslash itself\\ -\lstinline!\a! & Alert (bell, code 7, ctrl-G)\\ -\lstinline!\b! & Backspace (code 8, ctrl-H)\\ -\lstinline!\f! & Form feed (code 12, ctrl-L)\\ -\lstinline!\n! & Newline (code 10, ctrl-J), same as literal newline\\ -\lstinline!\r! & Carriage return (code 13, ctrl-M)\\ -\lstinline!\t! & Horizontal tab (code 9, ctrl-I)\\ -\lstinline!\v! & Vertical tab (code 11, ctrl-K)\\ -\hline -\end{tabular} -\end{center} +\subsection{Boolean Literals}\doublelabel{boolean-literals} + +The two \lstinline!Boolean! literal values are \lstinline!true! and \lstinline!false!. + +\subsection{Strings}\doublelabel{strings} + +String literals appear between double quotes as in \lstinline!"between"!. Any +character in the Modelica language character set (see \autoref{lexical-conventions} for +allowed characters) apart from double quote (\lstinline!"!) and backslash +(\lstinline!\!), including new-line, can be \emph{directly} included +in a string without using an escape code. Certain characters in string +literals can be represented using escape codes, i.e., the character is +preceded by a backslash (\lstinline!\!) within the string. Those +characters are: +\begin{longtable}[c]{@{}ll@{}} +\lstinline!\'! & single quote -- may also appear without backslash in string constants.\\ +\lstinline!\"! & double quote\\ +\lstinline!\?! & question-mark -- may also appear without backslash in string constants.\\ +\lstinline!\\! & backslash itself\\ +\lstinline!\a! & alert (bell, code 7, ctrl-G)\\ +\lstinline!\b! & backspace (code 8, ctrl-H)\\ +\lstinline!\f! & form feed (code 12, ctrl-L)\\ +\lstinline!\n! & newline (code 10, ctrl-J), same as literal newline\\ +\lstinline!\r! & carriage return (code 13, ctrl-M)\\ +\lstinline!\t! & horizontal tab (code 9, ctrl-I)\\ +\lstinline!\v! & vertical tab (code 11, ctrl-K)\\ +\end{longtable} For example, a string literal containing a tab, the words: \emph{This is}, double quote, space, the word: \emph{between}, double quote, space, the word: @@ -199,7 +203,7 @@ \subsection{Strings}\label{strings} \end{lstlisting} Concatenation of string literals in certain situations (see the Modelica -grammar) is denoted by the + operator in Modelica, e.g.\ \lstinline!"a"! + \lstinline!"b"! +grammar) is denoted by the + operator in Modelica, e.g. \lstinline!"a"! + \lstinline!"b"! becomes \lstinline!"ab"!. This is useful for expressing long string literals that need to be written on several lines. @@ -224,18 +228,18 @@ \subsection{Strings}\label{strings} literal. For example, the following statement defines one string that contains (non-printable) newline characters: \begin{lstlisting}[language=modelica] -assert(noEvent(length > s_small), -"The distance between the origin of frame_a and the origin of frame_b +assert(noEvent(length > s_small), " +The distance between the origin of frame_a and the origin of frame_b of a LineForceWithMass component became smaller as parameter s_small (= a small number, defined in the \"Advanced\" menu). The distance is set to s_small, although it is smaller, to avoid a division by zero when computing the direction of the line force.", - level = AssertionLevel.warning); +level = AssertionLevel.warning); \end{lstlisting} \end{nonnormative} -\section{Operator Symbols}\label{operator-symbols} +\section{Operator Symbols}\doublelabel{operator-symbols} The predefined operator symbols are formally defined on page \pageref{lexical-conventions} and -summarized in the table of operators in \cref{operator-precedence-and-associativity}. +summarized in the table of operators in \autoref{operator-precedence-and-associativity}. diff --git a/chapters/library.tex b/chapters/library.tex index 94d22da0c..554bcf650 100644 --- a/chapters/library.tex +++ b/chapters/library.tex @@ -1,4 +1,4 @@ -\chapter{The Modelica Standard Library}\label{the-modelica-standard-library} +\chapter{The Modelica Standard Library}\doublelabel{the-modelica-standard-library} In order that a modeler can quickly build up system models, it is important that libraries of the most commonly used components are @@ -6,12 +6,13 @@ \chapter{The Modelica Standard Library}\label{the-modelica-standard-library} reason, the Modelica Association develops and maintains a growing \emph{Modelica Standard Library} called \lstinline!package Modelica!. For an overview of the current version see -\url{https://github.com/modelica/ModelicaStandardLibrary}. -This is a free library that can be used without essential restrictions, e.g., in +\url{http://doc.modelica.org/help/Modelica_UsersGuide.html} or +\url{http://doc.modelica.org/om/Modelica.UsersGuide.html}. This is a +free library that can be used without essential restrictions, e.g., in commercial Modelica simulation environments. The Modelica Standard Library is tool-neutral, and relies on a small library, ModelicaServices, that each conformant tool must implement to handle -tool-specific couplings e.g.\ for animation. Furthermore, other people +tool-specific couplings e.g. for animation. Furthermore, other people and organizations are developing free and commercial Modelica libraries. For information about these libraries and for downloading the free libraries see \url{https://www.modelica.org/libraries/}. diff --git a/chapters/operatorsandexpressions.tex b/chapters/operatorsandexpressions.tex index 935d5e56d..5c0d03677 100644 --- a/chapters/operatorsandexpressions.tex +++ b/chapters/operatorsandexpressions.tex @@ -1,8 +1,8 @@ -\chapter{Operators and Expressions}\label{operators-and-expressions} +\chapter{Operators and Expressions}\doublelabel{operators-and-expressions} -The lexical units are combined to form even larger building blocks such as \firstuse{expressions}\index{expression} according to the rules given by the \lstinline[language=grammar]!expression! part of the Modelica grammar in \cref{modelica-concrete-syntax}. -For example, they can be built from operators, function references, components, or component references (referring to components) and literals. -Each expression has a type and a variability. +The lexical units are combined to form even larger building blocks such +as expressions according to the rules given by the expression part of +the Modelica grammar in \autoref{modelica-concrete-syntax}. This chapter describes the evaluation rules for expressions, the concept of expression variability, built-in mathematical operators and @@ -12,88 +12,94 @@ \chapter{Operators and Expressions}\label{operators-and-expressions} Expressions can contain variables and constants, which have types, predefined or user defined. The predefined built-in types of Modelica are \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, \lstinline!String!, and enumeration types which are -presented in more detail in \cref{predefined-types-and-classes}. +presented in more detail in \autoref{predefined-types-and-classes}. -\section{Expressions}\label{expressions} +\begin{nonnormative} +The abbreviated predefined type information below is given as background information for the rest of the presentation. +\end{nonnormative} + +\section{Expressions}\doublelabel{expressions} Modelica equations, assignments and declaration equations contain expressions. -Expressions can contain basic operations, \lstinline!+!, \lstinline!-!, \lstinline!*!, \lstinline!/!, \lstinline!^!, etc.\ with -normal precedence as defined in the Table in \cref{operator-precedence-and-associativity} and the grammar -in \cref{modelica-concrete-syntax}. The semantics of the operations is defined for both -scalar and array arguments in \cref{scalar-vector-matrix-and-array-operator-functions}. +Expressions can contain basic operations, \lstinline!+!, \lstinline!-!, \lstinline!*!, \lstinline!/!, \lstinline!^!, etc. with +normal precedence as defined in the Table in \autoref{operator-precedence-and-associativity} and the grammar +in \autoref{modelica-concrete-syntax}. The semantics of the operations is defined for both +scalar and array arguments in \autoref{scalar-vector-matrix-and-array-operator-functions}. It is also possible to define functions and call them in a normal fashion. The function call syntax for both positional and named -arguments is described in \cref{positional-or-named-input-arguments-of-functions} and for vectorized calls in -\cref{initialization-and-binding-equations-of-components-in-functions}. The built-in array functions are given in \cref{array-dimension-lower-and-upper-index-bounds} -and other built-in operators in \cref{built-in-intrinsic-operators-with-function-syntax}. +arguments is described in \autoref{positional-or-named-input-arguments-of-functions} and for vectorized calls in +\autoref{initialization-and-binding-equations-of-components-in-functions}. The built-in array functions are given in \autoref{array-dimension-lower-and-upper-index-bounds} +and other built-in operators in \autoref{built-in-intrinsic-operators-with-function-syntax}. -\section{Operator Precedence and Associativity}\label{operator-precedence-and-associativity} +\section{Operator Precedence and Associativity}\doublelabel{operator-precedence-and-associativity} Operator precedence determines the order of evaluation of operators in an expression. An operator with higher precedence is evaluated before an operator with lower precedence in the same expression. -The following table presents all the expression operators in order of precedence. +The following table presents all the expression operators in order of +precedence from highest to lowest, as derived from the Modelica grammar +in \autoref{modelica-concrete-syntax}. All operators are binary except the postfix operators and +those shown as unary together with \emph{expr}, the conditional +operator, the array construction operator \lstinline!{ }! and concatenation +operator \lstinline![ ]!, and the array range constructor which is either binary + or ternary. Operators with the same precedence occur at the same line of +the table: \begin{table}[H] -% Beware that the array construction operator, normally expressed as \lstinline!{ }! needs escaped braces inside \caption. -% This isn't handled correctly by LaTeXML, as reported here: -% - https://github.com/brucemiller/LaTeXML/issues/1377 -\caption{Operators in order of precedence from highest to lowest, as derived from the Modelica grammar in \cref{modelica-concrete-syntax}. All operators are binary except the postfix operators and those shown as unary together with \emph{expr}, the conditional operator, the array construction operator \lstinline!\{ \}! and concatenation operator \lstinline![ ]!, and the array range constructor which is either binary or ternary. Operators with the same precedence occur at the same table row.}\label{tab:operator-precedence} -\begin{center} -\begin{tabular}{l l l} -\hline -\tablehead{Operator group} & \tablehead{Operator syntax} & \tablehead{Examples}\\ -\hline -\hline -Postfix array index operator & \lstinline![]! & \lstinline!arr[index]!\\ -\hline -Postfix access operator & \lstinline!.! & \lstinline!a.b!\\ -\hline -Postfix function call & \lstinline!$\mathit{funcName}$($\mathit{functionArguments}$)! & \lstinline!sin(4.36)!\\ -\hline -Array construction & \lstinline!{$\mathit{expressions}$}! & \lstinline!{2, 3}!\\ -Horizontal concatenation & \lstinline![$\mathit{expressions}$]! & \lstinline![5, 6]!\\ -Vertical concatenation & \lstinline![$\mathit{expressions}$; $\mathit{expressions}\ldots$]! & \lstinline![2, 3; 7, 8]!\\ -\hline -Exponentiation & \ \lstinline!^! & \lstinline!2 ^ 3!\\ -\hline -Multiplicative & \lstinline!* /! & \lstinline!2 * 3!, \lstinline!2 / 3!\\ -Elementwise multiplicative & \lstinline!.* ./! & \lstinline![1, 2; 3, 4] .* [2, 3; 5, 6]!\\ -\hline -Additive & \lstinline!+ -! & \lstinline!1 + 2!\\ -Additive unary & \lstinline!+$\mathit{expr}$ -$\mathit{expr}$! & \lstinline!-0.5!\\ -Array elementwise additive & \lstinline!.+ .-! & \lstinline![1, 2; 3, 4] .+ [2, 3; 5, 6]!\\ -\hline -Relational & \lstinline!< <= > >= == <>! & \lstinline!a < b!, \lstinline!a <= b!, \lstinline!a > b!, \ldots\\ -\hline -Unary negation & \lstinline!not $\mathit{expr}$! & \lstinline!not b1!\\ -\hline -Logical and & \lstinline!and! & \lstinline!b1 and b2!\\ -\hline -Logical or & \lstinline!or! & \lstinline!b1 or b2!\\ -\hline -\multirow{2}{*}{Array range} & \lstinline!$\mathit{expr}$ : $\mathit{expr}$! & \lstinline!1 : 5!\\ - & \lstinline!$\mathit{expr}$ : $\mathit{expr}$ : $\mathit{expr}$! & \lstinline!start : step : stop!\\ -\hline -Conditional & \lstinline!if $\mathit{expr}$ then $\mathit{expr}$ else $\mathit{expr}$! & \lstinline!if b then 3 else x!\\ -\hline -Named argument & \lstinline!$\mathit{ident}$ = $\mathit{expr}$! & \lstinline!x = 2.26!\\ +\caption{Operators} +\begin{tabular}{|p{5cm}|p{5cm}|p{4cm}|} \hline +\tablehead{Operator Group} & \tablehead{Operator Syntax} & \tablehead{Examples}\\ \hline +postfix array index operator & \lstinline![]! & \lstinline!arr[index]! \\ \hline +postfix access operator & \lstinline!.! & \lstinline!a.b! \\ \hline +postfix function call & \lstinline[mathescape=true]!$\mathit{funcName}$($\mathit{functionArguments}$)! & \lstinline!sin(4.36)! \\ \hline +array construct/concat & \begin{tabular}{@{}p{5cm}@{}} +\lstinline[mathescape=true]!{$\mathit{expressions}$}!\\ +\lstinline[mathescape=true]![$\mathit{expressions}$]!\\ +\lstinline[mathescape=true]![$\mathit{expressions}$; $\mathit{expressions}\ldots$]! +\end{tabular} & \begin{tabular}{@{}p{5cm}@{}} +\lstinline!{2,3}! \\ +\lstinline![5,6]! \\ +\lstinline![2,3; 7,8]! +\end{tabular} \\ \hline +exponentiation & \ \lstinline!^! & \lstinline!2^3! \\ \hline +multiplicative and array elementwise multiplicative & \lstinline!* / .* ./! & \begin{tabular}{@{}p{5cm}@{}} +\lstinline!2*3!, \lstinline!2/3! \\ +\lstinline![1,2;3,4].*[2,3;5,6]! +\end{tabular} \\ \hline +additive and array elementwise additive & \lstinline[mathescape=true]!+ - +$\mathit{expr}$ -$\mathit{expr}$ .+ .-! & \lstinline![1,2;3,4].+[2,3;5,6]!\\ \hline +relational & \lstinline!< <= > >= == <>! & +\lstinline!ab!, \ldots\\ \hline +unary negation & \lstinline[mathescape=true]!not $\mathit{expr}$! & \lstinline!not b1! \\ \hline +logical and & \lstinline!and! & \lstinline!b1 and b2! \\ \hline +logical or & \lstinline!or! & \lstinline!b1 or b2!\\ \hline +array range & \begin{tabular}{@{}p{5cm}@{}} +\lstinline[mathescape=true]!$\mathit{expr}$ : $\mathit{expr}$! \\ +\lstinline[mathescape=true]!$\mathit{expr}$ : $\mathit{expr}$ : $\mathit{expr}$! +\end{tabular} & \begin{tabular}{@{}p{5cm}@{}} +\lstinline!1:5! \\ +\lstinline!start:step:stop! +\end{tabular} \\ \hline +conditional & \lstinline[mathescape=true]!if $\mathit{expr}$ then $\mathit{expr}$ else $\mathit{expr}$! & \lstinline!if b then 3 else x!\\ \hline +named argument & \lstinline[mathescape=true]!$\mathit{ident}$ = $\mathit{expr}$! & \lstinline!x = 2.26!\\ \hline \end{tabular} -\end{center} \end{table} -The conditional operator may also include \lstinline!elseif!-branches. -Equality \lstinline!=! and assignment \lstinline!:=! are not expression operators since they are allowed only in equations and in assignment statements respectively. -All binary expression operators are left associative, except exponentiation which is non-associative. -The array range operator is non-associative. +The conditional operator may also include elseif-clauses. Equality \lstinline!=! and +assignment \lstinline!:=! are not expression operators since they are allowed only +in equations and in assignment statements respectively. All binary +expression operators are left associative, except exponentiation which +is non-associative. The array range operator is non-associative. \begin{nonnormative} -The unary minus and plus in Modelica is slightly different than in Mathematica\footnote{\emph{Mathematica} is a registered trademark of Wolfram Research Inc.} and in MATLAB\footnote{\emph{MATLAB} is -a registered trademark of MathWorks Inc.}, since the following expressions are illegal (whereas in Mathematica and in MATLAB these are valid expressions): +The unary minus and plus in Modelica is slightly different than +in Mathematica and in MATLAB\footnote{MATLAB is a registered trademark + of MathWorks Inc.}, since the following expressions are illegal +(whereas in Mathematica\footnote{Mathematica is a registered trademark + of Wolfram Research Inc.} and in MATLAB these are valid expressions): \begin{lstlisting}[language=modelica] 2*-2 // = -4 in Mathematica/MATLAB; is illegal in Modelica --2 // = 2 in Mathematica/MATLAB; is illegal in Modelica @@ -108,16 +114,21 @@ \section{Operator Precedence and Associativity}\label{operator-precedence-and-as \end{lstlisting} \end{nonnormative} -\section{Evaluation Order}\label{evaluation-order} +\section{Evaluation Order}\doublelabel{evaluation-order} -A tool is free to solve equations, reorder expressions and to not evaluate expressions if their values do not influence the result (e.g.\ short-circuit evaluation of \lstinline!Boolean! expressions). -\lstinline!if!-statements and \lstinline!if!-expressions guarantee that their branches are only evaluated if the appropriate condition is true, but relational operators generating state or time events will during continuous integration have the value from the most recent event. +A tool is free to solve equations, reorder expressions and to not +evaluate expressions if their values do not influence the result (e.g. +short-circuit evaluation of Boolean expressions). If-statements and +if-expressions guarantee that their clauses are only evaluated if the +appropriate condition is true, but relational operators generating state +or time events will during continuous integration have the value from +the most recent event. If a numeric operation overflows the result is undefined. For literals it is recommended to automatically convert the number to another type with greater precision. -\subsection{Example: Guarding Expressions Against Incorrect Evaluation}\label{example-guarding-expressions-against-incorrect-evaluation} +\subsection{Example: Guarding Expressions Against Incorrect Evaluation}\doublelabel{example-guarding-expressions-against-incorrect-evaluation} \begin{example} If one wants to guard an expression against incorrect evaluation, it should be guarded by an \lstinline!if!: @@ -132,30 +143,25 @@ \subsection{Example: Guarding Expressions Against Incorrect Evaluation}\label{ex To guard square against square root of negative number use \lstinline!noEvent!: \begin{lstlisting}[language=modelica] -der(h)=if h>0 then -c*sqrt(h) else 0; // Incorrect -der(h)=if noEvent(h>0) then -c*sqrt(h) else 0; // Correct + der(h)=if h>0 then -c*sqrt(h) else 0; // Incorrect + der(h)=if noEvent(h>0) then -c*sqrt(h) else 0; // Correct \end{lstlisting} \end{example} -\section{Arithmetic Operators}\label{arithmetic-operators} +\section{Arithmetic Operators}\doublelabel{arithmetic-operators} -Modelica supports five binary arithmetic operators that operate on any numerical type: -\begin{center} -\begin{tabular}{c|l} -\tablehead{Operator} & \tablehead{Description} \\ -\hline -\hline +Modelica supports five binary arithmetic operators that operate on any +numerical type: +\begin{longtable}[c]{ll} \lstinline!^! & Exponentiation\\ \lstinline!*! & Multiplication\\ \lstinline!/! & Division\\ \lstinline!+! & Addition\\ \lstinline!-! & Subtraction\\ -\hline -\end{tabular} -\end{center} +\end{longtable} Some of these operators can also be applied to a combination of a scalar -type and an array type, see \cref{scalar-vector-matrix-and-array-operator-functions}. +type and an array type, see \autoref{scalar-vector-matrix-and-array-operator-functions}. The syntax of these operators is defined by the following rules from the Modelica grammar: @@ -176,42 +182,35 @@ \section{Arithmetic Operators}\label{arithmetic-operators} primary [ "^" primary ] \end{lstlisting} -\section{Equality, Relational, and Logical Operators}\label{equality-relational-and-logical-operators} +\section{Equality, Relational, and Logical Operators}\doublelabel{equality-relational-and-logical-operators} -Modelica supports the standard set of relational and logical operators, all of which produce the standard boolean values \lstinline!true! or \lstinline!false!: -\begin{center} -\begin{tabular}{c|l} -\tablehead{Operator} & \tablehead{Description} \\ -\hline -\hline -\lstinline!>! & Greater than\\ -\lstinline!>=! & Greater than or equal\\ -\lstinline!! & greater than\\ +\lstinline!>=! & greater than or equal\\ +\lstinline!! & Inequality\\ -\hline -\end{tabular} -\end{center} +\end{longtable} A single equals sign \lstinline!=! is never used in relational expressions, only in -equations (\cref{equations}, \cref{equality-and-assignment}) and in function calls using named -parameter passing (\cref{positional-or-named-input-arguments-of-functions}). +equations (\autoref{equations}, \autoref{equality-and-assignment}) and in function calls using named +parameter passing (\autoref{positional-or-named-input-arguments-of-functions}). The following logical operators are defined: -\begin{center} -\begin{tabular}{c|l} -\tablehead{Operator} & \tablehead{Description} \\ -\hline -\hline -\lstinline!not!\indexinline{not} & Logical negation (unary operator)\\ -\lstinline!and!\indexinline{and} & Logical \emph{and} (conjunction)\\ -\lstinline!or!\indexinline{or} & Logical \emph{or} (disjunction)\\ -\hline -\end{tabular} -\end{center} +\begin{longtable}[]{ll} +\lstinline!not! & negation, unary operator\\ +\lstinline!and! & logical and\\ +\lstinline!or! & logical or\\ +\end{longtable} + +The grammar rules define the syntax of the relational and logical +operators. -The grammar rules define the syntax of the relational and logical operators. \begin{lstlisting}[language=grammar] logical-expression : logical-term { or logical-term } @@ -237,9 +236,9 @@ \section{Equality, Relational, and Logical Operators}\label{equality-relational- scalar operands of simple types. The result is \lstinline!Boolean! and is true or false if the relation is fulfilled or not, respectively. \item - For operands of type \lstinline!String!, \lstinline!str1 $\mathit{op}$ str2! is for each relational - operator, $\mathit{op}$, defined in terms of the C function \lstinline[language=C]!strcmp! as - \lstinline[language=C]!strcmp(str1, str2) $\mathit{op}$ 0!. + For operands of type \lstinline!String!, \lstinline!str1 op str2! is for each relational + operator, \lstinline!op!, defined in terms of the C-function \lstinline!strcmp! as + \lstinline!strcmp(str1,str2) op 0!. \item For operands of type \lstinline!Boolean!, \lstinline!false < true!. \item @@ -249,19 +248,22 @@ \section{Equality, Relational, and Logical Operators}\label{equality-relational- In relations of the form \lstinline!v1 == v2 or v1 <> v2!, \lstinline!v1! or \lstinline!v2! shall, unless used in a function, not be a subtype of \lstinline!Real!. \begin{nonnormative} - The reason for this rule is that relations with \lstinline!Real! arguments are transformed to state events (see Events, \cref{events-and-synchronization}) and this transformation becomes unnecessarily complicated for the \lstinline!==! and \lstinline!<>! relational operators (e.g.\ two crossing functions instead of one crossing function needed, epsilon strategy needed even at event instants). Furthermore, testing on equality of \lstinline!Real! variables is questionable on machines where the number length in registers is different to number length in main memory. + The reason for this rule is that relations with \lstinline!Real! arguments are transformed to state events (see Events, \autoref{events-and-synchronization}) + and this transformation becomes unnecessarily complicated for the \lstinline!==! and \lstinline!<>! relational operators (e.g. two crossing functions instead + of one crossing function needed, epsilon strategy needed even at event instants). Furthermore, testing on equality of Real variables is questionable on machines + where the number length in registers is different to number length in main memory. \end{nonnormative} \item - Relational operators can generate events, see \cref{discrete-time-expressions}. + Relational operators can generate events, see \autoref{discrete-time-expressions}. \end{itemize} -\section{Miscellaneous Operators and Variables}\label{miscellaneous-operators-and-variables} +\section{Miscellaneous Operators and Variables}\doublelabel{miscellaneous-operators-and-variables} Modelica also contains a few built-in operators which are not standard arithmetic, relational, or logical operators. These are described below, including \lstinline!time!, which is a built-in variable, not an operator. -\subsection{String Concatenation}\label{string-concatenation} +\subsection{String Concatenation}\doublelabel{string-concatenation} Concatenation of strings (see the Modelica grammar) is denoted by the \lstinline!+! operator in Modelica. @@ -270,33 +272,35 @@ \subsection{String Concatenation}\label{string-concatenation} \lstinline!"a" + "b"! becomes \lstinline!"ab"!. \end{example} -\subsection{Array Constructor Operator}\label{array-constructor-operator} +\subsection{Array Constructor Operator}\doublelabel{array-constructor-operator} -The array constructor operator \lstinline!{ $\ldots$ }! is described in \cref{vector-matrix-and-array-constructors}. +The array constructor operator \lstinline[mathescape=true]!{ $\ldots$ }! is described in \autoref{vector-matrix-and-array-constructors}. -\subsection{Array Concatenation Operator}\label{array-concatenation-operator} +\subsection{Array Concatenation Operator}\doublelabel{array-concatenation-operator} -The array concatenation operator \lstinline![ $\ldots$ ]! is described in \cref{array-concatenation}. +The array concatenation operator \lstinline[mathescape=true]![ $\ldots$ ]! is described in \autoref{array-concatenation}. -\subsection{Array Range Operator}\label{array-range-operator} +\subsection{Array Range Operator}\doublelabel{array-range-operator} -The array range constructor operator \lstinline!:! is described in \cref{vector-construction}. +The array range constructor operator \lstinline!:! is described in \autoref{vector-construction}. -\subsection{If-Expressions}\label{if-expressions} +\subsection{If-Expressions}\doublelabel{if-expressions} An expression \begin{lstlisting}[language=modelica] if expression1 then expression2 else expression3 -\end{lstlisting}% -\index{if@\robustinline{if}!expression}\index{then@\robustinline{then}!if-expression@\robustinline{if}-expression}\index{else@\robustinline{else}!if-expression@\robustinline{if}-expression} -is one example of \lstinline!if!-expression. First \lstinline!expression1!, which must be \lstinline!Boolean! expression, is evaluated. -If \lstinline!expression1! is true \lstinline!expression2! is evaluated and is the value of the \lstinline!if!-expression, else \lstinline!expression3! is evaluated and is the value of the \lstinline!if!-expression. -The two expressions, \lstinline!expression2! and \lstinline!expression3!, must be type compatible expressions (\cref{type-compatible-expressions}) giving the type of the \lstinline!if!-expression. -The \lstinline!if!-expressions with \lstinline!elseif!\index{elseif@\robustinline{elseif}!if-expression} are defined by replacing \lstinline!elseif! by \lstinline!else if!. -For short-circuit evaluation see \cref{evaluation-order}. +\end{lstlisting} +is one example of if-expression. First \lstinline!expression1!, which must be +\lstinline!Boolean! expression, is evaluated. If \lstinline!expression1! is true \lstinline!expression2! is +evaluated and is the value of the if-expression, else \lstinline!expression3! is +evaluated and is the value of the if-expression. The two expressions, +\lstinline!expression2! and \lstinline!expression3!, must be type compatible expressions +(\autoref{type-compatible-expressions}) giving the type of the if-expression. If-expressions with +\lstinline!elseif! are defined by replacing \lstinline!elseif! by \lstinline!else if!. For +short-circuit evaluation see \autoref{evaluation-order}. \begin{nonnormative} -\lstinline!elseif! in expressions has been added to the Modelica language for symmetry with \lstinline!if!-equations. +\lstinline!elseif! in expressions has been added to the Modelica language for symmetry with if-clauses. \end{nonnormative} \begin{example} @@ -307,7 +311,7 @@ \subsection{If-Expressions}\label{if-expressions} \end{lstlisting} \end{example} -\subsection{Member Access Operator}\label{member-access-operator} +\subsection{Member Access Operator}\doublelabel{member-access-operator} It is possible to access members of a class instance using dot notation, i.e., the \lstinline!.! operator. @@ -319,7 +323,7 @@ \subsection{Member Access Operator}\label{member-access-operator} notation on the name of the class, not on instances of the class. \end{example} -\subsection{Built-in Variable time}\label{built-in-variable-time} +\subsection{Built-in Variable time}\doublelabel{built-in-variable-time} All declared variables are functions of the independent variable \lstinline!time!. The variable \lstinline!time! is a built-in variable available in all models and @@ -330,19 +334,20 @@ \subsection{Built-in Variable time}\label{built-in-variable-time} final unit = "s"); \end{lstlisting} -The value of the \lstinline!start!-attribute of \lstinline!time! is set to the time instant at which the simulation is started. +The value of the start attribute of time is set to the time instant at +which the simulation is started. \begin{example} \begin{lstlisting}[language=modelica] encapsulated model SineSource import Modelica.Math.sin; - connector OutPort = output Real; - OutPort y = sin(time); // Uses the built-in variable time. + connector OutPort=output Real; + OutPort y=sin(time); // Uses the built-in variable time. end SineSource; \end{lstlisting} \end{example} -\section{Built-in Intrinsic Operators with Function Syntax}\label{built-in-intrinsic-operators-with-function-syntax} +\section{Built-in Intrinsic Operators with Function Syntax}\doublelabel{built-in-intrinsic-operators-with-function-syntax} Certain built-in operators of Modelica have the same syntax as a function call. However, they do not behave as a mathematical function, @@ -356,429 +361,335 @@ \section{Built-in Intrinsic Operators with Function Syntax}\label{built-in-intri operators/functions are available: \begin{itemize} \item - Mathematical functions and conversion functions, see \cref{numeric-functions-and-conversion-functions} + Mathematical functions and conversion functions, see \autoref{numeric-functions-and-conversion-functions} below. \item Derivative and special purpose operators with function syntax, see - \cref{derivative-and-special-purpose-operators-with-function-syntax} below. + \autoref{derivative-and-special-purpose-operators-with-function-syntax} below. \item - Event-related operators with function syntax, see \cref{event-related-operators-with-function-syntax} below. + Event-related operators with function syntax, see \autoref{event-related-operators-with-function-syntax} below. \item - Array operators/functions, see \cref{array-dimension-lower-and-upper-index-bounds}. + Array operators/functions, see \autoref{array-dimension-lower-and-upper-index-bounds}. \end{itemize} Note that when the specification references a function having the name of a built-in function it references the built-in function, not a -user-defined function having the same name, see also \cref{built-in-functions}. With -exception of the built-in \lstinline!String! operator, all operators in this section +user-defined function having the same name, see also \autoref{built-in-functions}. With +exception of built-in operator \lstinline!String(..)!, all operators in this section can only be called with positional arguments. -\subsection{Numeric Functions and Conversion Functions}\label{numeric-functions-and-conversion-functions} - -The mathematical functions and conversion operators are listed below do not generate events. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!abs($v$)! & Absolute value (event-free) & \Cref{modelica:abs} \\ -\lstinline!sign($v$)! & Sign of argument (event-free) & \Cref{modelica:sign} \\ -\lstinline!sqrt($v$)! & Square root & \Cref{modelica:sqrt} \\ -\lstinline!Integer($e$)! & Conversion from enumeration to \lstinline!Integer! & \Cref{modelica:integer-of-enumeration} \\ -\lstinline!EnumTypeName($i$)! & Conversion from \lstinline!Integer! to enumeration & \Cref{modelica:enumeration-of-integer} \\ -\lstinline!String($\ldots$)! & Conversion to \lstinline!String! & \Cref{modelica:to-String} \\ -\hline +\subsection{Numeric Functions and Conversion Functions}\doublelabel{numeric-functions-and-conversion-functions} + +The following mathematical operators and functions, also including some +conversion functions, are predefined in Modelica, and are vectorizable +according to \autoref{scalar-functions-applied-to-array-arguments}, except for the \lstinline!String! function. The +functions which do not trigger events are described in the table below, +whereas the event-triggering mathematical functions are described in +\autoref{event-triggering-mathematical-functions}. + +\begin{longtable}{|p{4.5cm}|p{10cm}|} \hline +\endhead +\lstinline!abs(v)! & Is expanded into \lstinline!noEvent(if v >= 0 then v else -v)!. Argument v needs to be an Integer or Real expression.\\ \hline +\lstinline!sign(v)! & Is expanded into \lstinline!noEvent(if v>0 then 1 else if v<0 then -1 else 0)!. Argument v needs to be an Integer or Real +expression.\\ \hline +\lstinline!sqrt(v)! & Returns the square root of \lstinline!v if v>=0!, otherwise +an error occurs. Argument v needs to be an Integer or Real +expression.\\ \hline + +\lstinline!Integer(e)! & Returns the ordinal number of the expression \lstinline!e! of +enumeration type that evaluates to the enumeration value \lstinline!E.enumvalue!, +where \lstinline!Integer(E.e1)=1!, \lstinline!Integer(E.en)=n!, for an enumeration type +\lstinline!E=enumeration(e1, ..., en)!. See also \autoref{type-conversion-of-enumeration-values-to-string-or-integer}.\\ \hline +\lstinline!EnumTypeName(i)! & +For any enumeration type \lstinline!EnumTypeName!, returns the enumeration +value \lstinline!EnumTypeName!.e such that \lstinline!Integer(EnumTypeName.e) = i!. Refer to the definition of +\lstinline!Integer! above. + +It is an error to attempt to convert values of i that do not correspond +to values of the enumeration type. See also \autoref{type-conversion-of-integer-to-enumeration-values}. +\\ \hline + +\begin{tabular}{@{}p{4.5cm}@{}} +\lstinline!String(b, )!\\ +\lstinline!String(i, )!\\ +\lstinline!String(r,! +\hspace*{1ex}\lstinline!significantDigits=d,! +\hspace*{1ex}\lstinline!)!\\ +\lstinline!String(r, format=s)!\\ +\lstinline!String(e, )! \end{tabular} -\end{center} - -All of these except for the \lstinline!String! conversion operator are vectorizable according to \cref{scalar-functions-applied-to-array-arguments}. - -Additional non-event generating mathematical functions are described in \cref{built-in-mathematical-functions-and-external-built-in-functions}, whereas the event-triggering mathematical functions are described in \cref{event-triggering-mathematical-functions}. - -\begin{functiondefinition}[abs] -\begin{synopsis}\begin{lstlisting} -abs($v$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Expands into \lstinline!noEvent(if $v$ >= 0 then $v$ else -$v$)!. Argument $v$ needs to be an \lstinline!Integer! or \lstinline!Real! expression. -\end{semantics} -\end{functiondefinition} - -\begin{functiondefinition}[sign] -\begin{synopsis}\begin{lstlisting} -sign($v$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Expands into \lstinline!noEvent(if $v$ > 0 then 1 else if $v$ < 0 then -1 else 0)!. Argument $v$ needs to be an \lstinline!Integer! or \lstinline!Real! expression. -\end{semantics} -\end{functiondefinition} - -\begin{functiondefinition}[sqrt] -\begin{synopsis}\begin{lstlisting} -sqrt($v$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Square root of $v$ if $v \geq 0$, otherwise an error occurs. Argument $v$ needs to be an \lstinline!Integer! or \lstinline!Real! expression. -\end{semantics} -\end{functiondefinition} - -\begin{operatordefinition*}[Integer]\label{modelica:integer-of-enumeration}\index{Integer@\robustinline{Integer}!conversion operator} -\begin{synopsis}\begin{lstlisting} -Integer($e$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Ordinal number of the expression $e$ of enumeration type that evaluates to the enumeration value \lstinline!E.enumvalue!, where \lstinline!Integer(E.e1) = 1!, \lstinline!Integer(E.en) = n!, for an enumeration type \lstinline!E = enumeration(e1, $\ldots$, en)!. -See also \cref{type-conversion-of-enumeration-values-to-string-or-integer}. -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[]\label{modelica:enumeration-of-integer}\index{enumeration@\robustinline{enumeration}!conversion operator} -\begin{synopsis}\begin{lstlisting} -EnumTypeName($i$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -For any enumeration type \lstinline!EnumTypeName!, returns the enumeration value \lstinline!EnumTypeName.e! such that $\text{\lstinline!Integer(EnumTypeName.e)!} = i$. Refer to the definition of \lstinline!Integer! above. - -It is an error to attempt to convert values of $i$ that do not correspond to values of the enumeration type. See also \cref{type-conversion-of-integer-to-enumeration-values}. -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[String]\label{modelica:to-String}\index{String@\robustinline{String}!conversion operator} -\begin{synopsis}\begin{lstlisting} -String($b$, ) -String($i$, ) -String($r$, significantDigits=$d$, ) -String($r$, format=$s$) -String($e$, ) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Convert a scalar non-\lstinline!String! expression to a \lstinline!String! representation. The first argument may be a \lstinline!Boolean! $b$, an \lstinline!Integer! $i$, a \lstinline!Real! $r$ or an enumeration value $e$ (\cref{type-conversion-of-enumeration-values-to-string-or-integer}). The other arguments must use named arguments. For \lstinline!Real! expressions the output shall be according to the Modelica grammar. - -The optional \lstinline!! are: -\begin{itemize} -\item - \lstinline!Integer minimumLength = 0!: Minimum length of the resulting string. If necessary, the blank character is used to fill up unused space. -\item - \lstinline!Boolean leftJustified = true!: If true, the converted result is left justified in the string; if false it is right justified in the string. -\item - \lstinline!Integer significantDigits = 6!: Number of significant digits in the result string. -\end{itemize} +& +Convert a scalar non-\lstinline!String! expression to a \lstinline!String! representation. The +first argument may be a \lstinline!Boolean b!, an \lstinline!Integer i!, a \lstinline!Real r! or an +\lstinline!Enumeration e! (\autoref{type-conversion-of-enumeration-values-to-string-or-integer}). The other arguments must use named +arguments. The optional \textless{}options\textgreater{} are: + +\lstinline!Integer minimumLength=0!: minimum length of the resulting string. If +necessary, the blank character is used to fill up unused space. + +\lstinline!Boolean leftJustified = true!: if true, the converted result is left +justified in the string; if false it is right justified in the string. + +For \lstinline!Real! expressions the output shall be according to the Modelica +grammar. \lstinline!Integer significantDigits!=6: defines the number of significant +digits in the result string. \begin{nonnormative} Examples of \lstinline!Real! values formatted with 6 significant digits: \emph{12.3456}, \emph{0.0123456}, \emph{12345600}, \emph{1.23456E-10}. \end{nonnormative} -The \lstinline!format! string corresponding to \lstinline!! is: +The format string corresponding to options is: \begin{itemize} \item - For \lstinline!Real!:\\ - \lstinline!(if leftJustified then "-" else "") + String(minimumLength)!\\ - \lstinline! + "." + String(signficantDigits) + "g"! + for Reals: %\newline + \lstinline!(if leftJustified then "-" else "") + String(minimumLength)+"."+ String(signficantDigits)+"g"!, \item - For \lstinline!Integer!:\\ - \lstinline!(if leftJustified then "-" else "") + String(minimumLength) + "d"! + for Integers: %\newline + \lstinline!(if leftJustified then "-" else "")+ String(minimumLength)+"d"!. \end{itemize} -Form of the \lstinline!format! string: According to ANSI-C the format string specifies one conversion specifier (excluding the leading \%), shall not contain length modifiers, and shall not use `\lstinline!*!' for width and/or precision. For all numeric values the format specifiers `\lstinline!f!', `\lstinline!e!', `\lstinline!E!', `\lstinline!g!', `\lstinline!G!' are allowed. For integral values it is also allowed to use the `\lstinline!d!', `\lstinline!i!', `\lstinline!o!', `\lstinline!x!', `\lstinline!X!', `\lstinline!u!', and `\lstinline!c!' format specifiers (for non-integral values a tool may round, truncate or use a different format if the integer conversion characters are used). - -The `\lstinline!x!'/`\lstinline!X!' formats (hexa-decimal) and \lstinline!c! (character) for \lstinline!Integer! values give results that do not agree with the Modelica grammar. -\end{semantics} -\end{operatordefinition*} - - -\subsection{Event Triggering Mathematical Functions}\label{event-triggering-mathematical-functions} - -The operators listed below trigger events if used outside of a \lstinline!when!-clause and outside of a clocked discrete-time partition (see \cref{clocked-discrete-time-and-clocked-discretized-continuous-time-partition}). -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!div($x$, $y$)! & Division with truncation toward zero & \Cref{modelica:div} \\ -\lstinline!mod($x$, $y$)! & Integer modulus & \Cref{modelica:mod} \\ -\lstinline!rem($x$, $y$)! & Integer remainder & \Cref{modelica:rem} \\ -\lstinline!ceil($x$)! & Smallest integer \lstinline!Real! not less than $x$ & \Cref{modelica:ceil} \\ -\lstinline!floor($x$)! & Largest integer \lstinline!Real! not greater than $x$ & \Cref{modelica:floor} \\ -\lstinline!integer($x$)! & Largest \lstinline!Integer! not greater than $x$ & \Cref{modelica:integer} \\ -\hline -\end{tabular} -\end{center} - -These expression for \lstinline!div!, \lstinline!ceil!, \lstinline!floor!, and \lstinline!integer! are event generating expression. The event generating expression for \lstinline!mod(x,y)! is \lstinline!floor(x/y)!, and for \lstinline!rem(x,y)! it is \lstinline!div(x,y)! -- i.e.\ events are not generated when \lstinline!mod! or \lstinline!rem! changes continuously in an interval, but when they change discontinuously from one interval to the next. +Format string: According to ANSI-C the format string specifies one +conversion specifier (excluding the leading \%), may not contain length +modifiers, and may not use `\lstinline!*!' for width and/or precision. For all +numeric values the format specifiers `\lstinline!f!', `\lstinline!e!', `\lstinline!E!', `\lstinline!g!', `\lstinline!G!' are allowed. For +integral values it is also allowed to use the `\lstinline!d!', `\lstinline!i!', `\lstinline!o!', `\lstinline!x!', `\lstinline!X!', `\lstinline!u!', and +`\lstinline!c!' format specifiers (for non-integral values a tool may~round, truncate +or use a different format if the integer conversion characters are +used). + +The x,X-formats (hexa-decimal)~and c (character) for Integers does not +lead to input~that agrees with the Modelica-grammar.\\ \hline +\end{longtable} + +\subsubsection{Event Triggering Mathematical Functions}\doublelabel{event-triggering-mathematical-functions} + +The built-in operators in this section trigger events if used outside of +a when-clause and outside of a clocked discrete-time partition (see +\autoref{clocked-discrete-time-and-clocked-discretized-continuous-time-partition}). +These expression for \lstinline!div!, \lstinline!ceil!, \lstinline!floor!, and \lstinline!integer! are +event generating expression. The event generating expression for +\lstinline!mod(x,y)! is \lstinline!floor(x/y)!, and for \lstinline!rem(x,y)! it is \lstinline!div(x,y)! --- i.e. events +are not generated when \lstinline!mod! or \lstinline!rem! changes continuously in an interval, +but when they change discontinuously from one interval to the next. \begin{nonnormative} -If this is not desired, the \lstinline!noEvent! operator can be applied to them. E.g.\ \lstinline!noEvent(integer(v))!. +If this is not desired, the \lstinline!noEvent! function can be applied to them. E.g. \lstinline!noEvent(integer(v))!. \end{nonnormative} -\begin{operatordefinition}[div] -\begin{synopsis}\begin{lstlisting} -div($x$, $y$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Algebraic quotient $x / y$ with any fractional part discarded (also known as truncation toward zero). -\begin{nonnormative} -This is defined for \lstinline!/! in C99; in C89 the result for negative numbers is implementation-defined, so the standard function \lstinline[language=C]!div! must be used. -\end{nonnormative} -Result and arguments shall have type \lstinline!Real! or \lstinline!Integer!. If either of the arguments is \lstinline!Real! the result is \lstinline!Real! otherwise \lstinline!Integer!. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[mod] -\begin{synopsis}\begin{lstlisting} -mod($x$, $y$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Integer modulus of $x / y$, i.e. \lstinline!mod($x$, $y$) = $x$ - floor($x$ / $y$) * $y$!. Result and arguments shall have type \lstinline!Real! or \lstinline!Integer!. If either of the arguments is \lstinline!Real! the result is \lstinline!Real! otherwise \lstinline!Integer!. -\begin{nonnormative} -Note, outside of a \lstinline!when!-clause state events are triggered when the return value changes discontinuously. Examples: \lstinline!mod(3, 1.4) = 0.2!, \lstinline!mod(-3, 1.4) = 1.2!, \lstinline!mod(3, -1.4) = -1.2!. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[rem] -\begin{synopsis}\begin{lstlisting} -rem($x$, $y$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Integer remainder of $x / y$, such that \lstinline!div($x$, $y$) * $y$ + rem($x$, $y$) = $x$!. Result and arguments shall have type \lstinline!Real! or \lstinline!Integer!. If either of the arguments is \lstinline!Real! the result is \lstinline!Real! otherwise \lstinline!Integer!. -\begin{nonnormative} -Note, outside of a \lstinline!when!-clause state events are triggered when the return value changes discontinuously. Examples: \lstinline!rem(3, 1.4) = 0.2!, \lstinline!rem(-3, 1.4) = -0.2!. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[ceil] -\begin{synopsis}\begin{lstlisting} -ceil($x$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Smallest integer not less than $x$. Result and argument shall have type \lstinline!Real!. +\begin{longtable}{|p{2cm}|p{12cm}|} \hline +\endhead +\lstinline!div(x,y)! & Returns the algebraic quotient \lstinline!x/y! with any fractional part +discarded (also known as truncation toward zero). \begin{nonnormative} -Note, outside of a \lstinline!when!-clause state events are triggered when the return value changes discontinuously. +This is defined for \lstinline!/! in C99; in C89 the result for negative numbers is implementation-defined, so the standard function \lstinline!div()! must be used. \end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[floor] -\begin{synopsis}\begin{lstlisting} -floor($x$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Largest integer not greater than $x$. Result and argument shall have type \lstinline!Real!. -\begin{nonnormative} -Note, outside of a \lstinline!when!-clause state events are triggered when the return value changes discontinuously. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[integer] -\begin{synopsis}\begin{lstlisting} -integer($x$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Largest integer not greater than $x$. The argument shall have type \lstinline!Real!. The result has type \lstinline!Integer!. -\begin{nonnormative} -Note, outside of a \lstinline!when!-clause state events are triggered when the return value changes discontinuously. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\subsection{Elementary Mathematical Functions}\label{built-in-mathematical-functions-and-external-built-in-functions} - -The functions listed below are elementary mathematical functions. Tools are expected to utilize well known properties of these functions (derivatives, inverses, etc) for symbolic processing of expressions and equations. -\begin{center} -\begin{tabular}{l|l l} +Result and arguments shall have type \lstinline!Real! or \lstinline!Integer!. If +either of the arguments is \lstinline!Real! the result is \lstinline!Real! otherwise +\lstinline!Integer!.\\ \hline +\lstinline!mod(x,y)! & Returns the integer modulus of \lstinline!x/y!, i.e. +\lstinline!mod(x,y)=x-floor(x/y)*y!. Result and arguments shall have type \lstinline!Real! or +\lstinline!Integer!. If either of the arguments is \lstinline!Real! the result is \lstinline!Real! otherwise +\lstinline!Integer!. +\par +\begin{nonnormative*} +Note, outside of a when-clause state events are triggered when the return value changes discontinuously. Examples: +\lstinline!mod(3,1.4)=0.2!, \lstinline!mod(-3,1.4)=1.2!, \lstinline!mod(3,-1.4)=-1.2!. +\end{nonnormative*} +\\ \hline +\lstinline!rem(x,y)! & Returns the integer remainder of \lstinline!x/y!, such that \lstinline!div(x,y)*y + rem(x, y) = x!. Result and arguments shall have type \lstinline!Real! or \lstinline!Integer!. If +either of the arguments is \lstinline!Real! the result is \lstinline!Real! otherwise \lstinline!Integer!. +\par +\begin{nonnormative*} +Note, outside of a when-clause state events are triggered when the return value changes discontinuously. Examples: +\lstinline!rem(3,1.4)=0.2!, \lstinline!rem(-3,1.4)=-0.2! +\end{nonnormative*} +\\ \hline +\lstinline!ceil(x)! & Returns the smallest integer not less than \lstinline!x!. Result and +argument shall have type \lstinline!Real!. +\par +\begin{nonnormative*} +Note, outside of a when-clause state events are triggered when the return value changes discontinuously. +\end{nonnormative*} +\\ \hline +\lstinline!floor(x)! & Returns the largest integer not greater than \lstinline!x!. Result and +argument shall have type \lstinline!Real!. +\par +\begin{nonnormative*} +Note, outside of a when-clause state events are triggered when the return value changes discontinuously. +\end{nonnormative*} +\\ \hline +\lstinline!integer(x)! & Returns the largest integer not greater +than \lstinline!x!. The argument shall have type \lstinline!Real!. The result has type +\lstinline!Integer!. +\par +\begin{nonnormative*} +Note, outside of a when-clause state events are triggered when the return value changes discontinuously. +\end{nonnormative*} +\\ \hline +\end{longtable} + +\subsubsection{Built-in Mathematical Functions and External Built-in Functions}\doublelabel{built-in-mathematical-functions-and-external-built-in-functions} + +The following built-in mathematical functions are available in Modelica +and can be called directly without any package prefix added to the +function name. They are also available as external built-in functions in +the \lstinline!Modelica.Math! library. + +\begin{longtable}{|l|p{8cm}|} +\hline \endhead +\lstinline!sin(x)! & sine\\ \hline +\lstinline!cos(x)! & cosine\\ \hline +\lstinline!tan(x)! & tangent ($x$ shall not be: ..., -$\pi$/2, $\pi$/2, 3$\pi$/2, ...)\\ \hline +\lstinline!asin(x)! & inverse sine (-1 $\le x \le$ 1)\\ \hline +\lstinline!acos(x)! & inverse cosine (-1 $\le x \le$ 1)\\ \hline +\lstinline!atan(x)! & inverse tangent\\ \hline +\lstinline!atan2(y, x)! & the \lstinline!atan2(y, x)! function calculates the principal value of the arc tangent of $y/x$, using the signs of the two arguments to determine the quadrant of the result\\ \hline +\lstinline!sinh(x)! & hyperbolic sine\\ \hline +\lstinline!cosh(x)! & hyperbolic cosine\\ \hline +\lstinline!tanh(x)! & hyperbolic tangent\\ \hline +\lstinline!exp(x)! & exponential, base $e$\\ \hline +\lstinline!log(x)! & natural (base $e$) logarithm ($x > 0$)\\ \hline +\lstinline!log10(x)! & base 10 logarithm ($x > 0$)\\ \hline +\end{longtable} + +\subsection{Derivative and Special Purpose Operators with Function Syntax}\doublelabel{derivative-and-special-purpose-operators-with-function-syntax} + +The following derivative operator and special purpose operators with +function syntax are predefined. The special purpose operators with +function syntax where the call below uses named arguments can be called +with named arguments (with the specified names), or with positional +arguments (the inputs of the functions are in the order given in the +calls below). + +\begin{longtable}{|p{5.1cm}|p{8cm}|} +\hline \endhead + +\lstinline!der!(expr) & +The time derivative of \lstinline!expr!. If the expression \lstinline!expr! is a +scalar it needs to be a subtype of Real. The expression and all its +time-varying subexpressions must be continuous and semi-differentiable. +If \lstinline!expr! is an array, the operator +is applied to all elements of the array. For non-scalar arguments the +function is vectorized according to \autoref{vectorized-calls-of-functions}. +\par +\begin{nonnormative*} +For Real parameters and constants the result is a zero scalar or array of the same size as the variable. +\end{nonnormative*} +\\ \hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!sin($x$)! \indexinline{sin} & Sine & \\ -\lstinline!cos($x$)! \indexinline{cos} & Cosine & \\ -\lstinline!tan($x$)! \indexinline{tan} & Tangent ($x$ shall not be: $\ldots$, -$\pi/2$, $\pi/2$, $3\pi/2$, $\ldots$) & \\ -\lstinline!asin($x$)! \indexinline{asin} & Inverse sine ($-1 \le x \le 1$) & \\ -\lstinline!acos($x$)! \indexinline{acos} & Inverse cosine ($-1 \le x \le 1$) & \\ -\lstinline!atan($x$)! \indexinline{atan} & Inverse tangent & \\ -\lstinline!atan2($y$, $x$)! \indexinline{atan2} & Principal value of the arc tangent of $y/x$ & \Cref{modelica:atan2} \\ -\lstinline!sinh($x$)! \indexinline{sinh} & Hyperbolic sine & \\ -\lstinline!cosh($x$)! \indexinline{cosh} & Hyperbolic cosine & \\ -\lstinline!tanh($x$)! \indexinline{tanh} & Hyperbolic tangent & \\ -\lstinline!exp($x$)! \indexinline{exp} & Exponential, base $\mathrm{e}$ & \\ -\lstinline!log($x$)! \indexinline{log} & Natural (base $\mathrm{e}$) logarithm ($x > 0$) & \\ -\lstinline!log10($x$)! \indexinline{log10} & Base 10 logarithm ($x > 0$) & \\ -\hline -\end{tabular} -\end{center} -These functions are the only ones that can also be called using the deprecated \lstinline!"builtin"! external language, see \cref{external-function-interface}. +\begin{tabular}{@{}p{5.1cm}@{}} + +% delay +\lstinline!delay(expr,delayTime,delayMax)!\\ +\lstinline!delay(expr,delayTime)! +\end{tabular} & +Returns: \lstinline!expr(time-delayTime)! for \lstinline!time>time.start + delayTime! and \lstinline!expr(time.start)! for \lstinline!time <= time.start + delayTime!. The arguments, i.e., \lstinline!expr!, \lstinline!delayTime! and \lstinline!delayMax!, need to be +subtypes of Real. \lstinline!delayMax! needs to be additionally a parameter +expression. The following relation shall hold: \lstinline!0 <= delayTime <= delayMax!, otherwise an error occurs. If \lstinline!delayMax! is not +supplied in the argument list, \lstinline!delayTime! needs to be a parameter +expression. See also \autoref{delay}. For non-scalar arguments the +function is vectorized according to \autoref{vectorized-calls-of-functions}.\\ +\hline -\begin{nonnormative} -End user oriented information about the elementary mathematical functions can be found for the corresponding functions in the \lstinline!Modelica.Math! package. -\end{nonnormative} +% cardinality +\lstinline!cardinality(c)! & +\begin{nonnormative*} +This is a deprecated operator. It should no longer be used, since it will be removed in one of the next Modelica releases. +\end{nonnormative*} -\begin{functiondefinition}[atan2] -\begin{synopsis}\begin{lstlisting} -atan2($y$, $x$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Principal value of the arc tangent of $y/x$, using the signs of the two arguments to determine the quadrant of the result. The result $\varphi$ is in the interval $\left[-\pi,\, \pi\right]$ and satisfies: -\begin{equation*} -\begin{aligned} -\abs{(x,\, y)}\, \cos(\varphi) &= x\\ -\abs{(x,\, y)}\, \sin(\varphi) &= y -\end{aligned} -\end{equation*} -\end{semantics} -\end{functiondefinition} - -\subsection{Derivative and Special Purpose Operators with Function Syntax}\label{derivative-and-special-purpose-operators-with-function-syntax} - -The operators listed below include the derivative operator and special purpose operators with function syntax. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!der($\mathit{expr}$)! & Time derivative & \Cref{modelica:der} \\ -\lstinline!delay($\mathit{expr}$, $\ldots$)! & Time delay & \Cref{modelica:delay} \\ -\lstinline!cardinality($c$)! & Number of occurrences in \lstinline!connect!-equations & \Cref{modelica:cardinality} \\ -\lstinline!homotopy($\mathit{actual}$, $\mathit{simplified}$)! & Homotpy initialization & \Cref{modelica:homotopy} \\ -\lstinline!semiLinear($x$, $k^{+}$, $k^{-}$)! & Sign-dependent slope & \Cref{modelica:semiLinear} \\ -\lstinline!inStream($v$)! & Stream variable flow into component & \Cref{modelica:inStream} \\ -\lstinline!actualStream($v$)! & Actual value of stream variable & \Cref{modelica:actualStream} \\ -\lstinline!spatialDistribution($\ldots$)! & Variable-speed transport & \Cref{modelica:spatialDistribution} \\ -\lstinline!getInstanceName()! & Name of instance at call site & \Cref{modelica:getInstanceName} \\ +Returns the number of (inside and outside) occurrences of connector +instance \lstinline!c! in a connect-equation as an \lstinline!Integer! number. See also \autoref{cardinality-deprecated}.\\ \hline -\end{tabular} -\end{center} - -The special purpose operators with function syntax where the call below uses named arguments can be called with named arguments (with the specified names), or with positional arguments (the inputs of the functions are in the order given in the calls below). -\begin{operatordefinition}[der] -\begin{synopsis}\begin{lstlisting} -der($\mathit{expr}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The time derivative of $\mathit{expr}$. If the expression $\mathit{expr}$ is a scalar it needs to be a subtype of \lstinline!Real!. The expression and all its time-varying subexpressions must be continuous and semi-differentiable. If $\mathit{expr}$ is an array, the operator is applied to all elements of the array. For non-scalar arguments the function is vectorized according to \cref{vectorized-calls-of-functions}. -\begin{nonnormative} -For \lstinline!Real! parameters and constants the result is a zero scalar or array of the same size as the variable. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[delay] -\begin{synopsis}\begin{lstlisting} -delay($\mathit{expr}$, $\mathit{delayTime}$, $\mathit{delayMax}$) -delay($\mathit{expr}$, $\mathit{delayTime}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Evaluates to \lstinline!$\mathit{expr}$(time - $\mathit{delayTime}$)! for $\text{\lstinline!time!} > \text{\lstinline!time.start!} + \mathit{delayTime}$ and \lstinline!$\mathit{expr}$(time.start)! for $\text{\lstinline!time!} \leq \text{\lstinline!time.start!} + \mathit{delayTime}$. The arguments, i.e., $\mathit{expr}$, $\mathit{delayTime}$ and $\mathit{delayMax}$, need to be subtypes of \lstinline!Real!. $\mathit{delayMax}$ needs to be additionally a parameter expression. The following relation shall hold: $0 \leq \mathit{delayTime} \leq \mathit{delayMax}$, otherwise an error occurs. If $\mathit{delayMax}$ is not supplied in the argument list, $\mathit{delayTime}$ needs to be a parameter expression. For non-scalar arguments the function is vectorized according to \cref{vectorized-calls-of-functions}. For further details, see \cref{delay}. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[cardinality] -\begin{synopsis}\begin{lstlisting} -cardinality($c$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\begin{nonnormative} -This is a deprecated operator. It should no longer be used, since it will be removed in one of the next Modelica releases. -\end{nonnormative} -Returns the number of (inside and outside) occurrences of connector instance $c$ in a \lstinline!connect!-equation as an \lstinline!Integer! number. For further details, see \cref{cardinality-deprecated}. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[homotopy] -\begin{synopsis}\begin{lstlisting} -homotopy(actual=$\mathit{actual}$, simplified=$\mathit{simplified}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The scalar expressions $\mathit{actual}$ and $\mathit{simplified}$ are subtypes of \lstinline!Real!. A Modelica translator should map this operator into either of the two forms: +% homotopy +\lstinline!homotopy(actual=actual,!\\ +\lstinline! simplified=simplified)! & The scalar expressions \lstinline!actual! and \lstinline!simplified! are subtypes of +\lstinline!Real!. A Modelica translator should map this operator into either of the two forms: \begin{enumerate} \item - Returns $\mathit{actual}$ (trivial implementation). + Returns \lstinline!actual! (trivial implementation). \item - In order to solve algebraic systems of equations, the operator might during the solution process return a combination of the two arguments, ending at actual. + In order to solve algebraic systems of equations, the operator might + during the solution process return a combination of the two arguments, + ending at actual. \begin{example} - $\mathit{actual} \cdot \lambda + \mathit{simplified} \cdot (1 - \lambda)$, where $\lambda$ is a homotopy parameter going from 0 to 1. + \lstinline!actual*lambda + simplified*(1-lambda)!, where \lstinline!lambda! is a homotopy parameter going from 0 to 1. \end{example} - The solution must fulfill the equations for \lstinline!homotopy! returning $\mathit{actual}$. + The solution must fulfill the equations for homotopy returning \lstinline!actual!. \end{enumerate} -For non-scalar arguments the function is vectorized according to \cref{scalar-functions-applied-to-array-arguments}. For further details, see \cref{homotopy}. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[semiLinear] -\begin{synopsis}\begin{lstlisting} -semiLinear($x$, $k^{+}$, $k^{-}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns: \lstinline!smooth(0, if $x$ >= 0 then $k^{+}$ * $x$ else $k^{-}$ * $x$)!. The result is of type \lstinline!Real!. For non-scalar arguments the function is vectorized according to \cref{vectorized-calls-of-functions}. For further details, see \cref{semilinear} (especially in the case when $x = 0$). -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[inStream] -\begin{synopsis}\begin{lstlisting} -inStream($v$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\lstinline!inStream($v$)! is only allowed for stream variables $v$ defined in stream connectors, and is the value of the stream variable $v$ close to the connection point assuming that the flow is from the connection point into the component. This value is computed from the stream connection equations of the flow variables and of the stream variables. The operator is vectorizable. For further details, see \cref{stream-operator-instream-and-connection-equations}. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[actualStream] -\begin{synopsis}\begin{lstlisting} -actualStream($v$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\lstinline!actualStream($v$)! returns the actual value of the stream variable $v$ for any flow direction. The operator is vectorizable. For further details, see \cref{stream-operator-actualstream}. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[spatialDistribution] -\begin{synopsis}\begin{lstlisting} -spatialDistribution( - in0=$\mathit{in0}$, in1=$\mathit{in1}$, x=$x$, - positiveVelocity=$\ldots$, - initialPoints=$\ldots$, - initialValues=$\ldots$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\lstinline!spatialDistribution! allows approximation of variable-speed transport of properties. For further details, see \cref{spatialdistribution}. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[getInstanceName] -\begin{synopsis}\begin{lstlisting} -getInstanceName() -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns a string with the name of the model/block that is simulated, appended with the fully qualified name of the instance in which this function is called. For further details, see \cref{getinstancename}. -\end{semantics} -\end{operatordefinition} + +See also \autoref{homotopy}. For non-scalar arguments the function is +vectorized according to \autoref{scalar-functions-applied-to-array-arguments}.\\ +\hline + +% semiLinear +\begin{tabular}{@{}p{5.1cm}@{}} +\lstinline!semiLinear(x,!\\ +\lstinline! positiveSlope,!\\ +\lstinline! negativeSlope)!\\ +\end{tabular}& +Returns: +\lstinline!smooth(0, if x>=0 then positiveSlope*x else negativeSlope*x)!. +The result is of type \lstinline!Real!. See \autoref{semilinear} (especially in +the case when $x = 0$). For non-scalar arguments the function is +vectorized according to \autoref{vectorized-calls-of-functions}.\\ +\hline + +% inStream +\lstinline!inStream(v)! & The operator \lstinline!inStream(v)! is only allowed on stream +variables v defined in stream connectors, and is the value of the stream +variable v close to the connection point assuming that the flow is from +the connection point into the component. This value is computed from the +stream connection equations of the flow variables and of the stream +variables. The operator is vectorizable. For more details see \autoref{stream-operator-instream-and-connection-equations}.\\ +\hline + +% actualStream +\lstinline!actualStream(v)! & The \lstinline!actualStream(v)! operator returns the actual value +of the stream variable v for any flow direction. The operator is +vectorizable. For more details, see \autoref{stream-operator-actualstream}.\\ +\hline + +% spatialDistribution +\begin{tabular}{@{}p{5.1cm}@{}} +\lstinline!spatialDistribution(!\\ +\lstinline! in0=in0, in1=in1, x=x,!\\ +\lstinline! positiveVelocity=...,!\\ +\lstinline! initialPoints=...,!\\ +\lstinline! initialValues=...)! +\end{tabular} & +The \lstinline!spatialDistribution(...)! operator allows approximation of +variable-speed transport of properties, see \autoref{spatialdistribution}.\\ +\hline + +% getInstanceName +\lstinline!getInstanceName()! & Returns a string with the name of the model/block +that is simulated, appended with the fully qualified name of the +instance in which this function is called, see \autoref{getinstancename}.\\ +\hline +\end{longtable} A few of these operators are described in more detail in the following. -\subsubsection{delay}\label{delay} +\subsubsection{delay}\doublelabel{delay} \begin{nonnormative} -\lstinline!delay! allows a numerical sound +The \lstinline!delay()! operator allows a numerical sound implementation by interpolating in the (internal) integrator polynomials, as well as a more simple realization by interpolating linearly in a buffer containing past values of expression expr. Without further information, the complete time history of the delayed signals needs to be stored, because the delay time may change during simulation. To avoid excessive storage requirements and to enhance efficiency, the -maximum allowed delay time has to be given via $\mathit{delayMax}$. +maximum allowed delay time has to be given via \lstinline!delayMax!. This gives an upper bound on the values of the delayed signals which have to be stored. For real-time simulation where fixed step size integrators are used, this information is sufficient to allocate the necessary storage for the internal buffer before the simulation starts. For variable step size integrators, the buffer size is dynamic during -integration. In principle, \lstinline!delay! could break algebraic +integration. In principle, a \lstinline!delay! operator could break algebraic loops. For simplicity, this is not supported because the minimum delay time has to be give as additional argument to be fixed at compile time. Furthermore, the maximum step size of the integrator is limited by this @@ -786,7 +697,7 @@ \subsubsection{delay}\label{delay} buffer. \end{nonnormative} -\subsubsection{spatialDistribution}\label{spatialdistribution} +\subsubsection{spatialDistribution}\doublelabel{spatialdistribution} \begin{nonnormative} Many applications involve the modelling of variable-speed @@ -794,18 +705,20 @@ \subsubsection{spatialDistribution}\label{spatialdistribution} system is to approximate it by an ODE, but this requires a large number of state variables and might introduce either numerical diffusion or numerical oscillations. Another option is to use a built-in operator -that keeps track of the spatial distribution of $z(x, t)$, by suitable +that keeps track of the spatial distribution of z(x, t), by suitable sampling, interpolation, and shifting of the stored distribution. In this case, the internal state of the operator is hidden from the ODE solver. \end{nonnormative} -\lstinline!spatialDistribution! allows the infinite-dimensional problem below to be solved efficiently with good accuracy -\begin{align*} -\frac{\partial z(y,t)}{\partial t}+v(t)\frac{\partial z(y,t)}{\partial y} &= 0.0\\ -z(0.0, t) &= \mathrm{in}_0(t) \text{ if $v\geq 0$}\\ -z(1.0, t) &= \mathrm{in}_1(t) \text{ if $v<0$} -\end{align*} +The \lstinline!spatialDistribution!() operator allows to approximate efficiently the +solution of the infinite-dimensional problem + +\begin{eqnarray*} +\frac{\partial z(y,t)}{\partial t}+v(t)\frac{\partial z(y,t)}{\partial y}&=&0.0\\ +z(0.0, t)=\mathrm{in}_0(t) \text{ if $v\ge 0$}\\ +z(1.0, t)=\mathrm{in}_1(t) \text{ if $v<0$} +\end{eqnarray*} where $z(y, t)$ is the transported quantity, $y$ is the normalized spatial coordinate ($0.0 \le y \le 1.0$), $t$ is the time, $v(t)=\mathrm{der}(x)$ is the normalized @@ -817,20 +730,29 @@ \subsubsection{spatialDistribution}\label{spatialdistribution} initialPoints = {0.0, 1.0}, initialValues = {0.0, 0.0}); \end{lstlisting} -where \lstinline!in0!, \lstinline!in1!, \lstinline!out0!, \lstinline!out1!, \lstinline!x!, \lstinline!v! are all subtypes of \lstinline!Real!, \lstinline!positiveVelocity! is a \lstinline!Boolean!, \lstinline!initialPoints! and \lstinline!initialValues! are arrays of subtypes of \lstinline!Real! of equal size, containing the y coordinates and the $z$ values of a finite set of points describing the initial distribution of $z(y, \mathit{t0})$. -The \lstinline!out0! and \lstinline!out1! are given by the solutions at $z(0.0, t)$ and $z(1.0, t)$; and \lstinline!in0! and \lstinline!in1! are the boundary conditions at $z(0.0, t)$ and $z(1.0, t)$ (at each point in time only one of \lstinline!in0! and \lstinline!in1! is used). -Elements in the \lstinline!initialPoints! array must be sorted in non-descending order. -The operator can not be vectorized according to the vectorization rules described in \cref{scalar-functions-applied-to-array-arguments}. -The operator can be vectorized only with respect to the arguments \lstinline!in0! and \lstinline!in1! (which must have the same size), returning vectorized outputs \lstinline!out0! and \lstinline!out1! of the same size; the arguments \lstinline!initialPoints! and \lstinline!initialValues! are vectorized accordingly. - -The solution, $z$, can be described in terms of characteristics: -\begin{equation*} -z(y+\int_{t}^{t+\beta} v(\alpha) \mathrm{d}\alpha, t+\beta) = z(y, t),\quad\text{for all $\beta$ as long as staying inside the domain} -\end{equation*} - -This allows the direct computation of the solution based on interpolating the boundary conditions. - -\lstinline!spatialDistribution! can be described in terms of the pseudo-code given as a block: +where \lstinline!in0!, \lstinline!in1!, \lstinline!out0!, \lstinline!out1!, \lstinline!x!, \lstinline!v! are all subtypes of Real, +\lstinline!positiveVelocity! is a Boolean, \lstinline!initialPoints! and \lstinline!initialValues! are +arrays of subtypes of Real of equal size, containing the y coordinates +and the $z$ values of a finite set of points describing the initial +distribution of $z(y, \mathit{t0})$. The \lstinline!out0! and \lstinline!out1! are given by +the solutions at $z(0.0, t)$ and $z(1.0, t)$; and \lstinline!in0! and \lstinline!in1! +are the boundary conditions at $z(0.0, t)$ and $z(1.0, t)$ (at +each point in time only one of in0 and in1 is used). Elements in the +initialPoints array must be sorted in non-descending order. The operator +can not be vectorized according to the vectorization rules described in +\autoref{scalar-functions-applied-to-array-arguments}. The operator can be vectorized only with respect to the +arguments in0 and in1 (which must have the same size), returning +vectorized outputs out0 and out1 of the same size; the arguments +initialPoints and initialValues are vectorized accordingly. + +The solution, z(..), can be described in terms of characteristics:\\ +$z(y+\int_t^{t+\beta}v(\alpha)d\alpha,t+\beta)=z(y,t),$ for all $\beta$ as long as staying inside the domain. + +This allows to directly compute the solution based on interpolating the +boundary conditions. + +The \textbf{spatialDistribution} operator can be described in terms of +the pseudo-code given as a block: \begin{lstlisting}[language=modelica] block spatialDistribution input Real in0; @@ -847,74 +769,73 @@ \subsubsection{spatialDistribution}\label{spatialdistribution} Real x0; Integer m; algorithm - /* The notation - * x y - * is used below as a shorthand for - * if x then y else false - * also known as "short-circuit evaluation of x and y". - */ if positiveVelocity then - out1 := interpolate(points, values, 1 - (x - x0)); - out0 := values[1]; // Similar to in0 but avoiding algebraic loop. + out1:=interpolate(points, values, 1-(x-x0)); + out0:=values[1]; // similar to in0 but avoiding algebraic loop else - out0 := interpolate(points, values, 0 - (x - x0)); - out1 := values[end]; // Similar to in1 but avoiding algebraic loop. + out0:=interpolate(points, values, 0-(x-x0)); + out1:=values[end]; // similar to in1 but avoiding algebraic loop end if; when then - if x > x0 then - m := size(points, 1); - while m > 0 points[m] + (x - x0) >= 1 loop - m := m - 1; + if x>x0 then + m:=size(points,1); + while (if m>0 then points[m]+(x-x0)>=1 else false) then + m:=m-1; end while; - values := cat(1, - {in0}, - values[1:m], - {interpolate(points, values, 1 - (x - x0))}); - points := cat(1, {0}, points[1:m] .+ (x-x0), {1}); - elseif x < x0 then - m := 1; - while m < size(points, 1) points[m] + (x - x0) <= 0 loop - m := m + 1; + values:=cat(1, {in0}, values[1:m], {interpolate(points, values,1-(x-x0))} ); + points:=cat(1, {0}, points[1:m] .+ (x-x0), {1} ); + elseif x= 0, - initialPoints, initialValues); +(out0, out1) = spatialDistribution(in0, in1, x,v >=0, initialPoints, initialValues); \end{lstlisting} -Events are generated at the exact instants when the velocity changes sign -- if this is not needed, \lstinline!noEvent! can be used to suppress event generation. +Events are generated at the exact instants when the velocity +changes sign -- if this is not needed, \lstinline!noEvent()! can be used to +suppress event generation. If the velocity is known to be always positive, then \lstinline!out0! can be omitted, e.g.: \begin{lstlisting}[language=modelica] der(x) = v; -(, out1) = spatialDistribution(in0, 0, x, true, initialPoints, initialValues); +(,out1) = spatialDistribution(in0, 0, x, true, initialPoints, initialValues); \end{lstlisting} -Technically relevant use cases for the use of \lstinline!spatialDistribution! are modeling of electrical transmission lines, pipelines and pipeline networks for gas, water and district heating, sprinkler systems, impulse propagation in elongated bodies, conveyor belts, and hydraulic systems. Vectorization is needed for pipelines where more than one quantity is transported with velocity \lstinline!v! in the example above. +Technically relevant use cases for the use of the +\lstinline!spatialDistribution! operator are modeling of electrical +transmission lines, pipelines and pipeline networks for gas, water and +district heating, sprinkler systems, impulse propagation in elongated +bodies, conveyor belts, and hydraulic systems. Vectorization is needed +for pipelines where more than one quantity is transported with velocity +v in the example above. \end{nonnormative} -\subsubsection{cardinality (deprecated)}\label{cardinality-deprecated} +\subsubsection{cardinality (deprecated)}\doublelabel{cardinality-deprecated} \begin{nonnormative} -\lstinline!cardinality! is deprecated for the following reasons and will be removed in a future release: +The cardinality operator is deprecated for the following +reasons and will be removed in a future release: \begin{itemize} \item Reflective operator may make early type checking more difficult. @@ -926,7 +847,8 @@ \subsubsection{cardinality (deprecated)}\label{cardinality-deprecated} \end{nonnormative} \begin{nonnormative} -\lstinline!cardinality! allows the definition of connection dependent equations in a model, for example: +The \lstinline!cardinality()! operator allows the definition of +connection dependent equations in a model, for example: \begin{lstlisting}[language=modelica] connector Pin Real v; @@ -935,18 +857,21 @@ \subsubsection{cardinality (deprecated)}\label{cardinality-deprecated} model Resistor Pin p, n; equation - assert(cardinality(p) > 0 and cardinality(n) > 0, - "Connectors p and n of Resistor must be connected"); + assert(cardinality(p) > 0 and cardinality(n) > 0, "Connectors p and n of Resistor must be connected"); // Equations of resistor - $\ldots$ + ... end Resistor; \end{lstlisting} \end{nonnormative} -The cardinality is counted after removing conditional components, and shall not be applied to expandable connectors, elements in expandable connectors, or to arrays of connectors (but can be applied to the scalar elements of array of connectors). -\lstinline!cardinality! should only be used in the condition of assert and \lstinline!if!-statements that do not contain \lstinline!connect! and similar operators, see \cref{clocked-discrete-time-and-clocked-discretized-continuous-time-partition}). +The cardinality is counted after removing conditional components. and +may not be applied to expandable connectors, elements in expandable +connectors, or to arrays of connectors (but can be applied to the scalar +elements of array of connectors). The cardinality operator should only +be used in the condition of assert and if-statements -- that do not +contain connect (and similar operators -- see \autoref{clocked-discrete-time-and-clocked-discretized-continuous-time-partition}). -\subsubsection{homotopy}\label{homotopy} +\subsubsection{homotopy}\doublelabel{homotopy} \begin{nonnormative} During the initialization phase of a dynamic simulation @@ -958,9 +883,9 @@ \subsubsection{homotopy}\label{homotopy} possible even without accurate initial guess values, and then by continuously transforming the simplified model into the actual model. This transformation can be formulated using expressions of this kind: -\begin{equation*} -\lambda\cdot\text{\lstinline!actual!} + (1-\lambda)\cdot\text{\lstinline!simplified!} -\end{equation*} + +$$\lambda\cdot\text{actual} + (1-\lambda)\cdot\text{simplified}$$ + in the formulation of the system equations, and is usually called a homotopy transformation. If the simplified expression is chosen carefully, the solution of the problem changes continuously with $\lambda$, @@ -974,25 +899,25 @@ \subsubsection{homotopy}\label{homotopy} over the whole model, and not several homotopy iterations over the respective non-linear algebraic equation systems. The reason is that the following structure can be present: -\begin{lstlisting}[language=modelica] -w = $f_1$(x) // has homotopy +\begin{lstlisting}[language=modelica, mathescape=true] +w= $f_1$(x) // has homotopy operator 0 = $f_2$(der(x), x, z, w) \end{lstlisting} Here, a non-linear equation system $f_2$ -is present. \lstinline!homotopy! is, however used on a variable +is present. The homotopy operator is, however used on a variable that is an ``input'' to the non-linear algebraic equation system, and modifies the characteristics of the non-linear algebraic equation system. The only useful way is to perform the homotopy iteration over $f_1$ and $f_2$ together. The suggested approach is ``conceptual'', because more efficient -implementations are possible, e.g.\ by determining the smallest iteration -loop, that contains the equations of the first BLT block in which -\lstinline!homotopy! is present and all equations up to the last BLT block +implementations are possible, e.g. by determining the smallest iteration +loop, that contains the equations of the first BLT block in which a +homotopy operator is present and all equations up to the last BLT block that describes a non-linear algebraic equation system. -A trivial implementation of \lstinline!homotopy! is obtained by +A trivial implementation of the homotopy operator is obtained by defining the following function in the global scope: \begin{lstlisting}[language=modelica] function homotopy @@ -1004,16 +929,15 @@ \subsubsection{homotopy}\label{homotopy} annotation(Inline = true); end homotopy; \end{lstlisting} -\end{nonnormative} -\begin{example}[1] In electrical systems it is often difficult to solve non-linear +\textbf{Example 1.} In electrical systems it is often difficult to solve non-linear algebraic equations if switches are part of the algebraic loop. An idealized diode model might be implemented in the following way, by -starting with a ``flat'' diode characteristic and then move with -\lstinline!homotopy! to the desired ``steep'' characteristic: +starting with a ``flat'' diode characteristic and then move with the +homotopy operator to the desired ``steep'' characteristic: \begin{lstlisting}[language=modelica] model IdealDiode - $\ldots$ + ... parameter Real Goff = 1e-5; protected Real Goff_flat = max(0.01, Goff); @@ -1023,12 +947,11 @@ \subsubsection{homotopy}\label{homotopy} Goff2 = homotopy(actual=Goff, simplified=Goff_flat); u = s*(if off then 1 else Ron2) + Vknee; i = s*(if off then Goff2 else 1 ) + Goff2*Vknee; - $\ldots$ + ... end IdealDiode; \end{lstlisting} -\end{example} -\begin{example}[2] In electrical systems it is often useful that all voltage sources +\textbf{Example 2.} In electrical systems it is often useful that all voltage sources start with zero voltage and all current sources with zero current, since steady state initialization with zero sources can be easily obtained. A typical voltage source would then be defined as: @@ -1040,9 +963,8 @@ \subsubsection{homotopy}\label{homotopy} v = homotopy(actual=V, simplified=0.0); end ConstantVoltageSource; \end{lstlisting} -\end{example} -\begin{example}[3] In fluid system modelling, the pressure/flowrate relationships are +\textbf{Example 3.} In fluid system modelling, the pressure/flowrate relationships are highly nonlinear due to the quadratic terms and due to the dependency on fluid properties. A simplified linear model, tuned on the nominal operating point, can be used to make the overall model less nonlinear @@ -1051,21 +973,20 @@ \subsubsection{homotopy}\label{homotopy} \begin{lstlisting}[language=modelica] model PressureLoss import Modelica.Units.SI; - $\ldots$ + ... parameter SI.MassFlowRate m_flow_nominal "Nominal mass flow rate"; parameter SI.Pressure dp_nominal "Nominal pressure drop"; SI.Density rho "Upstream density"; SI.DynamicViscosity lambda "Upstream viscosity"; equation - $\ldots$ + ... m_flow = homotopy(actual = turbulentFlow_dp(dp, rho, lambda), simplified = dp/dp_nominal*m_flow_nominal); - $\ldots$ + ... end PressureLoss; \end{lstlisting} -\end{example} -\begin{example}[4] Note that \lstinline!homotopy! \emph{shall not} be used to +\textbf{Example 4.} Note that the homotopy operator \textbf{shall not} be used to combine unrelated expressions, since this can generate singular systems from combining two well-defined systems. \begin{lstlisting}[language=modelica] @@ -1080,60 +1001,56 @@ \subsubsection{homotopy}\label{homotopy} \end{lstlisting} The initial equation is expanded into -\begin{equation*} -0 = \lambda*\mathrm{der}(x)+(1-\lambda)(x-x_0) -\end{equation*} +$$ 0 = \lambda*\mathrm{der}(x)+(1-\lambda)(x-x_0)$$ and you can solve the two equations to give -\begin{equation*} -x = \frac{\lambda+(\lambda-1)x_0}{2\lambda-1} -\end{equation*} +$$ x=\frac{\lambda+(\lambda-1)x_0}{2\lambda-1}$$ which has the correct value of $x_0$ at $\lambda = 0$ and of 1 at $\lambda= 1$, but unfortunately has a singularity at $\lambda = 0.5 $. -\end{example} +\end{nonnormative} -\subsubsection{semiLinear}\label{semilinear} +\subsubsection{semiLinear}\doublelabel{semilinear} -(See definition of \lstinline!semiLinear! in \cref{derivative-and-special-purpose-operators-with-function-syntax}). In some situations, -equations with \lstinline!semiLinear! become underdetermined if the +(See definition of \lstinline!semiLinear! in \autoref{derivative-and-special-purpose-operators-with-function-syntax}). In some situations, +equations with the \lstinline!semiLinear()! function become underdetermined if the first argument (\lstinline!x!) becomes zero, i.e., there are an infinite number of solutions. It is recommended that the following rules are used to transform the equations during the translation phase in order to select one meaningful solution in such cases: -\begin{itemize} -\item -The equations + +\textbf{Rule 1}: The equations + \begin{lstlisting}[language=modelica] y = semiLinear(x, sa, s1); y = semiLinear(x, s1, s2); y = semiLinear(x, s2, s3); -$\ldots$ +... y = semiLinear(x, sN, sb); -$\ldots$ +... \end{lstlisting} + may be replaced by -\begin{lstlisting}[language=modelica] +\begin{lstlisting}[language=modelica, mathescape=true] s1 = if x >= 0 then sa else sb s2 = s1; s3 = s2; -$\ldots$ +... $s_N = s_{N-1}$; y = semiLinear(x, sa, sb); \end{lstlisting} -\item -The equations +\textbf{Rule 2}: The equations \begin{lstlisting}[language=modelica] x = 0; y = 0; y = semiLinear(x, sa, sb); \end{lstlisting} + may be replaced by \begin{lstlisting}[language=modelica] x = 0 y = 0; sa = sb; \end{lstlisting} -\end{itemize} \begin{nonnormative} For symbolic transformations, the following property is useful @@ -1149,14 +1066,14 @@ \subsubsection{semiLinear}\label{semilinear} The \lstinline!semiLinear! function is designed to handle reversing flow in fluid systems, such as \begin{lstlisting}[language=modelica] -H_flow = semiLinear(m_flow, port.h, h); +H_flow =semiLinear(m_flow, port.h, h); \end{lstlisting} i.e., the enthalpy flow rate \lstinline!H_flow! is computed from the mass flow rate \lstinline!m_flow! and the upstream specific enthalpy depending on the flow direction. \end{nonnormative} -\subsubsection{getInstanceName}\label{getinstancename} +\subsubsection{getInstanceName}\doublelabel{getinstancename} Returns a string with the name of the model/block that is simulated, appended with the fully qualified name of the instance in which this @@ -1167,11 +1084,11 @@ \subsubsection{getInstanceName}\label{getinstancename} package MyLib model Vehicle Engine engine; - $\ldots$ + ... end Vehicle; model Engine Controller controller; - $\ldots$ + ... end Engine; model Controller equation @@ -1183,7 +1100,7 @@ \subsubsection{getInstanceName}\label{getinstancename} returns \lstinline!"Vehicle.engine.controller"!. \end{example} -If this function is not called inside a model or block (e.g.\ the +If this function is not called inside a model or block (e.g. the function is called in a function or in a constant of a package), the return value is not specified. @@ -1191,69 +1108,129 @@ \subsubsection{getInstanceName}\label{getinstancename} The simulation result should not depend on the return value of this function. \end{nonnormative} -\subsection{Event-Related Operators with Function Syntax}\label{event-related-operators-with-function-syntax} +\subsection{Event-Related Operators with Function Syntax}\doublelabel{event-related-operators-with-function-syntax} -The operators listed below are event-related operators with function syntax. The operators \lstinline!noEvent!, \lstinline!pre!, \lstinline!edge!, and \lstinline!change!, are vectorizable according to \cref{scalar-functions-applied-to-array-arguments}. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!initial()! & Predicate for the initialization phase & \Cref{modelica:initial}\\ -\lstinline!terminal()! & Predicate for the end of a successful analysis & \Cref{modelica:terminal}\\ -\lstinline!noEvent($\mathit{expr}$)! & Evaluate $\mathit{expr}$ without triggering events & \Cref{modelica:noEvent}\\ -\lstinline!smooth($p$, $\mathit{expr}$)! & Treat $\mathit{expr}$ as $p$ times continuously differentiable & \Cref{modelica:smooth}\\ -\lstinline!sample($\mathit{start}$, $\mathit{interval}$)! & Periodic triggering of events & \Cref{modelica:event-sample}\\ -\lstinline!pre($y$)! & Left limit $y(t^{-})$ of variable $y(t)$ & \Cref{modelica:pre}\\ -\lstinline!edge($b$)! & Expands into \lstinline!($b$ and not pre($b$))! & \Cref{modelica:edge}\\ -\lstinline!change($v$)! & Expands into \lstinline!($v$ <> pre($v$))! & \Cref{modelica:change}\\ -\lstinline!reinit($x$, $\mathit{expr}$)! & Reinitialize $x$ with $\mathit{expr}$ & \Cref{modelica:reinit}\\ -\hline -\end{tabular} -\end{center} - -\begin{operatordefinition}[initial] -\begin{synopsis}\begin{lstlisting} -initial() -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns \lstinline!true! during the initialization phase and \lstinline!false! otherwise. -\begin{nonnormative} +The following event-related operators with function syntax are +supported. The operators \lstinline!noEvent!, \lstinline!pre!, \lstinline!edge!, and \lstinline!change!, are +vectorizable according to \autoref{scalar-functions-applied-to-array-arguments} + +\begin{longtable}{|p{5cm}|p{8cm}|} +\hline \endhead + +% initial +\lstinline!initial()! & Returns \lstinline!true! during the initialization phase and \lstinline!false! +otherwise. +\par +\begin{nonnormative*} Hereby, \lstinline!initial()! triggers a time event at the beginning of a simulation. +\end{nonnormative*} +\\ \hline + +% terminal +\lstinline!terminal()! & Returns \lstinline!true! at the end of a successful analysis. +\par +\begin{nonnormative*} +Hereby, \lstinline!terminal()! ensures an event at the end of successful simulation. +\end{nonnormative*} +\\ \hline + +% noEvent +\lstinline!noEvent(expr)! & Real elementary relations within \lstinline!expr! are taken literally, i.e., no state or time event is triggered. See also \autoref{noevent-and-smooth} and \autoref{events-and-synchronization}.\\ \hline + +% smooth +\lstinline!smooth(p, expr)! & If $p>=0$ \lstinline!smooth(p,expr)! +returns \lstinline!expr! and states that \lstinline!expr! is \lstinline!p! times continuously +differentiable, i.e.: \lstinline!expr! is continuous in all real variables appearing +in the expression and all partial derivatives with respect to all +appearing real variables exist and are continuous up to order +\lstinline!p!. The argument \lstinline!p! should be a scalar integer parameter +expression. The only allowed types for \lstinline!expr! in \lstinline!smooth! are: real +expressions, arrays of allowed expressions, and records containing only +components of allowed expressions. See also \autoref{noevent-and-smooth}.\\ \hline + +% sample +\lstinline!sample(start, interval)! & Returns \lstinline!true! and triggers time events at time +instants \lstinline!start + i*interval (i=0,1,...)!, and is only true during the first event iteration at those times. +At event iterations after the first one at each event and during continuous integration +the operator always returns \lstinline!false!. The starting time \lstinline!start! and the +sample interval \lstinline!interval! must be parameter expressions and need to be +a subtype of Real or Integer. The sample interval \lstinline!interval! must be a +positive number.\\ \hline + +% pre +\lstinline!pre(y)! & Returns the \emph{left limit} $y(t\textsuperscript{pre})$ of +variable $y(t)$ at a time instant $t$. At an event instant, +$y(t\textsuperscript{pre})$ is the value of y after the last event +iteration at time instant $t$ (see comment below). The \lstinline!pre()! operator can +be applied if the following three conditions are fulfilled +simultaneously: (a) variable $y$ is either a subtype of a simple type or +is a record component, (b) $y$ is a discrete-time expression (c) the +operator is \emph{not} applied in a function class. +\begin{nonnormative} +This can be applied to continuous-time variables in when-clauses, see \autoref{discrete-time-expressions} for the definition of discrete-time expression. \end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[terminal] -\begin{synopsis}\begin{lstlisting} -terminal() -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns \lstinline!true! at the end of a successful analysis. +The first value of \lstinline!pre(y)! is determined in the initialization phase. See +also \autoref{pre}.\\ \hline + +% edge +\lstinline!edge(b)! & Is expanded into \lstinline!(b and not pre(b))! for Boolean variable +\lstinline!b!. The same restrictions as for the \lstinline!pre()! operator apply (e.g. not to be +used in function classes).\\ \hline + +% change +\lstinline!change(v)! & Is expanded into \lstinline!(v<>pre(v))!. The +same restrictions as for the \lstinline!pre()! operator apply.\\ \hline + +% reinit +\lstinline!reinit(x, expr)! & In the body of a when clause, reinitializes \lstinline!x! with +\lstinline!expr! at an event instant. \lstinline!x! is a scalar or array \lstinline!Real! variable that is implicitly defined to have \lstinline!StateSelect.always!. \begin{nonnormative} -Hereby, \lstinline!terminal()! ensures an event at the end of successful simulation. +It is an error if the variable cannot be selected as a state. \end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[noEvent] -\begin{synopsis}\begin{lstlisting} -noEvent($\mathit{expr}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\lstinline!Real! elementary relations within $\mathit{expr}$ are taken literally, i.e., no state or time event is triggered. No zero crossing functions shall be used to monitor any of the normally event-generating subexpressions inside $\mathit{expr}$. See also \crefnameref{modelica:smooth} and \cref{events-and-synchronization}. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[smooth] -\begin{synopsis}\begin{lstlisting} -smooth($p$, $\mathit{expr}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -If $p \geq 0$ \lstinline!smooth($p$, $\mathit{expr}$)! returns $\mathit{expr}$ and states that $\mathit{expr}$ is $p$ times continuously differentiable, i.e.: $\mathit{expr}$ is continuous in all \lstinline!Real! variables appearing in the expression and all partial derivatives with respect to all appearing real variables exist and are continuous up to order $p$. The argument $p$ should be a scalar \lstinline!Integer! parameter expression. The only allowed types for $\mathit{expr}$ in \lstinline!smooth! are: \lstinline!Real! expressions, arrays of allowed expressions, and records containing only components of allowed expressions. - -\lstinline!smooth! should be used instead of \lstinline!noEvent! in order to avoid events for efficiency reasons. A tool is free to not generate events for expressions inside \lstinline!smooth!. However, \lstinline!smooth! does not guarantee that no events will be generated, and thus it can be necessary to use \lstinline!noEvent! inside \lstinline!smooth!. +\lstinline!expr! needs to be type-compatible with \lstinline!x!. The +reinit operator can only be applied once for the same variable - either +as an individual variable or as part of an array of variables. It can +only be applied in the body of a when clause in an equation section. See +also \autoref{reinit} .\\ \hline + +\end{longtable} + +A few of these operators are described in more detail in the following. + +\subsubsection{pre}\doublelabel{pre} + +A new event is triggered if there is at least for one variable \lstinline!v! such that \lstinline!pre(v)<> v! after the active model equations are +evaluated at an event instant. In this case the model is at once +reevaluated. This evaluation sequence is called \emph{event +iteration}. The integration is restarted, if for all \lstinline!v! used in +pre-operators the following condition holds: \lstinline!pre(v) == v!. + +\begin{nonnormative} +If \lstinline!v! and \lstinline!pre(v)! are only used in when-clauses, +the translator might mask event iteration for variable v since v cannot +change during event iteration. It is a \emph{quality of implementation} to +find the minimal loops for event iteration, i.e., not all parts of the +model need to be reevaluated. + +The language allows mixed algebraic systems of equations where the +unknown variables are of type \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, or an enumeration. +These systems of equations can be solved by a global fix point iteration +scheme, similarly to the event iteration, by fixing the \lstinline!Boolean!, +\lstinline!Integer!, and/or enumeration unknowns during one iteration. Again, it is +a quality of implementation to solve these systems more efficiently, +e.g., by applying the fix point iteration scheme to a subset of the +model equations. +\end{nonnormative} + +\subsubsection{noEvent and smooth}\doublelabel{noevent-and-smooth} + +The \lstinline!noEvent! operator implies that real elementary relations/functions +are taken literally instead of generating crossing functions, \autoref{events-and-synchronization}. +The \lstinline!smooth! operator should be used instead of \lstinline!noEvent!, in order to +avoid events for efficiency reasons. A tool is free to not generate +events for expressions inside \lstinline!smooth!. However, \lstinline!smooth! does not guarantee +that no events will be generated, and thus it can be necessary to use +\lstinline!noEvent! inside \lstinline!smooth!. \begin{nonnormative} Note that \lstinline!smooth! does not guarantee a smooth output if any of the occurring variables change discontinuously. @@ -1261,95 +1238,22 @@ \subsection{Event-Related Operators with Function Syntax}\label{event-related-op \begin{example} \begin{lstlisting}[language=modelica] - Real x, y, z; + Real x,y,z; parameter Real p; equation - x = if time < 1 then 2 else time - 2; - z = smooth(0, if time < 0 then 0 else time); - y = smooth(1, noEvent(if x < 0 then 0 else sqrt(x) * x)); // noEvent is necessary. + x = if time<1 then 2 else time-2; + z = smooth(0, if time<0 then 0 else time); + y = smooth(1, noEvent(if x<0 then 0 else sqrt(x)*x)); + // noEvent is necessary. \end{lstlisting} \end{example} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition*}[sample]\label{modelica:event-sample}\index{sample@\robustinline{sample}!event-generating} -\begin{synopsis}\begin{lstlisting} -sample($\mathit{start}$, $\mathit{interval}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns \lstinline!true! and triggers time events at time instants $\mathit{start} + i \cdot \mathit{interval}$ for $i = 0,\, 1\, \ldots$, and is only true during the first event iteration at those times. At event iterations after the first one at each event and during continuous integration the operator always returns \lstinline!false!. The starting time $\mathit{start}$ and the sample interval $\mathit{interval}$ must be parameter expressions and need to be a subtype of \lstinline!Real! or \lstinline!Integer!. The sample interval $\mathit{interval}$ must be a positive number. -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition}[pre] -\begin{synopsis}\begin{lstlisting} -pre($y$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the \emph{left limit} $y(t^{-})$ of variable $y(t)$ at a time instant $t$. -At an event instant, $y(t^{-})$ is the value of $y$ after the last event iteration at time instant $t$ (see comment below). -% Warning "component expression" is a term defined for synchronous operator argument restrictions; this seems to conflict with also defining the present argument restriction below. -Any subscripts in the component expression $y$ must be parameter expressions. -\lstinline!pre! can be applied if the following three conditions are fulfilled simultaneously: (a) variable $y$ is either a subtype of a simple type or is a record component, (b) $y$ is a discrete-time expression (c) the operator is \emph{not} applied in a \lstinline!function! class. -\begin{nonnormative} -This can be applied to continuous-time variables in \lstinline!when!-clauses, see \cref{discrete-time-expressions} for the definition of discrete-time expression. -\end{nonnormative} -The first value of \lstinline!pre($y$)! is determined in the initialization phase. -A new event is triggered if there is at least for one variable \lstinline!v! such that \lstinline!pre(v) <> v! after the active model equations are evaluated at an event instant. In this case the model is at once reevaluated. This evaluation sequence is called \emph{event iteration}. The integration is restarted once \lstinline!pre(v) == v! for all \lstinline!v! appearing inside \lstinline!pre($\ldots$)!. +\section{Variability of Expressions}\doublelabel{variability-of-expressions} -\begin{nonnormative} -If \lstinline!v! and \lstinline!pre(v)! are only used in \lstinline!when!-clauses, the translator might mask event iteration for variable \lstinline!v! since \lstinline!v! cannot change during event iteration. -It is a quality of implementation to find the minimal loops for event iteration, i.e., not all parts of the model need to be reevaluated. - -The language allows mixed algebraic systems of equations where the unknown variables are of type \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, or an enumeration. -These systems of equations can be solved by a global fix point iteration scheme, similarly to the event iteration, by fixing the \lstinline!Boolean!, \lstinline!Integer!, and/or enumeration unknowns during one iteration. -Again, it is a quality of implementation to solve these systems more efficiently, e.g., by applying the fix point iteration scheme to a subset of the model equations. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[edge] -\begin{synopsis}\begin{lstlisting} -edge($b$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Expands into \lstinline!($b$ and not pre($b$))! for \lstinline!Boolean! variable $b$. The same restrictions as for \lstinline!pre! apply (e.g.\ not to be used in \lstinline!function! classes). -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[change] -\begin{synopsis}\begin{lstlisting} -change(v) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Expands into \lstinline!($v$ <> pre($v$))!. The same restrictions as for \lstinline!pre! apply. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[reinit] -\begin{synopsis}\begin{lstlisting} -reinit($x$, $\mathit{expr}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -In the body of a \lstinline!when!-clause, reinitializes $x$ with $\mathit{expr}$ at an event instant. -$x$ is a scalar or array \lstinline!Real! variable that is implicitly defined to have \lstinline!StateSelect.always!. -\begin{nonnormative} -It is an error if the variable cannot be selected as a state. -\end{nonnormative} -$\mathit{expr}$ needs to be type-compatible with $x$. -\lstinline!reinit! can only be applied once for the same variable -- either as an individual variable or as part of an array of variables. -It can only be applied in the body of a \lstinline!when!-clause in an equation section. -See also \cref{reinit}. -\end{semantics} -\end{operatordefinition} - -\section{Variability of Expressions}\label{variability-of-expressions} - -The concept of \firstuse{variability of an expression}\index{expression variability}\index{variability!expression|see{expression variability}} indicates to what extent the expression can vary over time. -See also \cref{component-variability-prefixes-discrete-parameter-constant} regarding the concept of variability. -% It seems wrong to not mention 'clocked discrete-time' here. -There are four levels of variability of expressions, starting from the least variable: +The concept of variability of an expression indicates to what extent the +expression can vary over time. See also \autoref{component-variability-prefixes-discrete-parameter-constant} regarding the +concept of variability. There are four levels of variability of +expressions, starting from the least variable: \begin{itemize} \item constant variability @@ -1366,10 +1270,11 @@ \section{Variability of Expressions}\label{variability-of-expressions} restrictions that simplify reasoning and reporting of errors: \begin{itemize} \item - For an assignment \lstinline!v := expr! or binding equation \lstinline!v = expr!, \lstinline!v! must be declared to be at least as variable as \lstinline!expr!. + For an assignment \lstinline!v:=expr! or binding equation \lstinline!v=expr!, \lstinline!v! must be declared + to be at least as variable as \lstinline!expr!. \item When determining whether an equation can contribute to solving for a variable \lstinline!v! (for instance, - when applying the perfect matching rule, see \cref{synchronous-data-flow-principle-and-single-assignment-rule}), + when applying the perfect matching rule, see \autoref{synchronous-data-flow-principle-and-single-assignment-rule}), the equation can only be considered contributing if the resulting solution would be at most as variable as \lstinline!v!. \item The right-hand side expression in a binding equation (that is, \lstinline!expr!) of a parameter component and of the base type attributes @@ -1379,73 +1284,37 @@ \section{Variability of Expressions}\label{variability-of-expressions} discrete-time expression. \end{itemize} -\begin{example} -The (underdetermined) model \lstinline!Test! below illustrates two kinds of consequences due to variability constraints. -First, it contains variability errors for declaration equations and assignments. -Second, it illustrates the impact of variability on the matching of equations to variables, which can lead to violation of the perfect matching rule. -Details of how variabilities are determined are given in the sections below. -The \willintroduce{discrete-valued equation variability rule} mentioned in the comments below refer to the rule in \cref{discrete-time-expressions} that requires both sides of the \lstinline!Boolean! equation to be discrete-time. -\begin{lstlisting}[language=modelica] -model Constants - parameter Real p1 = 1; - constant Real c1 = p1 + 2; // Error, not a constant expression. - parameter Real p2 = p1 + 2; // Fine. -end Constants; -model Test - Constants c1(p1 = 3); // Fine. - Constants c2(p2 = 7); // Fine, declaration equation can be modified. - Real x; - Boolean b1 = noEvent(x > 1); // Error, since b1 is a discrete-time variable - // and noEvent(x > 1) is not discrete-time. - Boolean b2; - Integer i1; - Integer i2; -algorithm - i1 := x; // Error, assignment to variable of lesser variability. -equation - /* The equation below can be rejected for two reasons: - * 1. Discrete-valued equation variability rule requires both sides to be - * discrete-time. - * 2. It violates the perfect matching rule, as no variable can be solved - * with correct variability using this equation. - */ - b2 = noEvent(x > 1); // Error, see above. - i2 = x; // No variability error, and can be matched to x. -end Test; -\end{lstlisting} -\end{example} - -\subsection{Constant Expressions}\label{constant-expressions} +\subsection{Constant Expressions}\doublelabel{constant-expressions} -Constant expressions\index{constant expression}\index{expression variability!constant} are: +Constant expressions are: \begin{itemize} \item \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, \lstinline!String!, and \lstinline!enumeration! literals. \item - Variables declared as \lstinline!constant!. + Variables declared as constant. \item Except for the special built-in operators \lstinline!initial!, \lstinline!terminal!, \lstinline!der!, \lstinline!edge!, \lstinline!change!, \lstinline!sample!, and \lstinline!pre!, a function or operator with constant subexpressions as argument (and no parameters defined in the function) is a constant expression. -\item - Some function calls are constant expressions regardless of the arguments: - \begin{itemize} - \item - \lstinline!ndims(A)! - \end{itemize} \end{itemize} -Components declared as \lstinline!constant! shall have an associated declaration equation with a constant expression, if the constant is directly in the simulation model, or used in the simulation model. The value of a constant can be modified after it has been given a value, unless the constant is declared \lstinline!final! or modified with a \lstinline!final! modifier. A constant without an associated declaration equation can be given one by using a modifier. +Components declared as constant shall have an associated declaration +equation with a constant expression, if the constant is directly in the +simulation model, or used in the simulation model. The value of a +constant can be modified after it has been given a value, unless the +constant is declared final or modified with a final modifier. A constant +without an associated declaration equation can be given one by using a +modifier. -\subsection{Parameter Expressions}\label{parameter-expressions} +\subsection{Parameter Expressions}\doublelabel{parameter-expressions} -Parameter expressions\index{parameter expression}\index{expression variability!parameter}\index{parametric variability|see{parameter expression}} are: +Parameter expressions are: \begin{itemize} \item Constant expressions. \item - Variables declared as \lstinline!parameter!. + Variables declared as parameter. \item Input variables in functions behave as though they were parameter expressions. \item @@ -1453,14 +1322,19 @@ \subsection{Parameter Expressions}\label{parameter-expressions} \lstinline!edge!, \lstinline!change!, \lstinline!sample!, and \lstinline!pre!, a function or operator with parameter subexpressions is a parameter expression. \item - Some function calls are parameter expressions even if the arguments are not: + Some function calls are parameter expressions even if the arguments + are not: + \begin{itemize} \item - \lstinline!cardinality(c)!, see restrictions for use in \cref{cardinality-deprecated}. + \lstinline!ndims(A)! \item - \lstinline!end! in \lstinline!A[$\ldots$ end $\ldots$]! if \lstinline!A! is variable declared in a non-\lstinline!function! class. + \lstinline!cardinality(c)!, see restrictions for use in \autoref{cardinality-deprecated}. \item - \lstinline!size(A)! (including \lstinline!size(A, j)! where \lstinline!j! is parameter expression) if \lstinline!A! is variable declared in a non-function class. + \lstinline!end! in \lstinline!A[...end... ]! if \lstinline!A! is variable declared in a non-function class. + \item + \lstinline!size(A)! (including \lstinline!size(A, j)! where \lstinline!j! is parameter expression) if \lstinline!A! + is variable declared in a non-function class \item \lstinline!Connections.isRoot(A.R)! \item @@ -1468,87 +1342,95 @@ \subsection{Parameter Expressions}\label{parameter-expressions} \end{itemize} \end{itemize} -\subsection{Discrete-Time Expressions}\label{discrete-time-expressions} +\subsection{Discrete-Time Expressions}\doublelabel{discrete-time-expressions} -Discrete-time expressions\index{discrete-time expression}\index{expression variability!discrete-time} are: +Discrete-time expressions are: \begin{itemize} \item Parameter expressions. \item - Discrete-time variables, i.e., \lstinline!Integer!, \lstinline!Boolean!, \lstinline!String! variables and \lstinline!enumeration! variables, as well as \lstinline!Real! variables assigned in \lstinline!when!-clauses. + Discrete-time variables, i.e., \lstinline!Integer!, \lstinline!Boolean!, \lstinline!String! variables and + \lstinline!enumeration! variables, as well as \lstinline!Real! variables assigned in + \lstinline!when!-clauses \item - Function calls where all input arguments of the function are discrete-time expressions. + Function calls where all input arguments of the function are + discrete-time expressions. \item - Expressions where all the subexpressions are discrete-time expressions. + Expressions where all the subexpressions are discrete-time + expressions. \item Expressions in the body of a \lstinline!when!-clause, \lstinline!initial equation!, or \lstinline!initial algorithm!. \item - Unless inside \lstinline!noEvent!: Ordered relations (\lstinline!>!, \lstinline!=!, \lstinline!<=!) and the event generating functions \lstinline!ceil!, \lstinline!floor!, \lstinline!div!, and \lstinline!integer!, if at least one argument is non-discrete time expression and subtype of \lstinline!Real!. + Unless inside \lstinline!noEvent!: Ordered relations + (\lstinline!>!,\lstinline!=!,\lstinline!<=!)and the event + generating functions \lstinline!ceil!, \lstinline!floor!, \lstinline!div!, and \lstinline!integer!, if at least one + argument is non-discrete time expression and subtype of \lstinline!Real!. \begin{nonnormative} - These will generate events, see \cref{events-and-synchronization}. Note that \lstinline!rem! and \lstinline!mod! generate events but are not discrete-time expressions. In other words, relations inside \lstinline!noEvent!, such as \lstinline!noEvent(x>1)!, are not discrete-time expressions. + These will generate events, see \autoref{events-and-synchronization}. Note that \lstinline!rem! and \lstinline!mod! generate events but are not discrete-time + expressions. In other words, relations inside \lstinline!noEvent()!, such as \lstinline!noEvent(x>1)!, are not discrete-time expressions. \end{nonnormative} \item - The functions \lstinline!pre!, \lstinline!edge!, and \lstinline!change! result in discrete-time expressions. + The functions \lstinline!pre!, \lstinline!edge!, and \lstinline!change! result in discrete-time + expressions. \item - Expressions in functions behave as though they were discrete-time expressions. + Expressions in functions behave as though they were discrete-time + expressions. \end{itemize} -Inside an \lstinline!if!-expression, \lstinline!if!-clause, \lstinline!while!-statement or \lstinline!for!-clause, that is controlled by a non-discrete-time (that is continuous-time, but not discrete-time) switching expression and not in the body of a \lstinline!when!-clause, it is not legal to have assignments to discrete-time variables, equations between discrete-time expressions, or real elementary relations/functions that should generate events. +For an equation \lstinline!expr1 = expr2! where neither expression is of base type +\lstinline!Real!, both expressions must be discrete-time expressions. For record +equations the equation is split into basic types before applying this +test. \begin{nonnormative} -The restriction above is necessary in order to guarantee that all equations for discrete-time variable are discrete-time expressions, and to ensure that crossing -functions do not become active between events. +This restriction guarantees that the \lstinline!noEvent()! operator cannot be applied to \lstinline!Boolean!, \lstinline!Integer!, \lstinline!String!, or \lstinline!enumeration! +equations outside of a \lstinline!when!-clause, because then one of the two expressions is not discrete-time. \end{nonnormative} -For a scalar or array equation \lstinline!expr1 = expr2! where neither expression is of base type \lstinline!Real!, both expressions must be discrete-time expressions. -For a record equation, the rule applies recursively to each of the components of the record. -This is called the \firstuse{discrete-valued equation variability rule}\index{discrete-valued equation variability rule}. +Inside an if-expression, \lstinline!if!-clause, \lstinline!while!-statement or \lstinline!for!-clause, that +is controlled by a non-discrete-time (that is continuous-time, but not +discrete-time) switching expression and not in the body of a +\lstinline!when!-clause, it is not legal to have assignments to discrete variables, +equations between discrete-time expressions, or real elementary +relations/functions that should generate events. \begin{nonnormative} -For a scalar equation, the rule follows from the observation that a discrete-valued equation does not provide sufficient information to solve for a continuous-valued variable. -Hence, and according to the perfect matching rule (see \cref{synchronous-data-flow-principle-and-single-assignment-rule}), such an equation must be used to solve for a discrete-valued variable. -By the interpretation of \eqref{eq:dae-discrete-valued} in \cref{modelica-dae-representation}, it follows that one of \lstinline!expr1! and \lstinline!expr2! must be the variable, and the other expression its solution. -Since a discrete-valued variable is a discrete-time variable, it follows that its solution on the other side of the equation must have at most discrete-time variability. -That is, both sides of the equation are discrete-time expressions. - -For example, this rule shows that (outside of a \lstinline!when!-clause) \lstinline!noEvent! cannot be applied to either side of a \lstinline!Boolean!, \lstinline!Integer!, \lstinline!String!, or \lstinline!enumeration! equation, as this would result in a non-discrete-time expression. - -For an array equation, note that each array can have only one element type, so if one element is \lstinline!Real!, then all other entries must also be \lstinline!Real!, possibly making use of standard type coercion, \cref{standard-type-coercion}. -Hence, if the base type is not \lstinline!Real!, all elements of the array are discrete-valued, allowing the argument above for a scalar equation to be applied elementwise to the array equation. -That is, all array elements on both sides of the array equation will have discrete-time variability, showing that also the entire arrays \lstinline!expr1! and \lstinline!expr2! are discrete-time expressions. - -For a record equation, the components of the record have independent types, and the equation is seen as a collection of equations for the individual components of the record. -In order to support records with components of mixed variability, a record equation with sides given by either record variables or record constructors is conceptually split before variability is determined. +The restriction above is necessary in order to guarantee that all equations for discrete variable are discrete-time expressions, and to ensure that crossing +functions do not become active between events. \end{nonnormative} \begin{example} -Discrete-valued equation variability rule applied to record equations. -In the first of the equations below, having a record constructor on both sides of the equation, the equation is conceptually split, and variabilities of \lstinline!time! and \lstinline!true! are considered separately. -In the second equation, the \lstinline!makeR! function call -- regardless of inlining -- means that the equation cannot be conceptually split into individual components of the record. -The variability of the \lstinline!makeR! call is continuous-time due to the \lstinline!time! argument, which also becomes the variability of the \lstinline!b! member of the call. +The (underdetermined) model \lstinline!Test! below illustrates two kinds of consequences due to variability constraints. +First, it contains variability errors for declaration equations and assignments. +Second, it illustrates the impact of variability on the matching of equations to variables, which can +lead to violation of the perfect matching rule. \begin{lstlisting}[language=modelica] -record R - Real x; - Boolean b; -end R; - -function makeR "Function wrapper around record constructor" - input Real xx; - input Boolean bb; - output R r = R(xx, bb); - annotation(Inline = true); // Inlining doesn't help. -end makeR; - +model Constants + parameter Real p1 = 1; + constant Real c1 = p1 + 2; // error, not a constant expression + parameter Real p2 = p1 + 2; // fine +end Constants; model Test - R r1, r2; + Constants c1(p1=3); // fine + Constants c2(p2=7); // fine, declaration equation can be modified + Real x; + Boolean b1 = noEvent(x > 1); // error, since b1 is a discrete-time variable + // and noEvent(x > 1) is not discrete-time. + Boolean b2; + Integer i1; + Integer i2; +algorithm + i1 := x; // error, assignment to variable of lesser variability. equation - r1 = R(time, true); // OK: Discrete-time Boolean member. - r2 = makeR(time, true); // Error: Continuous-time Boolean member. + b2 = noEvent(x > 1); // no variability error, but equation cannot be matched. + i2 = x; // no variability error, and can be matched to x. end Test; \end{lstlisting} \end{example} -\subsection{Continuous-Time Expressions}\label{continuous-time-expressions} +\subsection{Continuous-Time Expressions}\doublelabel{continuous-time-expressions} -All expressions are continuous-time expressions\index{continuous-time!expression}\index{expression variability!continuous-time} including constant, parameter and discrete expressions. -The term \firstuse{non-discrete-time expression}\index{non-discrete-time expression}\index{expression variability!non-discrete-time} refers to expressions that are neither constant, parameter nor discrete-time expressions. +All expressions are continuous-time expressions including constant, +parameter and discrete expressions. The term \emph{non-discrete-time +expression} refers to expressions that are not constant, parameter or +discrete expressions. diff --git a/chapters/overloaded.tex b/chapters/overloaded.tex index ed23ff61d..3c21a80b8 100644 --- a/chapters/overloaded.tex +++ b/chapters/overloaded.tex @@ -1,31 +1,38 @@ -\chapter{Overloaded Operators}\label{overloaded-operators} +\chapter{Overloaded Operators}\doublelabel{overloaded-operators} -A Modelica \lstinline!operator record!\indexinline{operator record} can overload the behavior for operations such as constructing, adding, multiplying etc. +A Modelica \lstinline!operator record! can define the behavior for +operations such as constructing, adding, multiplying etc. This is done +using the specialized class \lstinline!operator! (a restricted class +similar to \lstinline!package!, see \autoref{specialized-classes}) comprised of functions +implementing different variants of the operation for the record class in +which the respective \lstinline!operator! definition resides. -The overloading is defined in such a way that ambiguities are not allowed and give an error. -Furthermore, it is sufficient to define overloading for scalars. +\begin{nonnormative} +The overloading is defined in such a way that ambiguities are not allowed and give an error. Furthermore, it is sufficient to define overloading for scalars. Overloaded array operations are automatically deduced from the overloaded scalar operations. +\end{nonnormative} -\section{Overview of overloaded operators}\label{overview-of-overloaded-operators} - -In an \lstinline!operator record! the definition of operations are done using the specialized class \lstinline!operator! (a specialized class similar to \lstinline!package!, see \cref{specialized-classes}) followed by the name of the operation. -Each \lstinline!operator! class is comprised of functions implementing different variants of the operation for the \lstinline!operator record! class in which the definition resides. +The \lstinline!operator! keyword is followed by the name of the operation: % This was something weird that could be seen as a table originally, % that is somewhat awkward - but keeping it. % % Changing to use itemize was attempted, but currently fails in LaTeXML % https://github.com/brucemiller/LaTeXML/issues/1057 % (Note: It's pure coincide that this issue occured for this case.) -\begin{itemize} -\item Overloaded constructors, see \cref{overloaded-constructors}:\\ \lstinline!'constructor'!, \lstinline!'0'! -\item Overloaded string conversions, see \cref{overloaded-string-conversions}:\\ \lstinline!'String'! -\item Overloaded binary operations, see \cref{overloaded-binary-operations}:\\ -\lstinline!'+'!, \lstinline!'-'! (subtraction), \lstinline!'*'!, \lstinline!'/'!, \lstinline!'^'!,\\ - \lstinline!'=='!, \lstinline!'<='!', \lstinline!'>'!, \lstinline!'<'!, -\lstinline!'>='!, \lstinline!'<='!, \lstinline!'and'!, \lstinline!'or'! -\item Overloaded unary operations, see \cref{overloaded-unary-operations}:\\ -\lstinline!'-'! (negation), \lstinline!'not'! -\end{itemize} +\begin{longtable}[c]{@{}|ll|@{}} +\hline\endhead +\multicolumn{2}{|l|}{Overloaded constructors, see \autoref{overloaded-constructors}:}\\ +& \lstinline!'constructor'!, \lstinline!'0'!\\ +\multicolumn{2}{|l|}{Overloaded string conversions, see \autoref{overloaded-string-conversions}:}\\ +& \lstinline!'String'! \\ +\multicolumn{2}{|l|}{Overloaded binary operations, see \autoref{overloaded-binary-operations}:}\\ +& \lstinline!'+'!, \lstinline!'-'! (subtraction), \lstinline!'*'!, \lstinline!'/'!, \lstinline!'^'!,\\ +& \lstinline!'=='!, \lstinline!'<='!', \lstinline!'>'!, \lstinline!'<'!, +\lstinline!'>='!, \lstinline!'<='!, \lstinline!'and'!, \lstinline!'or'!\\ +\multicolumn{2}{|l|}{Overloaded unary operations, see \autoref{overloaded-unary-operations}:}\\ +& \lstinline!'-'! (negation), \lstinline!'not'!\\ +\hline +\end{longtable} The functions defined in the operator-class must take at least one component of the record class as input, except for the @@ -46,41 +53,52 @@ \section{Overview of overloaded operators}\label{overview-of-overloaded-operator If an operator record was derived by a short class definition, the overloaded operators of this operator record are the operators that are -defined in its base class, for subtyping see \cref{interface-or-type-relationships}. +defined in its base class, for subtyping see \autoref{interface-or-type-relationships}. The precedence and associativity of the overloaded operators is -identical to the one defined in \cref{tab:operator-precedence} in \cref{operator-precedence-and-associativity}. +identical to the one defined in Table 3.1 in \autoref{operator-precedence-and-associativity}. \begin{nonnormative} Note, the operator overloading as defined in this section is only a short hand notation for function calls. \end{nonnormative} -\section{Matching Function}\label{matching-function} +\section{Matching Function}\doublelabel{matching-function} -All functions defined inside the \lstinline!operator! class must return one output (based on the restriction above), and may include functions with optional arguments, i.e.\ functions of the form -\begin{lstlisting}[language=modelica] +All functions defined inside the \lstinline!operator! class must return one +output (based on the restriction above), and may include functions with +optional arguments, i.e. functions of the form + +\begin{lstlisting}[language=modelica,mathescape=true] function f input $A_1$ $u_1$; - $\ldots$ - input $A_{m}$ $u_{m}$ := $a_{m}$; - $\ldots$ + ... + input $A_{m}$ $u_{m}$ := $A_{m}$; + ... input $A_{n}$ $u_{n}$; output B y; algorithm - $\ldots$ + ... end f; \end{lstlisting} +The vector P indicates whether argument m of f has a default value +(\lstinline!true! for default value, \lstinline!false! otherwise). A call +f($A_1$, $a_{2}$,\ldots{}, $a_{k}$, +$b_{1}$ = $w_{1}$ ,\ldots{}, $b_{p}$= +$w_{p}$) with distinct names $b_{j}$ is a valid +match for the function f, provided (treating Integer and Real as the +same type) -The vector $P$ indicates whether argument $m$ of \lstinline!f! has a default value (\lstinline!true! for default value, \lstinline!false! otherwise). -A call \lstinline!f($a_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$ = $w_{1}$, $\ldots$, $b_{p}$ = $w_{p}$)! with distinct names $b_{j}$ is a valid match for the function \lstinline!f!, provided (treating \lstinline!Integer! and \lstinline!Real! as the same type) \begin{itemize} \item - $A_{i}$ = typeOf($a_{i}$) for $1 \leq i \leq k$, + $A_{i}$ = typeOf($A_{i}$) for 1 $\le$ i $\le$ k, \item - the names $b_{j}$ = $u_{Q_{j}}$, $Q_{j} > k$, $A_{Q_{j}}$ = typeOf($w_{j}$) for $1 \leq j \leq p$, and + the names $b_{j}$ = $u_{Qj}$, Qj \textgreater{} + k, $A_{Qj}$ =typeOf($w_{i}$) for 1 $\le$ j $\le$ p, and \item - if the union of $\{i: 1 \leq i \leq k \}$, $\{Q_{j}: 1 \leq j \leq p\}$, and $\{m: P_{m} \text{ is \lstinline!true! and } 1 \leq m \leq n \}$ is the set $\{i: 1 \leq i \leq n\}$. + if the union of \{i: 1 $\le$ i $\le$ k \}, \{Qj: 1 $\le$ j $\le$ p\}, and \{m: + $P_{m}$ \lstinline!true! and 1 $\le$ m $\le$ n \} is the set \{i: 1 $\le$ + i $\le$ n\}. \end{itemize} \begin{nonnormative} @@ -92,21 +110,28 @@ \section{Matching Function}\label{matching-function} domains. \end{nonnormative} -\section{Overloaded Constructors}\label{overloaded-constructors} +\section{Overloaded Constructors}\doublelabel{overloaded-constructors} -Let \lstinline!C! denote an operator record class and consider an expression -\lstinline!C($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)!. +Let C denote an operator record class and consider an expression +C($A_1$, $a_{2}$,\ldots{}, $a_{k}$, +$b_{1}$= $w_{1}$ ,\ldots{}, $b_{p}$= +$w_{p}$). \begin{enumerate} -\item\label{overloaded-constructor-unique} - If there exists a unique function $f$ in \lstinline!C.'constructor'! such that - ($A_1$, $a_{2}$, \ldots{}, $a_{k}$, $b_{1}$=$w_{1}$, \ldots{}, $b_{p}$=$w_{p}$) - is a valid match for the function $f$, then - \lstinline!C($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)! - is resolved to - \lstinline!C.'constructor'.$f$($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)!. \item - If there is no operator \lstinline!C.'constructor'! the automatically generated record constructor is called. + If there exists a {unique} function f in C.'constructor' such that + ($A_1$, $a_{2}$,\ldots{}, $a_{k}$, + $b_{1}$= $w_{1}$ ,\ldots{}, $b_{p}$= + $w_{p}$) is a valid match for the function f, then + C($A_1$, $a_{2}$,\ldots{}, $a_{k}$, + $b_{1}$= $w_{1}$ ,\ldots{}, $b_{p}$= + $w_{p}$) is resolved to\\ + C.'constructor'.f($A_1$, $a_{2}$,\ldots{}, + $a_{k}$, $b_{1}$= $w_{1}$ ,\ldots{}, + $b_{p}$= $w_{p}$). +\item + If there is no operator C. 'constructor' the automatically generated + record constructor is called. \item Otherwise the expression is erroneous. \end{enumerate} @@ -114,32 +139,49 @@ \section{Overloaded Constructors}\label{overloaded-constructors} Restrictions: \begin{itemize} \item - The operator \lstinline!C.'constructor'! shall only contain functions that declare one output component, which shall be of the operator record class \lstinline!C!. + The operator C.'constructor' shall only contain functions that declare + one output component, which shall be of the operator record class C. \item - For an operator recordclass there shall not exist any potential call that lead to multiple matches in \cref{overloaded-constructor-unique} above. + For an operator recordclass there shall not exist any potential call + that lead to multiple matches in (1) above. \begin{nonnormative} How to verify this is not specified. \end{nonnormative} \item - For a pair of operator record classes \lstinline!C! and \lstinline!D! and components \lstinline!c! and \lstinline!d! of these classes both of \lstinline!C.'constructor'(d)! and \lstinline!D.'constructor'(c)! shall not both be legal. + For a pair of operator record classes \lstinline!C! and \lstinline!D! and components \lstinline!c! and \lstinline!d! + of these classes both of \lstinline!C.'constructor'(d)! and \lstinline!D.'constructor'(c)! + shall not both be legal. \begin{nonnormative} Hence, one of the two definitions must be removed. \end{nonnormative} \end{itemize} \begin{nonnormative} -By the last restriction the following problem for binary operators is avoided: - -Assume there are two operator record classes \lstinline!C! and \lstinline!D! that both have a constructor from \lstinline!Real!. If we want to extend \lstinline!c + c! and \lstinline!d + d! to support mixed operations, one variant would be to define \lstinline!c + d! and \lstinline!d + c!; but then \lstinline!c + 2! becomes ambiguous (since it is not clear which instance should be converted to). Without mixed operations expressions such as \lstinline!c + d! are only ambiguous if both conversion from \lstinline!C! to \lstinline!D! and back from \lstinline!D! to \lstinline!C! are both available, and this possibility is not allowed by the restriction above. +By the last restriction the following problem for binary +operators is avoided: + +Assume there are two operator record classes C and D that both +have a constructor from Real. If we want to extend c+c and d+d to +support mixed operations, one variant would be to define c+d and d+c; +but then c+2 becomes ambiguous (since it is not clear which instance +should be converted to). Without mixed operations expressions such as +c+d are only ambiguous if both conversion from C to D and back from D to +C are both available, and this possibility is not allowed by the +restriction above. \end{nonnormative} -Additionally there is an operator \lstinline!'0'! defining the zero-value which can also be used to construct an element. The operator \lstinline!'0'! for an operator record \lstinline!C! can -contain only one function, having zero inputs and one output of type \lstinline!C! (the called function is therefore unambiguous). It should return the identity element of addition, and is used for -generating flow-equations for \lstinline!connect!-equations and zero elements for matrix multiplication. +Additionally there is an operator \lstinline!'0'! defining the zero-value which can +also be used to construct an element. The operator \lstinline!'0'! for an operator +record C can contain only one function, having zero inputs and one +output -- of class C (the called function is therefore unambiguous). It +should return the identity element of addition, and is used for +generating flow-equations for connect-equations and zero elements for +matrix-multiplication. -\section{Overloaded String Conversions}\label{overloaded-string-conversions} +\section{Overloaded String Conversions}\doublelabel{overloaded-string-conversions} -Consider an expression \lstinline!String($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)!, $k \geq 1$ where $A_1$ is an element of class \lstinline!A!. +Consider an expression \lstinline[mathescape=true]!String($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)!, +$k \ge 1$ where $A_1$ is an element of class \lstinline!A!. \begin{enumerate} \item @@ -149,11 +191,11 @@ \section{Overloaded String Conversions}\label{overloaded-string-conversions} \item If \lstinline!A! is an operator record class and there exists a unique function $f$ in \lstinline!A.'String'! such that - \lstinline!A.'String'.$f$($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)! + \lstinline[mathescape=true]!A.'String'.$f$($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)! is a valid match for $f$, then - \lstinline!String($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)! + \lstinline[mathescape=true]!String($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)! is evaluated to\\ - \lstinline!A.'String'.$f$($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)!. + \lstinline[mathescape=true]!A.'String'.$f$($A_1$, $a_{2}$, $\ldots$, $a_{k}$, $b_{1}$=$w_{1}$, $\ldots$, $b_{p}$=$w_{p}$)!. \item Otherwise the expression is erroneous. \end{enumerate} @@ -172,69 +214,77 @@ \section{Overloaded String Conversions}\label{overloaded-string-conversions} \end{nonnormative} \end{itemize} -\section{Overloaded Binary Operations}\label{overloaded-binary-operations} +\section{Overloaded Binary Operations}\doublelabel{overloaded-binary-operations} % Can't use \mathit{op} in the \lstinline math due to issue reported here: -% https://github.com/brucemiller/LaTeXML/issues/1274 (marked as fixed as of commit 80d7940) +% https://github.com/brucemiller/LaTeXML/issues/1274 %\newcommand{\theop}{\mathit{op}} \newcommand{\theop}{X} Let $\theop$ denote a binary operator and consider an expression -\lstinline!a $\theop$ b! where \lstinline!a! is an instance or array of instances of +\lstinline[mathescape=true]!a $\theop$ b! where \lstinline!a! is an instance or array of instances of class \lstinline!A! and \lstinline!b! is an instance or array of instances of class \lstinline!B!. \begin{enumerate} -\item\label{overloaded-binary-predefined} - If \lstinline!A! and \lstinline!B! are predefined types of such, then the corresponding built-in operation is performed. +\item + If \lstinline!A! and \lstinline!B! are predefined types of such, then the + corresponding built-in operation is performed. \item Otherwise, if there exists \emph{exactly one} function $f$ in the - union of \lstinline!A.$\theop$! and \lstinline!B.$\theop$! such that - \lstinline!$f$(a, b)! is a valid match for the function $f$, then - \lstinline!a $\theop$ b! is evaluated using this function. It is an error, if - multiple functions match. If \lstinline!A! is not an operator record class, \lstinline!A.$\theop$! + union of \lstinline[mathescape=true]!A.$\theop$! and \lstinline[mathescape=true]!B.$\theop$! such that + \lstinline[mathescape=true]!$f$(a, b)! is a valid match for the function $f$, then + \lstinline[mathescape=true]!a $\theop$ b! is evaluated using this function. It is an error, if + multiple functions match. If \lstinline!A! is not an operator record class, \lstinline[mathescape=true]!A.$\theop$! is seen as the empty set, and similarly for \lstinline!B!. \begin{nonnormative} Having a union of the operators ensures that if \lstinline!A! and \lstinline!B! are the same, each function only appears once. \end{nonnormative} \item - Otherwise, consider the set given by $f$ in \lstinline!A.$\theop$! + Otherwise, consider the set given by $f$ in \lstinline[mathescape=true]!A.$\theop$! and an operator record class \lstinline!C! (different from \lstinline!B!) with a - constructor, $g$, such that \lstinline!C.'constructor'.$g$(b)! is a valid match, and - \lstinline!f(a, C.'constructor'.$g$(b))! is a valid match; and another set given by - $f$ in \lstinline!B.$\theop$! and an operator record class \lstinline!D! + constructor, $g$, such that \lstinline[mathescape=true]!C.'constructor'.$g$(b)! is a valid match, and + \lstinline[mathescape=true]!f(a, C.'constructor'.$g$(b))! is a valid match; and another set given by + $f$ in \lstinline[mathescape=true]!B.$\theop$! and an operator record class \lstinline!D! (different from \lstinline!A!) with a constructor, $h$, such that - \lstinline!D.'constructor'.$h$(a)! is a valid match and \lstinline!$f$(D.'constructor'.$h$(a), b)! + \lstinline[mathescape=true]!D.'constructor'.$h$(a)! is a valid match and \lstinline[mathescape=true]!$f$(D.'constructor'.$h$(a), b)! is a valid match. If the sum of the sizes of these sets is one this gives the unique match. If the sum of the sizes is larger than one it is an error. \begin{nonnormative} - Informally, this means: If there is no direct match of \lstinline!a $\theop$ b!, then it is tried to find a direct match by automatic type casts of \lstinline!a! or \lstinline!b!, by converting either \lstinline!a! or \lstinline!b! to the needed type using an appropriate constructor function from one of the operator record classes used as arguments of the overloaded \lstinline!op! functions. Example using the \lstinline!Complex!-definition below: + Informally, this means: If there is no direct match of \lstinline[mathescape=true]!a $\theop$ b!, then it is tried to find a direct match by automatic type casts + of \lstinline!a! or \lstinline!b!, by converting either \lstinline!a! or \lstinline!b! to the needed + type using an appropriate constructor function from one of the + operator record classes used as arguments of the overloaded \lstinline!op! + functions. Example using the Complex-definition below: \begin{lstlisting}[language=modelica] -Real a; -Complex b; -Complex c = a * b; // interpreted as: -// Complex.'*'.multiply(Complex.'constructor'.fromReal(a),b); + Real a; + Complex b; + Complex c = a*b; // interpreted as: + // Complex.'*'.multiply(Complex.'constructor'.fromReal(a),b); \end{lstlisting} \end{nonnormative} -\item\label{overloaded-binary-arrays} +\item Otherwise, if \lstinline!a! or \lstinline!b! is an array expression, then the expression is - conceptually evaluated according to the rules of \cref{scalar-vector-matrix-and-array-operator-functions} with the - following exceptions concerning \cref{matrix-and-vector-multiplication-of-numeric-arrays}: + conceptually evaluated according to the rules of \autoref{scalar-vector-matrix-and-array-operator-functions} with the + following exceptions concerning \autoref{matrix-and-vector-multiplication-of-numeric-arrays}: \begin{enumerate} \def\labelenumii{(\alph{enumii})} \item - \lstinline!$\mathit{vector}$ * $\mathit{vector}$! should be left undefined. + vector*vector should be left undefined. \begin{nonnormative} - The scalar product of \cref{tab:product} does not generalize to the expected linear and conjugate linear scalar product of complex numbers. + The scalar product of \autoref{tab:product} does not generalize to the expected linear and conjugate linear scalar product of complex numbers. \end{nonnormative} \item - \lstinline!$\mathit{vector}$ * $\mathit{matrix}$! should be left undefined. + vector*matrix should be left undefined. \begin{nonnormative} - The corresponding definition of \cref{tab:product} does not generalize to complex numbers in the expected way. + The corresponding definition of \autoref{tab:product} does not generalize to complex numbers in the expected way. \end{nonnormative} \item - If the inner dimension for \lstinline!$\mathit{matrix}$ * $\mathit{vector}$! or \lstinline!$\mathit{matrix}$ * $\mathit{matrix}$! is zero, this uses the overloaded \lstinline!'0'! operator of the result array element type. If the operator \lstinline!'0'! is not defined for that class it is an error if the inner dimension is zero. + If the inner dimension for matrix*vector or matrix*matrix is zero, + this uses the overloaded \lstinline!'0'! operator of the result array element + type. If the operator \lstinline!'0'! is not defined for that class it is an + error if the inner dimension is zero. \end{enumerate} \begin{nonnormative} @@ -243,11 +293,12 @@ \section{Overloaded Binary Operations}\label{overloaded-binary-operations} multiplicative identity. \end{nonnormative} -\item\label{overloaded-binary-error} +\item Otherwise the expression is erroneous. \end{enumerate} -For an element-wise operator, \lstinline!a .op b!, items~\ref{overloaded-binary-predefined}, \ref{overloaded-binary-arrays}, and~\ref{overloaded-binary-error} are used; e.g.\ the operator \lstinline!.+! will always be defined in terms of \lstinline!'+'!. +For an element-wise operator, a .op b, items 1, 4, and 5 are used; e.g. +the operator \lstinline!.+! will always be defined in terms of \lstinline!'+'!. Restrictions: \begin{itemize} @@ -261,11 +312,11 @@ \section{Overloaded Binary Operations}\label{overloaded-binary-operations} (potential) call that lead to multiple matches in (2) above. \end{itemize} -\section{Overloaded Unary Operations}\label{overloaded-unary-operations} +\section{Overloaded Unary Operations}\doublelabel{overloaded-unary-operations} Let $\theop$ denote a unary operator and consider an expression -\lstinline!$\theop$ a! where \lstinline!a! is an instance or array of instances of class -\lstinline!A!. Then \lstinline!$\theop$ a! is evaluated in the following way. +\lstinline[mathescape=true]!$\theop$ a! where \lstinline!a! is an instance or array of instances of class +\lstinline!A!. Then \lstinline[mathescape=true]!$\theop$ a! is evaluated in the following way. \begin{enumerate} \item @@ -273,12 +324,12 @@ \section{Overloaded Unary Operations}\label{overloaded-unary-operations} operation is performed. \item If \lstinline!A! is an operator record class and there exists a unique - function $f$ in \lstinline!A.$\theop$! such that \lstinline!A.$\theop$.$f$(a)! is a valid - match, then \lstinline!$\theop$ a! is evaluated to \lstinline!A.$\theop$.$f$(a)!. It is an + function $f$ in \lstinline[mathescape=true]!A.$\theop$! such that \lstinline[mathescape=true]!A.$\theop$.$f$(a)! is a valid + match, then \lstinline[mathescape=true]!$\theop$ a! is evaluated to \lstinline[mathescape=true]!A.$\theop$.$f$(a)!. It is an error, if there are multiple valid matches. \item Otherwise, if \lstinline!a! is an array expression, then the expression - is conceptually evaluated according to the rules of \cref{scalar-vector-matrix-and-array-operator-functions}. + is conceptually evaluated according to the rules of \autoref{scalar-vector-matrix-and-array-operator-functions}. \item Otherwise the expression is erroneous. \end{enumerate} @@ -300,7 +351,7 @@ \section{Overloaded Unary Operations}\label{overloaded-unary-operations} (negation) and binary (subtraction) operator. \end{itemize} -\section{Example of Overloading for Complex Numbers}\label{example-of-overloading-for-complex-numbers} +\section{Example of Overloading for Complex Numbers}\doublelabel{example-of-overloading-for-complex-numbers} \begin{example} The rules in the previous subsections are demonstrated at hand @@ -320,7 +371,7 @@ \section{Example of Overloading for Complex Numbers}\label{example-of-overloadin end fromReal; end 'constructor'; - encapsulated operator function '+' // short hand notation, see !\cref{specialized-classes}! + encapsulated operator function '+' // short hand notation, see !\autoref{specialized-classes}! import Complex; input Complex c1; input Complex c2; @@ -441,21 +492,21 @@ \section{Example of Overloading for Complex Numbers}\label{example-of-overloadin How overloaded operators can be symbolically processed. Example: \begin{lstlisting}[language=modelica] -Real a; -Complex b; -Complex c = a + b; + Real a; + Complex b; + Complex c = a + b; \end{lstlisting} Due to inlining of functions, the equation for \lstinline!c! is transformed to: \begin{lstlisting}[language=modelica] c = Complex.'+'.add(Complex.'constructor'.fromReal(a), b); - = Complex.'+'.add(Complex(re = a, im = 0), b) - = Complex(re = a + b.re, im = b.im); + = Complex.'+'.add(Complex(re=a,im=0), b) + = Complex(re=a+b.re, im=b.im); \end{lstlisting} or \begin{lstlisting}[language=modelica] -c.re = a + b.re; -c.im = b.im; + c.re = a + b.re; + c.im = b.im; \end{lstlisting} These equations can be symbolically processed as other equations. @@ -469,29 +520,33 @@ \section{Example of Overloading for Complex Numbers}\label{example-of-overloadin flow ComplexCurrent i; end ComplexPin; - ComplexPin p1, p2, p3; + ComplexPin p1,p2,p3; equation - connect(p1, p2); - connect(p1, p3); + connect(p1,p2); + connect(p1,p3); \end{lstlisting} -The two \lstinline!connect!-equations result in the following connection equations: +The two connect equations result in the following connection +equations: \begin{lstlisting}[language=modelica] -p1.v = p2.v; -p1.v = p3.v; -p1.i + p2.i + p3.i = Complex.'0'(); -// Complex.'+'(p1.i, Complex.'+'(p2.i, p3.i)) = Complex.'0'(); + p1.v = p2.v; + p1.v = p3.v; + p1.i + p2.i + p3.i = Complex.'0'(); + // Complex.'+'(p1.i, Complex.'+'(p2.i, p3.i)) = Complex.'0'(); \end{lstlisting} -The restrictions on extends are intended to avoid combining two variants inheriting from the same operator record, but with possibly different operations; thus \lstinline!ComplexVoltage! and \lstinline!ComplexCurrent! still use the operations from \lstinline!Complex!. The restriction that it is not legal to extend from any of its enclosing scopes implies that: +The restrictions on extends are intended to avoid combining two +variants inheriting from the same operator record, but with possibly +different operations; thus ComplexVoltage and ComplexCurrent still use +the operations from Complex. The restriction that it is not legal to +extend from any of its enclosing scopes implies that: \begin{lstlisting}[language=modelica] package A - extends Icon; // Ok - operator record B $\ldots$ end B; -end A; - -package A2 - extends A($\ldots$); // Not legal -end A2; - -package A3 = A($\ldots$); // Not legal + extends Icon; //Ok. + operator record B ... end B; + end A; + + package A2 + extends A(...); // Not legal + end A2; + package A3=A(...); // Not legal \end{lstlisting} \end{example} diff --git a/chapters/packages.tex b/chapters/packages.tex index 73c2e8b2b..5e57b58e3 100644 --- a/chapters/packages.tex +++ b/chapters/packages.tex @@ -1,5 +1,13 @@ -\chapter{Packages}\label{packages} +\chapter{Packages}\doublelabel{packages} +\section{Package as Specialized Class}\doublelabel{package-as-specialized-class} + +The package concept is a specialized class (\autoref{specialized-classes}), using the +keyword \lstinline!package!. + +\section{Motivation and Usage of Packages}\doublelabel{motivation-and-usage-of-packages} + +\begin{nonnormative} Packages in Modelica may contain definitions of constants and classes including all kinds of specialized classes, functions, and subpackages. By the term subpackage we mean that the package is declared @@ -32,171 +40,121 @@ \chapter{Packages}\label{packages} standard mapping of package names to storage places, typically file or directory locations in the file system. \end{itemize} +\end{nonnormative} -\section{Package as Specialized Class}\label{package-as-specialized-class} - -The package concept is a specialized class (\cref{specialized-classes}), using the -keyword \lstinline!package!. - -\section{Importing Definitions from a Package}\label{importing-definitions-from-a-package} +\subsection{Importing Definitions from a Package}\doublelabel{importing-definitions-from-a-package} -The \lstinline!import!-clause makes public classes and other public definitions declared in some package available for use by shorter names in a class or a package. -It is the only way of referring to definitions declared in some other package for use inside an encapsulated package or class. +The import-clause makes public classes and other public definitions +declared in some package available for use by shorter names in a class +or a package. It is the only way of referring to definitions declared in +some other package for use inside an encapsulated package or class. \begin{nonnormative} -The \lstinline!import!-clauses in a package or class fill the following two needs: +Import-clauses in a package or class fill the following two needs: \begin{itemize} \item - Making definitions from other packages available for use (by shorter names) in a package or class. + Making definitions from other packages available for use (by shorter + names) in a package or class. \item Explicit declaration of usage dependences on other packages. \end{itemize} \end{nonnormative} %TODO-FORMAT Should be formatted using tabs or tabular? -An \lstinline!import!-clause\indexinline{import} can occur in one of the following syntactic forms: +An \lstinline!import!-clause can occur in one of the following syntactic forms: -% Note a syntactic form cannot be written as a single \lstinline due to LaTeXML problem reported here: -% https://github.com/brucemiller/LaTeXML/issues/1274 (marked as fixed as of commit 80d7940) -% Instead, we need to break up the \lstinline in mysterious ways. Be sure to check that the generated HTML -% looks OK when making changes! +% Note a syntactic form cannot be written as a single \lstinline[mathescape=true] due to LaTeXML problem reported here: +% https://github.com/brucemiller/LaTeXML/issues/1274 +% Instead, we need to break up the \lstinline at each piece of math (taking the opportunity to leave the whitespace +% outside both \lstinline and math). -\lstinline!import $\mathit{definitionname}$;! (qualified import of top-level definition) +\lstinline!import! $\mathit{packagename}$\lstinline!;! (qualified import) -\lstinline!import $\mathit{packagename}$.!% Break up \lstinline as workaround for LaTeXML issue described above. -\lstinline!$\mathit{definitionname}$;! (qualified import) +\lstinline!import! ${[}\mathit{packagename}$\lstinline!.!${]}\mathit{definitionname}$\lstinline!;! (single definition import) -\lstinline!import $\mathit{packagename}$.{$\mathit{def}_{1}$, $\mathit{def}_{2}$, $\ldots$, $\mathit{def}_{n}$};! (multiple definition import) +\lstinline!import! ${[}\mathit{packagename}$\lstinline!.!${]}$\lstinline!{!$\mathit{def}_{1}$\lstinline!,! $\mathit{def}_{2}$\lstinline!,! $\ldots$\lstinline!,! $\mathit{def}_{n}$\lstinline!};! (multiple definition import) -\lstinline!import $\mathit{packagename}$.*;! (unqualified import) +\lstinline!import! $\mathit{packagename}$\lstinline!.*;! (unqualified import) -\lstinline!import $\mathit{shortname}$ = $\mathit{definitionname}$;! (renaming import of top-level definition) +\lstinline!import! $\mathit{shortpackagename}$ \lstinline!=! $\mathit{packagename}$\lstinline!;! (renaming import) -\lstinline!import $\mathit{shortname}$ = $\mathit{packagename}$.!% Break up \lstinline as workaround for LaTeXML issue described above. -\lstinline!$\mathit{definitionname}$;! (renaming import) +\lstinline!import! $\mathit{shortpackagename}$ \lstinline!=! ${[}\mathit{packagename}$\lstinline!.!${]}\mathit{definitionname}$\lstinline!;! (renaming single def. import) -Here $\mathit{packagename}$ is the fully qualified name of the imported package including possible dot notation and $\mathit{definitionname}$ is the name of an element in a package. The multiple definition import is equivalent to multiple single definition imports with corresponding $\mathit{packagename}$ and definition names. +Here $\mathit{packagename}$ is the fully qualified name of the imported +package including possible dot notation and $\mathit{definitionname}$ is the +name of an element in a package. The multiple definition import is +equivalent to multiple single definition imports with corresponding +packagename and definition names. -\subsection{Lookup of Imported Names}\label{lookup-of-imported-names} +\subsubsection{Lookup of Imported Names}\doublelabel{lookup-of-imported-names} -This section only defines how the imported name is looked up in the \lstinline!import!-clause. -For lookup in general -- including how \lstinline!import!-clauses are used -- see \cref{static-name-lookup}. +This section only defines how the imported name is looked up in the +import clause. For lookup in general -- including how import clauses are +used, see \autoref{static-name-lookup}. -Lookup of the name of an imported package or class deviates from the normal lexical lookup. -For example, consider \lstinline!A.B.C! in the \lstinline!import!-clauses \lstinline!import A.B.C;!, \lstinline!import D = A.B.C;!, or \lstinline!import A.B.C.*;!. -Here, lookup starts with the lexical lookup of the first part of the name (\lstinline!A!) at the top level. +Lookup of the name of an imported package or class, e.g. \lstinline!A.B.C! in the +clauses \lstinline!import A.B.C; import D=A.B.C; import A.B.C.*!, deviates from the +normal lexical lookup by starting the lexical lookup of the first part +of the name at the top-level. -Qualified \lstinline!import!-clauses may only refer to packages or elements of packages, i.e., in \lstinline!import A.B.C;! or \lstinline!import D = A.B.C;!, \lstinline!A.B! must be a package. -Unqualified \lstinline!import!-clauses may only import from packages, i.e., in \lstinline!import A.B.*;!, \lstinline!A.B! must be a package. +Qualified import clauses may only refer to packages or elements of +packages, i.e., in \lstinline!import A.B.C;! or \lstinline!import D=A.B.C;!, +\lstinline!A.B! must be a +package. Unqualified import clauses may only import from packages, i.e., +in \lstinline!import A.B.*;!, \lstinline!A.B! must be a package. \begin{nonnormative} In \lstinline!import A;! the class \lstinline!A! can be any class which is an element of the unnamed top-level package. \end{nonnormative} \begin{nonnormative} -For example, if the package \lstinline!ComplexNumbers! would have been declared as a subpackage inside the package \lstinline!Modelica.Math!, its fully qualified name would be -\lstinline!Modelica.Math.ComplexNumbers!. $\mathit{definitionname}$ is the simple name without dot notation of a single definition that is imported. A $\mathit{shortname}$ is -a simple name without dot notation that can be used to refer to the package after import instead of the presumably much longer $\mathit{packagename}$. - -The forms of \lstinline!import! are exemplified below assuming that we want to access the addition operation of the hypothetical package \lstinline!Modelica.Math.ComplexNumbers!: +For example, if the package \lstinline!ComplexNumbers! would have +been declared as a subpackage inside the package \lstinline!Modelica.Math!, +its fully qualified name would be \lstinline!Modelica.Math.ComplexNumbers!. +Definitionname is the simple name without dot notation of a single +definition that is imported. A shortpackagename is a simple name without +dot notation that can be used to refer to the package after import +instead of the presumably much longer packagename. + +The forms of \lstinline!import! are exemplified below assuming that we want to +access the addition operation of the hypothetical package \lstinline!Modelica.Math.ComplexNumbers!: \begin{lstlisting}[language=modelica] -import Modelica.Math.ComplexNumbers; // Accessed by ComplexNumbers.Add -import Modelica.Math.ComplexNumbers.Add; // Accessed by Add -import Modelica.Math.ComplexNumbers.{Add,Sub}; // Accessed by Add and Sub -import Modelica.Math.ComplexNumbers.*; // Accessed by Add -import Co = Modelica.Math.ComplexNumbers; // Accessed by Co.Add + import Modelica.Math.ComplexNumbers; // Accessed by ComplexNumbers.Add + import Modelica.Math.ComplexNumbers.Add; // Accessed by Add + import Modelica.Math.ComplexNumbers.{Add,Sub}; // Accessed by Add and Sub + import Modelica.Math.ComplexNumbers.*; // Accessed by Add + import Co = Modelica.Math.ComplexNumbers; // Accessed by Co.Add \end{lstlisting} \end{nonnormative} -\subsection{Summary of Rules for Import-Clauses}\label{summary-of-rules-for-import-clauses} +\subsubsection{Summary of Rules for Import Clauses}\doublelabel{summary-of-rules-for-import-clauses} -The following rules apply to \lstinline!import!-clauses: +The following rules apply to import-clauses: \begin{itemize} \item - The \lstinline!import!-clauses are \emph{not} inherited. + Import-clauses are \emph{not} inherited. \item - The \lstinline!import!-clauses are not named elements of a class or package. - This means that \lstinline!import!-clauses cannot be changed by modifiers or redeclarations. + Import-clauses are not named elements of a class or package. This + means that import-clauses cannot be changed by modifiers or + redeclarations. \item - The \emph{order} of \lstinline!import!-clauses does not matter. + The \emph{order} of import-clauses does not matter. \item - One can only import \emph{from} packages, not from other kinds of classes. - Both packages and classes can be imported \emph{into} i.e., they may contain \lstinline!import!-clauses. + One can only import \emph{from} packages, not from other kinds of + classes. Both packages and classes can be imported \emph{into} i.e., + they may contain import-clauses. \item - An imported package or definition should always be referred to by its fully qualified name in the \lstinline!import!-clause. + An imported package or definition should always be referred to by its + fully qualified name in the import-clause. \item - Multiple qualified \lstinline!import!-clauses shall not have the same import name. + Multiple qualified import-clauses may not have the same import name. \end{itemize} -\section{The Modelica Library Path -- MODELICAPATH}\label{the-modelica-library-path-modelicapath} - -The top-level scope implicitly contains a number of classes stored externally. -If a top-level name is not found at global scope, a Modelica translator shall look up additional classes in an ordered list of library roots, called \lstinline!MODELICAPATH!\indexinline{MODELICAPATH}. - -\begin{nonnormative} -The implementation of \lstinline!MODELICAPATH! is tool dependent. In order that a user can work in parallel with different Modelica tools, it is advisable to not -have this list as environment variable, but as a setting in the respective tool. Since \lstinline!MODELICAPATH! is tool dependent, it is not specified in which way -the list of library roots is stored. Typically, on a Windows system \lstinline!MODELICAPATH! is a string with path names separated by `\filename{;}' whereas on a Linux system -it is a string with path names separated by a `\filename{:}'. -\end{nonnormative} - -In addition a tool may define an internal list of libraries, since it is -in general not advisable for a program installation to modify global -environment variables. The version information for a library (as defined -in \cref{annotations-for-version-handling}) may also be used during this search to search for a -specific version of the library (e.g.\ if Modelica library version 2.2 is -needed and the first directory in \lstinline!MODELICAPATH! contain Modelica library -version 2.1, whereas the second directory contains Modelica version 2.2, -then Modelica library version 2.2 is loaded from the second directory.). - -\begin{nonnormative} -The first part of the path \lstinline!A.B.C! (i.e., \lstinline!A!) is located by searching the ordered list of roots in \lstinline!MODELICAPATH!. If no root contains -\lstinline!A! the lookup fails. If \lstinline!A! has been found in one of the roots, the rest of the path is located in \lstinline!A!; if that fails, the entire lookup -fails without searching for \lstinline!A! in any of the remaining roots in \lstinline!MODELICAPATH!. -\end{nonnormative} - -\subsection{Example of Searching MODELICAPATH}\label{example-of-searching-modelicapath} - -If during lookup a top-level name is not found in the unnamed top-level -scope, the search continues in the package hierarchies stored in these -directories. - -\begin{example} -\Cref{fig:roots} below shows an example \lstinline!MODELICAPATH! = \filename{"C:\textbackslash{}library;C:\textbackslash{}lib1;C:\textbackslash{}lib2"}, with three -directories containing the roots of the package hierarchies \lstinline!Modelica!, \lstinline!MyLib!, and \lstinline!ComplexNumbers!. The first two are represented as -the subdirectories \filename{C:\textbackslash{}library\textbackslash{}Modelica} and \filename{C:\textbackslash{}lib1\textbackslash{}MyLib}, whereas the third is stored -as the file \filename{C:\textbackslash{}lib2\textbackslash{}ComplexNumbers.mo}. - -\begin{figure}[H] - \begin{center} - \includegraphics{modelicapath} - \end{center} - \caption{Roots of package hierarchies, e.g., \lstinline!Modelica!, \lstinline!MyLib!, and \lstinline!ComplexNumbers! in - \lstinline!MODELICAPATH! = \filename{"C:\textbackslash{}library;C:\textbackslash{}lib1;C:\textbackslash{}lib2"}.} - \label{fig:roots} -\end{figure} - -Assume that we want to access the package \lstinline!MyLib.Pack2! in \cref{fig:roots} above, e.g.\ through an \lstinline!import!-clause \lstinline!import MyLib.Pack2;!. -During lookup we first try to find a package \lstinline!MyLib! corresponding to the first part of the import name. It is not found in the top-level scope since it has not -previously been loaded into the environment. - -Since the name was not found in the top-level scope the search continues in the directories in the \lstinline!MODELICAPATH! in the specified order. For the search to succeed, -there must be a subdirectory \filename{MyLib} or a file \filename{MyLib.mo} in one of the directories mentioned in the \lstinline!MODELICAPATH!. If there is no such -subdirectory or file, the lookup fails. If \filename{MyLib} is found in one of the directories, the rest of the name, in this case \lstinline!Pack2!, is located in -\filename{MyLib}. If that fails, the entire lookup fails without continuing the search in possibly remaining directories. - -In this example the name matches the subdirectory named \filename{MyLib} in the second directory \filename{C:\textbackslash{}lib1} mentioned in the \lstinline!MODELICAPATH!. -This subdirectory must have a file \filename{package.mo} containing a definition of the package \lstinline!MyLib!, according to the Modelica rules on how to map a package -hierarchy to the file system. The subpackage \lstinline!Pack2! is stored in its own subdirectory or file in the subdirectory \filename{MyLib}. In this case the search -succeeds and the package \lstinline!MyLib.Pack2! is loaded into the environment. -\end{example} - - -\section{Mapping Package/Class Structures to a Hierarchical File System}\label{mapping-package-class-structures-to-a-hierarchical-file-system} +\subsection{Mapping Package/Class Structures to a Hierarchical File System}\doublelabel{mapping-package-class-structures-to-a-hierarchical-file-system} Packages/classes may be represented in the hierarchical structure of the operating system (the file system). For classes with version -information see also \cref{mapping-of-versions-to-file-system}. The nature of such an external +information see also \autoref{mapping-of-versions-to-file-system}. The nature of such an external entity falls into one of the following two groups: \begin{itemize} \item @@ -208,16 +166,19 @@ \section{Mapping Package/Class Structures to a Hierarchical File System}\label{m File in the file system. \end{itemize} -Each Modelica file in the file-system is stored in UTF-8 format (defined by The Unicode Consortium; \lstinline!http://www.unicode.org!). A deprecated feature is that the file may start with the UTF-8 encoded BOM (byte order mark; \lstinline!0xef 0xbb 0xbf!); this is treated as white-space in the grammar. Since the use of BOM is deprecated, tools can ignore any BOM when reading, and it is recommended to never write it. +Each Modelica file in the file-system is stored in UTF-8 format (defined +by The Unicode Consortium; \lstinline!http://www.unicode.org!) and may start with +the UTF-8 encoded byte order mark (\lstinline!0xef 0xbb 0xbf!); this is treated as +white-space in the grammar. \begin{nonnormative} Tools may also store classes in data-base systems, but that is not standardized. \end{nonnormative} -\subsection{Mapping a Package/Class Hierarchy into a Directory Hierarchy (Structured Entity)}\label{mapping-a-package-class-hierarchy-into-a-directory-hierarchy-structured-entity} +\subsubsection{Mapping a Package/Class Hierarchy into a Directory Hierarchy (Structured Entity)}\doublelabel{mapping-a-package-class-hierarchy-into-a-directory-hierarchy-structured-entity} -A directory shall contain a node, the file \filename{package.mo}. -The node shall contain a \lstinline[language=grammar]!stored-definition! that defines a class \lstinline!A! with a name matching the name of the structured entity. +A directory shall contain a node, the file \filename{package.mo}. The node shall contain a stored-definition that defines a class \lstinline!A! with a name +matching the name of the structured entity. \begin{nonnormative} The node typically contains documentation and graphical information for a package, but may also contain additional elements of the class \lstinline!A!. @@ -247,25 +208,27 @@ \subsection{Mapping a Package/Class Hierarchy into a Directory Hierarchy (Struct \filename{package.mo} (this ensures that the relative order between classes and constants stored in different ways is preserved). -\subsection{Mapping a Package/Class Hierarchy into a Single File (Nonstructured Entity)}\label{mapping-a-package-class-hierarchy-into-a-single-file-nonstructured-entity} +\subsubsection{Mapping a Package/Class Hierarchy into a Single File (Nonstructured Entity)}\doublelabel{mapping-a-package-class-hierarchy-into-a-single-file-nonstructured-entity} -When mapping a package or class-hierarchy to a file (e.g.\ the file \filename{A.mo}), that file shall only define a single class \lstinline!A! with a +When mapping a package or class-hierarchy to a file (e.g. the file \filename{A.mo}), that file shall only define a single class \lstinline!A! with a name matching the name of the nonstructured entity. In a file hierarchy the files shall have the extension \filename{.mo}. A \filename{.mo} file defining more than one class cannot be part of the mapping to file-structure and it is an error if it is loaded from the \lstinline!MODELICAPATH!. -\subsection{The within Clause}\label{the-within-clause} +\subsubsection{The within Clause}\doublelabel{the-within-clause} -A \lstinline!within!-clause has the following syntax: +A within-clause has the following syntax: \begin{lstlisting}[language=grammar] within [ packageprefixname ] ";" -\end{lstlisting}% -\indexinline{within} -A non-top-level entity shall begin with a \lstinline!within!-clause which for the class defined in the entity specifies the location in the Modelica class hierarchy. -A top-level class may contain a \lstinline!within!-clause with no name. -For a sub-entity of an enclosing structured entity, the \lstinline!within!-clause shall designate the class of the enclosing entity; and this class must exist and must not have been defined using a short class definition. +\end{lstlisting} + A non-top-level entity shall begin with a within-clause which for the + class defined in the entity specifies the location in the Modelica class + hierarchy. A top-level class may contain a within-clause with no name. + For a sub-entity of an enclosing structured entity, the within-clause +shall designate the class of the enclosing entity; and this class must +exist and must not have been defined using a short class definition. \begin{example} The subpackage \lstinline!Rotational! declared within @@ -274,20 +237,27 @@ \subsection{The within Clause}\label{the-within-clause} the packageprefixname with the short name of the package. The declaration of \lstinline!Rotational! could be given as below: \begin{lstlisting}[language=modelica] -within Modelica.Mechanics; -package Rotational // Modelica.Mechanics.Rotational - $\ldots$ + within Modelica.Mechanics; + package Rotational // Modelica.Mechanics.Rotational + ... \end{lstlisting} \end{example} -\section{External resources}\label{external-resources} +\subsection{External resources}\doublelabel{external-resources} -In order to reference external resources from documentation (such as links and images in html-text) and/or to reference images in the \lstinline!Bitmap! annotation (see \cref{bitmap}). -Absolute URIs should be used, for example \filename{file:///} and the URI scheme \filename{modelica://} which can be used to retrieve resources associated with a package. -According to the URI specification scheme names are case-insensitive, but the lower-case form should be used, that is \filename{Modelica://} is allowed but \filename{modelica://} is the recommended form. +In order to reference external resources from documentation (such as +links and images in html-text) and/or to reference images in the Bitmap +annotation (see \autoref{bitmap}). URIs should be used, for example +\filename{file:///} and the URI scheme \filename{modelica://} which can be used to retrieve +resources associated with a package. According to the URI specification scheme names are +case-insensitive, but the lower-case form should be used, that is \filename{Modelica://} is allowed but \filename{modelica://} is the +recommended form. -The Modelica-scheme\index{Modelica!URI scheme}\index{URI!Modelica} has the ability to reference a hierarchical structure of resources associated with packages. -The same structure is used for all kind of resource references, independent of use (external file, image in documentation, bitmap in icon layer, and link to external file in the documentation), and regardless of the storage mechanism. +The Modelica-scheme has the ability to reference a hierarchical +structure of resources associated with packages. The same structure is +used for all kind of resource references, independent of use (external +file, image in documentation, bitmap in icon layer, and link to external +file in the documentation), and regardless of the storage mechanism. Any Modelica-scheme URI containing a slash after the package-name is interpreted as a reference to a resource. The \emph{authority} portion of the @@ -298,31 +268,105 @@ \section{External resources}\label{external-resources} scheme or when restructuring packages that resource references resolve to the same resource). Any storage scheme should be constrained such that a resource with a given path should be unique for any package name -that precedes it. The first part of the path shall not be the name of a +that precedes it. The first part of the path may not be the name of a class in the package given by the authority. -When Modelica packages are stored hierarchically in a file-system (i.e.\ package \lstinline!A! in a directory \filename{A} containing \filename{package.mo}) the resource -\filename{modelica://A/Resources/C.jpg} should be stored in the file \filename{A/Resources/C.jpg}, it is not recommend to use \filename{modelica://A.B/C.jpg} for referencing -resources; it could be stored in the file \filename{A/B/C.jpg} -- which is counter-intuitive if \lstinline!A.B! is stored together with \lstinline!A!. When Modelica packages -are stored in other formats a similar mapping should be defined, such that a resource with a given path should be unique for any package name that precedes it. The first -part of the path shall not be the name of a class in the package given by the authority. As above for \filename{Modelica 3.2.1/package.mo} i.e.\ resources starting from -\filename{Modelica 3.2.1}, and \filename{modelica://Modelica.Mechanics/C.jpg} is \filename{Modelica 3.2.1/Mechanics/C.jpg} -- regardless of whether \lstinline!Modelica.Mechanics! -is stored in \filename{Modelica 3.2.1/package.mo}, \filename{Modelica 3.2.1/Mechanics.mo}, or \filename{Modelica 3.2.1/Mechanics/package.mo}. +When Modelica packages are stored hierarchically in a file-system (i.e. +package \lstinline!A! in a directory \filename{A} containing \filename{package.mo}) the resource +\filename{modelica://A/Resources/C.jpg} should be stored in the file +\filename{A/Resources/C.jpg}, it is not recommend to use \filename{modelica://A.B/C.jpg} +for referencing resources; it could be stored in the file \filename{A/B/C.jpg} -- +which is counter-intuitive if \lstinline!A.B! is stored together with \lstinline!A!. When +Modelica packages are stored in other formats a similar mapping should +be defined, such that a resource with a given path should be unique for +any package name that precedes it. The first part of the path may not be +the name of a class in the package given by the authority. As above for +\filename{Modelica 3.2.1/package.mo} i.e. resources starting from \filename{Modelica +3.2.1}, and \filename{modelica://Modelica.Mechanics/C.jpg} is \filename{Modelica +3.2.1/Mechanics/C.jpg} - regardless of whether \lstinline!Modelica.Mechanics! is +stored in \filename{Modelica 3.2.1/package.mo}, \filename{Modelica +3.2.1/Mechanics/package.mo}, or \filename{Modelica 3.2.1/Mechanics.mo}. For a Modelica-package stored as a single file, \filename{A.mo}, the resource \filename{modelica://A/C.jpg} refers to a file \filename{C.jpg} stored in the same directory as \filename{A.mo}, but using resources in this variant is not recommended since multiple packages will share resources. -In case the name of the class contains quoted identifiers, the single-quote `\lstinline!`!' +In case the class-name contains quoted identifiers, the single-quote `\lstinline!`!' and any reserved characters (`\lstinline!:!', `\lstinline!/!', `\lstinline!?!', `\lstinline!\#!', `\lstinline![!', -`\lstinline!]!', `\lstinline!@!', `\lstinline!!!', `\lstinline[mathescape=false]!\$!', `\lstinline!\&!', `\lstinline!(!', `\lstinline!)!', `\lstinline!*!', `\lstinline!+!', +`\lstinline!]!', `\lstinline!@!', `\lstinline!!!', `\lstinline!\$!', `\lstinline!\&!', `\lstinline!(!', `\lstinline!)!', `\lstinline!*!', `\lstinline!+!', `\lstinline!,!', `\lstinline!;!', `\lstinline!=!') should be percent-encoded as normal in URIs. \begin{example} Consider a top-level package \lstinline!Modelica! and a class \lstinline!Mechanics! inside it, a reference such as \filename{modelica://Modelica.Mechanics/C.jpg} is legal, while -\filename{modelica://Modelica/Mechanics/C.jpg} is illegal. -The references \filename{modelica://Modelica.Mechanics/C.jpg} and \filename{modelica://Modelica/C.jpg} must also refer to two distinct resources. +\filename{modelica://Modelica/Mechanics/C.jpg} is illegal. The reference +\filename{modelica://Modelica.Mechanics/C.jpg} must also refer to a different +resource than \filename{modelica://Modelica/C.jpg}. +\end{example} + +\subsection{The Modelica Library Path -- MODELICAPATH}\doublelabel{the-modelica-library-path-modelicapath} + +The top-level scope implicitly contains a number of classes stored +externally. If a top-level name is not found at global scope, a Modelica +translator shall look up additional classes in an ordered list of +library roots, called \lstinline!MODELICAPATH!. + +\begin{nonnormative} +The implementation of \lstinline!MODELICAPATH! is tool dependent. In order that a user can work in parallel with different Modelica tools, it is advisable to not +have this list as environment variable, but as a setting in the respective tool. Since \lstinline!MODELICAPATH! is tool dependent, it is not specified in which way +the list of library roots is stored. Typically, on a Windows system \lstinline!MODELICAPATH! is a string with path names separated by `\filename{;}' whereas on a Linux system +it is a string with path names separated by a `\filename{:}'. +\end{nonnormative} + +In addition a tool may define an internal list of libraries, since it is +in general not advisable for a program installation to modify global +environment variables. The version information for a library (as defined +in \autoref{annotations-for-version-handling}) may also be used during this search to search for a +specific version of the library (e.g. if Modelica library version 2.2 is +needed and the first directory in \lstinline!MODELICAPATH! contain Modelica library +version 2.1, whereas the second directory contains Modelica version 2.2, +then Modelica library version 2.2 is loaded from the second directory.). + +\begin{nonnormative} +The first part of the path \lstinline!A.B.C! (i.e., \lstinline!A!) is located by searching the ordered list of roots in \lstinline!MODELICAPATH!. If no root contains +\lstinline!A! the lookup fails. If \lstinline!A! has been found in one of the roots, the rest of the path is located in \lstinline!A!; if that fails, the entire lookup +fails without searching for \lstinline!A! in any of the remaining roots in \lstinline!MODELICAPATH!. +\end{nonnormative} + +\subsubsection{Example of Searching MODELICAPATH}\doublelabel{example-of-searching-modelicapath} + +If during lookup a top-level name is not found in the unnamed top-level +scope, the search continues in the package hierarchies stored in these +directories. + +\begin{example} +\autoref{fig:roots} below shows an example \lstinline!MODELICAPATH! = \filename{"C:\textbackslash{}library;C:\textbackslash{}lib1;C:\textbackslash{}lib2"}, with three +directories containing the roots of the package hierarchies \lstinline!Modelica!, \lstinline!MyLib!, and \lstinline!ComplexNumbers!. The first two are represented as +the subdirectories \filename{C:\textbackslash{}library\textbackslash{}Modelica} and \filename{C:\textbackslash{}lib1\textbackslash{}MyLib}, whereas the third is stored +as the file \filename{C:\textbackslash{}lib2\textbackslash{}ComplexNumbers.mo}. + +\begin{figure}[H] +\caption{% +Roots of package hierarchies, e.g., \lstinline!Modelica!, \lstinline!MyLib!, and \lstinline!ComplexNumbers! in +\lstinline!MODELICAPATH! = \filename{"C:\textbackslash{}library;C:\textbackslash{}lib1;C:\textbackslash{}lib2"}. +} +\label{fig:roots} +\includegraphics[width=6in,height=2in]{modelicapath} +\end{figure} + +Assume that we want to access the package \lstinline!MyLib.Pack2! in \autoref{fig:roots} above, e.g. through an \lstinline!import!-clause \lstinline!import MyLib.Pack2;!. +During lookup we first try to find a package \lstinline!MyLib! corresponding to the first part of the import name. It is not found in the top-level scope since it has not +previously been loaded into the environment. + +Since the name was not found in the top-level scope the search continues in the directories in the \lstinline!MODELICAPATH! in the specified order. For the search to succeed, +there must be a subdirectory \filename{MyLib} or a file \filename{MyLib.mo} in one of the directories mentioned in the \lstinline!MODELICAPATH!. If there is no such +subdirectory or file, the lookup fails. If \filename{MyLib} is found in one of the directories, the rest of the name, in this case \lstinline!Pack2!, is located in +\filename{MyLib}. If that fails, the entire lookup fails without continuing the search in possibly remaining directories. + +In this example the name matches the subdirectory named \filename{MyLib} in the second directory \filename{C:\textbackslash{}lib1} mentioned in the \lstinline!MODELICAPATH!. +This subdirectory must have a file \filename{package.mo} containing a definition of the package \lstinline!MyLib!, according to the Modelica rules on how to map a package +hierarchy to the file system. The subpackage \lstinline!Pack2! is stored in its own subdirectory or file in the subdirectory \filename{MyLib}. In this case the search +succeeds and the package \lstinline!MyLib.Pack2! is loaded into the environment. \end{example} diff --git a/chapters/preface.tex b/chapters/preface.tex index c0932f790..517792b03 100644 --- a/chapters/preface.tex +++ b/chapters/preface.tex @@ -1,13 +1,12 @@ -\chapter*{Preface}\label{preface} +\chapter*{Preface}\doublelabel{preface} % https://tex.stackexchange.com/questions/45672/adding-numberless-chapters-to-the-table-of-contents \addcontentsline{toc}{chapter}{\protect\numberline{}Preface} Modelica is a freely available, object-oriented language for modeling of large, complex, and heterogeneous physical systems. From a user's point of view, models are described by schematics, also called object -diagrams. Examples are shown below: -\begin{center} -\includegraphics[width=0.95\textwidth]{diagram_examples} -\end{center} +diagrams. Examples are shown in the next figure: + +\includegraphics[width=5.92986in,height=3.59167in]{image2.png} A schematic consists of connected components, like a resistor, or a hydraulic cylinder. A component has \emph{connectors} (often also called @@ -40,8 +39,6 @@ \chapter*{Preface}\label{preface} translator and by modelers who want to understand the exact details of a particular language element. -The text directly under the chapter headings are non-normative introductions to the chapters. - -The Modelica language has been developed since 1996. -This document describes version \mlsversion{} of the Modelica language. -The revision history is available in \cref{modelica-revision-history}. +The Modelica language has been developed since 1996. This document +describes version 3.4 of the Modelica language. A complete summary is +available in \autoref{modelica-3-4}. diff --git a/chapters/revisions.tex b/chapters/revisions.tex index d6295ae8d..6de47da79 100644 --- a/chapters/revisions.tex +++ b/chapters/revisions.tex @@ -1,706 +1,313 @@ -\chapter{Modelica Revision History}\label{modelica-revision-history} +\chapter{Modelica Revision History}\doublelabel{modelica-revision-history} This appendix describes the history of the Modelica Language Design, and its contributors. This appendix is just present for historic reasons and is not normative. The current version of this document is available from \url{https://www.modelica.org/documents}. -\section{Modelica 3.5}\label{modelica-3-5} - -Modelica 3.5 was last edited December 31, 2020, and will later be voted to be approved. -The Modelica 3.5 specification was edited by Hans Olsson. - -\subsection{Main changes in Modelica 3.5}\label{main-changes-in-modelica-3-5} - -The following Modelica Change Proposals are backward compatible extensions added in 3.5: -\begin{itemize} -\item Change of specification format (MCP-0018). -The development of the specification was changed to use \LaTeX{} for formatting; and \url{https://github.com/modelica/ModelicaSpecification} for issue-tracking. -\item Annotations for Predefined Plots (MCP-0033), \cref{annotations-for-figures}. Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2710}{\#2710}. -\begin{itemize} -\item Generalize links in text markup, \cref{text-markup-escape-sequences}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2692}{\#2692}. -\item Mandate that Axis.unit is for tick labels, \cref{axis-properties}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2633}{\#2633}. -\item Define meaning of empty Axis.unit, \cref{axis-properties}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2632}{\#2632}. -\item Elaborate on inheritance of figures, \cref{annotations-for-figures}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2588}{\#2588}. -\item Clarified that leading and ending newline is ignored, \cref{text-markup-in-captions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2581}{\#2581}. -\item Made figure title optional, \cref{annotations-for-figures}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2580}{\#2580}. -\item Clarified curves and units for figures, \cref{axis-properties} and \cref{plot-curves}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2579}{\#2579}. -\item Clarified uniqueness of Figure and Plot identifiers, \cref{annotations-for-figures}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2544}{\#2544}. -\item Relaxed uniqueness of Plot identifiers, \cref{annotations-for-figures}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2537}{\#2537}. -\item Updated to have HTML-caption, sub-plot title and identifier. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2363}{\#2363}. -\end{itemize} -\end{itemize} - -Other issues resolved were: -\begin{itemize} -\item Overall improvements of the document, made easier by the switch to \LaTeX. -\begin{itemize} -\item A real bibliography was added, but excluding papers in this chapter; \href{https://github.com/modelica/ModelicaSpecification/pull/2740}{\#2740}. -\item Dead links in the bibliography were removed and DOI used when possible. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2502}{\#2502}. -\item Chapter introductions are now non-normative, \href{https://github.com/modelica/ModelicaSpecification/issues/2366}{\#2366}. -\item The index was updated to reference the main definition of the term, and the glossary removed to avoid duplicated effort; \href{https://github.com/modelica/ModelicaSpecification/pull/2726}{\#2726}. -\item Hyphens and dashes were cleaned up, \href{https://github.com/modelica/ModelicaSpecification/pull/2628}{\#2628}. -\item Minor English language improvements, including removing "allows to" and "may not". -Tickets \href{https://github.com/modelica/ModelicaSpecification/issues/2685}{\#2685}, \href{https://github.com/modelica/ModelicaSpecification/issues/2683}{\#2683}, and additional ones. -\item Moved non-normative text to separate paragraphs. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2536}{\#2536}. -\item Consistent use of different quote symbols. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2508}{\#2508}. -\item The minor issues related to change of formatting, continuous integration, examples, and maintenance of repository are not listed here. -\end{itemize} - -\item Improved functions, \cref{functions}. -\begin{itemize} -\item Clarified impure function as function arguments, \cref{pure-modelica-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2756}{\#2756}. -\item Clarified that public variables in functions must be input or output, \cref{function-as-a-specialized-class}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2730}{\#2730}. -\item Changed inputs to C functions to be const-correct, \cref{arrays-1}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1955}{\#1955}. -\item Clarified that external object is a class, \cref{external-objects}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2705}{\#2705}. -\item Deprecate "builtin" external language, \cref{external-function-interface}. -Avoid reference to Modelica.Math \cref{built-in-mathematical-functions-and-external-built-in-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2662}{\#2662}. -\item Clarified functions with no outputs, \cref{empty-function-calls}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2692}{\#2692}. -\item Replace use of outdated grammar-construct class-name, \cref{external-resources}, \cref{functional-input-arguments-to-functions}, and \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2598}{\#2598}. -\item Updated example for function as argument to function, \cref{functional-input-arguments-to-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2563}{\#2563}. -\item Extend function inverses and clarify them, \cref{modelica:inverse}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2478}{\#2478}. -\item Clarify consequence of using impure functions in binding equations for parameters, \cref{pure-modelica-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2475}{\#2475}. -\item Removed deprecated assignments from function declaration template, \cref{function-declaration}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2439}{\#2439}. -\item Corrected regression in example specifying the second derivative of a function, \cref{using-the-derivative-annotation}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2401}{\#2401}. -\item Clarified variability restrictions of inputs in functions, \cref{parameter-expressions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2243}{\#2243}. -\item Clarified handling of lib/dll on Windows, \cref{annotations-for-external-libraries-and-include-files}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2252}{\#2252}. -\item Clarified function component, \cref{functional-input-arguments-to-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2255}{\#2255}. -\item Clarified that object-files are not library-files, \cref{annotations-for-external-libraries-and-include-files}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2257}{\#2257}. -\item Clarified ModelicaAllocateString, \cref{utility-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2279}{\#2279}. -\item Clarified memory management for external objects, \cref{external-objects}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2524}{\#2524}. -\item Introduced ModelicaDuplicateString for C-code, \cref{utility-functions-for-allocating-strings}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2417}{\#2417}. -\item Improved ModelicaAllocateString for C-code, \cref{utility-functions-for-allocating-strings}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2403}{\#2403}. -\end{itemize} - -\item Clarified synchronous Modelica, \cref{synchronous-language-elements} -\begin{itemize} -\item Clarified that clock operators are not callable in functions and that functions may not contain Clock-variables and that they do not vectorize, \cref{argument-restrictions-component-expression}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2177}{\#2177} and Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2269}{\#2269}. -\item Clarified that clocks are not valid inputs for hold, \cref{base-clock-conversion-operators}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2174}{\#2174}. -\item Clarified rational clock to only have translation-time clock inference, \cref{modelica:clock-rational}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2386}{\#2386}. -\item Clarified that different clock partitions should be separate, \cref{sub-clock-partitioning}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2365}{\#2365}. -\item Rewrote rationale to be positive, \cref{rationale-for-clocked-semantics}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2512}{\#2512}. -\item Clarified terminology for discrete states, \cref{clocked-state-variables}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2651}{\#2651}. -\item Clarified that clocked signals are extrapolated using hold, not constant \cref{clocks-and-clocked-variables}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2607}{\#2607}. -\item Clarified that clock constructors can take named arguments and that clock partioning must be parametric, \cref{clock-constructors}; -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2394}{\#2394}. -\item Restricted noClock to not take a Clock as input, \cref{sub-clock-conversion-operators}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2355}{\#2355}. -\item Consistently use "Event Clock". -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2356}{\#2356}. -\item Clarified that Boolean clock is considered for clock partitioning, \cref{base-clock-partitioning}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2179}{\#2179}. -\item Clarified Real Clock constructor interval argument, \cref{clock-constructors}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2180}{\#2180}. -\item Clarified inferencing of solverMethod by rewriting algorithm, \cref{inferencing-of-solvermethod}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2182}{\#2182}. -\item Clarified wording of solver method for clock constructor, \cref{clock-constructors}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2194}{\#2194}. -\item Clarify that clocked operators cannot be differentiated, \cref{sub-clock-conversion-operators}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2236}{\#2236}. -\item Clarified that hold and backSample only take component expressions, \cref{flattening-of-model}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2270}{\#2270}. -\end{itemize} - -\item Clarified state-machines, \cref{state-machines}. -\begin{itemize} -\item Removed color recommendation for state machines, \cref{state-machine-graphics}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2650}{\#2650}. -\item Clarified connecting multiple outputs (for state-machines), \cref{merging-connections-to-multiple-outputs}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2735}{\#2735}. -\item Clarified inactive equations, \cref{activation-handling}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2734}{\#2734}. -\item Defined hierarchical ticksInState and timeInState, \cref{transitions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2407}{\#2407}. -\item Correct both variants of nextResetStates to clarify reset handling, \cref{reset-handling}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2209}{\#2209}. -\end{itemize} - - -\item Conversions, \cref{conversion-rules}, were used for Modelica Standard Library 4.0.0, and were thus clarified and slightly extended for the future. -\begin{itemize} -\item Extend convertMessage to elements of classes, \cref{convertmessageoldclass-failed-message2}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2516}{\#2516}. -\item Clarify convertClassIf for enumerations and strings and restrict allowed types, \cref{conversion-rules}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2451}{\#2451}. -\item Further clarify conversion rules, \cref{conversion-rules}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2522}{\#2522}. -\item Avoid ambiguity by giving precedence to convertModifiers, \cref{conversion-rules}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2409}{\#2409}. -\item Clarified inheritance for conversions, \cref{conversion-rules}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2178}{\#2178}. -\end{itemize} - -\item Added and clarified other specific annotations, \cref{annotations}. -\begin{itemize} -\item Annotation SourceDirectory which is a starting point for exporting sources, \cref{annotations-for-external-libraries-and-include-files}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2145}{\#2145}. -\item Clarified Evaluate annotation for hierarchical components, \cref{annotations-for-symbolic-processing}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2288}{\#2288}. -\item Added test-case annotation for incorrect models, \cref{modelica:TestCase}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2340}{\#2340}. -\item Clarified choicesAllMatching, \cref{annotation-choices-for-suggested-redeclarations-and-modifications}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2693}{\#2693}. -\item Clarified HTML encoded contents, \cref{annotations-for-documentation}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2593}{\#2593}. -\item Allow restricted form of Dialog annotation for classes, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2617}{\#2617}. -\item Clarified connectorSizing, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2599}{\#2599}. -\item Improved description for Documentation annotation (included with MCP-0033), \cref{annotations-for-documentation}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2594}{\#2594}. -\item Clarified order in parameter dialog, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2310}{\#2310}. -\item Clarify URI fragments, \cref{annotations-for-documentation}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2445}{\#2445}. -\item Specify that Dialog group does not have a default, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2476}{\#2476}. -\item Clarify aspect ratio for lines with arrows, \cref{line}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2528}{\#2528}. -\item Clarify that protection of classes prevent "copying", \cref{protection-of-classes}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2260}{\#2260}. -\item Extended bitmaps to allow svg-format, \cref{bitmap}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/174}{\#174}. -\item Clarified macros for text, \cref{text}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2416}{\#2416}. -\item State that changing default name for inner/outer component is not good, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2398}{\#2398}. -\item Clarified that preserveAspectRatio is a hint, \cref{coordinate-systems}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2268}{\#2268}. -\item Clarified that include-files provide prototypes, \cref{external-function-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2278}{\#2278}. -\item Clarified visibility of encrypted contents, \cref{protection-of-classes}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2318}{\#2318}. -\item Clarified that missingInnerMessage is a literal string, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2334}{\#2334}. -\item Clarified text-macros including \lstinline!%class!, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2335}{\#2335}. -\item Clarified that obsolete is not inherited, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2338}{\#2338}. -\item Added unit for \lstinline!%par!, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2339}{\#2339}. -\item Clarified text-annotations on connections, \cref{connections1}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2170}{\#2170}. -\item Add iconVisible to be able to show/hide connectors in icon layer for public connectors, \cref{component-instance}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2200}{\#2200}. -\item Correct grammar for experiment and give default for \lstinline!StartTime!, \cref{modelica:experiment}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2224}{\#2224}. -\item Clarified that versionBuild and dateModified can be used for uses annotation, \cref{version-handling}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2239}{\#2239}. -\item Clarified that image backgrounds are assumed to be white/transparent with light color, \cref{annotations-for-the-graphical-user-interface}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2244}{\#2244}. -\item Clarified that IconMap is also allowed on short class definitions, \cref{extends-clause}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2281}{\#2281}. -\item Clarify that some protection annotations have no effect (not merely no "meaningful effect"), \cref{protection-of-classes}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2193}{\#2193}. -\end{itemize} - -\item Minor updates of syntax, \cref{modelica-concrete-syntax}. -\begin{itemize} -\item Update grammar to use description instead of non-existent comment, \cref{grammar}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2620}{\#2620}. -\item Allow empty quoted identifier, \cref{identifiers}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2612}{\#2612}. -\item Allow .13 as floating point number, \cref{floating-point-numbers}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2122}{\#2122}. -\item Factor out function-partial application, \cref{expressions1}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2250}{\#2250}. -\item Reverted regression for function arguments, \cref{expressions1}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2176}{\#2176}. -\item Renamed string-comment to description-string, \cref{comments}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2467}{\#2467}. -\item Clarified quoted identifiers, \cref{identifiers}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2408}{\#2408}. -\item Correct grammar to allow ".*" as one token for import, \cref{class-definition}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2430}{\#2430}. -\item Removed redundant parentheses in syntax rules, \cref{grammar}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2434}{\#2434}. -\item Removed old underscores in syntax rule, \cref{expressions1}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2431}{\#2431}. -\item Corrected use of annotation-comment, \cref{extends}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2428}{\#2428}. -\end{itemize} - -\item Improved DAE-chapter to be a complete description, \cref{modelica-dae-representation}. -\begin{itemize} -\item Added clocked variables. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2286}{\#2286}. -\item Stated solvability requirements for discrete-valued variables. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2639}{\#2639}. -\end{itemize} - -\item Improved stream connector formulation, \cref{derivation-of-stream-equations} -\begin{itemize} -\item Updated notation to use mass-flows as derivatives, \cref{derivation-of-stream-equations}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2644}{\#2644}. -\item Further clarify inStream simplifications, \cref{connection-of-3-stream-connectors-where-one-mass-flow-rate-is-identical-to-zero-n-3-and}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2242}{\#2242}. -\item Clarified inStream to make it clear that positive mass-flow is assumed, \cref{rationale-for-the-formulation-of-the-instream-operator}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2253}{\#2253}. -\end{itemize} - - -\item Stated that disable conditional components are ignored for inner/outer, \cref{instance-hierarchy-name-lookup-of-inner-declarations}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2499}{\#2499}. -\item Clarify some use of heterogenous record arrays, \cref{arrays}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2282}{\#2282}. -\item Allow end for non-integer indexed arrays, \cref{indexing-with-end}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2204}{\#2204}. -\item Improved encapsulated short class to be consistent with encapsulation, \cref{short-class-definitions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2743}{\#2743}. -\item Clarified that array declarations cannot be scalar, \cref{array-declarations}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2753}{\#2753}. -\item Clarified acyclic rule for non-fixed parameters, \cref{acyclic-bindings-of-constants-and-parameters}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2742}{\#2742}. -\item Clarified final for classes, \cref{final-element-modification-prevention}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2676}{\#2676}. -\item Made when-descriptions more similar, \cref{restrictions-on-where-a-when-equation-may-occur} and \cref{restrictions-on-equations-within-when-equations}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2635}{\#2635}. -\item Make assertion level a structural parameter, \cref{assert}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2642}{\#2642}. -\item Deprecate byte order mark, \cref{mapping-a-package-class-hierarchy-into-a-directory-hierarchy-structured-entity}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2675}{\#2675}. -\item State that matrix/vector algebra functions return Real, \cref{matrix-and-vector-algebra-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2673}{\#2673}. -\item Clarified each, \cref{modifiers-for-array-elements}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2630}{\#2630}. -\item Clarified elsewhen initial, \cref{initialization-initial-equation-and-initial-algorithm}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2636}{\#2636}. -\item Consistently use "discrete-time variable". -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2640}{\#2640}. -\item Clarified use of expandable connector, \cref{expandable-connectors}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2606}{\#2606}. -\item Made ndims constant, \cref{constant-expressions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2605}{\#2605}. -\item Restrict use of size of components of expandable connectors, \cref{expandable-connectors}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2560}{\#2560}. -\item Clarify scoping for component names, \cref{composite-name-lookup}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2547}{\#2547}. -\item Extend promote to be allowed in Modelica, and not only internally in the specification, \cref{built-in-array-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2568}{\#2568}. -\item Clarify that iterator ranges cannot be deduced from expandable connector variables, \cref{implicit-iteration-ranges}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2560}{\#2560}. -\item Restructure description of Real and Integer types to keep details together, \cref{real-type}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2552}{\#2552}. -\item Clarify pre for arrays, \cref{event-related-operators-with-function-syntax}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2556}{\#2566}. -\item Clarify variability guarantee, \cref{component-variability-prefixes-discrete-parameter-constant}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2553}{\#2553}. -\item Corrected errors in example of over-determined connectors for power system, \cref{an-overdetermined-connector-for-power-systems}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2564}{\#2564}. -\item Cleanup of example of over-determined connectors for power system, \cref{an-overdetermined-connector-for-power-systems}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2565}{\#2565}. -\item Correct so that normal connector cannot inherit from expandable connector, \cref{restrictions-on-the-kind-of-base-class}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2298}{\#2298}. -\item Clarify that locally non-singular models can be combined to a globally singular model, \cref{balanced-models}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2510}{\#2510}. -\item Clarify interaction between variability and perfect matching, \cref{variability-of-expressions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2525}{\#2525}. -\item In examples change SIunits to Units.SI following MSL 4.0.0. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2504}{\#2504}. -\item Remove outdated statement that model and class are the same, \cref{specialized-classes}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1345}{\#1345}. -\item Remove outdated statement that constants cannot be modified, \cref{record-constructor-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2492}{\#2492}. -\item Revert regressions for lookup, \cref{static-name-lookup}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2175}{\#2175}. -\item Clarify handling of equations involving connectors, \cref{specialized-classes}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2235}{\#2235}. -\item Clarified some builtin array functions, \cref{matrix-and-vector-algebra-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2295}{\#2295}. -\item Clarified when initial() for algorithms, \cref{initialization-initial-equation-and-initial-algorithm}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2436}{\#2436}. -\item Clarify differentiability of expressions, \cref{component-variability-prefixes-discrete-parameter-constant}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2464}{\#2464}. -\item Clarified standard type coercion, \cref{standard-type-coercion}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2326}{\#2326}. -\item Fully renamed declaration assignments to binding equations, \cref{initialization-and-binding-equations-of-components-in-functions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2249}{\#2249}. -\item Restrict left-hand sides to not be components of models and blocks, \cref{restrictions-on-assigned-variables}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2385}{\#2385}. -\item Correct order in example of short-circuit logic, \cref{example-guarding-expressions-against-incorrect-evaluation}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2442}{\#2442}. -\item Clarified evaluation of for-equations, \cref{explicit-iteration-ranges-of-for-equations}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2205}{\#2205}. -\item Clarify how sizes can be deduced from binding equations, \cref{array-declarations}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2212}{\#2212}. -\item Clarify that component declarations allow indexing with types, \cref{syntax-and-examples-of-component-declarations}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2221}{\#2221}. -\item Corrected formulation of synchronous data-flow principle, \cref{synchronous-data-flow-principle-and-single-assignment-rule}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2348}{\#2348}. -\item Restrict functions to not have connectors - later clarified, \cref{function-as-a-specialized-class}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/2308}{\#2308}. - -\item Clarified sample, \cref{event-related-operators-with-function-syntax}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2118}{\#2118}. -\item Clarified that presentation of units is not restricted to ASCII, \cref{the-syntax-of-unit-expressions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2142}{\#2142}. -\item Clarified array variants for short classes, \cref{component-declaration-static-semantics}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2159}{\#2159}. -\item Clarified examples for external libraries, \cref{annotations-for-external-libraries-and-include-files}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2192}{\#2192}. -\item Clarified over-determined connector handling by renaming "breakable branch" to "optional spanning tree edge", \cref{overconstrained-equation-operators-for-connection-graphs}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2201}{\#2201}. -\item Improved pseudo-code spatialDistribution, \cref{spatialdistribution}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2202}{\#2202}. -\item Clarified reinit, \cref{event-related-operators-with-function-syntax}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2203}{\#2203}. -\item Allow sum and product of matrix with non integer index, \cref{reduction-functions-and-operators}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2204}{\#2204}. -\item Correct spelling of units to be consistent with SI, \cref{unit-expressions}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2232}{\#2232}. -\item Clarify that description string of modifier replaces existing one, \cref{modifications}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2237}{\#2237}. -\item Clarified that first argument to cat is an integer parameter expression, \cref{array-concatenation}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2273}{\#2273}. -\item Clarified illegal modification of outer element, \cref{instance-hierarchy-name-lookup-of-inner-declarations}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2283}{\#2283}. - -\if0 -\item xxx, \cref{xxx}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/}{\#}. -\item xxx, \cref{xxx}. -Ticket \href{https://github.com/modelica/ModelicaSpecification/pull/}{\#}. -\fi -\end{itemize} - -\section{Modelica 3.4}\label{modelica-3-4} - +\section{Modelica 3.4}\doublelabel{modelica-3-4} Modelica 3.4 was released April 10, 2017. The Modelica 3.4 specification was edited by Hans Olsson. -\subsection{Main changes in Modelica 3.4}\label{main-changes-in-modelica-3-4} +\subsection{Main changes in Modelica 3.4}\doublelabel{main-changes-in-modelica-3-4} The following Modelica Change Proposals are backward compatible extensions added in 3.4: \begin{itemize} \item Automatic conversions between different versions (MCP-0014), - \cref{version-handling}. Ticket + \autoref{version-handling}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1622}{\#1622}. \item - Flattening is clearly specified (MCP-0019), \cref{simple-name-lookup} and \cref{flattening-process}. + Flattening is clearly specified (MCP-0019), \autoref{simple-name-lookup} and \autoref{flattening-process}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1829}{\#1829}. \item - Convert from \lstinline!Integer! to Enumeration (MCP-0022), primarily \cref{type-conversion-of-integer-to-enumeration-values}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1842}{\#1842}. + Convert from Integer to Enumeration (MCP-0022), primarily + \autoref{type-conversion-of-integer-to-enumeration-values}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1842}{\#1842}. \item - Explicitly casting a Model to Record (MCP-0023), \cref{casting-to-record}. + Explicitly casting a Model to Record (MCP-0023), \autoref{casting-to-record}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1953}{\#1953}. \item Initialization of Clocked Continuous States (MCP-0024), - \cref{clocked-discrete-time-and-clocked-discretized-continuous-time-partition}, - \cref{initialization-of-clocked-partitions} and \cref{other-operators}. Ticket + \autoref{clocked-discrete-time-and-clocked-discretized-continuous-time-partition}, + \autoref{initialization-of-clocked-partitions} and \autoref{other-operators}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2007}{\#2007}. \item An added option to Ellipse Annotation to draw only an arc (MCP-0026), - \cref{ellipse}. Ticket + \autoref{ellipse}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2045}{\#2045}. \item - Allowing mixed \lstinline!Real! and non-\lstinline!Real! Record Derivatives (MCP-0028), \cref{using-the-derivative-annotation}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2134}{\#2134}. + Allowing mixed Real and non-Real Record Derivatives (MCP-0028), + \autoref{using-the-derivative-annotation}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/2134}{\#2134}. \end{itemize} The definition of pure functions was refined, in particular to restore -backwards compatibility with Modelica 3.2, \cref{pure-modelica-functions}. Ticket +backwards compatibility with Modelica 3.2, \autoref{pure-modelica-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1937}{\#1937}. The following minor improvements were made (starting from 3.3 Revision 1): \begin{itemize} \item - Clarified simulation model, \cref{scope-of-the-specification}. Ticket + Clarified simulation model, \autoref{scope-of-the-specification}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/730}{\#730}. \item - Clarified structural analysis, \cref{scope-of-the-specification}. Ticket + Clarified structural analysis, \autoref{scope-of-the-specification}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/588}{\#588}. \item - Clarified meta-symbols, \cref{notation-and-grammar} and 2.3.1. Ticket + Clarified meta-symbols, \autoref{notation-and-grammar} and 2.3.1. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1616}{\#1616}. \item - Typo, \cref{identifiers}. Ticket + Typo, \autoref{identifiers}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1702}{\#1702}. \item - Clarified newline, \cref{strings}. Ticket + Clarified newline, \autoref{strings}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1479}{\#1479}. \item Allow `\lstinline!"!' and define it to be equal to `\lstinline!\"!' (and - similarly for `\lstinline!\?!'), \cref{identifiers}. Ticket + similarly for `\lstinline!\?!'), \autoref{identifiers}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1176}{\#1176}. \item - Clarified that built-in functions in the specification, \cref{built-in-intrinsic-operators-with-function-syntax} + Clarified that built-in functions in the specification, \autoref{built-in-intrinsic-operators-with-function-syntax} and 12.5. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1608}{\#1608}. \item - Clarified named arguments for builtin operators, in particular \lstinline!spatialDistribution!, \cref{derivative-and-special-purpose-operators-with-function-syntax} and \cref{positional-or-named-input-arguments-of-functions}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2002}{\#2002}. + Clarified named arguments for builtin operators, in particular + spatialDistribution, \autoref{derivative-and-special-purpose-operators-with-function-syntax} and \autoref{positional-or-named-input-arguments-of-functions}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/2002}{\#2002}. \item - Clarified that \lstinline!semiLinear! is continuous, \cref{derivative-and-special-purpose-operators-with-function-syntax}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/112}{\#112}. + Clarified that semiLinear is continuous, \autoref{derivative-and-special-purpose-operators-with-function-syntax}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/112}{\#112}. \item - Corrected spelling, \cref{derivative-and-special-purpose-operators-with-function-syntax}. Ticket + Corrected spelling, \autoref{derivative-and-special-purpose-operators-with-function-syntax}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1828}{\#1828}. \item - Corrected typo in code and reformulated description, \cref{spatialdistribution}. + Corrected typo in code and reformulated description, \autoref{spatialdistribution}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1588}{\#1588}, \href{https://github.com/modelica/ModelicaSpecification/issues/1729}{\#1729}, and \href{https://github.com/modelica/ModelicaSpecification/issues/2166}{\#2166}. \item - Corrected typo for events, \cref{modelica:smooth}. Ticket + Corrected typo for events, \autoref{noevent-and-smooth}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1657}{\#1657}. \item - Clarified \lstinline!sample! operator, \cref{event-related-operators-with-function-syntax}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/677}{\#677}. + Clarified sample operator, \autoref{event-related-operators-with-function-syntax}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/677}{\#677}. \item - Additional functions give parameter expression, \cref{parameter-expressions}. Ticket + Additional functions give parameter expression, \autoref{parameter-expressions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1082}{\#1082}. \item - Clarified \lstinline!ExternalObject!, \cref{prefix-rules}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1546}{\#1546}. + Clarified ExternalObject, \autoref{prefix-rules}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1546}{\#1546}. \item - Simplified rules type prefixes for structured components, \cref{prefix-rules}. Ticket + Simplified rules type prefixes for structured components, \autoref{prefix-rules}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1686}{\#1686}. \item - Clarified that unexpanded bindings shall be unexpanded, \cref{acyclic-bindings-of-constants-and-parameters}. + Clarified that unexpanded bindings shall be unexpanded, \autoref{acyclic-bindings-of-constants-and-parameters}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2153}{\#2153}. \item - Clarified conditional components, \cref{conditional-component-declaration}. Ticket + Clarified conditional components, \autoref{conditional-component-declaration}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2057}{\#2057}. \item - Improved example to avoid using class, \cref{local-class-definitions-nested-classes}. Ticket + Improved example to avoid using class, \autoref{local-class-definitions-nested-classes}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/553}{\#553}. \item - Clarify inheritance from predefines types, \cref{specialized-classes}. Ticket + Clarify inheritance from predefines types, \autoref{specialized-classes}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1250}{\#1250}. \item - Allow \lstinline!connector! inheriting from \lstinline!operator record!, \cref{specialized-classes}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1714}{\#1714}. + Allow connector inheriting from operator record, \autoref{specialized-classes}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1714}{\#1714}. \item - Clarify restrictions on record components, \cref{specialized-classes}. Ticket + Clarify restrictions on record components, \autoref{specialized-classes}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1615}{\#1615}. \item - Clarify that only functions may have \lstinline!external!-clause, \cref{specialized-classes} and \cref{function-as-a-specialized-class}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2014}{\#2014}. + Clarify that only functions may have external clause, \autoref{specialized-classes} and + \autoref{function-as-a-specialized-class}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/2014}{\#2014}. \item - Clarified equation count for operator record, \cref{balanced-models}. Ticket + Clarified equation count for operator record, \autoref{balanced-models}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/866}{\#866}. \item - Clarified restriction on attributes, \cref{predefined-types-and-classes}. Ticket + Clarified restriction on attributes, \autoref{predefined-types-and-classes}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1426}{\#1426}. \item - Clarified how reserved the different built-in types are, \cref{predefined-types-and-classes}. + Clarified how reserved the different built-in types are, \autoref{predefined-types-and-classes}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1538}{\#1538}. \item - Removed restriction on nominal and explained purpose, \cref{real-type}. + Removed restriction on nominal and explained purpose, \autoref{real-type}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1445}{\#1445}. \item - Added \lstinline!unbounded! to \lstinline!Real!, \cref{real-type} and \cref{attributes-start-fixed-nominal-and-unbounded}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/926}{\#926}. + Added unbounded to Real, \autoref{real-type} and \autoref{attributes-start-fixed-nominal-and-unbounded}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/926}{\#926}. \item - Added fixed-attribute for \lstinline!String!, \cref{string-type}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1797}{\#1797}. + Added fixed-attribute for String, \autoref{string-type}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1797}{\#1797}. \item - Clarified and corrected example in \cref{enumeration-types}. Ticket + Clarified and corrected example in \autoref{enumeration-types}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1849}{\#1849} and \href{https://github.com/modelica/ModelicaSpecification/issues/2150}{\#2150}. \item - Clarified nominal attribute, \cref{attributes-start-fixed-nominal-and-unbounded} - and \cref{stream-operator-instream-and-connection-equations}. Ticket + Clarified nominal attribute, \autoref{attributes-start-fixed-nominal-and-unbounded} + and \autoref{stream-operator-instream-and-connection-equations}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1877}{\#1877}. \item - Added that \lstinline!Connections! is builtin package, \cref{connections}. Ticket + Added that Connections is builtin package, \autoref{connections}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1883}{\#1883}. \item - Clarified lookup-order regarding import, \cref{simple-name-lookup}. Ticket + Clarified lookup-order regarding import, \autoref{simple-name-lookup}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1573}{\#1573}. \item - Extend calling functions through component to array case, \cref{composite-name-lookup} and \cref{expressions}. Ticket + Extend calling functions through component to array case, \autoref{composite-name-lookup} and \autoref{expressions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1613}{\#1613}. \item - Clarified existing use of automatic inner declarations, \cref{instance-hierarchy-name-lookup-of-inner-declarations} - and \cref{annotations-for-the-graphical-user-interface}. Ticket + Clarified existing use of automatic inner declarations, \autoref{instance-hierarchy-name-lookup-of-inner-declarations} + and \autoref{annotations-for-the-graphical-user-interface}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1551}{\#1551} and \href{https://github.com/modelica/ModelicaSpecification/issues/1749}{\#1749}. \item - Removed restriction on array size for modifiers, \cref{interface-compatibility-or-subtyping}. Ticket + Removed restriction on array size for modifiers, \autoref{interface-compatibility-or-subtyping}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1432}{\#1432}. \item - Clarified that 2/3 and 2\^{}(-3) are \lstinline!Real!, \cref{type-compatible-expressions}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1647}{\#1647}. + Clarified that 2/3 and 2\^{}(-3) are Real, \autoref{type-compatible-expressions}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1647}{\#1647}. \item - Clarified that the \lstinline!external!-clause is inherited, \cref{inheritance-extends-clause}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/789}{\#789}. + Clarified that external declaration is inherited, \autoref{inheritance-extends-clause}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/789}{\#789}. \item - Further clarified order for multiple inheritance, \cref{instantiation} and - \cref{inheritance-extends-clause}. Ticket + Further clarified order for multiple inheritance, \autoref{instantiation} and + \autoref{inheritance-extends-clause}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2015}{\#2015}. \item - Clarified inheritance restrictions, \cref{restrictions-on-the-kind-of-base-class}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1451}{\#1451}. + Clarified inheritance restrictions, \autoref{restrictions-on-the-kind-of-base-class}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1451}{\#1451}. \item - Restricted merging of modifiers, \cref{merging-of-modifications}. Ticket + Restricted merging of modifiers, \autoref{merging-of-modifications}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/791}{\#791}. \item - Clarified each especially for nested arrays, \cref{single-modification} and \cref{modifiers-for-array-elements}. + Clarified each especially for nested arrays, \autoref{single-modification} and \autoref{modifiers-for-array-elements}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1596}{\#1596}. \item - Clarified replaceable with array sizes on types, \cref{redeclaration}. Ticket + Clarified replaceable with array sizes on types, \autoref{redeclaration}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1251}{\#1251}. \item - Corrected and moved example, \cref{redeclaration} and \cref{constraining-type}. Ticket + Corrected and moved example, \autoref{redeclaration} and \autoref{constraining-type}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1034}{\#1034}. \item - Clarified \lstinline!redeclare class extends B!, \cref{the-class-extends-redeclaration-mechanism}. Ticket + Clarified \lstinline!redeclare class extends B!, \autoref{the-class-extends-redeclaration-mechanism}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/462}{\#462} and \href{https://github.com/modelica/ModelicaSpecification/issues/709}{\#709}. \item - Corrected example, \cref{constraining-type}. Ticket + Corrected example, \autoref{constraining-type}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1725}{\#1725}. \item - Clarified description and annotation on \lstinline[language=grammar]!constraining-clause!, \cref{constraining-clause-annotations}. Ticket + Clarified description and annotation on constraining-clause, \autoref{constraining-clause-annotations}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/512}{\#512}. \item - Corrected typo, \cref{annotation-choices-for-suggested-redeclarations-and-modifications}. Ticket + Corrected typo, \autoref{annotation-choices-for-suggested-redeclarations-and-modifications}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1770}{\#1770}. \item - Clarified \lstinline!for!-equation with types, \cref{for-equations-repetitive-equation-structures}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/915}{\#915}. + Clarified for-equation with types, \autoref{for-equations-repetitive-equation-structures}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/915}{\#915}. \item - Clarified event generation, \cref{events-and-synchronization}. Ticket + Clarified event generation, \autoref{events-and-synchronization}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2114}{\#2114}. \item - Further clarified \lstinline!initial()! for \lstinline!when!-clauses, \cref{initialization-initial-equation-and-initial-algorithm}, and indicated that this appendix is not normative. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1852}{\#1852}. + Further clarified initial() for when-clauses, \autoref{initialization-initial-equation-and-initial-algorithm} -- and + indicated that this appendix is not normative. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1852}{\#1852}. \item - Clarified using \lstinline!start!-attribute for parameters, \cref{initialization-initial-equation-and-initial-algorithm}. Ticket + Clarified using start-attribute for parameters, \autoref{initialization-initial-equation-and-initial-algorithm}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2136}{\#2136}. \item - Clarified that states for first order ODE, \cref{the-number-of-equations-needed-for-initialization}. Ticket + Clarified that states for first order ODE, \autoref{the-number-of-equations-needed-for-initialization}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/937}{\#937}. \item - Clarified adding \lstinline!input!/\lstinline!output! prefix for expandable connector variables, \cref{expandable-connectors}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/829}{\#829}. + Clarified adding input/output prefix for expandable connector + variables, \autoref{expandable-connectors}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/829}{\#829}. \item - Clarified creating elements in expandable connectors, \cref{expandable-connectors}. + Clarified creating elements in expandable connectors, \autoref{expandable-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/428}{\#428}. \item - Corrected expandable connector example, \cref{expandable-connectors}. Ticket + Corrected expandable connector example, \autoref{expandable-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1763}{\#1763}. \item - Clarified that stream variables do not generate equations, \cref{generation-of-connection-equations}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1584}{\#1584}. + Clarified that stream-variables do not generate equations, \autoref{generation-of-connection-equations}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1584}{\#1584}. \item - Restrict that stream only connects to stream, \cref{restrictions-of-connections-and-connectors}. Ticket + Restrict that stream only connects to stream, \autoref{restrictions-of-connections-and-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/796}{\#796}. \item - Clarified section heading, \cref{balancing-restriction-and-size-of-connectors}. Ticket + Clarified section heading, \autoref{balancing-restriction-and-size-of-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/727}{\#727}. \item - Clarified vector arguments for operators in \cref{overconstrained-equation-operators-for-connection-graphs}. Ticket + Clarified vector arguments for operators in \autoref{overconstrained-equation-operators-for-connection-graphs}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1590}{\#1590}. \item - Corrected example, \cref{an-overdetermined-connector-for-power-systems}. Ticket + Corrected example, \autoref{an-overdetermined-connector-for-power-systems}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2143}{\#2143}. \item - Clarified return type for reduction expressions, \cref{reduction-functions-and-operators}. + Clarified return type for reduction expressions, \autoref{reduction-functions-and-operators}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/981}{\#981}. \item - Extended reduction expression sum to operator records, \cref{reduction-functions-and-operators}. + Extended reduction expression sum to operator records, \autoref{reduction-functions-and-operators}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1897}{\#1897}. \item - Clarified table in \cref{reduction-expressions}. Ticket + Clarified table in \autoref{reduction-expressions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1722}{\#1722}. \item - Match parenthesis, \cref{array-constructor-with-several-iterators}. Ticket + Match parenthesis, \autoref{array-constructor-with-several-iterators}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1558}{\#1558}. \item - Recommend better alternative for generating vector, \cref{vector-construction}. + Recommend better alternative for generating vector, \autoref{vector-construction}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1837}{\#1837}. \item - Defined unary operators, \cref{array-element-wise-addition-subtraction-and-string-concatenation}. Ticket + Defined unary operators, \autoref{array-element-wise-addition-subtraction-and-string-concatenation}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2027}{\#2027}. \item - Allow missing trailing indices, sections \cref{array-indexing} and \cref{slice-operation}. Ticket + Allow missing trailing indices, sections \autoref{array-indexing} and \autoref{slice-operation}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1603}{\#1603}. \item Clarified that element-wise division gives real result, - \cref{array-element-wise-division}. Ticket + \autoref{array-element-wise-division}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1119}{\#1119}. \item - Removed misleading comment, \cref{execution-of-an-algorithm-in-a-model}. Ticket + Removed misleading comment, \autoref{execution-of-an-algorithm-in-a-model}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/938}{\#938}. \item Clarified how assignment works for multi-returning functions, - \cref{assignments-from-called-functions-with-multiple-results}. Ticket + \autoref{assignments-from-called-functions-with-multiple-results}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1921}{\#1921}. \item Clarified no equations and initial algorithms in functions, - \cref{function-as-a-specialized-class}. Ticket + \autoref{function-as-a-specialized-class}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2160}{\#2160}. \item Clarified assigning to record variables with bindings in functions, - \cref{function-as-a-specialized-class}. Ticket + \autoref{function-as-a-specialized-class}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2016}{\#2016}. \item - Clarified initialization of variables in functions, \cref{initialization-and-declaration-assignments-of-components-in-functions}. + Clarified initialization of variables in functions, \autoref{initialization-and-declaration-assignments-of-components-in-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1708}{\#1708}. \item Standarize current practice of using = instead of := for bindings in - functions, \cref{function-as-a-specialized-class}. Ticket + functions, \autoref{function-as-a-specialized-class}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1595}{\#1595}. \item - Clarified function partial evaluation, \cref{function-partial-application}. Ticket + Clarified function partial evaluation, \autoref{function-partial-application}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/647}{\#647}. \item Clarified initialization of record components in functions, - \cref{initialization-and-declaration-assignments-of-components-in-functions}. Ticket + \autoref{initialization-and-declaration-assignments-of-components-in-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1230}{\#1230}. \item - Clarified flexible array sizes, \cref{flexible-array-sizes-and-resizing-of-arrays-in-functions}. Ticket + Clarified flexible array sizes, \autoref{flexible-array-sizes-and-resizing-of-arrays-in-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2158}{\#2158}. \item - Clarified name of output for record constructor in \cref{record-constructor-functions}. + Clarified name of output for record constructor in \autoref{record-constructor-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/366}{\#366}. \item - Clarified derivatives for functions in several ways, \cref{using-the-derivative-annotation}. + Clarified derivatives for functions in several ways, \autoref{using-the-derivative-annotation}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/985}{\#985}, \href{https://github.com/modelica/ModelicaSpecification/issues/1543}{\#1543}, \href{https://github.com/modelica/ModelicaSpecification/issues/1544}{\#1544}, @@ -712,426 +319,439 @@ \subsection{Main changes in Modelica 3.4}\label{main-changes-in-modelica-3-4} \href{https://github.com/modelica/ModelicaSpecification/issues/1987}{\#1987}. \item Clarified that using C89 and added possibility for C89, C99, and C11 , - \cref{external-function-interface}. Ticket + \autoref{external-function-interface}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1088}{\#1088}. \item - Clarified input/output to external functions, \cref{external-function-interface}. Ticket + Clarified input/output to external functions, \autoref{external-function-interface}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/775}{\#775}. \item - Clarified handling of \lstinline!Boolean! variables for external C, \cref{simple-types}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1846}{\#1846}. + Clarified handling of Boolean variables for external C, + \autoref{simple-types}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1846}{\#1846}. \item - Added that strings can be sent to FORTRAN~77, \cref{simple-types}. Ticket + Added that Strings can be sent to FORTRAN~77, \autoref{simple-types}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1971}{\#1971}. \item - Allow multiple include directories, \cref{annotations-for-external-libraries-and-include-files}. Ticket + Allow multiple include directories, \autoref{annotations-for-external-libraries-and-include-files}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2103}{\#2103}. \item Allow specific libraries for different compiler versions, - \cref{annotations-for-external-libraries-and-include-files}. Ticket + \autoref{annotations-for-external-libraries-and-include-files}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1316}{\#1316}. \item - Added external warning functions, \cref{utility-functions}. Ticker + Added external warning functions, \autoref{utility-functions}. Ticker \href{https://github.com/modelica/ModelicaSpecification/issues/1967}{\#1967}. \item - Clarified that pointers are only valid during each call, \cref{external-objects}. Ticket + Clarified that pointers are only valid during each call, \autoref{external-objects}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1611}{\#1611}. \item - Clarified constructor and destructor, \cref{external-objects}. Ticket + Clarified constructor and destructor, \autoref{external-objects}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1907}{\#1907}. \item - Clarified 'structured entity' to be 'directory', \cref{mapping-package-class-structures-to-a-hierarchical-file-system}. + Clarified 'structured entity' to be 'directory', \autoref{mapping-package-class-structures-to-a-hierarchical-file-system}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/922}{\#922}. \item - Clarified handling of incorrect package.order, \cref{mapping-a-package-class-hierarchy-into-a-directory-hierarchy-structured-entity}. + Clarified handling of incorrect package.order, \autoref{mapping-a-package-class-hierarchy-into-a-directory-hierarchy-structured-entity}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1858}{\#1858}. \item - Restricted use of files with multiple classes, \cref{mapping-a-package-class-hierarchy-into-a-single-file-nonstructured-entity}. + Restricted use of files with multiple classes, \autoref{mapping-a-package-class-hierarchy-into-a-single-file-nonstructured-entity}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1854}{\#1854}. \item - Clarified storing resources in a file-system, \cref{external-resources}. Ticket + Clarified storing resources in a file-system, \autoref{external-resources}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/685}{\#685}, \href{https://github.com/modelica/ModelicaSpecification/issues/1623}{\#1623}. \item - Used correct font, \cref{external-resources}. Ticket + Used correct font, \autoref{external-resources}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2061}{\#2061}. \item - Clarified that \lstinline!inStream! optimizations are allowed, \cref{stream-operator-instream-and-connection-equations}. + Clarified that inStream optimizations are allowed, \autoref{stream-operator-instream-and-connection-equations}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1766}{\#1766}. \item - Corrected \lstinline!actualStream! example in \cref{stream-operator-actualstream}. Ticket + Corrected actualStream example in \autoref{stream-operator-actualstream}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1652}{\#1652}. \item - Corrected non-periodic rational clocks, \cref{clock-constructors}. Ticket + Corrected non-periodic rational clocks, \autoref{clock-constructors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2022}{\#2022}. \item Clarified initialization of clocked discretized continuous-time - partitions, \cref{solver-methods}. Ticket + partitions, \autoref{solver-methods}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1528}{\#1528}. \item - Defined rendering order, \cref{annotations-for-graphical-objects}. Ticket + Defined rendering order, \autoref{annotations-for-graphical-objects}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1750}{\#1750}. \item - Clarified rotation direction, \cref{common-definitions}. Ticket + Clarified rotation direction, \autoref{common-definitions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1830}{\#1830}. \item - Clarified coordinate system definition, \cref{coordinate-systems}. Ticket + Clarified coordinate system definition, \autoref{coordinate-systems}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1831}{\#1831}. \item Defined coordinate system inheritance to be less suprising, - \cref{coordinate-systems} and \cref{extends-clause}. Ticket + \autoref{coordinate-systems} and \autoref{extends-clause}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1978}{\#1978}. \item - Clarified \lstinline!lineThickness! and \lstinline!borderPattern!, \cref{graphical-primitives} \cref{graphical-properties}. + Clarified lineThickness and borderPattern, \autoref{graphical-primitives} \autoref{graphical-properties}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1896}{\#1896}. \item - Corrected formatting, \cref{graphical-properties}. Ticket + Corrected formatting, \autoref{graphical-properties}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1825}{\#1825}. \item - Made the different Text-annotations more similar, \cref{connections}. + Made the different Text-annotations more similar, \autoref{connections}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1621}{\#1621}. \item - Clarified \lstinline!LinePattern! in \cref{graphical-primitives}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1483}{\#1483}. + Clarified LinePatterns in \autoref{graphical-primitives}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1483}{\#1483}. \item Corrected flipping of components and bitmaps, and clarified various - aspects of bitmaps, \cref{component-instance} and \cref{bitmap}. Ticket + aspects of bitmaps, \autoref{component-instance} and \autoref{bitmap}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1923}{\#1923}. \item - Clarified arrows, \cref{line}. Ticket + Clarified arrows, \autoref{line}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1894}{\#1894}. \item - Clarified existing use of zero-width texts, \cref{text}. Ticket + Clarified existing use of zero-width texts, \autoref{text}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1636}{\#1636}. \item - Added specific fontnames, \cref{text}. Ticket + Added specific fontnames, \autoref{text}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1986}{\#1986}. \item - Added alternative for macro-expansion, \cref{text}. Ticket + Added alternative for macro-expansion, \autoref{text}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2148}{\#2148}. \item - Corrected example in \cref{mouse-input}. Ticket + Corrected example in \autoref{mouse-input}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2111}{\#2111}. \item - Placed annotation last in classes, in particular \cref{annotations-for-the-graphical-user-interface}. Ticket + Placed annotation last in classes, in particular \autoref{annotations-for-the-graphical-user-interface}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1009}{\#1009}. \item - Cleaned up code and formatting in \cref{annotations-for-the-graphical-user-interface}. Ticket + Cleaned up code and formatting in \autoref{annotations-for-the-graphical-user-interface}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2041}{\#2041}, \href{https://github.com/modelica/ModelicaSpecification/issues/2042}{\#2042}, and \href{https://github.com/modelica/ModelicaSpecification/issues/2125}{\#2125}. \item - Added missing nano prefix, \cref{the-syntax-of-unit-expressions}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1261}{\#1261}. + Added missing nano-prefix, \autoref{the-syntax-of-unit-expressions}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1261}{\#1261}. \item - Replaced the outdated contents of \cref{the-modelica-standard-library} by a hyperlink. Ticket + Replaced the outdated contents of \autoref{the-modelica-standard-library} by a hyperlink. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2130}{\#2130}. \item - Added ModelicaServices to \cref{the-modelica-standard-library}. Ticket + Added ModelicaServices to \autoref{the-modelica-standard-library}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/2132}{\#2132}. \item - Restrict grammar to avoid modifiers with leading dot, \cref{grammar}. + Restrict grammar to avoid modifiers with leading dot, \autoref{grammar}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1027}{\#1027}. \item - Restrict grammar for \lstinline[language=grammar]!base-prefix!, \cref{class-definition}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/917}{\#917}. + Restrict grammar for base-prefix, \autoref{class-definition}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/917}{\#917}. \item - Restrict grammar for arrays, \cref{expressions}. Ticket + Restrict grammar for arrays, \autoref{expressions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/809}{\#809}. \item Restrict grammar for function arguments (replacing semantic - restriction), \cref{expressions}. Ticket + restriction), \autoref{expressions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1634}{\#1634}. \item - Corrected typo in \cref{rationale-for-the-formulation-of-the-instream-operator}. Ticket + Corrected typo in \autoref{rationale-for-the-formulation-of-the-instream-operator}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1317}{\#1317}. \end{itemize} -\subsection{Contributors to the Modelica Language 3.4}\label{contributors-to-the-modelica-language-3-4} +\subsection{Contributors to the Modelica Language 3.4}\doublelabel{contributors-to-the-modelica-language-3-4} The members of the Modelica Association contributed to the Modelica 3.4 specification. -\section{Modelica 3.3 Revision 1}\label{modelica-3-3-revision-1} +\section{Modelica 3.3 Revision 1}\doublelabel{modelica-3-3-revision-1} Modelica 3.3 Revision 1 was released July 11, 2014. The Modelica 3.3 Revision 1 specification was edited by Hans Olsson. -\subsection{Main changes in Modelica 3.3 Revision 1}\label{main-changes-in-modelica-3-3-revision-1} - +\subsection{Main changes in Modelica 3.3 Revision 1}\doublelabel{main-changes-in-modelica-3-3-revision-1} The changes made in Modelica 3.2 Revision 2 are included, and in addition the following improvements were made: \begin{itemize} \item - Clarified that \lstinline!String! operator cannot use positional arguments, \cref{numeric-functions-and-conversion-functions}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1468}{\#1468}. + Clarified that String-operator cannot use positional arguments, + \autoref{numeric-functions-and-conversion-functions}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1468}{\#1468}. \item - Corrected size of enumeration, \cref{numeric-functions-and-conversion-functions} and \cref{type-conversion-of-enumeration-values-to-string-or-integer}. Ticket + Corrected size of enumeration, \autoref{numeric-functions-and-conversion-functions} and \autoref{type-conversion-of-enumeration-values-to-string-or-integer}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1369}{\#1369}. \item - Clarified \lstinline!spatialDistribution!, \cref{built-in-mathematical-functions-and-external-built-in-functions}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1510}{\#1510}. + Clarified spatialDistribution, \autoref{built-in-mathematical-functions-and-external-built-in-functions}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1510}{\#1510}. \item - Restricted \lstinline!cardinality! to give a clear definition, \cref{cardinality-deprecated}. + Restricted cardinality to give a clear definition, \autoref{cardinality-deprecated}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1409}{\#1409}. \item - Clarified which constants need a value, \cref{constant-expressions}. Ticket + Clarified which constants need a value, \autoref{constant-expressions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1220}{\#1220}. \item - Clarified type prefixes rules, \cref{prefix-rules}. Tickets + Clarified type prefixes rules, \autoref{prefix-rules}. Tickets \href{https://github.com/modelica/ModelicaSpecification/issues/1196}{\#1196}, \href{https://github.com/modelica/ModelicaSpecification/issues/1221}{\#1221}, \href{https://github.com/modelica/ModelicaSpecification/issues/1301}{\#1301}. \item Added exception for cyclic parameter bindings (already used in MSL), - \cref{acyclic-bindings-of-constants-and-parameters}. Ticket + \autoref{acyclic-bindings-of-constants-and-parameters}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1320}{\#1320}. \item - Added example for use of conditional components, \cref{conditional-component-declaration}. Ticket + Added example for use of conditional components, \autoref{conditional-component-declaration}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1227}{\#1227}. \item - Corrected annotation-grammar, \cref{class-declarations}. Ticket + Corrected annotation-grammar, \autoref{class-declarations}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1378}{\#1378}. \item - Corrected duplicated class-definition grammar, \cref{class-declarations}. Ticket + Corrected duplicated class-definition grammar, \autoref{class-declarations}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1388}{\#1388}. \item - Clarified short class definition, \cref{short-class-definitions}. Ticket + Clarified short class definition, \autoref{short-class-definitions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/527}{\#527}. \item - Removed unusable variant for operator and operator function, \cref{specialized-classes}. Ticket + Removed unusable variant for operator and operator function, \autoref{specialized-classes}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1459}{\#1459}, \href{https://github.com/modelica/ModelicaSpecification/issues/1497}{\#1497}. \item - Added definition of AssertionLevel, \cref{assertionlevel}. Ticket + Added definition of AssertionLevel, \autoref{assertionlevel}. ticket \href{https://github.com/modelica/ModelicaSpecification/issues/962}{\#962}. \item - Corrected typos at end of loops in examples,\cref{enumeration-types} and - \cref{implicit-iteration-ranges-of-for-equations}. Ticket + Corrected typos at end of loops in examples,\autoref{enumeration-types} and + \autoref{implicit-iteration-ranges-of-for-equations}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/902}{\#902} \item - Clarified temporary flattening, \cref{composite-name-lookup}. Ticket + Clarified temporary flattening, \autoref{composite-name-lookup}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1327}{\#1327}. \item - Added definition of modification equations, \cref{modifications}. Ticket + Added definition of modification equations, \autoref{modifications}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/959}{\#959}. \item - Clarified modifiers for array elements, \cref{modifiers-for-array-elements}. Ticket + Clarified modifiers for array elements, \autoref{modifiers-for-array-elements}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1324}{\#1324}. \item - Corrected example for final element modification, \cref{final-element-modification-prevention} + Corrected example for final element modification, \autoref{final-element-modification-prevention} Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1326}{\#1326}. \item - Corrected duplicated class-definition grammar, \cref{the-class-extends-redeclaration-mechanism}. Ticket + Corrected duplicated class-definition grammar, \autoref{the-class-extends-redeclaration-mechanism}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1388}{\#1388}. \item - Clarified modifiers on constraining type, \cref{constraining-type}. Ticket + Clarified modifiers on constraining type, \autoref{constraining-type}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1033}{\#1033}. \item - Clarified when \lstinline!redeclare! can be used with the same type and rules for redeclaring array types, \cref{restrictions-on-redeclarations}. - Tickets + Clarified when redeclare can be used with the same type and rules for + redeclaring array types, \autoref{restrictions-on-redeclarations}. Tickets \href{https://github.com/modelica/ModelicaSpecification/issues/1252}{\#1252}, \href{https://github.com/modelica/ModelicaSpecification/issues/1281}{\#1281}. \item - Clarified default for annotation \lstinline!choicesAllMatching!, \cref{annotation-choices-for-suggested-redeclarations-and-modifications}. + Clarified default for annotation choicesAllMatching, \autoref{annotation-choices-for-suggested-redeclarations-and-modifications}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1391}{\#1391}. \item - Forbid \lstinline!when!-statements in initial equation/algorithm (they would in most cases not be active; leading to confusion), \cref{restrictions-on-equations-within-when-equations} and \cref{restrictions-on-where-a-when-statement-may-occur}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1288}{\#1288}. + Forbid when-statements in initial equation/algorithm (they would in + most cases not be active; leading to confusion), \autoref{restrictions-on-equations-within-when-equations} and + \autoref{restrictions-on-when-statements}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1288}{\#1288}. \item - Clarified \lstinline!reinit! during initialization, \cref{reinit} \cref{initialization-initial-equation-and-initial-algorithm}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1372}{\#1372}. + Clarified reinit during initialization, \autoref{reinit} \autoref{initialization-initial-equation-and-initial-algorithm}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1372}{\#1372}. \item - Clarified using \lstinline!start!-attributes as guess-values; \cref{initialization-initial-equation-and-initial-algorithm}. - Tickets \href{https://github.com/modelica/ModelicaSpecification/issues/1133}{\#1133}, \href{https://github.com/modelica/ModelicaSpecification/issues/1246}{\#1246}. + Clarified using start-values as guess-values; \autoref{initialization-initial-equation-and-initial-algorithm}. Tickets + \href{https://github.com/modelica/ModelicaSpecification/issues/1133}{\#1133}, + \href{https://github.com/modelica/ModelicaSpecification/issues/1246}{\#1246}. \item - Clarified allowed use of variables in expandable connectors; \cref{expandable-connectors}. Ticket + Clarified allowed use of variables in expandable connectors; \autoref{expandable-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1279}{\#1279}. \item - Clarified causality for expandable connectors; \cref{expandable-connectors}. Ticket + Clarified causality for expandable connectors; \autoref{expandable-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1305}{\#1305}. \item - Clarified expandable connectors in general; \cref{expandable-connectors}. Ticket + Clarified expandable connectors in general; \autoref{expandable-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1330}{\#1330}. \item - Clarified connection matching, \cref{restrictions-of-connections-and-connectors}. Ticket + Clarified connection matching, \autoref{restrictions-of-connections-and-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/884}{\#884}. \item Added quantity checks for connectors (MSL already relies on this - check); \cref{restrictions-of-connections-and-connectors}. Ticket + check); \autoref{restrictions-of-connections-and-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1284}{\#1284}. \item - Clarified arrays with non-\lstinline!Integer! dimensions, \cref{array-declarations}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1501}{\#1501}. + Clarified arrays with non-Integer dimensions, \autoref{array-declarations}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1501}{\#1501}. \item - Clarified that ndims is allow for a scalar, \cref{array-dimension-and-size-functions}. Ticket + Clarified that ndims is allow for a scalar, \autoref{array-dimension-and-size-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1303}{\#1303}. \item - Clarified number of arguments for zeros, ones, fill, \cref{specialized-array-constructor-functions}. + Clarified number of arguments for zeros, ones, fill, \autoref{specialized-array-constructor-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1351}{\#1351}. \item - Clarified min/max, \cref{reduction-functions-and-operators}. Ticket + Clarified min/max, \autoref{reduction-functions-and-operators}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1036}{\#1036}. \item Clarified array expressions using iterations allow non-simple types, - \cref{array-constructor-with-iterators}. Ticket + \autoref{array-constructor-with-iterators}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1521}{\#1521}. \item - Clarified arrays with non-\lstinline!Integer! dimensions, \cref{indexing-with-boolean-or-enumeration-values}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1463}{\#1463}. + Clarified arrays with non-Integer dimensions, \autoref{indexing-with-boolean-or-enumeration-values}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1463}{\#1463}. \item - Clarified calling function as specialized class, \cref{function-as-a-specialized-class}. Ticket + Clarified calling function as specialized class, \autoref{function-as-a-specialized-class}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1362}{\#1362}. \item Clarified default values in functions depending on other inputs, - \cref{positional-or-named-input-arguments-of-functions}. Ticket + \autoref{positional-or-named-input-arguments-of-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1346}{\#1346}. \item - Corrected syntax error in example, \cref{function-partial-application}. Ticket + Corrected syntax error in example, \autoref{function-partial-application}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1338}{\#1338}. \item - Clarified annotations on external functions, \cref{external-function-interface}. Ticket + Clarified annotations on external functions, \autoref{external-function-interface}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/660}{\#660}. \item Add possibility for sending arrays in records to external functions, - \cref{external-function-interface}. Ticket + \autoref{external-function-interface}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/351}{\#351}. \item - Corrected spelling to FORTRAN~77, \cref{aliasing}. Ticket + Corrected spelling to FORTRAN~77, \autoref{aliasing}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1278}{\#1278}. \item - Clarified default directories, \cref{annotations-for-external-libraries-and-include-files}. Ticket + Clarified default directories, \autoref{annotations-for-external-libraries-and-include-files}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1456}{\#1456}. \item - Clarified constructing/destructing external objects, \cref{external-objects}. + Clarified constructing/destructing external objects, \autoref{external-objects}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1518}{\#1518}. \item - Clarified encapsulation requirement for operator record, \cref{overloaded-operators}. + Clarified encapsulation requirement for operator record, \autoref{overloaded-operators}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1254}{\#1254}. \item Clarified operator record: arrays, priority, and zero result, - \cref{overloaded-binary-operations}. Tickets + \autoref{overloaded-binary-operations}. Tickets \href{https://github.com/modelica/ModelicaSpecification/issues/1469}{\#1469}, \href{https://github.com/modelica/ModelicaSpecification/issues/1476}{\#1476}, \href{https://github.com/modelica/ModelicaSpecification/issues/1481}{\#1481}. \item - Added element wise operations for operator record, \cref{overloaded-binary-operations}. + Added element wise operations for operator record, \autoref{overloaded-binary-operations}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1455}{\#1455}. \item - Improved formulation, \cref{clock-constructors}. Ticket + Improved formulation, \autoref{clock-constructors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1362}{\#1362}. \item - Clarified why noClock exists; \cref{sub-clock-conversion-operators}. Ticket + Clarified why noClock exists; \autoref{sub-clock-conversion-operators}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1094}{\#1094}. \item Added initial conditions to solver methods for clocked discretized - continuous-time partitions; \cref{solver-methods}. Ticket + continuous-time partitions; \autoref{solver-methods}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1379}{\#1379}. \item Added requirement that priorities must be unique for statechart transitions (the restriction was present in original description and - is necessary to ensure deterministic behavior), \cref{state-machine-semantics}. Ticket + is necessary to ensure deterministic behavior), \autoref{state-machine-semantics}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/853}{\#853}. \item - Corrected syntax in Line definition, \cref{line}. Ticket + Corrected syntax in Line definition, \autoref{line}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1464}{\#1464}. \item - Corrected \lstinline!connectorSizing! description, \cref{annotations-for-the-graphical-user-interface}. Ticket + Corrected connectorSizing description, \autoref{annotations-for-the-graphical-user-interface}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1441}{\#1441}. \item - Corrected license example, \cref{licensing}. Ticket + Corrected license example, \autoref{licensing}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1127}{\#1127}. \item Clarified names of productions in grammar and changed to use hyphen, - \cref{lexical-conventions}. Tickets + \autoref{lexical-conventions}. Tickets \href{https://github.com/modelica/ModelicaSpecification/issues/713}{\#713} and \href{https://github.com/modelica/ModelicaSpecification/issues/1033}{\#1033}. \item - Modified grammar use consistent style for import-list, \cref{class-definition}. + Modified grammar use consistent style for import-list, \autoref{class-definition}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1374}{\#1374}. \end{itemize} -\subsection{Contributors to the Modelica Language, Version 3.3 Revision 1}\label{contributors-to-the-modelica-language-version-3-3-revision-1} +\subsection{Contributors to the Modelica Language, Version 3.3 Revision 1}\doublelabel{contributors-to-the-modelica-language-version-3-3-revision-1} The following members of the Modelica Association contributed to the Modelica 3.3 Revision 1 and/or Modelica 3.2 Revision 2 specification (alphabetical list): -\begin{contributors} -\item Peter Aronsson, MathCore AB, Linköping, Sweden -\item Peter Fritzson, PELAB, Linköping University, Linköping, Sweden -\item Hilding Elmqvist, Dassault Systèmes, Lund, Sweden -\item Christoph Höger, Technical University of Berlin, Berlin, Germany -\item Gerd Kurzbach, ITI GmbH, Dresden, Germany -\item Jesper Mattsson, Modelon AB, Lund, Sweden -\item Hans Olsson, Dassault Systèmes, Lund, Sweden -\item Martin Otter, DLR, Oberpfaffenhofen, Germany -\item Adrian Pop, Linköping University, Linköping, Sweden -\item Elena Shmoylova, Maplesoft, Waterloo, Canada -\item Martin Sjölund, PELAB, Linköping University, Linköping, Sweden -\item Stefan Vorkoetter, Maplesoft, Waterloo, Canada -\end{contributors} - -\section{Modelica 3.3}\label{modelica-3-3} +\begin{longtable}{p{0.3cm}p{14cm}} +&Peter Aronsson, MathCore AB, Linköping, Sweden\\ +&Peter Fritzson, PELAB, Linköping University, Linköping, Sweden\\ +&Hilding Elmqvist, Dassault Systèmes, Lund, Sweden\\ +&Christoph Höger, Technical University of Berlin, Berlin, Germany\\ +&Gerd Kurzbach, ITI GmbH, Dresden, Germany\\ +&Jesper Mattsson, Modelon AB, Lund, Sweden\\ +&Hans Olsson, Dassault Systèmes, Lund, Sweden\\ +&Martin Otter, DLR, Oberpfaffenhofen, Germany\\ +&Adrian Pop, Linköping University, Linköping, Sweden\\ +&Elena Shmoylova, Maplesoft, Waterloo, Canada\\ +&Martin Sjölund, PELAB, Linköping University, Linköping, Sweden\\ +&Stefan Vorkoetter, Maplesoft, Waterloo, Canada +\end{longtable} + +\section{Modelica 3.3}\doublelabel{modelica-3-3} Modelica 3.3 was released on May 9, 2012. The Modelica 3.3 specification was edited by Hans Olsson, Hilding Elmqvist and Martin Otter. -\subsection{Main changes in Modelica 3.3}\label{main-changes-in-modelica-3-3} +\subsection{Main changes in Modelica 3.3}\doublelabel{main-changes-in-modelica-3-3} -The following \emph{backward compatible extensions} have been introduced with Modelica 3.3: +The following \textbf{backward compatible extensions} have been +introduced with Modelica 3.3: \begin{itemize} \item Language elements for describing synchronous behavior suited for - implementation of control systems, \cref{synchronous-language-elements}. + implementation of control systems, \autoref{synchronous-language-elements}. \item - Language elements to define synchronous state machines, \cref{state-machines}. + Language elements to define synchronous state machines, \autoref{state-machines}. \item - The \lstinline!spatialDistribution! function for special one-dimensional flow problems, \cref{spatialdistribution}. + The spatialDistribution function for special one-dimensional flow + problems, \autoref{spatialdistribution}. \item - The \lstinline!getInstanceName! function for diagnostic messages, \cref{getinstancename}. + The getInstanceName function for diagnostic messages, \autoref{getinstancename}. \item - Possible to call a function through an instance name, \cref{composite-name-lookup}. + Possible to call a function through an instance name, \autoref{composite-name-lookup}. \item - Can use the \lstinline!start!-attribute for a parameter to give a non-zero default that should be changed, \cref{initialization-initial-equation-and-initial-algorithm}. + Can use the start-value for a parameter to give a non-zero default + that should be changed, \autoref{initialization-initial-equation-and-initial-algorithm}. \item - A recommened procedure for priority between initial values have been added, \cref{recommended-selection-of-start-values}. + A recommened procedure for priority between initial values have been + added, \autoref{recommended-selection-of-start-values}. \item - Functions can be defined without algorithm-section, \cref{function-as-a-specialized-class}. + Functions can be defined without algorithm-section, \autoref{function-as-a-specialized-class}. \item - Functions can be marked as \lstinline!pure! or \lstinline!impure! with specified semantics, \cref{pure-modelica-functions}. + Functions can be marked as pure or impure with specified semantics, + \autoref{pure-modelica-functions}. \item - The rules for \lstinline!ExternalObject! have been clarified, \cref{external-objects} and \cref{interface-or-type-relationships}. + The rules for ExternalObject have been clarified, \autoref{external-objects} and + \autoref{interface-or-type-relationships}. \item - Multiple definition import, \cref{importing-definitions-from-a-package}. + Multiple definition import, \autoref{importing-definitions-from-a-package}. \item Additional annotations allowing: + \begin{itemize} \item - Functions to generate events, \cref{modelica:GenerateEvents}. + Functions to generate events, \autoref{annotations-for-code-generation}. \item - Experiments to specify a time-resolution of simulation result, \cref{modelica:experiment}. + Experiments to specify a time-resolution of simulation result, + \autoref{annotations-for-simulation-experiments}. \item - Single instance of class, \cref{annotation-for-single-use-of-class}. + Single instance of class, \autoref{annotation-for-single-use-of-class}. \item - Text in the diagram layer can use a macro syntax, \cref{text}. + Text in the diagram layer can use a macro syntax, \autoref{text}. \item - Color selection dialog for parameters, \cref{annotations-for-the-graphical-user-interface}. + Color selection dialog for parameters, \autoref{annotations-for-the-graphical-user-interface}. \item Conversion to specify a set of versions to convert with one script, - \cref{version-handling}. + \autoref{version-handling}. \item Licensed libraries to define the set of allowed operations - (including binary/source export), \cref{licensing}. + (including binary/source export), \autoref{licensing}. \end{itemize} \end{itemize} -The following changes in Modelica 3.3 are \emph{not} backwards compatible: +The following \textbf{changes} in Modelica 3.3 are \textbf{not} +\textbf{backwards compatible}: \begin{itemize} \item - \Crefnameref{synchronous-language-elements} from + \autonameref{synchronous-language-elements} from Modelica 3.2 has been removed (a more powerful functionality is - instead provided with the new \cref{synchronous-language-elements} and \cref{state-machines}). Since, no - released tools has yet supported the previous \cref{synchronous-language-elements}, this not + instead provided with the new \autoref{synchronous-language-elements} and \autoref{state-machines}). Since, no + released tools has yet supported the previous \autoref{synchronous-language-elements}, this not backwards compatible change is uncritical. \item The new \lstinline!spatialDistribution! and \lstinline!getInstanceName! functions could cause @@ -1141,22 +761,22 @@ \subsection{Main changes in Modelica 3.3}\label{main-changes-in-modelica-3-3} \begin{itemize} \item Conditional physical connectors must be connected if enabled, - \cref{conditional-component-declaration} - and \cref{restrictions-of-connections-and-connectors}. In almost all cases they have to be connected + \autoref{conditional-component-declaration} + and \autoref{restrictions-of-connections-and-connectors}. In almost all cases they have to be connected to generate correct result, and it is not possible to check that they are connected in the models \end{itemize} -\subsection{Contributors to Modelica 3.3}\label{contributors-to-modelica-3-3} +\subsection{Contributors to Modelica 3.3}\doublelabel{contributors-to-modelica-3-3} -The language elements for describing synchronous behavior, \cref{synchronous-language-elements}, +The language elements for describing synchronous behavior, \autoref{synchronous-language-elements}, was mainly developed by Hilding Elmqvist, Martin Otter, and Sven Erik Mattsson. Hilding Elmqvist wrote a detailed tutorial. Sven Erik Mattsson developed a test implementation of the language elements and the needed new algorithms. Based on the prototype, tests and feedback have been provided by Martin Otter and Bernhard Thiele. -The language elements to define synchronous state machines, \cref{state-machines}, +The language elements to define synchronous state machines, \autoref{state-machines}, was mainly developed by Hilding Elmqvist with contributions from Francois Dupont, Sven Erik Mattsson and Fabien Gaucher. Hilding Elmqvist wrote a tutorial. Sven Erik Mattsson and Carl-Fredrik Abelson developed @@ -1164,10 +784,11 @@ \subsection{Contributors to Modelica 3.3}\label{contributors-to-modelica-3-3} been provided by Alain Thura, Emmanuel Ledinot, Claire Campan, and Martin Malmheden. -The \lstinline!spatialDistribution! operator was initiated by Hubertus Tummescheit, +The spatialDistribution operator was initiated by Hubertus Tummescheit, based on an operator of Dymola, and with contributions from Hans Olsson. -The improved definition of pure and impure functions and the enhanced \lstinline!import!-clause was proposed by Peter Fritzson. +The improved definition of pure and impure functions and the enhanced +import statement was proposed by Peter Fritzson. The various smaller language improvements based on submitted tickets have been developed by a group headed by Hans Olsson and with group @@ -1176,111 +797,129 @@ \subsection{Contributors to Modelica 3.3}\label{contributors-to-modelica-3-3} The following members of the Modelica Association participated at design meetings and contributed to the Modelica 3.3 specification: -\begin{contributors} -\item Johan Åkesson, Lund University and Modelon AB, Lund, Sweden -\item Peter Aronsson, MathCore AB, Linköping, Sweden -\item Ingrid Bausch-Gall, BAUSCH-GALL GmbH, Munich, Germany -\item Volker Beuter, Kämmerer AG, Germany -\item Torsten Blochwitz, ITI GmbH, Dresden, Germany -\item David Broman, PELAB, Linköping University, Sweden -\item Dag Brück, Dassault Systèmes, Lund, Sweden -\item Francesco Casella, Politecnico di Milano, Milano, Italy -\item Christoph Clauss, Fraunhofer, Dresden, Germany -\item Mike Dempsey, Claytex Services Limited, Leamington Spa, U.K. -\item Karin Dietl, TU Hamburg-Harburg, Germany -\item Francois Dupont, Dassault Systèmes, Brest, France -\item Jonas Eborn, Modelon, Lund, Sweden -\item Hilding Elmqvist, Dassault Systèmes, Lund, Sweden -\item Guilioano Fontanella, AIT, Vienna, Austria -\item Rüdiger Franke, ABB Power Generation, Mannheim, Germany -\item Peter Fritzson, PELAB, Linköping University, Sweden -\item Sébastien Furic, LMS International, Roanne. France -\item Leo Gall, BAUSCH-GALL Gmbh, Munich, Germany -\item Peter Harman, deltatheta uk limited, U.K. -\item Anton Haumer, AIT, Vienna, Austria -\item Dan Henriksson, Dassault Systèmes, Lund, Sweden -\item Christoph Höger, TU Berlin, Berlin, Germany -\item Christian Kral, AIT, Vienna, Austria -\item Gerd Kurzbach, ITI GmbH, Dresden, Germany -\item Kilian Link, Siemens AB, Erlangen, Germany -\item Krisitin Majetta, Fraunhofer, Dresden, Germany -\item Martin Malmheden, Dassault Systèmes, Velicy, France -\item Jesper Mattsson, Modelon, Lund, Sweden -\item Sven Erik Mattsson, Dassault Systèmes, Lund, Sweden -\item Eric Neuber, ITI GmbH, Dresden, Germany -\item Ramine Nikoukhah, Altair, France -\item Hans Olsson, Dassault Systèmes, Lund, Sweden -\item Martin Otter, DLR-RM (German Aerospace Center), Oberpfaffenhofen,Germany -\item Peter Pepper, Fraunhofer FIRST, Berlin, Germany -\item Adrian Pop, Linköping University, Linköping, Sweden -\item Olena Rogovchenko, PELAB, Linköping, Sweden -\item Stefan-Alexander Schneider, BMW, Munich, Germany -\item Michael Sielemann, German Aerospace Center, Oberpfaffenhofen, Germany -\item Martin Sjölund, PELAB; Linköping, Sweden -\item Kristian Stavåker, PELAB, Linköping, Sweden -\item Bernhard Thiele, DLR-RM (German Aerospace Center), Oberpfaffenhofen,Germany -\item Eric Thomas, Dassault Aviation, Paris, France -\item Michael Tiller, Dassault Systèmes, Velicy, France -\item Hubertus Tummescheit, Modelon AB, Lund, Sweden -\item Andreas Uhlig, ITI, Dresden Germany -\item Vladimir Vukovic, AIT, Vienna, Germany -\item Stefan Vorkoetter, Maplesoft, Waterloo, Canada -\item Daniel Weil, Dassault Systèmes, Grenoble, France -\item Hans-Jürg Wiesmann, ABB Switzerland, Corporate Research, Baden,Switzerland -\item Dietmar Winkler, Telemark University College, Porsgrunn, Norway -\item Stefan Wischhusen, XRG Simulation, Hamburg, Germany -\item Dirk Zimmer, DLR-RM (German Aerospace Center), Oberpfaffenhofen, Germany -\end{contributors} - -\subsection{Acknowledgments}\label{acknowledgments1} - -For the design of the synchronous language elements (\cref{synchronous-language-elements}) and -synchronous state machines (\cref{state-machines}), and for the understanding of +\begin{longtable}{p{0.3cm}p{14cm}} +&Johan Åkesson, Lund University and Modelon AB, Lund, Sweden\\ +&Peter Aronsson, MathCore AB, Linköping, Sweden\\ +&Ingrid Bausch-Gall, BAUSCH-GALL GmbH, Munich, Germany\\ +&Volker Beuter, Kämmerer AG, Germany\\ +&Torsten Blochwitz, ITI GmbH, Dresden, Germany\\ +&David Broman, PELAB, Linköping University, Sweden\\ +&Dag Brück, Dassault Systèmes, Lund, Sweden\\ +&Francesco Casella, Politecnico di Milano, Milano, Italy\\ +&Christoph Clauss, Fraunhofer, Dresden, Germany\\ +&Mike Dempsey, Claytex Services Limited, Leamington Spa, U.K.\\ +&Karin Dietl, TU Hamburg-Harburg, Germany\\ +&Francois Dupont, Dassault Systèmes, Brest, France\\ +&Jonas Eborn, Modelon, Lund, Sweden\\ +&Hilding Elmqvist, Dassault Systèmes, Lund, Sweden\\ +&Guilioano Fontanella, AIT, Vienna, Austria\\ +&Rüdiger Franke, ABB Power Generation, Mannheim, Germany\\ +&Peter Fritzson, PELAB, Linköping University, Sweden\\ +&Sébastien Furic, LMS International, Roanne. France\\ +&Leo Gall, BAUSCH-GALL Gmbh, Munich, Germany\\ +&Peter Harman, deltatheta uk limited, U.K.\\ +&Anton Haumer, AIT, Vienna, Austria\\ +&Dan Henriksson, Dassault Systèmes, Lund, Sweden\\ +&Christoph Höger, TU Berlin, Berlin, Germany\\ +&Christian Kral, AIT, Vienna, Austria\\ +&Gerd Kurzbach, ITI GmbH, Dresden, Germany\\ +&Kilian Link, Siemens AB, Erlangen, Germany\\ +&Krisitin Majetta, Fraunhofer, Dresden, Germany\\ +&Martin Malmheden, Dassault Systèmes, Velicy, France\\ +&Jesper Mattsson, Modelon, Lund, Sweden\\ +&Sven Erik Mattsson, Dassault Systèmes, Lund, Sweden\\ +&Eric Neuber, ITI GmbH, Dresden, Germany\\ +&Ramine Nikoukhah, Altair, France\\ +&Hans Olsson, Dassault Systèmes, Lund, Sweden\\ +&Martin Otter, DLR-RM (German Aerospace Center), Oberpfaffenhofen,Germany\\ +&Peter Pepper, Fraunhofer FIRST, Berlin, Germany\\ +&Adrian Pop, Linköping University, Linköping, Sweden\\ +&Olena Rogovchenko, PELAB, Linköping, Sweden\\ +&Stefan-Alexander Schneider, BMW, Munich, Germany\\ +&Michael Sielemann, German Aerospace Center, Oberpfaffenhofen, Germany\\ +&Martin Sjölund, PELAB; Linköping, Sweden\\ +&Kristian Stavåker, PELAB, Linköping, Sweden\\ +&Bernhard Thiele, DLR-RM (German Aerospace Center), Oberpfaffenhofen,Germany\\ +&Eric Thomas, Dassault Aviation, Paris, France\\ +&Michael Tiller, Dassault Systèmes, Velicy, France\\ +&Hubertus Tummescheit, Modelon AB, Lund, Sweden\\ +&Andreas Uhlig, ITI, Dresden Germany\\ +&Vladimir Vukovic, AIT, Vienna, Germany\\ +&Stefan Vorkoetter, Maplesoft, Waterloo, Canada\\ +&Daniel Weil, Dassault Systèmes, Grenoble, France\\ +&Hans-Jürg Wiesmann, ABB Switzerland, Corporate Research, Baden,Switzerland\\ +&Dietmar Winkler, Telemark University College, Porsgrunn, Norway\\ +&Stefan Wischhusen, XRG Simulation, Hamburg, Germany\\ +&Dirk Zimmer, DLR-RM (German Aerospace Center), Oberpfaffenhofen, Germany +\end{longtable} + +\subsection{Acknowledgments}\doublelabel{acknowledgments1} + +For the design of the synchronous language elements (\autoref{synchronous-language-elements}) and +synchronous state machines (\autoref{state-machines}), and for the understanding of fine details of synchronous languages, especially from Lucid Synchrone, very helpful discussions with -\begin{contributors} -\item Albert Benveniste, IRISA/INRIA, Rennes, France -\item Marc Pouzet, Laboratoire d'Informatique de l'ENS, Paris -\item Benoit Caillaud, IRISA, Rennes, France -\item Timothy Bourke, INRIA, Rennes, France -\end{contributors} + +\begin{longtable}{p{0.3cm}p{14cm}} +&Albert Benveniste, IRISA/INRIA, Rennes, France\\ +&Marc Pouzet, Laboratoire d'Informatique de l'ENS, Paris\\ +&Benoit Caillaud, IRISA, Rennes, France\\ +&Timothy Bourke, INRIA, Rennes, France +\end{longtable} are appreciated. -\section{Modelica 3.2 Revision 2}\label{modelica-3-2-revision-2} +\section{Modelica 3.2 Revision 2}\doublelabel{modelica-3-2-revision-2} Modelica 3.2 Revision 2 was released 2013. The Modelica 3.2 Revision 2 specification was edited by Hans Olsson and Martin Otter. -\subsection{Main changes in Modelica 3.2 Revision 2}\label{main-changes-in-modelica-3-2-revision-2} +\subsection{Main changes in Modelica 3.2 Revision 2}\doublelabel{main-changes-in-modelica-3-2-revision-2} -The Modelica language was slightly adapted (in a backwards compatible way, except as listed below) in order that the Modelica Standard Library (MSL) version~3.2.1 is fully compliant to Modelica -Language~3.2 Revision~2. This required the following improvements compared to 3.2 Revision~1: +The Modelica language was slightly adapted (in a backwards compatible +way -- except as listed below) in order that the Modelica Standard +Library (MSL) version 3.2.1 is fully compliant to Modelica Language 3.2 +Revision 2. This required the following improvements compared to 3.2 +Revision 1: \begin{itemize} \item - Possible to call a function through an instance name, \cref{composite-name-lookup}\\ - (used in MSL 3.2 to compute the gravity acceleration in \lstinline!Modelica.Mechanics.MultiBody.World!; this feature was also introduced in Modelica Language version 3.3 in May 2012). + Possible to call a function through an instance name, \autoref{composite-name-lookup}\\ + (used in MSL 3.2 to compute the gravity acceleration in + Modelica.Mechanics.MultiBody.World; this feature was also introduced + in Modelica Language version 3.3 in May 2012). \item - New built-in operator \lstinline!Connections.rooted(A.R)! to inquire whether an overdetermined type or record instance \lstinline!A.R! in a call to \lstinline!Connections.branch(A.R, B.R)! is closer to the root of the spanning tree than \lstinline!B.R!, \cref{overconstrained-equation-operators-for-connection-graphs} (used in MSL 3.2 to avoid algebraic loops in several components such as in \lstinline!Modelica.Mechanics.MultiBody.Joints.Revolute!). + New built-in operator Connections.rooted(A.R) to inquire whether an + overdetermined type or record instance A.R in a call to + Connections.branch(A.R,B.R) is closer to the root of the spanning tree + than B.R, \autoref{overconstrained-equation-operators-for-connection-graphs} (used in MSL 3.2 to avoid algebraic loops in + several components such as in + Modelica.Mechanics.MultiBody.Joints.Revolute). \item - Several new annotations where vendor-specific variants were used in MSL 3.2; \cref{annotation-choices-for-suggested-redeclarations-and-modifications}, \cref{annotations-for-documentation}, \cref{annotations-for-symbolic-processing}, \cref{modelica:experiment}, \cref{connections}, and \cref{annotations-for-the-graphical-user-interface}. + Several new annotations where vendor-specific variants were used in + MSL 3.2; \autoref{annotation-choices-for-suggested-redeclarations-and-modifications}, + \autoref{annotations-for-documentation}, \autoref{annotations-for-code-generation}, + \autoref{annotations-for-simulation-experiments}, \autoref{connections}, and \autoref{annotations-for-the-graphical-user-interface}. \item - Specified that \lstinline!Evaluate! can also occur in types, since this is used in MSL and important for performance; \cref{modelica:Evaluate}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/925}{\#925}. + Specified that Evaluate can also occur in types, since this is used in + MSL and important for performance; \autoref{annotations-for-code-generation}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/925}{\#925}. \item - Macros in graphical text items, \cref{text}. Ticket + Macros in graphical text items, \autoref{text}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/659}{\#659}. (This feature was also introduced in Modelica Language version 3.3.) \item - Initial equations are discrete -- used in MSL for initialization of pre-variables, \cref{discrete-time-expressions}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/853}{\#853}. + Initial equations are discrete -- used in MSL for initialization of + pre-variables, \autoref{discrete-time-expressions}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/853}{\#853}. \item - Updated \lstinline!noDerivative! to be consistent with MSL, \cref{using-the-derivative-annotation}. This is an incompatibility, but the other variant was not used. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1035}{\#1035}. + Updated noDerivative to be consistent with MSL, \autoref{using-the-derivative-annotation}. This + is an incompatibility -- but the other variant was not used. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1035}{\#1035}. \item - Clarified handling of component with \lstinline!missingInnerMessage!; \cref{annotations-for-the-graphical-user-interface}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/891}{\#891}. + Clarified handling of component with missingInnerMessage; + \autoref{annotations-for-the-graphical-user-interface}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/891}{\#891}. \item - Clarified definition of protected; \cref{access-control-public-and-protected-elements}. Ticket + Clarified definition of protected; \autoref{access-control-public-and-protected-elements}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/975}{\#975}, \href{https://github.com/modelica/ModelicaSpecification/issues/1123}{\#1123}. \end{itemize} @@ -1289,72 +928,74 @@ \subsection{Main changes in Modelica 3.2 Revision 2}\label{main-changes-in-model \begin{itemize} \item Clarified an unclear sequence regarding functions as input arguments - in \cref{prefix-rules}. Ticket + in \autoref{prefix-rules}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1182}{\#1182}. \item - Clarified allowed binding equations for redeclarations, \cref{balanced-models}. + Clarified allowed binding equations for redeclarations, \autoref{balanced-models}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1111}{\#1111}. \item - Unspecified enumerations now have defined semantics, \cref{unspecified-enumeration}. + Unspecified enumerations now have defined semantics, \autoref{unspecified-enumeration}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/834}{\#834}. \item - Transitively non-Replaceable, \cref{transitively-non-replaceable}. Ticket + Transitively non-Replaceable, \autoref{transitively-non-replaceable}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/854}{\#854}. \item Modification text improved to not refer to inherited class, - \cref{modifications}. Ticket + \autoref{modifications}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1042}{\#1042}. \item - Precedence for modifiers on \lstinline[language=grammar]!constraining-clause! clarified, \cref{constraining-type}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1128}{\#1128}. + Precedence for modifiers on constraining-clause clarified, \autoref{constraining-type}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1128}{\#1128}. \item - Clarified arrays for constraining type, \cref{constraining-type}. Ticket + Clarified arrays for constraining type, \autoref{constraining-type}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1148}{\#1148}. \item Avoid all forms of connections depending on connections, - \cref{connect-equations}. Ticket + \autoref{connect-equations}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/828}{\#828}. \item - Clarified equation count for \lstinline!if!-equations, \cref{if-equations}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/888}{\#888}. + Clarified equation count for if-equations, \autoref{if-equations}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/888}{\#888}. \item - Complete definition of \lstinline!reinit!, \cref{reinit}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/578}{\#578}. - This forbids \lstinline!reinit! in algorithms, but it was previously not well-defined. + Complete definition of reinit, \autoref{reinit}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/578}{\#578}. This + forbids reinit in algorithms -- but it was previously not + well-defined. \item - Clarified initializaton of \lstinline!pre(vc)! for a non-discrete (that is continuous-time) \lstinline!Real! variable \lstinline!vc!, \cref{initialization-initial-equation-and-initial-algorithm}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1195}{\#1195}. + Clarified initializaton of pre(vc) for a non-discrete (that is + continuous-time) Real variable vc, \autoref{initialization-initial-equation-and-initial-algorithm}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1195}{\#1195}. \item Only one way of handling arrays of connectors is now defined, - \cref{connectors-and-connections}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/757}{\#757}. + \autoref{connectors-and-connections}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/757}{\#757}. \item - Example now use correct sine-source, \cref{connect-equations-and-connectors}. Ticket + Example now use correct sine-source, \autoref{connect-equations-and-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/750}{\#750}. \item - Restricted parameters in connectors, \cref{restrictions-of-connections-and-connectors}. Ticket + Restricted parameters in connectors, \autoref{restrictions-of-connections-and-connectors}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/768}{\#768}. \item - Clarified type restrictions for some operators, \cref{reduction-functions-and-operators}, - \cref{matrix-and-vector-algebra-functions}. Ticket + Clarified type restrictions for some operators, \autoref{reduction-functions-and-operators}, + \autoref{matrix-and-vector-algebra-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/622}{\#622}. \item Clarified that if at least one array element is used on the left hand side of the assignment operator in an algorithm section, then the - complete array is initialized in this section, \cref{execution-of-an-algorithm-in-a-model}. Ticket + complete array is initialized in this section, \autoref{execution-of-an-algorithm-in-a-model}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1190}{\#1190}. \item Record constructor corrected to not refer to keywords that should not - occur, \cref{record-constructor-functions}. Ticket + occur, \autoref{record-constructor-functions}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/907}{\#907}. \item - External storage of classes, \cref{mapping-a-package-class-hierarchy-into-a-single-file-nonstructured-entity}, - \cref{the-within-clause} and \cref{mapping-of-versions-to-file-system}. + External storage of classes, \autoref{mapping-a-package-class-hierarchy-into-a-single-file-nonstructured-entity}, + \autoref{the-within-clause} and \autoref{mapping-of-versions-to-file-system}. Tickets \href{https://github.com/modelica/ModelicaSpecification/issues/1019}{\#1019}, \href{https://github.com/modelica/ModelicaSpecification/issues/892}{\#892}, \href{https://github.com/modelica/ModelicaSpecification/issues/887}{\#887}. \item Added example and explanation for inheritance restriction on operator - record; \cref{example-of-overloading-for-complex-numbers}. Ticket + record; \autoref{example-of-overloading-for-complex-numbers}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1065}{\#1065}. \item Chapter \emph{Mapping of Models to Execution Environments} was removed; @@ -1362,14 +1003,15 @@ \subsection{Main changes in Modelica 3.2 Revision 2}\label{main-changes-in-model released an implementation of this feature. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1015}{\#1015}. \item - Corrected license-example in \cref{licensing}. Ticket + Corrected license-example in \autoref{licensing}. Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1127}{\#1127}. \item - Grammar was internally restructured for \lstinline[language=grammar]!short-class-definition!, \cref{class-declarations}, \cref{class-definition}. - Ticket \href{https://github.com/modelica/ModelicaSpecification/issues/1140}{\#1140}. + Grammar was internally restructured for short-class-definition, + \autoref{class-declarations}, \autoref{class-definition}. Ticket + \href{https://github.com/modelica/ModelicaSpecification/issues/1140}{\#1140}. \end{itemize} -\subsection{Contributors to the Modelica Language, Version 3.2 Revision 2}\label{contributors-to-the-modelica-language-version-3-2-revision-2} +\subsection{Contributors to the Modelica Language, Version 3.2 Revision 2}\doublelabel{contributors-to-the-modelica-language-version-3-2-revision-2} The following members of the Modelica Association contributed to the Modelica 3.2 Revision 2 specification (alphabetical list): @@ -1398,12 +1040,12 @@ \subsection{Contributors to the Modelica Language, Version 3.2 Revision 2}\label Stefan Vorkoetter, Maplesoft, Waterloo, Canada -\section{Modelica 3.2 Revision 1}\label{modelica-3-2-revision-1} +\section{Modelica 3.2 Revision 1}\doublelabel{modelica-3-2-revision-1} Modelica 3.2 Revision 1 was released on Feb. 29, 2012. The Modelica 3.2 Revision 1 specification was edited by Hans Olsson and Peter Fritzson. -\subsection{Main changes in Modelica 3.2 Revision 1}\label{main-changes-in-modelica-3-2-revision-1} +\subsection{Main changes in Modelica 3.2 Revision 1}\doublelabel{main-changes-in-modelica-3-2-revision-1} The Modelica language was not changed with respect to the previous version 3.2. Only issues with the specification text have been fixed. In @@ -1412,94 +1054,100 @@ \subsection{Main changes in Modelica 3.2 Revision 1}\label{main-changes-in-model \item Corrected typos and improved formatting. \item - \cref{comments} Comments:\\ + \autoref{comments} Comments:\\ There are 2 and not 3 kinds of comments and comments are treated as white space character.\\ Added definition of white space character. \item - \cref{identifiers} Identifiers:\\ + \autoref{identifiers} Identifiers:\\ The single quotes are part of the identifier, e.g., 'x'. \item - \cref{built-in-variable-time} Built-in Variable time:\\ + \autoref{built-in-variable-time} Built-in Variable time:\\ Variable \lstinline!time! is only available in models and blocks and not in the other classes. \item - \cref{built-in-mathematical-functions-and-external-built-in-functions} Built-in Mathematical Functions\\ + \autoref{built-in-mathematical-functions-and-external-built-in-functions} Built-in Mathematical Functions\\ Definition of \lstinline!atan2! corrected. \item - \cref{derivative-and-special-purpose-operators-with-function-syntax} Special Purpose Operators\\ - Included definition of \lstinline!inStream! and \lstinline!actualStream! operators from \cref{stream-connectors}. + \autoref{derivative-and-special-purpose-operators-with-function-syntax} Special Purpose Operators\\ + Included definition of inStream and actualStream operators from + \autoref{stream-connectors}. \item - \cref{event-related-operators-with-function-syntax} Event-Related Operators\\ + \autoref{event-related-operators-with-function-syntax} Event-Related Operators\\ Clarified, that the first argument of \lstinline!smooth! is a scalar.\\ Improved the definition of \lstinline!reinit!. \item - \cref{discrete-time-expressions} Discrete-Time Expressions\\ - Improved definition of ordered relations (\lstinline!>!, \lstinline!=!, \lstinline!<=!). + \autoref{discrete-time-expressions} Discrete-Time Expressions\\ + Improved definition of ordered relations + (\textgreater{},\textless{},\textgreater{}=,\textless{}=). \item - \cref{conditional-component-declaration} Conditional Component Declaration\\ + \autoref{conditional-component-declaration} Conditional Component Declaration\\ Clarified redeclaration of a component. \item - \cref{specialized-classes} Specialized Classes\\ + \autoref{specialized-classes} Specialized Classes\\ Clarified that \lstinline!stream! cannot be used in a record.\\ Clarified restrictions on elements in a \lstinline!connector!.\\ Errors in example of operator record Complex corrected. \item - \cref{enumeration-types} Enumeration Types\\ + \autoref{enumeration-types} Enumeration Types\\ Error in example corrected. \item - \cref{simultaneous-inner-outer-declarations} Simulataneous Inner/Outer Declarations\\ + \autoref{simultaneous-inner-outer-declarations} Simulataneous Inner/Outer Declarations\\ Clarified inner/outer declarations. \item - \cref{inheritance-extends-clause} Inheritance\\ - Clarified that the elements of a flattened base class are added at the place of the \lstinline!extends!-clause.\\ - Equations of the flattened base class that are syntactically equivalent to equations in the flattened enclosing class are deprecated. + \autoref{inheritance-extends-clause} Inheritance\\ + Clarified that the elements of a flattened base class are added at the + place of the extends clause.\\ + Equations of the flattened base class that are syntactically + equivalent to equations in the flattened enclosing class are + deprecated. \item - \cref{modifications} Modifications\\ + \autoref{modifications} Modifications\\ Element modifiers are no longer part of language, reference grammar instead of duplicating it. \item - \cref{redeclaration} Redeclaration\\ - Improved redeclarations definition and moved an example from \cref{the-class-extends-redeclaration-mechanism} at + \autoref{redeclaration} Redeclaration\\ + Improved redeclarations definition and moved an example from \autoref{the-class-extends-redeclaration-mechanism} at the right place. \item - \cref{reinit} reinit\\ - Improved \lstinline!reinit! definition. + \autoref{reinit} reinit\\ + Improved reinit definition. \item - \cref{initialization-initial-equation-and-initial-algorithm} Initialization\\ - Clarified that only \lstinline!when!-clauses with restricted form of initial() as + \autoref{initialization-initial-equation-and-initial-algorithm} Initialization\\ + Clarified that only when-clauses with restricted form of initial() as condition will be active during initialization. \item - \cref{reduction-expressions} Reduction Expressions\\ + \autoref{reduction-expressions} Reduction Expressions\\ Improved definition \item - \cref{types-as-iteration-ranges} Types as iteration ranges\\ + \autoref{types-as-iteration-ranges} Types as iteration ranges\\ Newly introduced section to improve the definition of iteration ranges \item - \cref{function-as-a-specialized-class} Function\\ - Added missing restrictions that \lstinline!model!, \lstinline!block!, \lstinline!inner!, \lstinline!outer! cannot be used in a function. + \autoref{function-as-a-specialized-class} Function\\ + Added missing restrictions that model, block, inner, outer cannot be + used in a function. \item - \cref{positional-or-named-input-arguments-of-functions} Positional or Named Input Arguments of Functions\\ + \autoref{positional-or-named-input-arguments-of-functions} Positional or Named Input Arguments of Functions\\ Corrected formal syntax of a function call \item - \cref{initialization-and-declaration-assignments-of-components-in-functions} Initialization and Declaration Assignments of + \autoref{initialization-and-declaration-assignments-of-components-in-functions} Initialization and Declaration Assignments of Components in Functions\\ Added the restriction of acylic bindings. \item - \cref{records} Records\\ + \autoref{records} Records\\ Mapping of arrays in records to C-structs is removed. \item - \cref{bitmap} Bitmap\\ + \autoref{bitmap} Bitmap\\ Defined flipping more precisely. \item - \cref{lexical-conventions} Lexical conventions\\ - More precisely defined white-space and comments. + \autoref{lexical-conventions} Lexical conventions\\ + More precisely defined whitespace and comments. \item - \cref{grammar} Grammar\\ + \autoref{grammar} Grammar\\ Improved/corrected grammar definition \end{itemize} -\subsection{Contributors to the Modelica Language, Version 3.2 Revision 1}\label{contributors-to-the-modelica-language-version-3-2-revision-1} +\subsection{Contributors to the Modelica Language, Version 3.2 Revision 1}\doublelabel{contributors-to-the-modelica-language-version-3-2-revision-1} The following members of the Modelica Association contributed to the Modelica 3.2 Revision 1 specification (alphabetical list): @@ -1522,29 +1170,39 @@ \subsection{Contributors to the Modelica Language, Version 3.2 Revision 1}\label Stefan Vorkoetter, Maplesoft, Waterloo, Canada -\section{Modelica 3.2}\label{modelica-3-2} +\section{Modelica 3.2}\doublelabel{modelica-3-2} Modelica 3.2 was released on March 24, 2010. The Modelica 3.2 specification was edited by Hans Olsson, Martin Otter and others. -\subsection{Main changes in Modelica 3.2}\label{main-changes-in-modelica-3-2} +\subsection{Main changes in Modelica 3.2}\doublelabel{main-changes-in-modelica-3-2} -The following \emph{backward compatible extensions} have been introduced with Modelica 3.2: +The following \textbf{backward compatible extensions} have been +introduced with Modelica 3.2: \begin{itemize} \item Homotopy function for making it easier to solve initialization - problems (see \cref{derivative-and-special-purpose-operators-with-function-syntax}). + problems (see \autoref{derivative-and-special-purpose-operators-with-function-syntax}). \item - Functions as formal inputs to functions (see new \cref{functional-input-arguments-to-functions}). + Functions as formal inputs to functions (see new \autoref{functional-input-arguments-to-functions}). \item - Overloaded operators have been refined (see \cref{overloaded-operators}): + Overloaded operators have been refined (see \autoref{overloaded-operators}): + \begin{itemize} \item - A new specialized class \lstinline!operator record! is introduced -- with specialized typing rules (the type is identified by the class name; all other Modelica classes have a structural type - system where the type is only defined by the public elements). Overloaded operators can only be defined inside an \lstinline!operator record!. This change fixes a flaw in Modelica~3.1, since - the look-up of overloaded operators is performed by the record class name. + A new specialized class \lstinline!operator record! is introduced -- with + specialized typing rules (the type is identified by the class name; + all other Modelica classes have a structural type system where the + type is only defined by the public elements). Overloaded operators + can only be defined inside an \lstinline!operator record!. This change fixes + a flaw in Modelica 3.1, since the look-up of overloaded operators is + performed by the record class name. \item - Inheritance of an \lstinline!operator record! is allowed if defined via a short class definition. This removes a restriction of operator overloading in Modelica 3.1, e.g., to define derived classes with units for the record elements, like deriving \lstinline!ComplexVoltage! from \lstinline!Complex!. + Inheritance of an \lstinline!operator record! is allowed if defined via a + short class definition. This removes a restriction of operator + overloading in Modelica 3.1, e.g., to define derived classes with + units for the record elements, like deriving ComplexVoltage from + Complex. \item New overloaded element \lstinline!'0'! in order that operator record classes can be used as flow variables in connectors. @@ -1552,40 +1210,44 @@ \subsection{Main changes in Modelica 3.2}\label{main-changes-in-modelica-3-2} \item Unicode support in description strings, strings in annotations and in comments in order to improve Modelica, e.g., for Arabian, Asian or - Indian users (see grammar changes in \cref{lexical-conventions}). Modelica files are + Indian users (see grammar changes in \autoref{lexical-conventions}). Modelica files are UTF-8 encoded, and can start with the UTF-8 encoded byte order mark (0xef 0xbb 0xbf) to indicate that it may contain UTF-8 characters; - this is treated as white-space in the grammar (see \cref{mapping-a-package-class-hierarchy-into-a-single-file-nonstructured-entity}). + this is treated as white-space in the grammar (see \autoref{mapping-a-package-class-hierarchy-into-a-single-file-nonstructured-entity}). \item - Constants can once again be modified unless declared final -- as this is already used in packages. (See \cref{constant-expressions}). + Constants can once again be modified unless declared final -- as this + is already used in packages.\\ + (see \autoref{constant-expressions}). \item Global name lookup has been introduced (e.g. - \lstinline!.Modelica.Constants.pi!), see \cref{global-name-lookup}. + \lstinline!.Modelica.Constants.pi!), see \autoref{global-name-lookup}. \item - New C functions \lstinline!ModelicaVFormatMessage! and \lstinline!ModelicaVFormatError!, to - simplify message formatting in external functions (see \cref{utility-functions}) + New C-functions \lstinline!ModelicaVFormatMessage! and \lstinline!ModelicaVFormatError!, to + simplify message formatting in external functions (see \autoref{utility-functions}) \item Additional annotations allowing: + \begin{itemize} \item Inclusion of C-header and object library files in packages and referencing them with URIs.\\ (new annotations \lstinline!IncludeDirectory!, \lstinline!LibraryDirectory!, and - standardized platform names like \lstinline!win32!; see \cref{annotations-for-external-libraries-and-include-files}; resolves + standardized platform names like \lstinline!win32!; see \autoref{annotations-for-external-libraries-and-include-files}; resolves ticket \#297). \item Images in parameter dialogs (new annotation \lstinline!groupImage!; see - \cref{annotations-for-the-graphical-user-interface}). + \autoref{annotations-for-the-graphical-user-interface}). \item Start and fixed attributes for variables in parameter dialogs\\ - (new annotation \lstinline!showStartAttribute!; see \cref{annotations-for-the-graphical-user-interface}). + (new annotation \lstinline!showStartAttribute!; see \autoref{annotations-for-the-graphical-user-interface}). \item Access control for packages to protect intelectual property.\\ - (new annotations \lstinline!Protection,! and \lstinline!License!; see new \cref{annotations-for-access-control-to-protect-intellectual-property}). + (new annotations \lstinline!Protection,! and \lstinline!License!; see new \autoref{annotations-for-access-control-to-protect-intellectual-property}). \end{itemize} \end{itemize} -The following changes in Modelica 3.2 are \emph{not} backwards compatible: +The following \textbf{changes} in Modelica 3.2 are \textbf{not} +\textbf{backwards compatible}: \begin{itemize} \item The new built-in operator name \lstinline!homotopy!. In rare cases this might @@ -1596,7 +1258,7 @@ \subsection{Main changes in Modelica 3.2}\label{main-changes-in-modelica-3-2} 3.1 form still for some time. \end{itemize} -\subsection{Contributors to the Modelica Language, Version 3.2}\label{contributors-to-the-modelica-language-version-3-2} +\subsection{Contributors to the Modelica Language, Version 3.2}\doublelabel{contributors-to-the-modelica-language-version-3-2} The initial version of \emph{functions as formal inputs to functions} was proposed by Peter Fritzson. @@ -1605,7 +1267,9 @@ \subsection{Contributors to the Modelica Language, Version 3.2}\label{contributo \lstinline!IncludeDirectory! and \lstinline!LibraryDirectory! annotations was mainly developed by Hans Olsson. -The \lstinline!Protection! annotation used for access control is an improved version of existing annotations from Dymola. The \lstinline!License! annotation was mainly developed by Dag Brück with improvements from Magnus Gäfvert. +The Protection annotation used for access control is an improved version +of existing annotations from Dymola. The License annotation was mainly +developed by Dag Brück with improvements from Magnus Gäfvert. The flaw in the operator overloading concept was detected by Sébastien Furic. He also proposed the basic fix, by using a nominal type system @@ -1614,7 +1278,18 @@ \subsection{Contributors to the Modelica Language, Version 3.2}\label{contributo The global name lookup was proposed by Stefan Vorkoetter. The support for Unicode was initiated by Rui Gao and Hoyoun Kim.\\ -Martin Otter, Michael Sielemann and Francesco Casella proposed \lstinline!homotopy!. Michael Sielemann demonstrated with benchmark problems that non-linear solvers are not able to solve reliably initialization problems and that the \lstinline!homotopy! operator is therefore needed. He provided a prototype implementation of \lstinline!homotopy! and demonstrated its use on a vehicle dynamics example. Utilizing the prototype implementation, Francesco Casella demonstrated with a model of a thermal power plant with 390 iteration variables of the initialization problem, that an appropriate usage of \lstinline!homotopy! allows the system to reliably initialized without providing guess values for the iteration variables. This was a strong indication that \lstinline!homotopy! will indeed improve initialization in Modelica significantly. +The \lstinline!homotopy! operator was proposed by Martin Otter, Michael Sielemann +and Francesco Casella. Michael Sielemann demonstrated with benchmark +problems that non-linear solvers are not able to solve reliably +initialization problems and that the homotopy operator is therefore +needed. He provided a prototype implementation of the homotopy-operator +and demonstrated its use on a vehicle dynamics example. Utilizing the +prototype implementation, Francesco Casella demonstrated with a model of +a thermal power plant with 390 iteration variables of the initialization +problem, that an appropriate usage of the homotopy operator allows to +reliably initialize the system without providing guess values for the +iteration variables. This was a strong indication that the homotopy +operator will indeed improve initialization in Modelica significantly. The following members of the Modelica Association participated at design meetings and contributed to the Modelica 3.2 specification: @@ -1698,7 +1373,7 @@ \subsection{Contributors to the Modelica Language, Version 3.2}\label{contributo Dietmar Winkler, Telemark University College, Porsgrunn, Norway -\subsection{Acknowledgments}\label{acknowledgments2} +\subsection{Acknowledgments}\doublelabel{acknowledgments2} Partial financial support for the development of Modelica 3.2 by the following funding agencies has been received: @@ -1726,15 +1401,16 @@ \subsection{Acknowledgments}\label{acknowledgments2} (\href{http://www.openprod.}{http://www.openprod.org}). \end{itemize} -\section{Modelica 3.1}\label{modelica-3-1} +\section{Modelica 3.1}\doublelabel{modelica-3-1} Modelica 3.1 was released on May 27, 2009. The Modelica 3.1 specification was edited by Francesco Casella, Rüdiger Franke, Hans Olsson, Martin Otter, and Michael Sielemann. -\subsection{Main changes in Modelica 3.1}\label{main-changes-in-modelica-3-1} +\subsection{Main changes in Modelica 3.1}\doublelabel{main-changes-in-modelica-3-1} -The following \emph{backward compatible extensions} have been introduced with Modelica 3.1: +The following \textbf{backward compatible extensions} have been +introduced with Modelica 3.1: \begin{itemize} \item Overloading of operators like \lstinline!'+'! or \lstinline!'*'! to allow convenient usage of @@ -1766,18 +1442,19 @@ \subsection{Main changes in Modelica 3.1}\label{main-changes-in-modelica-3-1} support connector of the Modelica.Mechanics.Rotational/Translational libraries. \item - A tool that uses \lstinline!missingInnerMessage! to give information may also automatically use the corresponding \lstinline!inner!-component. + A tool that uses missingInnerMessage to give information may also + automatically use the corresponding \lstinline!inner!-component. \item URIs can be used for links in html-documentation and for the Bitmap annotation (such as: \filename{modelica://Modelica.Mechanics/C.jpg} for image \filename{C.jpg} that is stored in the directory of package - \lstinline!Modelica.Mechanics!). This allows storing resources in a package on + \lstinline!Modelica.Mechanics!). This allows to store resources in a package on persistent storage and to reference resources via package and resource names. \item \emph{Annotation} \lstinline!connectorSizing! to automatically enlarge a vector of connectors and connect to a free element of this vector when - a connection line is drawn. This allows improving the user + a connection line is drawn. This allows to improve the user convenience, especially for state machine and fluid models. \item \emph{Annotation} \lstinline!inverse! to define inverses of functions. This @@ -1791,22 +1468,23 @@ \subsection{Main changes in Modelica 3.1}\label{main-changes-in-modelica-3-1} build is needed for a used library. \end{itemize} -The following defects have been fixed in the Modelica specification: +The following \textbf{defects} have been \textbf{fixed} in the Modelica +specification: \begin{itemize} \item Modifier with subscripts were previously allowed, but not clearly defined, not implemented in many tools, and not used in libraries. They were thus removed. \item - Modelica keywords (\cref{modelica-keywords}) updated. + Modelica keywords (\autoref{modelica-keywords}) updated. \item Clarification: Exponentiation and array range operator are non-associative\\ (x\^{}y\^{}z or a:b:c:d:e:f are not allowed; parentheses are required) \item - Clarification: Restrictions on combining base classes (\cref{restriction-on-combining-base-classes-and-other-elements}). + Clarification: Restrictions on combining base classes (\autoref{restriction-on-combining-base-classes-and-other-elements}). \item - Clarification: Execution of an algorithm (new \cref{execution-of-an-algorithm-in-a-model}). + Clarification: Execution of an algorithm (new \autoref{execution-of-an-algorithm-in-a-model}). \item The default type for arrays sent to external functions has been clarified. @@ -1815,22 +1493,31 @@ \subsection{Main changes in Modelica 3.1}\label{main-changes-in-modelica-3-1} \lstinline!transformation!, as was originally the intention. \item The Connection set section was rewritten: + \begin{itemize} \item Connection set is clearly defined including examples. \item - The handling of connections involving \lstinline!outer! components was rewritten to ensure that models that seem to have the same connection structure generate the same equations from the \lstinline!connect!-equations. - Previously a connection between an \lstinline!outer! component and an outside connector would move the connection upwards. - The implication of this movement was unclear: if it turned the connector into an inside connector (as was likely the intention) it would prohibit default-connection of this normal connector leading to counter-intuitive results; and otherwise it would have no impact. + The handling of connections involving \lstinline!outer! components was rewritten + to ensure that models that seem to have the same connection + structure generate the same equations from the connect equations. + Previously a connection between an \lstinline!outer! component and an outside + connector would move the connection upwards. The implication of this + movement was unclear: if it turned the connector into an inside + connector (as was likely the intention) it would prohibit + default-connection of this normal connector leading to + counter-intuitive results; and otherwise it would have no impact. \end{itemize} \item Example of using fields was corrected. \item - Example with \lstinline!MatrixGain! was corrected. + Example with MatrixGain was corrected. \item - Ambiguous annotations after \lstinline!external!-clause were corrected (as already used). + Ambiguous annotations after external-declarations were corrected (as + already used). \item - The \lstinline!reinit! operator can be used multiple times in one algorithm, and the semantics clarified. + The reinit-operator can be used multiple times in one algorithm, and + the semantics clarified. \item Made clearer that acyclic parameters also hold for one parameter equation. @@ -1839,11 +1526,14 @@ \subsection{Main changes in Modelica 3.1}\label{main-changes-in-modelica-3-1} meant. \end{itemize} -The following changes in Modelica 3.1 are \emph{not} backwards compatible: +The following \textbf{changes} in Modelica 3.1 are not \textbf{backwards +compatible}: \begin{itemize} \item - A class-level annotation can only be placed before the closing \lstinline!end! delimiter. - This is uncritical because tools can easily fix incorrect models (ignore this new rule when reading a model and use this rule when storing the model). + A class-level annotation can only be placed before the end-statement. + This is uncritical because tools can easily fix incorrect models + (ignore this new rule when reading a model and use this rule when + storing the model). \item New Modelica keywords \lstinline!stream! and \lstinline!operator!, a new built-in package \lstinline!Subtask! and new-built-in operators \lstinline!inStream! and @@ -1856,7 +1546,7 @@ \subsection{Main changes in Modelica 3.1}\label{main-changes-in-modelica-3-1} bus from a block with a connect equation. \end{itemize} -\subsection{Contributors to the Modelica Language, Version 3.1}\label{contributors-to-the-modelica-language-version-3-1} +\subsection{Contributors to the Modelica Language, Version 3.1}\doublelabel{contributors-to-the-modelica-language-version-3-1} The concept of operator overloading was developed by Hans Olsson, based on work of Dag Brück, Peter Fritzson, and Martin Otter. @@ -1955,7 +1645,7 @@ \subsection{Contributors to the Modelica Language, Version 3.1}\label{contributo Dietmar Winkler, TU Berlin, Germany -\subsection{Acknowledgments}\label{acknowledgments3} +\subsection{Acknowledgments}\doublelabel{acknowledgments3} Partial financial support for the development of Modelica 3.1 by the following funding agencies has been received: @@ -1979,12 +1669,12 @@ \subsection{Acknowledgments}\label{acknowledgments3} Equation-Based System Modeling \& Simulation Languages}. \end{itemize} -\section{Modelica 3.0}\label{modelica-3-0} +\section{Modelica 3.0}\doublelabel{modelica-3-0} Modelica 3.0 was released Sept. 5, 2007. The Modelica 3.0 specification was edited by Peter Fritzson, Hans Olsson, and Martin Otter. -\subsection{Contributors to the Modelica Language, Version 3.0}\label{contributors-to-the-modelica-language-version-3-0} +\subsection{Contributors to the Modelica Language, Version 3.0}\doublelabel{contributors-to-the-modelica-language-version-3-0} The Modelica 3.0 specification was newly structured and written by Peter Fritzson using text from the previous specification and also adding new @@ -1997,7 +1687,7 @@ \subsection{Contributors to the Modelica Language, Version 3.0}\label{contributo inspiration was from Mike Tiller. This goes together with making the type interface and sub-typing cleaner -and stricter (the new \cref{interface-or-type-relationships}). This concept fixes flaws of the +and stricter (the new \autoref{interface-or-type-relationships}). This concept fixes flaws of the language that have been pointed out by Sébastien Furic. The graphical annotations have been redesigned and improved by Daniel @@ -2096,7 +1786,7 @@ \subsection{Contributors to the Modelica Language, Version 3.0}\label{contributo Hans-Jürg Wiesmann, ABB Switzerland Ltd.,Corporate Research, Baden, Switzerland -\subsection{Main Changes in Modelica 3.0}\label{main-changes-in-modelica-3-0} +\subsection{Main Changes in Modelica 3.0}\doublelabel{main-changes-in-modelica-3-0} Modelica 3.0 is a ``clean-up'' version of the Modelica language. For example, the specification is newly written to define the language in a @@ -2115,23 +1805,25 @@ \subsection{Main Changes in Modelica 3.0}\label{main-changes-in-modelica-3-0} provide (semi-) automatic mechanisms for conversion of models and libraries. -The following main changes in Modelica 3.0 are \emph{not} backwards compatible: +The following main changes in Modelica 3.0 are \textbf{not backwards +compatible}: \begin{itemize} \item - Restrictions to connectors (see \cref{restrictions-of-connections-and-connectors}): For each non-partial + Restrictions to connectors (see \autoref{restrictions-of-connections-and-connectors}): For each non-partial connector class the number of flow variables shall be equal to the number of variables that are neither parameter, constant, input, output, nor flow. For example, the following connector is illegal in Modelica 3: -\begin{lstlisting}[language=modelica] -connector notValid // illegal connector - Real r1; - Real r2; - flow Real r3; -end notValid; -\end{lstlisting} + \begin{lstlisting}[language=modelica] + connector notValid // illegal connector + Real r1; + Real r2; + flow Real r3; + end notValid; + \end{lstlisting} \item - In a non-partial \lstinline!model! or \lstinline!block!, all non-connector inputs of \lstinline!model! or \lstinline!block! components must have binding equations. + In a non-partial model or block, all non-connector inputs of model or + block components must have binding equations. \item A component declared with the \lstinline!inner! or \lstinline!outer! prefix shall not be of a class having top-level public connectors containing inputs. @@ -2140,20 +1832,33 @@ \subsection{Main Changes in Modelica 3.0}\label{main-changes-in-modelica-3-0} replaceable elements and binding equations for parameters, constants, inputs and variables having a default binding equation. \item - All non-partial \lstinline!model! and \lstinline!block! classes must be locally balanced (see \cref{balanced-models}). This means that the local number of unknowns equals the local equation size. Together with other restrictions, this leads to the strong property that a simulation model is always globally balanced (i.e., the number of unknowns is equal to the number of equations). + All non-partial model and block classes must be locally balanced (see + \autoref{balanced-models}). This means that the local number of unknowns equals the + local equation size. Together with other restrictions, this leads to + the strong property that a simulation model is always globally + balanced (i.e., the number of unknowns is equal to the number of + equations). \item - Prefixes \lstinline!input!, \lstinline!output!, \lstinline!inner!, \lstinline!outer!, \lstinline!flow! are not allowed in a record + Prefixes \lstinline!input!, \lstinline!output!, \lstinline!inner!, \lstinline!outer!, + \lstinline!flow! are not allowed in a record \item - The built-in operators \lstinline!abs! and \lstinline!sign! do no longer - generate events but are implicitly defined with a \lstinline!noEvent! + The built-in operators \lstinline!abs(...)! and \lstinline!sign(...)! do no longer + generate events but are implicitly defined with a \lstinline!noEvent(...)! operator. \item - The \lstinline[language=grammar]!constraining-clause! of a replaceable class or component is changed from keyword \lstinline!extends! to the new keyword \lstinline!constrainedby! (since the \lstinline!extends! keyword could lead to the wrong impression that the redeclared model must inherit from the constraining class, but this is not the case). + The constraining clause of a replaceable class or component is changed + from keyword \lstinline!extends! to the new keyword \lstinline!constrainedby! (since the + \lstinline!extends! keyword could lead to the wrong impression that the redeclared + model must inherit from the constraining class, but this is not the + case). \item - The \lstinline!isPresent! construct, which was not implemented in tools, was removed. + The \lstinline!isPresent!(...) construct, which was not implemented in tools, was + removed. \end{itemize} -The following changes in the Modelica 3.0 graphical annotations are also \emph{not} backwards compatible: +The following changes in the Modelica 3.0 graphical annotations are also +\textbf{not backwards compatible:} + \begin{itemize} \item Changed the definition of icon placement (record Transformation), so @@ -2168,66 +1873,72 @@ \subsection{Main Changes in Modelica 3.0}\label{main-changes-in-modelica-3-0} unit for fonts). \end{itemize} -The following main changes in Modelica 3.0 are \emph{backwards compatible}: +The following main changes in Modelica 3.0 are \textbf{backwards +compatible}: \begin{itemize} \item New element-wise operators: \lstinline!.+!, \lstinline!.-!, \lstinline!.*!, \lstinline!./!, \lstinline!.^!. \item - A third argument \lstinline!AssertionLevel! to built-in function \lstinline!assert($\ldots$)! in order that warnings can optionally be defined. + A third argument \lstinline!AssertionLevel! to built-in function \lstinline!assert(!...\lstinline!)! in + order that warnings can optionally be defined. \item - New annotations \crefnameref{vendor-specific-annotations}:\\ + New annotations \autonameref{vendor-specific-annotations}:\\ In this section it is precisely defined how vendor-specific annotations should be marked. Any tool shall save files with all - standard annotations (defined in \cref{annotations}) and all vendor-specific + standard annotations (defined in \autoref{annotations}) and all vendor-specific annotations intact. The advantage is that a typo in non-vendor annotations can now be detected and marked as an error, whereas in previous versions this had to be ignored. \item - New annotation in \crefnameref{annotations-for-documentation}:\\ + New annotation in \autonameref{annotations-for-documentation}:\\ \lstinline!preferredView = info!, \lstinline!diagram! or \lstinline!text! \item - New annotations in \crefnameref{function-inlining-and-event-generation}, \crefnameref{derivatives-and-inverses-of-functions}, and \crefnameref{annotations-for-symbolic-processing}:\\ - \lstinline!Evaluate!, \lstinline!HideResult!, \lstinline!Inline!, \lstinline!LateInline!, \lstinline!smoothOrder! + New annotations \autonameref{annotations-for-code-generation}:\\ + \lstinline!Evaluate!, \lstinline!HideResult!, \lstinline!Inline!, + \lstinline!LateInline!, \lstinline!smoothOrder! \item - New annotation \cref{modelica:experiment}:\\ - \lstinline!StartTime!, \lstinline!StopTime!, \lstinline!Tolerance! to define important parameters of an experiment setup. + New annotation \autonameref{annotations-for-simulation-experiments}:\\ + \lstinline!StartTime!, \lstinline!StopTime!, \lstinline!Tolerance! to define important parameters of an + experiment setup. \item - New annotations for graphical annotations in \cref{annotations-for-graphical-objects}:\\ + New annotations for graphical annotations in \autoref{annotations-for-graphical-objects}:\\ New attribute \lstinline!Smooth = enumeration(None, Bezier)! for graphical objects and connection lines (Bezier defines a Bezier spline).\\ - New attribute \lstinline!visible! in \lstinline!record Placement! allows making a graphical - annotation invisible (e.g.\ after inheritance).\\ + New attribute \lstinline!visible! in \lstinline!record Placement! allows to make a graphical + annotation invisible (e.g. after inheritance).\\ New attributes \lstinline!startAngle!, \lstinline!endAngle! in record ellipse to define part of an ellipse.\\ - New layer specific annotations \lstinline!IconMap! and \lstinline!DiagramMap! for \lstinline!extends!.\\ - New attribute \lstinline!horizontalAlignment! to the \lstinline!Text! record to define the horizontal alignment of text. + New layer specific annotations \lstinline!IconMap! and \lstinline!DiagramMap! for extends.\\ + New attribute \lstinline!horizontalAlignment! to the \lstinline!Text record! to define the + horizontal alignment of text. \item New annotations for schematic animation and interactive user input in - \cref{annotations-for-graphical-objects}:\\ - \lstinline!DynamicSelect! to modify annotation literals by the actual values of variables.\\ + \autoref{annotations-for-graphical-objects}:\\ + \lstinline!DynamicSelect!(..) to modify annotation literals by the actual values + of variables.\\ \lstinline!OnMouseDownSetBoolean!, \lstinline!OnMouseUpSetBoolean!, \lstinline!OnMouseMoveXSetReal!, \lstinline!OnMouseMoveYSetReal!, \lstinline!OnMouseDownEditReal!, \lstinline!OnMouseDownEditString! to interactively set the variable of a class during simulation. \end{itemize} -The following errors have been fixed in the Modelica specification: +The following \textbf{errors} have been \textbf{fixed} in the Modelica +specification: \begin{itemize} \item Syntax rule for a function call (e.g., according to the grammar in Modelica 2.2 a function call of the form - \lstinline!Modelica.Math.Matrices.eig($\ldots$)! was invalid because the function name + \lstinline!Modelica.Math.Matrices.eig(...)! was invalid because the function name could not have `\lstinline!.!'. However, all Modelica tools supported the desired ``full Modelica name'' also for function calls). \end{itemize} -\section{Modelica 2.2}\label{modelica-2-2} +\section{Modelica 2.2}\doublelabel{modelica-2-2} Modelica 2.2 was released February 2, 2005. The Modelica 2.2 specification was edited by Hans Olsson, Michael Tiller and Martin Otter. -\subsection{Contributors to the Modelica Language, Version 2.2}\label{contributors-to-the-modelica-language-version-2-2} - +\subsection{Contributors to the Modelica Language, Version 2.2}\doublelabel{contributors-to-the-modelica-language-version-2-2} \indent\indent Bernhard Bachmann , University of Applied Sciences, Bielefeld, Germany @@ -2279,7 +1990,7 @@ \subsection{Contributors to the Modelica Language, Version 2.2}\label{contributo Hans-Jürg Wiesmann, ABB Switzerland Ltd.,Corporate Research, Baden, Switzerland -\subsection{Main Changes in Modelica 2.2}\label{main-changes-in-modelica-2-2} +\subsection{Main Changes in Modelica 2.2}\doublelabel{main-changes-in-modelica-2-2} The main changes in Modelica 2.2 are: \begin{itemize} @@ -2300,7 +2011,9 @@ \subsection{Main Changes in Modelica 2.2}\label{main-changes-in-modelica-2-2} introduces two declarations with the same name, one that follows the rules for \lstinline!inner! and another that follows the rules for \lstinline!outer!. \item - A non-input array component declared in a function with a dimension size specified by colon (\lstinline!:!) and no declaration assignment, can change size in the function in a simple and convenient way. + A non-input array component declared in a function with a dimension + size specified by colon(:) and no declaration assignment, can change + size in the function in a simple and convenient way. \item A new type of connector, called \lstinline!expandable connector! was introduced. This connector has less strict requirements about name @@ -2319,18 +2032,21 @@ \subsection{Main Changes in Modelica 2.2}\label{main-changes-in-modelica-2-2} partial derivative of function Gibbs with respect to its input argument T. \item - External functions may have the new attribute \lstinline!"builtin"!, additionally to \lstinline!"C"! or \lstinline!"FORTRAN 77"!. The \lstinline!"builtin"! specification is only used for functions that are defined to be built-in in the Modelica language. The external function call mechanism for \lstinline!"builtin"! functions is implementation-defined. + External functions may have the new attribute \lstinline!"builtin"!, additionally + to \lstinline!"C"! or \lstinline!"FORTRAN 77"!. The \lstinline!"builtin"! specification is only used + for functions that are defined to be built-in in the Modelica + language. The external-function call mechanism for \lstinline!"builtin"! functions + is implementation-defined. \end{itemize} The language changes are backward compatible. -\section{Modelica 2.1}\label{modelica-2-1} +\section{Modelica 2.1}\doublelabel{modelica-2-1} Modelica 2.1 was released January 30, 2004. The Modelica 2.1 specification was edited by Hans Olsson and Martin Otter. -\subsection{Contributors to the Modelica Language, Version 2.1}\label{contributors-to-the-modelica-language-version-2-1} - +\subsection{Contributors to the Modelica Language, Version 2.1}\doublelabel{contributors-to-the-modelica-language-version-2-1} \indent\indent Mikael Adlers, MathCore, Linköping, Sweden @@ -2373,7 +2089,7 @@ \subsection{Contributors to the Modelica Language, Version 2.1}\label{contributo Hans-Jürg Wiesmann, ABB Switzerland Ltd.,Corporate Research, Baden, Switzerland -\subsection{Main Changes in Modelica 2.1}\label{main-changes-in-modelica-2-1} +\subsection{Main Changes in Modelica 2.1}\doublelabel{main-changes-in-modelica-2-1} The main changes in Modelica 2.1 are: \begin{itemize} @@ -2386,36 +2102,38 @@ \subsection{Main Changes in Modelica 2.1}\label{main-changes-in-modelica-2-1} \item Optional output arguments of Modelica functions. The presence of actual input and/or output arguments can be inquired with the new - built-in function \lstinline!isPresent!. The previous built-in function and + built-in function \lstinline!isPresent(..)!. The previous built-in function and attribute \lstinline!enable! was removed. \item Making the default constraining type more useful by inheriting the base constraining type automatically to modifications. \item Enhanced redeclaration as needed, e.g., in the Modelica.Media library - under development (e.g.\ \lstinline!redeclare model name! or \lstinline!model extends name ()!). + under development (e.g. \lstinline!redeclare model name! or \lstinline!model extends name ()!). \item Handling of overdetermined connectors (needed, e.g., for multi-body systems and electrical power systems) including the new built-in package \lstinline!Connections! with operators \lstinline!Connections.branch!, \lstinline!Connections.root!, \lstinline!Connections.potentialRoot!, \lstinline!Connections.isRoot!. \item - Statement \lstinline!break! in the \lstinline!while!-statement of an algorithm section. + Statement \lstinline!break! in the while loop of an algorithm section. \item Statement \lstinline!return! in a Modelica function. \item - Built-in function \lstinline!String! to provide a string representation of \lstinline!Boolean!, \lstinline!Integer!, \lstinline!Real! and enumeration types. + Built-in function \lstinline!String(..)! to provide a string representation of + \lstinline!Boolean!, \lstinline!Integer!, \lstinline!Real! and \lstinline!Enumeration! types. \item - Built-in function \lstinline!Integer! to provide the \lstinline!Integer! representation of an enumeration type. + Built-in function \lstinline!Integer(..)! to provide the \lstinline!Integer! representation of + an \lstinline!Enumeration! type. \item - Built-in function \lstinline!semiLinear! to define a characteristics with two + Built-in function \lstinline!semiLinear(..)! to define a characteristics with two slopes and a set of rules for symbolic transformations, especially when the function becomes underdetermined (this function is used in the Modelica Fluid library under development to define reversing flow in a mathematically clean way). \item More general identifiers by having any character in single quotes, - e.g.\ \lstinline!'+'! or '123.456\#1' are valid identifiers. \lstinline!'x'! and \lstinline!x! are + e.g. \lstinline!'+'! or '123.456\#1' are valid identifiers. \lstinline!'x'! and \lstinline!x! are different identifiers. This is useful for a direct mapping of product identifiers to model names and for having the usual symbols for digital electrical signals as enumerations (such as \lstinline!'+'!, \lstinline!'-'!, \lstinline!'0'!, @@ -2437,17 +2155,19 @@ \subsection{Main Changes in Modelica 2.1}\label{main-changes-in-modelica-2-1} \end{itemize} Fixing some minor errors in the grammar and semantic specification. -The language changes are backward compatible, except for the introduction of the new keywords \lstinline!break! and \lstinline!return!, the new built-in package \lstinline!Connections! and the removing of built-in function and attribute \lstinline!enable!. +The language changes are backward compatible, except for the +introduction of the new keywords break and return, the new built-in +package Connections and the removing of built-in function and attribute +\lstinline!enable!. -\section{Modelica 2.0}\label{modelica-2-0} +\section{Modelica 2.0}\doublelabel{modelica-2-0} Modelica 2.0 was released January, 30 2002, and the draft was released on December 18 in 2001. The Modelica 2.0 specification was edited by Hans Olsson. Modelica is a registered trademark owned by the Modelica Association since November 2001. -\subsection{Contributors to the Modelica Language, Version 2.0}\label{contributors-to-the-modelica-language-version-2-0} - +\subsection{Contributors to the Modelica Language, Version 2.0}\doublelabel{contributors-to-the-modelica-language-version-2-0} \indent\indent Peter Aronsson, Linköping University, Sweden @@ -2488,21 +2208,22 @@ \subsection{Contributors to the Modelica Language, Version 2.0}\label{contributo Hans-Jürg Wiesmann, ABB Switzerland Ltd.,Corporate Research, Baden, Switzerland -\subsection{Main Changes in Modelica 2.0}\label{main-changes-in-modelica-2-0} +\subsection{Main Changes in Modelica 2.0}\doublelabel{main-changes-in-modelica-2-0} A detailed description of the enhancements introduced by Modelica 2.0 is given in the papers + \begin{itemize} \item M. Otter, H. Olsson: New Features in Modelica 2.0. 2nd International Modelica Conference, March 18-19, DLR Oberpfaffenhofen, Proceedings, - pp. 7.1--7.12, 2002. This paper can be downloaded from + pp. 7.1 - 7.12, 2002. This paper can be downloaded from \url{https://www.modelica.org/events/Conference2002/papers/p01_Otter.pdf} \item Mattsson S. E., Elmqvist H., Otter M., and Olsson H.: Initialization of Hybrid Differential-Algebraic Equations in Modelica 2.0. 2nd International Modelica Conference, March 18-19, DLR Oberpfaffenhofen, - Proceedings, pp. 9--15, 2002. This paper can be downloaded from + Proceedings, pp. 9 - 15, 2002. This paper can be downloaded from \url{https://www.modelica.org/events/Conference2002/papers/p02_Mattsson.pdf} \end{itemize} @@ -2543,26 +2264,29 @@ \subsection{Main Changes in Modelica 2.0}\label{main-changes-in-modelica-2-0} and default arguments make the same function fit for beginners and expert users. \item - Additional utilities for external C functions that are interfaced to + Additional utilities for external C-functions that are interfaced to Modelica models, especially supporting external functions returning strings and external functions with internal memory (e.g., to interface user-defined tables, property databases, sparse matrix handling, hardware interfaces). \item - Added an index, and specification of some basic constructs that had previously not formally be defined, such as \lstinline!while!-clauses, \lstinline!if!-clauses. + Added an index, and specification of some basic constructs that had + previously not formally be defined, such as while-clauses, if-clauses. \end{itemize} -The language changes are backward compatible, except for the introduction of the new keyword enumeration and the removal of the operator \lstinline!analysisType!. The library change of the block library which will become available soon requires changes in user-models. +The language changes are backward compatible, except for the +introduction of the new keyword enumeration and the removal of the +operator analysisType(). The library change of the block library which +will become available soon requires changes in user-models. -\section{Modelica 1.4}\label{modelica-1-4} +\section{Modelica 1.4}\doublelabel{modelica-1-4} Modelica 1.4 was released December 15, 2000. The Modelica Association was formed in Feb. 5, 2000 and is now responsible for the design of the Modelica language. The Modelica 1.4 specification was edited by Hans Olsson and Dag Brück. -\subsection{Contributors to the Modelica Language, Version 1.4}\label{contributors-to-the-modelica-language-version-1-4} - +\subsection{Contributors to the Modelica Language, Version 1.4}\doublelabel{contributors-to-the-modelica-language-version-1-4} \indent\indent Bernhard Bachmann, Fachhochschule Bielefeld, Germany @@ -2607,8 +2331,7 @@ \subsection{Contributors to the Modelica Language, Version 1.4}\label{contributo Hans-Jürg Wiesmann, ABB Corporate Research Ltd., Baden, Switzerland -\subsection{Contributors to the Modelica Standard Library}\label{contributors-to-the-modelica-standard-library} - +\subsection{Contributors to the Modelica Standard Library}\doublelabel{contributors-to-the-modelica-standard-library} % https://tex.stackexchange.com/questions/31555/how-can-i-indent-the-paragraphs-which-follow-a-heading \indent\indent Peter Beater, University of Paderborn, Germany @@ -2623,7 +2346,7 @@ \subsection{Contributors to the Modelica Standard Library}\label{contributors-to Hubertus Tummescheit, Lund Institute of Technology, Sweden -\subsection{Main Changes in Modelica 1.4}\label{main-changes-in-modelica-1-4} +\subsection{Main Changes in Modelica 1.4}\doublelabel{main-changes-in-modelica-1-4} \begin{itemize} \item @@ -2631,18 +2354,28 @@ \subsection{Main Changes in Modelica 1.4}\label{main-changes-in-modelica-1-4} environments, because there exists no order of declarations when components are graphically composed together. \item - Refined package concept by introducing encapsulated classes and import mechanism. - Encapsulated classes can be seen as ``self-contained units'': - When copying or moving an encapsulated class, at most the \lstinline!import!-clauses in this class have to be changed. -\item - Refined \lstinline!when!-clause: - The \lstinline[morekeywords={[2]{nondiscrete}}]!nondiscrete!\index{nondiscrete@\robustinline{nondiscrete} (removed keyword)} keyword is removed, equations in \lstinline!when!-clauses must have a unique variable name on left hand side variable and the exact mapping of \lstinline!when!-clauses to equations is defined. - As a result, \lstinline!when!-clauses are now precisely defined without referring to a sorting algorithm and it is possible to handle algebraic loops between \lstinline!when!-clauses with different conditions and between \lstinline!when!-clauses and the continuous-time part of a model. - The \lstinline!discrete! keyword is now optional, simplifying the library development because only one type of connector is needed and not several types which do contain or do not contain the discrete prefix on variables. - Additionally, \lstinline!when!-clauses in algorithm sections may have \lstinline!elsewhen!-clauses which simplifies the definition of priorities between \lstinline!when!-clauses. -\item - For replaceable declarations: allowed \lstinline[language=grammar]!constraining-clause!, and annotations listing suitable redeclarations. - This allows a graphical user environment to automatically build menus with meaningful choices. + Refined package concept by introducing encapsulated classes and import + mechanism. Encapsulated classes can be seen as ``self-contained units'': + When copying or moving an encapsulated class, at most the import + statements in this class have to be changed. +\item + Refined when-clause: The \lstinline!nondiscrete! keyword is removed, equations in + when-clauses must have a unique variable name on left hand side + variable and the exact mapping of when-clauses to equations is + defined. As a result, when-clauses are now precisely defined without + referring to a sorting algorithm and it is possible to handle + algebraic loops between when-clauses with different conditions and + between when-clauses and the continuous-time part of a model. The + discrete keyword is now optional, simplifying the library development + because only one type of connector is needed and not several types + which do contain or do not contain the discrete prefix on variables. + Additionally, when-clauses in algorithm sections may have + elsewhen-clauses which simplifies the definition of priorities between + when-clauses. +\item + For replaceable declarations: allowed constraining clauses, and + annotations listing suitable redeclarations. This allows a graphical + user environment to automatically build menus with meaningful choices. \item Functions can specify their derivative. This allows, e.g., the application of the Pantelides algorithm to reduce the index of a DAE @@ -2650,11 +2383,14 @@ \subsection{Main Changes in Modelica 1.4}\label{main-changes-in-modelica-1-4} \item New built-in operator \lstinline!rem! (remainder) and the built-in operators div, mod, ceil, floor, integer, previously only allowed to be used in - \lstinline!when!-clauses can now be used everywhere, because state events are + when-clauses can now be used everywhere, because state events are automatically generated when the result value of one of these operator changes discontinuously. \item - Quantity attribute also for base types \lstinline!Boolean!, \lstinline!Integer!, \lstinline!String! (and not only for \lstinline!Real!), in order to allow abstracted variables to refer to physical quantities (e.g.\ \lstinline!Boolean i(quantity="Current")! is true if current is flowing and is false if no current is flowing). + Quantity attribute also for base types Boolean, Integer, String (and + not only for Real), in order to allow abstracted variables to refer to + physical quantities (e.g. \lstinline!Boolean i(quantity="Current")! is true if + current is flowing and is false if no current is flowing). \item \lstinline!final! keyword also allowed in declaration, to prevent modification. Example: @@ -2676,15 +2412,24 @@ \subsection{Main Changes in Modelica 1.4}\label{main-changes-in-modelica-1-4} Internally restructured specification. \end{itemize} -Modelica 1.4 is backwards compatible with Modelica 1.3, with the exception of (1) some exotic cases where different results are achieved with the removed ``declare-before-use-rule'' and the previous declaration order, (2) \lstinline!when!-clauses in equations sections, which use the general form \lstinline!expr1 = expr2! (now only \lstinline!v = expr! is allowed + some special cases for functions), (3) some exotic cases where a \lstinline!when!-clause may be no longer evaluated at the initial time, because the initialization of the when-condition is now defined in a more meaningful way (before Modelica 1.4, every condition in a \lstinline!when!-clause has a ``previous'' value of false), and (4) models containing the \lstinline[morekeywords={[2]{nondiscrete}}]!nondiscrete! keyword which was removed. +Modelica 1.4 is backwards compatible with Modelica 1.3, with the +exception of (1) some exotic cases where different results are achieved +with the removed ``declare-before-use-rule'' and the previous declaration +order, (2) when-clauses in equations sections, which use the general +form \lstinline!expr1 = expr2! (now only \lstinline!v = expr! is allowed + some special cases +for functions), (3) some exotic cases where a when-clause may be no +longer evaluated at the initial time, because the initialization of the +when-condition is now defined in a more meaningful way (before Modelica +1.4, every condition in a when-clause has a ``previous'' value of false), +and (4) models containing the nondiscrete keyword which was removed. -\section{Modelica 1.3 and Older Versions.}\label{modelica-1-3-and-older-versions} +\section{Modelica 1.3 and Older Versions.}\doublelabel{modelica-1-3-and-older-versions} Modelica 1.3 was released December 15, 1999. -\subsection{Contributors up to Modelica 1.3}\label{contributors-up-to-modelica-1-3} - -The following list contributors and their affiliations at the time when Modelica 1.3 was released. +\subsection{Contributors up to Modelica 1.3}\doublelabel{contributors-up-to-modelica-1-3} +The following list contributors and their affiliations at the time when +Modelica 1.3 was released. Hilding Elmqvist, Dynasim AB, Lund, Sweden @@ -2735,9 +2480,10 @@ \subsection{Contributors up to Modelica 1.3}\label{contributors-up-to-modelica-1 Hans Vangheluwe, University of Gent, Belgium -\subsection{Main Changes in Modelica 1.3}\label{main-changes-in-modelica-1-3} +\subsection{Main Changes in Modelica 1.3}\doublelabel{main-changes-in-modelica-1-3} Modelica 1.3 was released December 15, 1999. + \begin{itemize} \item Defined connection semantics for \lstinline!inner!/\lstinline!outer! connectors. @@ -2748,12 +2494,12 @@ \subsection{Main Changes in Modelica 1.3}\label{main-changes-in-modelica-1-3} \item Improved semantic definition of array expressions. \item - Defined scope of \lstinline!for!-loop variables. + Defined scope of for-loop variables. \end{itemize} -\subsection{Main Changes in Modelica 1.2}\label{main-changes-in-modelica-1-2} - +\subsection{Main Changes in Modelica 1.2}\doublelabel{main-changes-in-modelica-1-2} Modelica 1.2 was released June 15, 1999. + \begin{itemize} \item Changed the external function interface to give greater flexibility. @@ -2765,7 +2511,7 @@ \subsection{Main Changes in Modelica 1.2}\label{main-changes-in-modelica-1-2} \item Restricted redeclaration to replaceable elements. \item - Defined semantics for \lstinline!if!-clauses. + Defined semantics for if-clauses. \item Defined allowed code optimizations. \item @@ -2776,8 +2522,7 @@ \subsection{Main Changes in Modelica 1.2}\label{main-changes-in-modelica-1-2} Introduced \lstinline!terminate! and \lstinline!analysisType!. \end{itemize} -\subsection{Main Changes in Modelica 1.1}\label{main-changes-in-modelica-1-1} - +\subsection{Main Changes in Modelica 1.1}\doublelabel{main-changes-in-modelica-1-1} Modelica 1.1 was released in December 1998. Major changes: @@ -2785,16 +2530,17 @@ \subsection{Main Changes in Modelica 1.1}\label{main-changes-in-modelica-1-1} \item Specification as a separate document from the rationale. \item - Introduced prefixes \lstinline!discrete! and \lstinline[morekeywords={[2]{nondiscrete}}]!nondiscrete!. + Introduced prefixes discrete and nondiscrete. \item - Introduced \lstinline!pre! and \lstinline!when!. + Introduced pre and when. \item Defined semantics for array expressions. \item - Introduced built-in functions and operators (only connect was present in Modelica 1.0). + Introduced built-in functions and operators (only connect was present + in Modelica 1.0). \end{itemize} -\subsection{Modelica 1.0}\label{modelica-1-0} +\subsection{Modelica 1.0}\doublelabel{modelica-1-0} Modelica 1, the first version of Modelica, was released in September 1997, and had the language specification as a short appendix to the diff --git a/chapters/scoping.tex b/chapters/scoping.tex index 3feec324a..261646010 100644 --- a/chapters/scoping.tex +++ b/chapters/scoping.tex @@ -1,14 +1,14 @@ -\chapter{Scoping, Name Lookup, and Flattening}\label{scoping-name-lookup-and-flattening} +\chapter{Scoping, Name Lookup, and Flattening}\doublelabel{scoping-name-lookup-and-flattening} This chapter describes the scope rules, and most of the name lookup and flattening of Modelica. -\section{Flattening Context}\label{flattening-context} +\section{Flattening Context}\doublelabel{flattening-context} Flattening is made in a context which consists of a modification -environment (\cref{modification-environment}) and an ordered set of enclosing classes. +environment (\autoref{modification-environment}) and an ordered set of enclosing classes. -\section{Enclosing Classes}\label{enclosing-classes} +\section{Enclosing Classes}\doublelabel{enclosing-classes} The classes lexically enclosing an element form an ordered set of enclosing classes. A class defined inside another class definition (the @@ -16,7 +16,7 @@ \section{Enclosing Classes}\label{enclosing-classes} Enclosing all class definitions is an unnamed enclosing class that contains all top-level class definitions, and not-yet read classes -defined externally as described in \cref{mapping-package-class-structures-to-a-hierarchical-file-system}. The order of +defined externally as described in \autoref{mapping-package-class-structures-to-a-hierarchical-file-system}. The order of top-level class definitions in the unnamed enclosing class is undefined. During flattening, the enclosing class of an element being flattened is @@ -28,8 +28,8 @@ \section{Enclosing Classes}\label{enclosing-classes} \begin{example} \begin{lstlisting}[language=modelica] -class C1 $\ldots$ end C1; -class C2 $\ldots$ end C2; +class C1 ... end C1; +class C2 ... end C2; class C3 Real x=3; C1 y; @@ -47,7 +47,7 @@ \section{Enclosing Classes}\label{enclosing-classes} enclosing class in that order. \end{example} -\section{Static Name Lookup}\label{static-name-lookup} +\section{Static Name Lookup}\doublelabel{static-name-lookup} Names are looked up at class flattening to find names of base classes, component types, etc. Implicitly defined names of record constructor @@ -55,39 +55,52 @@ \section{Static Name Lookup}\label{static-name-lookup} type name lookup. Names of record classes and enumeration types are ignored during function name lookup. \begin{nonnormative} -The reason to ignore the implicitly defined names is that a record and the implicitly created record constructor function, see \cref{record-constructor-functions}, -and an enumeration type and the implicitly created conversion function (\cref{type-conversion-of-integer-to-enumeration-values}), have the same name. +The reason to ignore the implicitly defined names is that a record and the implicitly created record constructor function, see \autoref{record-constructor-functions}, +and an enumeration type and the implicitly created conversion function (\autoref{type-conversion-of-integer-to-enumeration-values}), have the same name. \end{nonnormative} -\subsection{Simple Name Lookup}\label{simple-name-lookup} +\subsection{Simple Name Lookup}\doublelabel{simple-name-lookup} -% Not adding 'encapsulated' as normal word to index; the keyword variant seems sufficient -A class declared with the keyword \lstinline!encapsulated!\indexinline{encapsulated} (see \lstinline[language=grammar]!class-definition! in the grammar) is called an \firstuse{encapsulated} class. -By restricting name lookup inside a restricted class in ways defined in this chapter, the meaning of the class is made independent of where it is placed in a package hierarchy. +When an element, equation, or section is flattened, any simple name +(not composed using dot notation) is first looked up sequentially among +iteration variables (if any; see below), and then looked up sequentially in each +member of the ordered set \emph{of instance scopes (see +\autoref{the-class-tree}) corresponding to lexically enclosing classes} until a +match is found or an enclosing class is encapsulated. In the latter case +the lookup stops except for the predefined types, functions and +operators defined in this specification. For these cases the lookup continues in the global scope, where they are defined. -When an element, equation, or section is flattened, any simple name (not composed using dot notation) is first looked up sequentially among iteration variables (if any; see below), and then looked up sequentially in each member of the ordered set \emph{of instance scopes (see \cref{the-class-tree}) corresponding to lexically enclosing classes} until a match is found or an enclosing class is encapsulated. -In the latter case the lookup stops except for the predefined types, functions and operators defined in this specification. -For these cases the lookup continues in the global scope, where they are defined. +The iteration variables are the implicitly declared iteration variable(s) if inside +the body of a for-loop, \autoref{for-equations-repetitive-equation-structures} and \autoref{for-statement}, +or the body of a reduction expression, \autoref{reduction-functions-and-operators}. -The iteration variables are the implicitly declared iteration variable(s) if inside the body of a \lstinline!for!-loop, \cref{for-equations-repetitive-equation-structures} and \cref{for-statement}, or the body of a reduction expression, \cref{reduction-functions-and-operators}. - -Reference to variables successfully looked up in an enclosing class is only allowed for variables declared as \lstinline!constant!. The values of modifiers are thus resolved in the \emph{instance} scope of which the modifier appears; if the use is in a modifier on a short class definition, see \cref{short-class-definitions}. +Reference to variables successfully looked up in an enclosing class is +only allowed for variables declared as constant. The values of modifiers +are thus resolved in the \emph{instance} scope of which the modifier +appears; if the use is in a modifier on a short class definition, see \autoref{short-class-definitions}. This lookup in each \emph{instance} scope is performed as follows: \begin{itemize} \item - Among declared named elements (\lstinline!class-definition! and \lstinline!component-declaration!) of the class (including elements inherited from base classes). + Among declared named elements (\lstinline!class-definition! and + \lstinline!component-declaration!) of the class (including elements inherited from + base-classes). \item - Among the import names of qualified import-clauses in the \emph{instance} scope. The import name of \lstinline!import A.B.C!; is \lstinline!C! and the import name of \lstinline!import D=A.B.C;! is \lstinline!D!. + Among the import names of qualified import statements in the + \emph{instance} scope. The import name of \lstinline!import A.B.C!; is \lstinline!C! and the + import name of \lstinline!import D=A.B.C;! is \lstinline!D!. \item - Among the public members of packages imported via unqualified import-clauses in the \emph{instance} scope. It is an error if this step produces matches from several unqualified imports. + Among the public members of packages imported via unqualified + import-statements in the \emph{instance} scope. It is an error if + this step produces matches from several unqualified imports. \end{itemize} -The \lstinline!import!-clauses defined in inherited classes are ignored for the lookup, i.e.\ \lstinline!import!-clauses are not inherited. +Import statements defined in inherited classes are ignored for the lookup, i.e. import statements are not inherited. -\subsection{Composite Name Lookup}\label{composite-name-lookup} +\subsection{Composite Name Lookup}\doublelabel{composite-name-lookup} -For a composite name of the form \lstinline!A.B! or \lstinline!A.B.C!, etc.\ lookup is performed as follows: +For a composite name of the form \lstinline!A.B! or \lstinline!A.B.C!, etc. lookup is performed +as follows: \begin{itemize} \item The first identifier (\lstinline!A!) is looked up as defined above. @@ -105,53 +118,44 @@ \subsection{Composite Name Lookup}\label{composite-name-lookup} identifiers of the rest of the name (e.g., B and B.C) must be classes. \item - If the identifier denotes a class, that class is temporarily flattened (as if instantiating a component without modifiers of this class, see \cref{modification-environment}) and using the enclosing classes of the denoted class. - The rest of the name (e.g., \lstinline!B! or \lstinline!B.C!) is looked up among the declared named elements of the temporary flattened class. - If the class does not satisfy the requirements for a package, the lookup is restricted to encapsulated\indexinline{encapsulated} elements only. - The class we look inside shall not be partial in a simulation model. + If the identifier denotes a class, that class is temporarily flattened + (as if instantiating a component without modifiers of this class, see + \autoref{modification-environment}) and using the enclosing classes of the denoted class. + The rest of the name (e.g., \lstinline!B! or \lstinline!B.C!) is looked up among the + declared named elements of the temporary flattened class. If the class + does not satisfy the requirements for a package, the lookup is + restricted to encapsulated elements only. The class we look inside may + not be partial in a simulation model. \end{itemize} \begin{nonnormative} -The temporary class flattening performed for composite names follow the same rules as class flattening of the base class in an extends-clause, local classes and the type in a \lstinline[language=grammar]!component-clause!, except that the environment is empty. -See also \lstinline!MoistAir2! example in \cref{redeclaration} for further explanations regarding looking inside partial packages. +The temporary class flattening performed for composite names +follow the same rules as class flattening of the base class in an +extends-clause, local classes and the type in a component clause, except +that the environment is empty. See also \lstinline!MoistAir2! example in +\autoref{redeclaration} for further explanations regarding looking inside +partial packages. \end{nonnormative} -\begin{example} -Components and classes are part of the same name-space and thus a component cannot -have the same name as its class or the first part of the class-name as that -would prevent lookup of the class name. -\begin{lstlisting}[language=modelica] -model A - M M; // Illegal, component 'M' prevents finding class 'M' - P.Q P; // Illegal, component 'P' prevents finding package 'P' - .R R; // Legal, see next section - S.Q Q; // Legal - - Y a; // Illegal, component 'Y' (below) prevents finding class 'Y' - Y.X b; // Illegal, component 'Y' (below) prevents finding package 'Y' - .Y c; // Legal, see next section - Real Y; -end A; -\end{lstlisting} -\end{example} -\subsection{Global Name Lookup}\label{global-name-lookup} +\subsection{Global Name Lookup}\doublelabel{global-name-lookup} For a name starting with dot, e.g.: \lstinline!.A! (or \lstinline!.A.B!, \lstinline!.A.B.C! etc.) lookup is performed as follows: \begin{itemize} \item - The first identifier (\lstinline!A!) is looked up in the global scope. - This is possible even if the class is encapsulated\indexinline{encapsulated} and import-clauses are not used for this. - If there does not exist a class \lstinline!A! in global scope this is an error. + The first identifier (\lstinline!A!) is looked up in the global scope. This is + possible even if the class is encapsulated and import statements are + not used for this. If there does not exist a class \lstinline!A! in global scope + this is an error. \item If the name is simple then the class \lstinline!A! is the result of lookup. \item If the name is a composite name then the class \lstinline!A! is temporarily - flattened with an empty environment (i.e.\ no modifiers, see - \cref{modification-environment}) and using the enclosing classes of the denoted class. The rest + flattened with an empty environment (i.e. no modifiers, see + \autoref{modification-environment}) and using the enclosing classes of the denoted class. The rest of the name (e.g., \lstinline!B! or \lstinline!B.C!) is looked up among the declared named elements of the temporary flattened class. If the class does not satisfy the requirements for a package, the lookup is restricted to - encapsulated elements only. The class we look inside shall not be + encapsulated elements only. The class we look inside may not be partial. \end{itemize} @@ -160,19 +164,19 @@ \subsection{Global Name Lookup}\label{global-name-lookup} component references can only find global constants. \end{nonnormative} -\subsection{Lookup of Imported Names}\label{lookup-of-imported-names1} +\subsection{Lookup of Imported Names}\doublelabel{lookup-of-imported-names1} -See \cref{lookup-of-imported-names}. +See \autoref{lookup-of-imported-names}. -\section{Instance Hierarchy Name Lookup of Inner Declarations}\label{instance-hierarchy-name-lookup-of-inner-declarations} +\section{Instance Hierarchy Name Lookup of Inner Declarations}\doublelabel{instance-hierarchy-name-lookup-of-inner-declarations} -An element declared with the prefix \lstinline!outer!\indexinline{outer} references an element instance with the same name but using the prefix \lstinline!inner!\indexinline{inner} which is nearest in the enclosing instance hierarchy of the \lstinline!outer! element declaration. +An element declared with the prefix \lstinline!outer! references an element instance +with the same name but using the prefix \lstinline!inner! which is nearest in the +enclosing instance hierarchy of the \lstinline!outer! element declaration. -Outer component declarations shall not have modifications (including binding equations). +Outer component declarations may not have modifications (including binding equations). Outer class declarations should be defined using short-class -definitions without modifications. However, see also \cref{simultaneous-inner-outer-declarations}. - -If the outer component declaration is a disabled conditional component (\cref{conditional-component-declaration}) it is also ignored for the automatic creation of inner component (neither causing it; nor influencing the type of it). +definitions without modifications. However, see also \autoref{simultaneous-inner-outer-declarations}. An \lstinline!outer! element reference in a simulation model requires that one corresponding \lstinline!inner! element declaration exist or can be created in a @@ -186,12 +190,12 @@ \section{Instance Hierarchy Name Lookup of Inner Declarations}\label{instance-hi If there is one (or more) \lstinline!outer! declarations of a partial class it is an error. \item - In other cases, i.e.\ if a unique non-partial class is used for all + In other cases, i.e. if a unique non-partial class is used for all \lstinline!outer! declarations of the same name lacking a matching inner declaration, then an \lstinline!inner! declaration of that class is automatically added at the top of the model and diagnostics is given. \item - The annotations defined in \cref{annotations-for-the-graphical-user-interface} does not affect this process, + The annotations defined in \autoref{annotations-for-the-graphical-user-interface} does not affect this process, other than that: \begin{itemize} @@ -215,13 +219,13 @@ \section{Instance Hierarchy Name Lookup of Inner Declarations}\label{instance-hi \begin{lstlisting}[language=modelica] class A outer Real T0; - $\ldots$ + ... end A; class B inner Real T0=1; A a1, a2; // B.T0, B.a1.T0 and B.a2.T0 will have the same value A a3(T0=4); // Illegal as T0 is an outer variable. - $\ldots$ + ... end B; \end{lstlisting} More complicated example: @@ -286,7 +290,7 @@ \section{Instance Hierarchy Name Lookup of Inner Declarations}\label{instance-hi \end{lstlisting} \end{example} -\subsection{Example of Field Functions using Inner/Outer}\label{example-of-field-functions-using-inner-outer} +\subsection{Example of Field Functions using Inner/Outer}\doublelabel{example-of-field-functions-using-inner-outer} \begin{nonnormative} Inner declarations can be used to define field functions, such @@ -300,12 +304,12 @@ \subsection{Example of Field Functions using Inner/Outer}\label{example-of-field function B // B is a subtype of A extends A; algorithm - $\ldots$ + ... end B; class D outer function fc = A; - $\ldots$ + ... equation y = fc(u); end D; @@ -317,7 +321,7 @@ \subsection{Example of Field Functions using Inner/Outer}\label{example-of-field \end{lstlisting} \end{nonnormative} -\section{Simultaneous Inner/Outer Declarations}\label{simultaneous-inner-outer-declarations} +\section{Simultaneous Inner/Outer Declarations}\doublelabel{simultaneous-inner-outer-declarations} An element declared with both the prefixes \lstinline!inner! and \lstinline!outer! conceptually introduces two declarations with the same name: one that follows the @@ -329,7 +333,7 @@ \section{Simultaneous Inner/Outer Declarations}\label{simultaneous-inner-outer-d \end{nonnormative} Modifications of elements declared with both the prefixes \lstinline!inner! and \lstinline!outer! -may have modifications, those modifications are only applied to the +may have modfications, those modifications are only applied to the \lstinline!inner! declaration. \begin{example} @@ -366,9 +370,12 @@ \section{Simultaneous Inner/Outer Declarations}\label{simultaneous-inner-outer-d \end{lstlisting} \end{example} -\section{Flattening Process}\label{flattening-process} +\section{Flattening Process}\doublelabel{flattening-process} -In order to guarantee that elements can be used before they are declared and that elements do not depend on the order of their declaration (\cref{declaration-order-and-usage-before-declaration}) in the enclosing class, the \firstuse{flattening}\index{flattening} proceeds in the following two major steps: +In order to guarantee that elements can be used before they are declared +and that elements do not depend on the order of their declaration +(\autoref{declaration-order-and-usage-before-declaration}) in the enclosing class, the flattening proceeds in the +following two major steps: \begin{enumerate} \item Instantiation process @@ -385,7 +392,7 @@ \section{Flattening Process}\label{flattening-process} identifiers and all references are resolved to the identifier of the referenced variable. No other transformations are performed. -\subsection{Instantiation}\label{instantiation} +\subsection{Instantiation}\doublelabel{instantiation} The instantiation is performed in two steps. First a class tree is created and then from that an instance tree for a particular model is @@ -399,23 +406,28 @@ \subsection{Instantiation}\label{instantiation} However, errors that should only be reported in a simulation model must be omitted there, since they are not part of the simulation model. -\subsubsection{The Class Tree}\label{the-class-tree} +\subsubsection{The Class Tree}\doublelabel{the-class-tree} -All necessary libraries including the model which is to be instantiated are loaded from e.g.\ file system and form a so called \firstuse{class tree}\index{class tree}. -This tree represents the syntactic information from the class definitions. -It contains also all modifications at their original locations in syntactic form. -The builtin classes are put into the unnamed root of the class tree. +All necessary libraries including the model which is to be instantiated +are loaded from e.g. file system and form a so called \firstuse{class tree}. +This tree represents the syntactic information from the +class definitions. It contains also all modifications at their original +locations in syntactic form. The builtin classes are put into the unnamed root of the class tree. \begin{nonnormative} The class tree is built up directly during parsing of the Modelica texts. For each class a local tree is created which is then merged into the one big tree, according to the location of the class in the class hierarchy. This tree can be seen as the abstract syntax tree (AST) of the loaded libraries. \end{nonnormative} -\subsubsection{The Instance Tree}\label{the-instance-tree} +\subsubsection{The Instance Tree}\doublelabel{the-instance-tree} -The output of the instantiation process is an \firstuse{instance tree}\index{instance tree}. -The instance tree consists of nodes representing the elements of a class definition from the class tree. -For a component the subtree of a particular node is created using the information from the class of the \lstinline[language=grammar]!component-clause! and a new modification environment as result of merging the current modification environment with the modifications from the current element declaration (see \cref{merging-of-modifications}). +The output of the instantiation process is an \firstuse{instance tree}. +The instance tree consists of nodes representing the elements of a class +definition from the class tree. For a component the subtree of a +particular node is created using the information from the class of the +component clause and a new modification environment as result of merging +the current modification environment with the modifications from the +current element declaration (see \autoref{merging-of-modifications}). The instance tree has the following properties: \begin{itemize} @@ -452,12 +464,12 @@ \subsubsection{The Instance Tree}\label{the-instance-tree} instance scope is the starting point for name lookup. \begin{nonnormative} -If the name is not found the lookup is continued in the instance scope corresponding to the lexically enclosing class. -\lstinline!extends!-clauses are treated as unnamed nodes in the instance tree -- when searching for an element in an instance scope the search also recursively examines the elements of the \lstinline!extends!-clauses. -Except that inherited \lstinline!import!-clauses are ignored. +If the name is not found the lookup is continued in the instance scope corresponding to the lexically enclosing class. Extends clauses are treated as unnamed nodes in the +instance tree --- when searching for an element in an instance scope the search also recursively examines the elements of the extends clauses. Except that inherited +import-statements are ignored. \end{nonnormative} -\subsubsection{The Instantiation Procedure.}\label{the-instantiation-procedure} +\subsubsection{The Instantiation Procedure.}\doublelabel{the-instantiation-procedure} The instantiation is a recursive procedure with the following inputs: \begin{itemize} @@ -479,11 +491,15 @@ \subsubsection{The Instantiation Procedure.}\label{the-instantiation-procedure} modifications and equations are resolved later (during generation of flat equation system) using the same lookup. -\subsubsection{Steps of Instantiation}\label{steps-of-instantiation} +\subsubsection{Steps of Instantiation}\doublelabel{steps-of-instantiation} -\paragraph*{The element itself}\label{the-element-itself} +\paragraph*{The element itself}\doublelabel{the-element-itself} -A \firstuse{partially instantiated}\index{partially instantiated} class or component is an element that is ready to be instantiated; a partially instantiated element (i.e.\ class or component) is comprised of a reference to the original element (from the class tree) and the modifiers for that element (including a possible redeclaration). +A partially instantiated class or component is an element that is ready +to be instantiated; a partially instantiated element (i.e. class or +component) is comprised of a reference to the original element (from the +class tree) and the modifiers for that element (including a possible +redeclaration). The possible redeclaration of the element itself takes effect. @@ -492,7 +508,7 @@ \subsubsection{Steps of Instantiation}\label{steps-of-instantiation} forming a new partially instantiated class that is instantiated as below. -\paragraph*{The local contents of the element}\label{the-local-contents-of-the-element} +\paragraph*{The local contents of the element}\doublelabel{the-local-contents-of-the-element} For local classes and components in the current class, instance nodes are created and inserted into the current instance. Modifiers (including @@ -508,14 +524,22 @@ \subsubsection{Steps of Instantiation}\label{steps-of-instantiation} declaration are copied to the instance without merging. \begin{nonnormative} -The annotations can be relevant for simulations, e.g.\ annotations for symbolic processing (\cref{modelica:Evaluate}), simulation experiments (\cref{modelica:experiment}) or functions (\cref{derivatives-and-inverses-of-functions} and \cref{external-function-interface}). +The annotations can be relevant for simulations, e.g. annotations for code generation (\autoref{annotations-for-code-generation}.), simulation experiments +(\autoref{annotations-for-simulation-experiments}) or functions (\autoref{declaring-derivatives-of-functions}, \autoref{declaring-inverses-of-functions} and \autoref{external-function-interface}). \end{nonnormative} -The \lstinline!extends!-clauses are not looked up, but empty \lstinline!extends!-clause nodes are created and inserted into the current instance (to be able to preserve the declaration order of components). +Extends clauses are not looked up, but empty extends clause nodes are +created and inserted into the current instance -- to be able to preserve +the declaration order of components. -\paragraph*{The inherited contents of the element}\label{the-inherited-contents-of-the-element} +\paragraph*{The inherited contents of the element}\doublelabel{the-inherited-contents-of-the-element} -Classes of \lstinline!extends!-clauses of the current class are looked up in the instance tree, modifiers (including redeclarations) are merged, the contents of these classes are partially instantiated using the new modification environment, and are inserted into an \lstinline!extends!-clause node, which is an unnamed node in the current instance that only contains the inherited contents from that base class. +Classes of extends clauses of the current class are looked up in the +instance tree, modifiers (including redeclarations) are merged, the +contents of these classes are partially instantiated using the new +modification environment, and are inserted into an extends clause node, +which is an unnamed node in the current instance that only contains the +inherited contents from that base-class. The classes of extends-clauses are looked up before and after handling extends-clauses; and it is an error if those lookups generate different @@ -529,7 +553,7 @@ \subsubsection{Steps of Instantiation}\label{steps-of-instantiation} Only keeping the first among the children with the same name is important for function arguments where the order matters. \end{nonnormative} -\paragraph*{Recursive instantiation of components}\label{recursive-instantiation-of-components} +\paragraph*{Recursive instantiation of components}\doublelabel{recursive-instantiation-of-components} Components (local and inherited) are recursively instantiated. @@ -557,63 +581,63 @@ \subsubsection{Steps of Instantiation}\label{steps-of-instantiation} end M; \end{lstlisting} -To recursively instantiate \lstinline!M! allowing the generation of flat equation system we have the following steps (not including checks): +To recursively instantiate \lstinline!M! allowing the generation of flat +equation system we have the following steps (not including checks): \begin{enumerate} \item - Instantiate \lstinline!M!, which partially instantiates \lstinline!B!, \lstinline!b!, \lstinline!C!, \lstinline!D!, and \lstinline!E!. + Instantiate \lstinline!M!: which partially instantiates \lstinline!B!, \lstinline!b!, \lstinline!C!, \lstinline!D!, and \lstinline!E!. \item Instantiate \lstinline!M.b!: \begin{enumerate} \item First find the class \lstinline!B! in \lstinline!M! (the partially instantiated elements have correct name allowing lookup) \item - Instantiate the partially instantiated \lstinline!M.B! with the modifier \lstinline!redeclare model A=D(p=1)!. + instantiate the partially instantiated \lstinline!M.B! with the modifier \lstinline!redeclare model A=D(p=1)! \item - Partially instantiate \lstinline!M.b.a! (no modifier), and \lstinline!M.b.A! (with modifier \lstinline!=D(p=1)!). + partially instantiate \lstinline!M.b.a! (no modifier), and \lstinline!M.b.A! (with modifier \lstinline!=D(p=1)!) \end{enumerate} \item Instantiate \lstinline!M.b.a!: \begin{enumerate} \item - First find the class \lstinline!A! in \lstinline!M.b! (the partially instantiated elements have correct name allowing lookup). + First find the class \lstinline!A! in \lstinline!M.b! (the partially instantiated elements have correct name allowing lookup) \item Instantiate the partially instantiated \lstinline!M.b.A! with the modifier \lstinline!=D(p=1)!. \begin{enumerate} \item - Find the base class \lstinline!=D! from the modifier. - This performs lookup for \lstinline!D! in \lstinline!M!, and finds the partially instantiated class \lstinline!D!. + Find the base-class \lstinline!=D! from the modifier. This performs lookup for \lstinline!D! in \lstinline!M!, and finds the partially instantiated class \lstinline!D! \item - Instantiate the base class \lstinline!M.D! with modifier \lstinline!p=1!, and insert as unnamed node in \lstinline!M.b.A!. + Instantiate the base-class \lstinline!M.D! with modifier \lstinline!p=1!, and insert as unnamed node in \lstinline!M.b.A!. \begin{enumerate} \item - Partially instantiate the component \lstinline!p! with modifier \lstinline!=1!. + Partially instantiate the component \lstinline!p! with modifier \lstinline!=1! \item - Find the base class \lstinline!C! in \lstinline!M.D!. - Since there is no local element called \lstinline!C! the search is then continued in \lstinline!M! and finds the partially instantiated class \lstinline!M.C!. + Find the base-class \lstinline!C! in \lstinline!M.D!. Since there is no local element called \lstinline!C! the search is then continued in \lstinline!M! and finds + the partially instantiated class \lstinline!M.C! \item - Instantiate the base class \lstinline!M.C! as below. + Instantiate the base-class \lstinline!M.C! as below \end{enumerate} \end{enumerate} \end{enumerate} \item - Instantiate the base class \lstinline!M.C! inserting the result into unnamed node in \lstinline!M.b.a!: + Instantiate the base-class \lstinline!M.C! inserting the result into unnamed node in \lstinline!M.b.a! \begin{enumerate} \item - Partially instantiate \lstinline!e!. + Partially instantiate \lstinline!e! \item - Instantiate \lstinline!e! which requires finding \lstinline!E!. - First looking for \lstinline!E! in the un-named node for \lstinline!extends M.C!, and, since there is no local element \lstinline!E! the search is then continued in \lstinline!M! (which lexically encloses \lstinline!M.C!) and finds \lstinline!E! class inheriting from \lstinline!Real!. - The \lstinline!e! is then instantiated using class \lstinline!E! inheriting from \lstinline!Real!. + Instantiate \lstinline!e! which requires finding \lstinline!E!. First looking for \lstinline!E! in the un-named node for extends \lstinline!M.C!, and, since there is + no local element \lstinline!E! the search is then continued in \lstinline!M! (which lexically encloses \lstinline!M.C!) and finds \lstinline!E! class inheriting from + \lstinline!Real!. The \lstinline!e! is then instantiated using class \lstinline!E! inheriting from \lstinline!Real!. \end{enumerate} \item - Instantiate \lstinline!M.b.a.p!: + Instantiate \lstinline!M.b.a.p! \begin{enumerate} \item First the class \lstinline!E! in \lstinline!M.b.a! finding \lstinline!E! class inheriting from \lstinline!Integer!. \item - Instantiate the \lstinline!M.b.a.p! using the class \lstinline!E! inheriting from \lstinline!Integer! with modifier \lstinline!=1!. + Instantiate the \lstinline!M.b.a.p! using the class \lstinline!E! inheriting from \lstinline!Integer! with modifier \lstinline!=1! \item - Instantiate the base class \lstinline!Integer! with modifier \lstinline!=1!, and insert as unnamed node in \lstinline!M.b.a.p!. + Instantiate the base-class Integer with modifier \lstinline!=1!, and insert as unnamed node in \lstinline!M.b.a.p!. \end{enumerate} \end{enumerate} @@ -623,7 +647,7 @@ \subsubsection{Steps of Instantiation}\label{steps-of-instantiation} classes called \lstinline!A!). \end{example} -\subsection{Generation of the flat equation system}\label{generation-of-the-flat-equation-system} +\subsection{Generation of the flat equation system}\doublelabel{generation-of-the-flat-equation-system} During this process, all references by name in conditional declarations, modifications, dimension definitions, annotations, equations and @@ -632,20 +656,26 @@ \subsection{Generation of the flat equation system}\label{generation-of-the-flat instance. \begin{nonnormative} -This identifier is normally constructed from the names of the instances along a path in the instance tree (and omitting the unnamed nodes of \lstinline!extends!-clauses), separated by dots. -Either the referenced instance belongs to the model to be simulated the path starts at the model itself, or if not, it starts at the unnamed root of the instance tree, e.g.\ in case of a constant in a package. +This identifier is normally constructed from the names of the instances along a path in the instance tree (and omitting the unnamed nodes of extends clauses), separated +by dots. Either the referenced instance belongs to the model to be simulated the path starts at the model itself, or if not, it starts at the unnamed root of the instance +tree, e.g. in case of a constant in a package. \end{nonnormative} \begin{nonnormative} To resolve the names, a name lookup using the instance tree is performed, starting at the instance scope (unless the name is fully qualified) of the modification, algorithm or equation. If it is not found locally the search is continued at the instance of the lexically enclosing class of the scope (this is normally not equal to the parent of -the current instance), and then continued with their parents as described in \cref{static-name-lookup}. If the found component is an outer declaration, the search is -continued using the direct parents in the instance tree (see \cref{instance-hierarchy-name-lookup-of-inner-declarations}). If the lookup has to look into a class which +the current instance), and then continued with their parents as described in \autoref{static-name-lookup}. If the found component is an outer declaration, the search is +continued using the direct parents in the instance tree (see \autoref{instance-hierarchy-name-lookup-of-inner-declarations}). If the lookup has to look into a class which is not instantiated yet (or only partially instantiated), it is instantiated in place. \end{nonnormative} -The flat equation system consists of a list of variables with dimensions, flattened equations and algorithms, and a list of called functions which are flattened separately. -A flattened function consists of algorithm or external-clause and top-level variables (variables directly declared in the function or one of its base classes) -- which recursively can contain other variables; the list of non-top-level variables is not needed. +The flat equation system consists of a list of variables with +dimensions, flattened equations and algorithms, and a list of called +functions which are flattened separately. A flattened function consists +of algorithm or external clause and top-level variables (variables +directly declared in the function or one of its base-classes) -- which +recursively can contain other variables; the list of non-top level +variables is not needed. The instance tree is recursively walked through as follows for elements of the class (if necessary a partially instantiated component is first @@ -655,6 +685,7 @@ \subsection{Generation of the flat equation system}\label{generation-of-the-flat At each visited component instance, the name is inserted into the variables list. Then the conditional declaration expression is evaluated if applicable. + \begin{itemize} \item The variable list is updated with the actual instance @@ -666,8 +697,9 @@ \subsection{Generation of the flat equation system}\label{generation-of-the-flat instances are resolved and attached to the variable to define their complete dimension. \item - If it is of record or simple type (\lstinline!Boolean!, \lstinline!Integer!, enumeration, - \lstinline!Real!, \lstinline!String!, \lstinline!Clock!, \lstinline!ExternalObject!): + If it is of record or simple type (Boolean, Integer, enumeration, + Real, String, Clock, ExternalObject): + \begin{itemize} \item In the modifications of \emph{value} attribute references are @@ -675,15 +707,16 @@ \subsection{Generation of the flat equation system}\label{generation-of-the-flat is formed from a reference to the name of the instance and the resolved modification value of the instance, and included into the equation system. Except if the value for an element of a record is - overridden by the value for an entire record; \cref{merging-of-modifications}. + overridden by the value for an entire record; \autoref{merging-of-modifications}. \end{itemize} \item - If it is of simple type (\lstinline!Boolean!, \lstinline!Integer!, enumeration, \lstinline!Real!, - \lstinline!String!, \lstinline!Clock!, \lstinline!ExternalObject!): + If it is of simple type (Boolean, Integer, enumeration, Real, + String, Clock, ExternalObject): + \begin{itemize} \item - In the modifications of \emph{non-value} attributes, e.g.\ \lstinline!start!, - \lstinline!fixed! etc.\ references are resolved using the instance scope of the + In the modifications of \emph{non-value} attributes, e.g. start, + fixed etc. references are resolved using the instance scope of the modification. An equation is formed from a reference to the name of the instance appended by a dot and the attribute name and the resolved modification value of the instance, and included into the @@ -693,8 +726,12 @@ \subsection{Generation of the flat equation system}\label{generation-of-the-flat If it is of a non-simple type the instance is recursively handled. \end{itemize} \item - If there are equation or algorithm sections in the class definition of the instance, references are resolved using the instance scope of the instance and are included in the equation system. - Some references -- in particular to non simple, non record objects like connectors in \lstinline!connect!-equations and states in \lstinline!transition!-equations are not resolved yet and handled afterwards. + If there are equation or algorithm sections in the class definition of + the instance, references are resolved using the instance scope of the + instance and are included in the equation system. Some references -- + in particular to non simple, non record objects like connectors in + connect statements and states in transition statements are not + resolved yet and handled afterwards. \item Instances of local classes are ignored. \item @@ -702,7 +739,7 @@ \subsection{Generation of the flat equation system}\label{generation-of-the-flat handled. \item If there are function calls encountered during this process, the call - is filled up with default arguments as defined in \cref{positional-or-named-input-arguments-of-functions}. These are + is filled up with default arguments as defined in \autoref{positional-or-named-input-arguments-of-functions}. These are built from the modifications of input arguments which are resolved using their instance scope. The called function itself is looked up in the instance tree. All used functions are flattened and put into the @@ -711,27 +748,28 @@ \subsection{Generation of the flat equation system}\label{generation-of-the-flat Conditional components with false condition are removed afterwards and they are not part of the simulation model. \begin{nonnormative} - Thus e.g.\ parameters don't need values in them. However, type-error can be detected. + Thus e.g. parameters don't need values in them. However, type-error can be detected. \end{nonnormative} \item - Each reference is checked, whether it is a valid reference, e.g.\ the + Each reference is checked, whether it is a valid reference, e.g. the referenced object belongs to or is an instance, where all existing conditional declaration expressions evaluate to true or it is a constant in a package. \begin{nonnormative} - Conditional components can be used in \lstinline!connect!-equations, and if the component is conditionally disabled the \lstinline!connect!-equation is removed. + Conditional components can be used in connect-statements, and if the component is conditionally disabled the connect-statement is removed. \end{nonnormative} \end{itemize} -This leads to a flattened equation system, except for \lstinline!connect!- and \lstinline!transition!-equations. -These have to be transformed as described in \cref{connectors-and-connections} and \cref{state-machines}. -This may lead to further changes in the instance tree (e.g.\ from expandable connectors (\cref{expandable-connectors})) and additional equations in the flattened equation system (e.g.\ connection equations (\cref{generation-of-connection-equations}), generated equations for state machine semantics (\cref{semantics-summary})). +This leads to a flattened equation system, except for connect and transition statements. These have to be transformed as described in +\autoref{connectors-and-connections} and \autoref{state-machines}. This may lead to further changes in the instance tree (e.g. from expandable connectors +(\autoref{expandable-connectors})) and additional equations in the flattened equation system (e.g. connect equations (\autoref{generation-of-connection-equations}), +generated equations for state machine semantics (\autoref{semantics-summary})). \begin{nonnormative} After flattening, the resulting equation system is self contained and covers all information needed to transform it to a simulatable model, but the class and instance trees are still needed: in the transformation process, there might be the need to instantiate -further functions, e.g.\ from \lstinline!derivative! annotation or from \lstinline!inverse! +further functions, e.g. from \lstinline!derivative! annotation or from \lstinline!inverse! annotation etc., on demand. \end{nonnormative} diff --git a/chapters/statemachines.tex b/chapters/statemachines.tex index e9ec0f44b..4d7a74a5d 100644 --- a/chapters/statemachines.tex +++ b/chapters/statemachines.tex @@ -1,14 +1,23 @@ -\chapter{State Machines}\label{state-machines} +\chapter{State Machines}\doublelabel{state-machines} -This chapter defines language elements to define clocked state machines. -These state machines have a similar modeling power as Statecharts \parencite{Harel1987Statecharts} and have the important feature that at one clock tick, there is only one assignment to every variable (for example, it is an error if state machines are executed in parallel and they assign to the same variable at the same clock tick; such errors are detected during translation). -Furthermore, it is possible to activate and deactivate clocked equations and blocks at a clock tick. -An efficient implementation will only evaluate the equations and blocks that are active at the current clock tick. -With other Modelica language elements, this important feature cannot be defined. - -The semantics of the state machines defined in this chapter is inspired by mode automata and is basically the one from Lucid Synchrone 3.0 \parencite{Pouzet2006LucidSynchrone30}. -Note, safety critical control software in aircrafts is often defined with such kind of state machines. -The following properties are different to Lucid Synchrone 3.0: +\begin{nonnormative} +This chapter defines language elements to define clocked state +machines. These state machines have a similar modeling power as +Statecharts (Harel 1987) and have the important feature that at one +clock tick, there is only one assignment to every variable (for example, +it is an error if state machines are executed in parallel and they +assign to the same variable at the same clock tick; such errors are +detected during translation). Furthermore, it is possible to activate +and deactivate clocked equations and blocks at a clock tick. An +efficient implementation will only evaluate the equations and blocks +that are active at the current clock tick. With other Modelica language +elements, this important feature cannot be defined. + +The semantics of the state machines defined in this chapter is +inspired by mode automata and is basically the one from Lucid Synchrone +3.0 (Pouzet 2006). Note, safety critical control software in aircrafts +is often defined with such kind of state machines. The following +properties are different to Lucid Synchrone 3.0: \begin{itemize} \item Lucid Synchrone has two kinds of transitions: \emph{strong} and @@ -22,7 +31,7 @@ \chapter{State Machines}\label{state-machines} For this reason, the state machines in this chapter use \emph{immediate} (= the same as \emph{strong}) and \emph{delayed} transitions. Delayed transitions are \emph{immediate} transitions where the condition is - automatically delayed with an implicit \lstinline!previous!. + automatically delayed with an implicit \lstinline!previous(..)!. \item Parallel state machines can be explicitly synchronized with a language element (similarly as parallel branches in Sequential @@ -35,108 +44,85 @@ \chapter{State Machines}\label{state-machines} latter case, the equations are integrated between the previous and the next clock tick, if the corresponding state is active). \end{itemize} +\end{nonnormative} -\section{Transitions}\label{transitions} +\section{Transitions}\doublelabel{transitions} Any Modelica block instance without continuous-time equations or -continuous-time algorithms can potentially be a state of a state machine. A cluster of -instances which are coupled by \lstinline!transition! statements makes a +algorithms can potentially be a state of a state machine. A cluster of +instances which are coupled by \textbf{transition} statements makes a state machine. All parts of a state machine must have the same clock. All transitions leaving one state must have different priorities. One and only one instance in each state machine must be marked as initial by -appearing in an \lstinline!initialState! statement. - -The special kinds of \lstinline!connect!-like equations listed below are used to define define a state machine. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!transition($\mathit{from}$, $\mathit{to}$, $\mathit{condition}$, $\ldots$)! & State machine transition between states & \Cref{modelica:transition}\\ -\lstinline!initialState($\mathit{state}$)! & State machine initial state & \Cref{modelica:initialState}\\ -\hline +appearing in an \textbf{initialState} statement. The following special +kinds of connect-statements are used to define transitions between +states and to define the initial state: +\begin{longtable}[]{|p{4cm}|p{10cm}|} +\hline \endhead +\multicolumn{2}{|p{12cm}|}{\textbf{Statements to define a state machine}}\\ \hline +\begin{tabular}{@{}p{4cm}@{}} +\textbf{transition}(from, to, \\ condition,\\ +immediate, reset,\\ +synchronize, priority) \end{tabular} -\end{center} - -The \lstinline!transition!- and \lstinline!initialState!-equations can only be used in equations, and cannot be used inside \lstinline!if!-equations with conditions that are not parameter expressions, or in \lstinline!when!-equations. - -The operators listed below are used to query the status of the state machine. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!activeState($\mathit{state}$)! & Predicate for active state & \Cref{modelica:activeState}\\ -\lstinline!ticksInState()! & Ticks since activation & \Cref{modelica:ticksInState}\\ -\lstinline!timeInState()! & Time since activation & \Cref{modelica:timeInState}\\ -\hline -\end{tabular} -\end{center} - -\begin{operatordefinition}[transition] -\begin{synopsis}\begin{lstlisting} -transition($\mathit{from}$, $\mathit{to}$, $\mathit{condition}$, - immediate=$\mathit{imm}$, reset=$\mathit{reset}$, synchronize=$\mathit{synch}$, priority=$\mathit{prio}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Arguments $\mathit{from}$ and $\mathit{to}$ are block instances, and $\mathit{condition}$ is a \lstinline!Boolean! argument. -The optional arguments \lstinline!immediate!, \lstinline!reset!, and \lstinline!synchronize! are of type \lstinline!Boolean!, have parameter variability and a default of \lstinline!true!, \lstinline!true!, \lstinline!false! respectively. -The optional argument \lstinline!priority! is of type \lstinline!Integer!, has parameter variability and a default of 1. - -This operator defines a transition from instance $\mathit{from}$ to instance $\mathit{to}$. -The $\mathit{from}$ and $\mathit{to}$ instances become states of a state machine. -The transition fires when $\mathit{condition} = \text{\lstinline!true!}$ if $\mathit{imm} = \text{\lstinline!true!}$ (this is called an \firstuse{immediate transition}\index{immediate transition}\index{transition!immediate}) or \lstinline!previous($\mathit{condition}$)! when $\mathit{imm} = \text{\lstinline!false!}$ (this is called a \firstuse{delayed transition}\index{delayed transition}\index{transition!delayed}). -Argument \lstinline!priority! defines the priority of firing when several transitions could fire. -In this case the transition with the smallest value of \lstinline!priority! fires. -It is required that $\mathit{prio} \geq 1$ and that for all transitions from the same state, the priorities are different. If $\mathit{reset} = \text{\lstinline!true!}$, the states of the target state are reinitialized, i.e.\ state machines are restarted in initial state and state variables are reset to their start values. -If $\mathit{synch} = \text{\lstinline!true!}$, any transition is disabled until all state machines of the from-state have reached final states, i.e.\ states without outgoing transitions. -For the precise details about firing a transition, see \cref{state-machine-semantics}. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[initialState] -\begin{synopsis}\begin{lstlisting} -initialState($\mathit{state}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Argument $\mathit{state}$ is the block instance that is defined to be the initial state of a state machine. At the first clock tick of the state machine, this state becomes active. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[activeState] -\begin{synopsis}\begin{lstlisting} -activeState($\mathit{state}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Argument $\mathit{state}$ is a block instance. The operator returns \lstinline!true! if this instance is a state of a state machine and this state is active at the actual clock tick. If it is not active, the operator returns \lstinline!false!. - -It is an error if the instance is not a state of a state machine. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[ticksInState] -\begin{synopsis}\begin{lstlisting} -ticksInState() -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the number of ticks of the clock of the state machine for which the currently active state has maintained its active state without interruption, i.e.\ without local or hierarchical transitions from this state. In the case of a self-transition to the currently active state or to an active enclosing state, the number is reset to one. - -This function can only be used in state machines. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[timeInState] -\begin{synopsis}\begin{lstlisting} -timeInState() -\end{lstlisting}\end{synopsis} -\begin{semantics} -Returns the time duration as \lstinline!Real! in {[}s{]} for which the currently active state has maintained its active state without interruption, i.e.\ without local or hierarchical transitions from this state. In the case of a self-transition to the currently active state or to an active enclosing state, the time is reset to zero. - -This function can only be used in state machines. -\end{semantics} -\end{operatordefinition} +& +Arguments \lstinline!from! and \lstinline!to! are block instances and \lstinline!condition! is a +\lstinline!Boolean! argument. The optional arguments \lstinline!immediate!, \lstinline!reset!, and +\lstinline!synchronize! are of type \lstinline!Boolean!, have parametric variability and a +default of \textbf{true, true, false} respectively. The optional +argument \lstinline!priority! is of type \lstinline!Integer!, has parametric variability and +a default of 1. + +This operator defines a transition from instance \lstinline!from! to instance +\lstinline!to!. The \lstinline!from! and \lstinline!to! instances become states of a state +machine. The transition fires when condition = \textbf{true} if +immediate = \textbf{true} (this is called an \firstuse{immediate transition}) +or \textbf{previous}(condition) when immediate = \textbf{false} (this is +called a \firstuse{delayed transition}). Argument \lstinline!priority! defines the +priority of firing when several transitions could fire. In this case the +transition with the smallest value of \lstinline!priority! fires. It is required +that $\textrm{priority}\ge 1$ and that for all transitions from the same state, the +priorities are different. If reset = \textbf{true}, the states of the +target state are reinitialized, i.e. state machines are restarted in +initial state and state variables are reset to their start values. If +synchronize=true, any transition is disabled until all state machines of +the from-state have reached final states, i.e. states without outgoing +transitions. For the precise details about firing a transition, see +\autoref{state-machine-semantics}.\\ \hline +\textbf{initialState}(state) & Argument \lstinline!state! is the block instance +that is defined to be the initial state of a state machine. At the first +clock tick of the state machine, this state becomes +active.\\ \hline +\end{longtable} + +The transition-, and initialState-equations may only be used in +equations and may not be used inside if-equations with non-parametric +condition, or in when-equations. + +It is possible to query the status of the state machine by using the +following operators: +\begin{longtable}[]{|p{4cm}|p{10cm}|} +\hline \endhead +\textbf{activeState}(state)& +Argument \lstinline!state! is a block instance. The operator returns +\textbf{true}, if this instance is a state of a state machine and this +state is active at the actual clock tick. If it is not active, the +operator returns \textbf{false}. + +It is an error if the instance is not a state of a state machine.\\ \hline +\lstinline!ticksInState()! & Returns the number of ticks of the clock of the state machine +for which the currently active state has maintained its active state without interruption, +i.e. without local or hierarchical transitions from this state. +In the case of a self-transition to the currently active state or to an active enclosing state, +the number is reset to one. +This function can only be used in state machines.\\ \hline +\lstinline!timeInState()! & Returns the time duration as \lstinline!Real! in {[}s{]} +for which the currently active state has maintained its active state without interruption, +i.e. without local or hierarchical transitions from this state. +In the case of a self-transition to the currently active state or to an active enclosing state, +the time is reset to zero. +This function can only be used in state machines.\\ \hline +\end{longtable} \begin{example} If there is a transition with \lstinline!immediate=false! from @@ -150,58 +136,67 @@ \section{Transitions}\label{transitions} State A2; equation initialState(A0); - transition(A0, A1, sample(time, Clock(1, 1000)) > 0.0095); + transition(A0, A1, sample(time,Clock(1,1000)) > 0.0095); transition(A1, A2, ticksInState() >= 5, immediate=false); \end{lstlisting} \end{example} -\section{State Machine Graphics}\label{state-machine-graphics} +\section{State Machine Graphics}\doublelabel{state-machine-graphics} \begin{nonnormative} -\Cref{fig:state-machine-layout} shows the recommended layout of a state machine. -\end{nonnormative} +The recommended layout of state machines is shown below for a +simple state machine with 5 transitions. -\begin{figure}[H] - \begin{center} - \includegraphics{statemachine} - \end{center} - % Avoid placing non-normative content in the caption. - \caption{Recommended layout of a simple state machine. For the 5 transitions, the settings are as follows, from left to right: \lstinline!immediate! = true, false, true, false, true; \lstinline!reset! = true, true, false, false, true; \lstinline!synchronize! = false, false, false, false, true; \lstinline!priority! = 1, 2, 3, 4, 5.} - \label{fig:state-machine-layout} -\end{figure} +\includegraphics[width=4.85417in,height=3.42708in]{statemachine} + +For the 5 transitions above, the settings are as follows, from left to +right: immediate = true, false, true, false, true; reset = true, true, +false, false, true; synchronize = false, false, false, false, true; +priority = 1, 2, 3, 4, 5. The recommended color is \{95, 95, 95\} for +states and for transition text and \{175,175,175\} for transition +lines. +\end{nonnormative} -The annotation for graphics of \lstinline!transition! has the following -structure: \lstinline!annotation(Line($\ldots$), Text($\ldots$))!; and for -\lstinline!initialState()!: \emph{graphical-primitives}\lstinline!(Line($\ldots$))!; with \lstinline!Line! -and \lstinline!Text! annotations defined in \cref{annotations}. +The annotation for graphics of \lstinline!transition()! has the following +structure: \lstinline[mathescape=true]!annotation(Line($\ldots$), Text($\ldots$))!; and for +\lstinline!initialState()!: \emph{graphical-primitives}\lstinline[mathescape=true]!(Line($\ldots$))!; with \lstinline!Line! +and \lstinline!Text! annotations defined in \autoref{annotations}. \begin{example} \begin{lstlisting}[language=modelica] transition(state2, state1, x < 10, immediate=true, reset=true, synchronize=false, priority=1) - annotation( + annotation ( Line( - points = {{-40,-16},{-36,-4},{-32,8},{-40,26},{-40,32},{-46,50}}, - color = {175, 175, 175}, - thickness = 0.25, - smooth = Smooth.Bezier), + points={{-40,-16},{-36,-4},{-32,8},{-40,26},{-40,32},{-46,50}}, + color={175,175,175}, + thickness=0.25, + smooth=Smooth.Bezier), Text( - string = "%condition", - extent = {{4, -4}, {4, -10}}, - fontSize = 10, - textStyle = {TextStyle.Bold}, - textColor = {95, 95, 95}, - horizontalAlignment = TextAlignment.Left), - ); + string="%condition", + extent={{4,-4},{4,-10}}, + fontSize=10, + textStyle={TextStyle.Bold}, + textColor={95,95,95}, + horizontalAlignment=TextAlignment.Left), +); \end{lstlisting} \end{example} -The \lstinline!Text! annotation representing the transition condition can use the notation \lstinline!%condition! to refer to the condition expression. +The Text annotation representing the transition condition can use the +notation \%condition to refer to the condition expression. -The extent of the Text is interpreted relative to either the first point of the \lstinline!Line!, in the case of \lstinline!immediate=false!, or the last point (\lstinline!immediate=true!). +The extent of the Text is interpreted relative to either the first point +of the Line, in the case of immediate=false, or the last point +(immediate=true). -In addition to the line defined by the points of the \lstinline!Line! annotation, a perpendicular line is used to represent the transition. This line is closer to the first point if \lstinline!immediate=false! otherwise closer to the last point. +In addition to the line defined by the points of the Line annotation, a +perpendicular line is used to represent the transition. This line is +closer to the first point if immediate=false otherwise closer to the +last point. -If the condition text is somewhat distant from the perpendicular line, a dimmed straight line joins the transition text and the perpendicular line. (See the rightmost transition above.) +If the condition text is somewhat distant from the perpendicular line, a +dimmed straight line joins the transition text and the perpendicular +line. (See the rightmost transition above.) If \lstinline!reset=true!, a filled arrow head is used otherwise an open arrow head. For \lstinline!synchronize=true!, an inverse ``fork'' symbol is used in the @@ -213,7 +208,7 @@ \section{State Machine Graphics}\label{state-machine-graphics} The \lstinline!initialState! line has a filled arrow head and a bullet at the opposite end of the initial state (as shown above). -\section{State Machine Semantics}\label{state-machine-semantics} +\section{State Machine Semantics}\doublelabel{state-machine-semantics} For the purpose of defining the semantics of state machines, assume that the data of all transitions are stored in an array of records: @@ -233,31 +228,39 @@ \section{State Machine Semantics}\label{state-machine-semantics} states are enumerated from 1 and up. The transition conditions are stored in a separate array \lstinline!c[:]! since they are time varying. -The semantics model is a discrete-time system with inputs \{\lstinline!c[:]!, \lstinline!active!, \lstinline!reset!\} with \lstinline!t! being an array corresponding to the inputs to the transition operator, outputs \{\lstinline!activeState!, \lstinline!activeReset!, \lstinline!activeResetStates[:]!\} and states \{\lstinline!nextState!, \lstinline!nextReset!, \lstinline!nextResetStates[:]!\}. -For a top-level state machine, active is always true. -For sub-state machines, active is true only when the parent state is active. -For a top-level state machine, reset is true at the first activation only. -For sub-state machine, reset is propagated from the state machines higher up. +The semantics model is a discrete-time system with inputs \{\lstinline!c[:]!, +\lstinline!active!, \lstinline!reset!\} with \lstinline!t! being an array corresponding to the inputs to the +transition operator, outputs \{\lstinline!activeState!, \lstinline!activeReset!, +\lstinline!activeResetStates[:]!\} and states \{\lstinline!nextState!, \lstinline!nextReset!, +\lstinline!nextResetStates[:]!\}. For a top level state machine, active is +always true. For sub-state machines, active is true only when the parent +state is active. For a top level state machine, reset is true at the +first activation only. For sub-state machine, reset is propagated from +the state machines higher up. -\subsection{State Activation}\label{state-activation} +\subsection{State Activation}\doublelabel{state-activation} -The state update starts from \lstinline!nextState!, i.e., what has been determined to be the next state at the previous time. -\lstinline!selectedState! takes into account if a reset of the state machine is to be done. +The state update starts from nextState, i.e., what has been determined +to be the next state at the previous time. selectedState takes into +account if a reset of the state machine is to be done. \begin{lstlisting}[language=modelica] -output Integer selectedState = if reset then 1 else previous(nextState); + output Integer selectedState = if reset then 1 else previous(nextState); \end{lstlisting} -The integer fired is calculated as the index of the transition to be fired by checking that \lstinline!selectedState! is the from-state and the condition is true for an immediate transition or \lstinline!previous($\mathit{condition}$)! is true for a delayed transition. The max function returns the index of the transition with highest priority or 0. +The integer fired is calculated as the index of the transition to be +fired by checking that selectedState is the from-state and the condition +is true for an immediate transition or previous(condition) is true for a +delayed transition. The max function returns the index of the transition +with highest priority or 0. \begin{lstlisting}[language=modelica] -Integer fired = - max( - if (if t[i].from == selectedState - then (if t[i].immediate then c[i] else previous(c[i])) - else false) - then i - else 0 - for i in 1:size(t,1)); + Integer fired = max(if + (if t[i].from == selectedState + then (if t[i].immediate then c[i] else previous(c[i])) + else false) + then i + else 0 + for i in 1:size(t,1)); \end{lstlisting} The start value of c is false. This definition would require that the previous value is recorded for all transitions conditions. Below is @@ -265,64 +268,62 @@ \subsection{State Activation}\label{state-activation} of one integer variable delayed. The integer immediate is calculated as the index of the immediate -transition to potentially be fired by checking that \lstinline!selectedState! is the +transition to potentially be fired by checking that selectedState is the from-state and the condition is true. The max function returns the index of the transition with true condition and highest priority or 0. \begin{lstlisting}[language=modelica] -Integer immediate = - max( - if (if t[i].immediate and t[i].from == selectedState + Integer immediate = max(if + (if t[i].immediate and t[i].from == selectedState then c[i] - else false) - then i - else 0 - for i in 1:size(t,1)); + else false) + then i + else 0 + for i in 1:size(t,1)); \end{lstlisting} In a similar way, the \lstinline!Integer delayed! is calculated as the index for a -potentially delayed transition, i.e.\ a transition taking place at the +potentially delayed transition, i.e. a transition taking place at the next clock tick. In this case the from-state needs to be equal to -\lstinline!nextState!: +nextState: \begin{lstlisting}[language=modelica] -Integer delayed = - max( - if (if not t[i].immediate and t[i].from == nextState - then c[i] - else false) - then i - else 0 - for i in 1:size(t,1)); + Integer delayed = max(if + (if not t[i].immediate and t[i].from == nextState + then c[i] + else false) + then i + else 0 + for i in 1:size(t,1)); \end{lstlisting} The transition to be fired is determined as follows, taking into account that a delayed transition might have higher priority than an immediate: \begin{lstlisting}[language=modelica] -Integer fired = max(previous(delayed), immediate); + Integer fired = max(previous(delayed), immediate); \end{lstlisting} -\lstinline!nextState! is set to the found transitions to-state: +nextState is set to the found transitions to-state: \begin{lstlisting}[language=modelica] -Integer nextState = - if active then - (if fired > 0 - then t[fired].to - else selectedState) - else - previous(nextState); + Integer nextState = if active then + (if fired > 0 + then t[fired].to + else selectedState) + else previous(nextState); \end{lstlisting} In order to define synchronize transitions, each state machine must -determine which are the final states, i.e.\ states without +determine which are the final states, i.e. states without from-transitions and to determine if the state machine is in a final state currently: \begin{lstlisting}[language=modelica] -Boolean finalStates[nStates] = { - max(if t[j].from == i then 1 else 0 for j in 1:size(t,1)) == 0 - for i in 1:nStates}; -Boolean stateMachineInFinalState = finalStates[activeState]; + Boolean finalStates[nStates] = { + max(if t[j].from == i then 1 else 0 for j in 1:size(t,1)) == 0 + for i in 1:nStates}; + Boolean stateMachineInFinalState = finalStates[activeState]; \end{lstlisting} -To enable a synchronize transition, all the \lstinline!stateMachineInFinalState! conditions of all state machines within the meta state must be true. An example is given below in the semantic example model. +To enable a synchronize transition, all the stateMachineInFinalState +conditions of all state machines within the meta state must be true. An +example is given below in the semantic example model. -\subsection{Reset Handling}\label{reset-handling} +\subsection{Reset Handling}\doublelabel{reset-handling} A state can be reset for two reasons: \begin{itemize} @@ -335,25 +336,25 @@ \subsection{Reset Handling}\label{reset-handling} Then, its target state is reset, but not other states. \end{itemize} -The first reset mechanism is handled by the \lstinline!activeResetStates! and \lstinline!nextResetStates! vectors. +The first reset mechanism is handled by the activeResetStates and +nextResetStates vectors. -The state machine reset flag is propagated and maintained to each state individually: +The state machine reset flag is propagated and maintained to each state +individually: \begin{lstlisting}[language=modelica] -output Boolean activeResetStates[nStates] = {if reset then true else previous(nextResetStates[i]) for i in 1:nStates}; + output Boolean activeResetStates[nStates] = {if reset then true else previous(nextResetStates[i]) for i in 1:nStates}; \end{lstlisting} -until a state is eventually executed, then its corresponding reset condition is set to false: +until a state is eventually executed, then its corresponding reset +condition is set to false: \begin{lstlisting}[language=modelica] -Boolean nextResetStates[nStates] = - if active then - {if activeState == i then false else activeResetStates[i] for i in 1:nStates} - else - previous(nextResetStates) + Boolean nextResetStates[nStates] = if active then {if activeState == i then false else activeResetStates[i] for i in 1:nStates} + else previous(nextResetStates) \end{lstlisting} -The second reset mechanism is implemented with the \lstinline!selectedReset!~and \lstinline!nextReset!~variables. If no reset transition is fired, the \lstinline!nextReset! is set to false for the next cycle. - -\subsection{Activation handling}\label{activation-handling} +The second reset mechanism is implemented with the selectedReset~and +nextReset~variables. If no reset transition is fired, the nextReset is +set to false for the next cycle. -When a state is suspended its equations should not be executed, and its variables keep their values -- including state-variables in clocked discretized continuous-time equations. +\subsection{Activation handling}\doublelabel{activation-handling} The execution of a sub-state machine has to be suspended when its enclosing state is not active. This activation flag is given as a @@ -361,7 +362,7 @@ \subsection{Activation handling}\label{activation-handling} maintains its previous state, by guarding the equations of the state variables \lstinline!nextState!, \lstinline!nextReset! and \lstinline!nextResetStates!. -\subsection{Semantics Summary}\label{semantics-summary} +\subsection{Semantics Summary}\doublelabel{semantics-summary} The entire semantics model is given below: \begin{lstlisting}[language=modelica] @@ -396,8 +397,7 @@ \subsection{Semantics Summary}\label{semantics-summary} Boolean stateMachineInFinalState = finalStates[activeState]; end StateMachineSemantics; \end{lstlisting} - -\subsection{Merging Variable Definitions}\label{merging-variable-definitions} +\subsection{Merging Variable Definitions}\doublelabel{merging-variable-definitions} \begin{nonnormative} When a state class uses an \lstinline!outer output! declaration, @@ -410,10 +410,10 @@ \subsection{Merging Variable Definitions}\label{merging-variable-definitions} In each state, the outer output variables are solved for and for each such variable a single definition is formed: \begin{lstlisting}[language=modelica,escapechar=!] -v := if activeState(state!\textsubscript{1}!) then expre!\textsubscript{1}! elseif activeState(state!\textsubscript{2}!) then expre!\textsubscript{2}! elseif $\ldots$ else last(v) +v := if activeState(state!\textsubscript{1}!) then expre!\textsubscript{1}! elseif activeState(state!\textsubscript{2}!) then expre!\textsubscript{2}! elseif ... else last(v) \end{lstlisting} -\lstinline!last! is special internal semantic operator returning its +\textbf{last}() is special internal semantic operator returning its input. It is just used to mark for the sorting that the incidence of its argument should be ignored. A start value must be given to the variable if not assigned in the initial state. @@ -421,65 +421,74 @@ \subsection{Merging Variable Definitions}\label{merging-variable-definitions} A new assignment equation is formed which might be merged on higher levels in nested state machines. -\subsection{Merging Connections to Multiple Outputs}\label{merging-connections-to-multiple-outputs} +\subsection{Merging Connections to Multiple Outputs}\doublelabel{merging-connections-to-multiple-outputs} \begin{nonnormative} -The causal connection semantics of Modelica for non-state machines are generalized to states of state machines, using the fact that only one state is active at a time. +Since instances of blocks can be used as states of a state +machine it is natural to extend the connection semantics of Modelica to +allow several outputs to be connected to one input. \end{nonnormative} -It is possible to connect outputs each coming from different states of state machines together -- and connect this with other causal connectors. -These outputs are combined seen as one source of the signal, and give the following constraint equations, +It is possible to connect several outputs to an input if all the outputs +come from states of the same state machine. In such cases, we get the +following constraint equations: \begin{lstlisting}[language=modelica,escapechar=!] -u!\textsubscript{1}! = u!\textsubscript{2}! = $\ldots$ = y!\textsubscript{1}! = y!\textsubscript{2}! = $\ldots$ +u!\textsubscript{1}! = u!\textsubscript{2}! = ... = y!\textsubscript{1}! = y!\textsubscript{2}! = ... \end{lstlisting} -with \lstinline!y!\textsubscript{i} being outputs from different states of the state-machine and \lstinline!u!\textsubscript{i} being other causal variables. -The semantics is defined similarly to \cref{merging-variable-definitions}: +with u\textsubscript{i} inputs and y\textsubscript{i} outputs. The +semantics is defined as follows. Introduce a variable v representing the +signal flow and rewrite the equation above as a set of equations for +u\textsubscript{i} and a set of assignment equations for v: \begin{lstlisting}[language=modelica,escapechar=!] -v = if activeState(state!\textsubscript{1}!) then - y!\textsubscript{1}! - elseif activeState(state!\textsubscript{2}!) then - y!\textsubscript{2}! - elseif $\ldots$ - else - last(v); +v := if activeState(state!\textsubscript{1}!) then y!\textsubscript{1}! else last(v); +v := if activeState(state!\textsubscript{2}!) then y!\textsubscript{2}! else last(v); +... u!\textsubscript{1}! = v u!\textsubscript{2}! = v -$\ldots$ +... \end{lstlisting} -\subsection{Example}\label{example} +The merge of the definitions of v is then made according to \autoref{merging-variable-definitions}: +Merging Variable Definitions. The result is after +simplification: +\begin{lstlisting}[language=modelica,escapechar=!] +v := if activeState(state!\textsubscript{1}!) then y!\textsubscript{1}! elseif activeState(state!\textsubscript{2}!) then y!\textsubscript{2}! elseif ... else last(v); +u!\textsubscript{1}! = v +u!\textsubscript{2}! = v +... +\end{lstlisting} -\begin{figure}[H] - \begin{center} - \includegraphics{hierarchical-statemachine} - \end{center} - \caption{Example of a hierarchical state machine.} - \label{fig:hierarchical-statemachine} -\end{figure} +\subsection{Example}\doublelabel{example} \begin{example} -Consider the hierarchical state machine in \cref{fig:hierarchical-statemachine}. The model demonstrates the following properties: +Consider the following hierarchical state machine: + +\includegraphics[width=5.34375in,height=5.72917in]{statemachine2} + +The model demonstrates the following properties: \begin{itemize} \item \lstinline!state1! is a meta state with two parallel state machines in it. \item - \lstinline!stateA! declares \lstinline!v! as \lstinline!outer output!. \lstinline!state1! is on an intermediate level and declares \lstinline!v! as \lstinline!inner outer output!, i.e.\ matches lower level \lstinline!outer v! by being \lstinline!inner! and also matches higher level \lstinline!inner v! by being \lstinline!outer!. - The top level declares \lstinline!v! as \lstinline!inner! and gives the start value. + \lstinline!stateA! declares \lstinline!v! as \lstinline!outer output!. \lstinline!state1! is on an intermediate + level and declares \lstinline!v! as \lstinline!inner outer output!, i.e. matches lower level + \lstinline!outer v! by being \lstinline!inner! and also matches higher level \lstinline!inner v! by being + \lstinline!outer!. The top level declares \lstinline!v! as \lstinline!inner! and gives the start value. \item \lstinline!count! is defined with a start value in \lstinline!state1!. It is reset when - a reset transition (\lstinline!v >= 20!) is made to \lstinline!state1!. + a reset transition (v\textgreater{}=20) is made to \lstinline!state1!. \item \lstinline!stateX! declares the local variable \lstinline!w! to be equal to \lstinline!v! declared as \lstinline!inner input!. \item \lstinline!stateY! declares a local counter \lstinline!j!. It is reset at start and as a - consequence of the reset transition (\lstinline!v >= 20!) to \lstinline!state1!: - When the reset transition (\lstinline!v >= 20!) fires, then the variables of the + consequence of the reset transition (v\textgreater{}=20) to \lstinline!state1!: + When the reset transition ($v\ge 20$) fires, then the variables of the active states are reset immediately (so \lstinline!count! from \lstinline!state1!, and \lstinline!i! from \lstinline!stateX!). The variables of other states are only reset at the time instants when these states become active. So \lstinline!j! in \lstinline!StateY! is reset to - 0, when the transition \lstinline!stateX.i > 20! fires (after \lstinline!state1! - became active again, so after the reset transition \lstinline!v >= 20!). + 0, when the transition \lstinline!stateX.i! \textgreater{} 20 fires (after \lstinline!state1! + became active again, so after the reset transition $v\ge 20$). \item Synchronizing the exit from the two parallel state machines of \lstinline!state1! is done by checking that \lstinline!stated! and \lstinline!stateY! are active using the @@ -568,13 +577,9 @@ \subsection{Example}\label{example} end HierarchicalAndParallelStateMachine; \end{lstlisting} -\Cref{fig:state-machine-behavior} shows the behavior of the state machine. +The behavior of the state machine can be seen in the plots of \lstinline!v!: \begin{figure}[H] - \begin{center} - \includegraphics{statemachineplot} - \end{center} - \caption{State machine behavior, as reflected by the variable \lstinline!v!.} - \label{fig:state-machine-behavior} +\includegraphics[width=4.16667in,height=2.91667in]{statemachineplot} \end{figure} The transition from \lstinline!state1! to \lstinline!state2! could have been done with a diff --git a/chapters/statements.tex b/chapters/statements.tex index c9d34f8c3..8a29aa5e3 100644 --- a/chapters/statements.tex +++ b/chapters/statements.tex @@ -1,4 +1,4 @@ -\chapter{Statements and Algorithm Sections}\label{statements-and-algorithm-sections} +\chapter{Statements and Algorithm Sections}\doublelabel{statements-and-algorithm-sections} Whereas equations are very well suited for physical modeling, there are situations where computations are more conveniently expressed as @@ -7,28 +7,24 @@ \chapter{Statements and Algorithm Sections}\label{statements-and-algorithm-secti Statements are imperative constructs allowed in algorithm sections. -\section{Algorithm Sections}\label{algorithm-sections} +\section{Algorithm Sections}\doublelabel{algorithm-sections} -An \firstuse{algorithm section}\index{algorithm!section} is a part of a class definition comprised of the keyword \lstinline!algorithm!\index{algorithm@\robustinline{algorithm}} followed by a sequence of statements. -The formal syntax is as follows: +An algorithm section is comprised of the keyword \lstinline!algorithm! followed by a +sequence of statements. The formal syntax is as follows: \begin{lstlisting}[language=grammar] algorithm-section : - [ initial ] algorithm { statement ";" | annotation ";" } +[ initial ] algorithm { statement ";" | annotation ";" } \end{lstlisting} -Like an equation, an algorithm section relates variables, i.e., constrains the values that these variables can take simultaneously. -In contrast to an equation section, an algorithm section distinguishes inputs from outputs: -An algorithm section specifies how to compute output variables as a function of given input variables. -A Modelica tool may actually invert an algorithm section, i.e., compute inputs from given outputs, e.g., by search (generate and test), or by deriving an inverse algorithm symbolically. +Equation equality \lstinline!=! or any other kind of equation (see \autoref{equations}) shall +not be used in an algorithm section. -Equation equality \lstinline!=! or any other kind of equation (see \cref{equations}) shall not be used in an algorithm section. +\subsection{Initial Algorithm Sections}\doublelabel{initial-algorithm-sections} -\subsection{Initial Algorithm Sections}\label{initial-algorithm-sections} - -See \cref{initialization-initial-equation-and-initial-algorithm} for a description of both initial algorithm sections and +See \autoref{initialization-initial-equation-and-initial-algorithm} for a description of both initial algorithm sections and initial equation sections. -\subsection{Execution of an algorithm in a model}\label{execution-of-an-algorithm-in-a-model} +\subsection{Execution of an algorithm in a model}\doublelabel{execution-of-an-algorithm-in-a-model} An algorithm section is conceptually a code fragment that remains together and the statements of an algorithm section are executed in the @@ -37,18 +33,20 @@ \subsection{Execution of an algorithm in a model}\label{execution-of-an-algorith \lstinline!:=! are initialized (at least conceptually): \begin{itemize} \item - A continuous-time variable is initialized with the value of its \lstinline!start!-attribute. -\item - A discrete-time variable \lstinline!v! is initialized with \lstinline!pre(v)!. + A non-discrete variable is initialized with its start value (i.e. the + value of the start-attribute). \item - If at least one element of an array appears on the left hand side of the assignment operator, then the complete array is initialized in this algorithm section. + A discrete variable v is initialized with \textbf{pre}(v). \item - A parameter assigned in an initial algorithm, \cref{initialization-initial-equation-and-initial-algorithm}, is initialized with the value of its \lstinline!start!-attribute. + If at least one element of an array appears on the left hand side of + the assignment operator, then the complete array is initialized in + this algorithm section. \end{itemize} \begin{nonnormative} Initialization is performed, in order that an algorithm section -cannot introduce a ``memory'' (except in the case of discrete-time variables assigned in the algorithm), which could invalidate the assumptions of a +cannot introduce a ``memory'' (except in the case of discrete states which +are explicitly given), which could invalidate the assumptions of a numerical integration algorithm. Note, a Modelica tool may change the evaluation of an algorithm section, provided the result is identical to the case, as if the above conceptual processing is performed. @@ -71,16 +69,13 @@ \subsection{Execution of an algorithm in a model}\label{execution-of-an-algorith x[2] := 2; end Test; \end{lstlisting} - -The conceptual part indicate that if the variable is assigned unconditionally in the algorithm before it is used the initialization can be omitted. -This is usually the case, except for algorithms with \lstinline!when!-statements, and especially for initial algorithms. \end{nonnormative} -\subsection{Execution of the algorithm in a function}\label{execution-of-the-algorithm-in-a-function} +\subsection{Execution of the algorithm in a function}\doublelabel{execution-of-the-algorithm-in-a-function} -See \crefnameref{initialization-and-binding-equations-of-components-in-functions}. +See \autonameref{initialization-and-binding-equations-of-components-in-functions}. -\section{Statements}\label{statements} +\section{Statements}\doublelabel{statements} Statements are imperative constructs allowed in algorithm sections. A flattened statement is identical to the corresponding nonflattened @@ -90,11 +85,13 @@ \section{Statements}\label{statements} \begin{itemize} \item If the name occurs inside an expression: it is first found among the - lexically enclosing reduction functions (see \cref{reduction-functions-and-operators}) in order + lexically enclosing reduction functions (see \autoref{reduction-functions-and-operators}) in order starting from the inner-most, and if not found it proceeds as if it were outside an expression: \item - Names in a statement are first found among the lexically enclosing \lstinline!for!-statements in order starting from the inner-most, and if not found: + Names in a statement are first found among the lexically enclosing + for-statements in order starting from the inner-most, and if not + found: \item Names in a statement shall be found by looking up in the partially flattened enclosing class of the algorithm section. @@ -114,26 +111,24 @@ \section{Statements}\label{statements} comment \end{lstlisting} -\subsection{Simple Assignment Statements}\label{simple-assignment-statements} +\subsection{Simple Assignment Statements}\doublelabel{simple-assignment-statements} -The syntax of \firstuse{simple assignment statement}\index{assignment statement!simple} is as follows: +The syntax of simple assignment statement is as follows: \begin{lstlisting}[language=grammar] component-reference ":=" expression \end{lstlisting} -The \lstinline[language=grammar]!expression! is evaluated. -The resulting value is stored into the variable denoted by \lstinline[language=grammar]!component-reference!. - -The \lstinline!expression! must not have higher variability than the assigned component, see \cref{variability-of-expressions}. +The \lstinline!expression! is evaluated. The resulting value is stored into the +variable denoted by \lstinline!component-reference!. -Assignment to array variables with subscripts is described in \cref{array-indexing}. +\subsubsection{Assignments from Called Functions with Multiple Results}\doublelabel{assignments-from-called-functions-with-multiple-results} - -\subsubsection{Assignments from Called Functions with Multiple Results}\label{assignments-from-called-functions-with-multiple-results} - -There is a special form of assignment statement that is used only when the right-hand side contains a call to a function with multiple results. -The left-hand side contains a parenthesized, comma-separated list of variables receiving the results from the function call. -A function with $n$ results needs $m \leq n$ receiving variables on the left-hand side, and the variables are assigned from left to right. +There is a special form of assignment statement that is used only when +the right-hand side contains a call to a function with multiple results. +The left-hand side contains a parenthesized, comma-separated list of +variables receiving the results from the function call. A function with +\emph{n} results needs \emph{m\textless{}=n} receiving variables on the +left-hand side, and the variables are assigned from left to right. \begin{lstlisting}[language=modelica] (out1, out2, out3) := function_name(in1, in2, in3, in4); @@ -141,18 +136,20 @@ \subsubsection{Assignments from Called Functions with Multiple Results}\label{as It is possible to omit receiving variables from this list: \begin{lstlisting}[language=modelica] -(out1, , out3) := function_name(in1, in2, in3, in4); +(out1,, out3) := function_name(in1, in2, in3, in4); \end{lstlisting} \begin{example} The function \lstinline!f! called below has three results and two inputs: \begin{lstlisting}[language=modelica] -(a, b, c) := f(1.0, 2.0); -(x[1], x[2], x[1]) := f(3, 4); + (a, b, c) := f(1.0, 2.0); + (x[1], x[2], x[1]) := f(3,4); \end{lstlisting} -In the second example above \lstinline!x[1]! is assigned twice: first with the first output, and then with the third output. For that case the following will give the same result: +In the second example above \lstinline!x[1]! is assigned twice -- first +with the first output and then with the third output. For that case the +following will give the same result: \begin{lstlisting}[language=modelica] -(, x[2], x[1]) := f(3,4); + (, x[2], x[1]) := f(3,4); \end{lstlisting} \end{example} @@ -163,24 +160,24 @@ \subsubsection{Assignments from Called Functions with Multiple Results}\label{as \end{lstlisting} \begin{nonnormative} -Also see \cref{simple-equality-equations} regarding calling functions with +Also see \autoref{simple-equality-equations} regarding calling functions with multiple results within equations. \end{nonnormative} -\subsubsection{Restrictions on assigned variables}\label{restrictions-on-assigned-variables} - -Only components of the specialized classes \lstinline!type!, \lstinline!record!, \lstinline!operator record!, and \lstinline!connector! may appear as left-hand-side in algorithms. +\subsubsection{Restrictions on assigned variables}\doublelabel{restrictions-on-assigned-variables} +Only components of the restricted classes type, record, operator record, and connector may appear as left-hand-side in algorithms. This applies both to simple assignment statements, and the parenthesized, comma-separated list of variables for functions with multiple results. -\subsection{For-statement}\label{for-statement} +\subsection{For-statement}\doublelabel{for-statement} -The syntax of a \lstinline!for!-statement\index{for@\robustinline{for}!statement}\index{loop@\robustinline{loop}!for-statement@\robustinline{for}-statement} is as follows: +The syntax of a for-statement is as follows: \begin{lstlisting}[language=grammar] for for-indices loop { statement ";" } end for \end{lstlisting} -A \lstinline!for!-statement may optionally use several iterators (\lstinline!for-indices!), see \cref{nested-for-loops-and-reduction-expressions-with-multiple-iterators} for more information: +For-statements may optionally use several iterators (\lstinline!for-indices!), see +\autoref{nested-for-loops-and-reduction-expressions-with-multiple-iterators} for more information: \begin{lstlisting}[language=grammar] for-indices: for-index {"," for-index} @@ -188,131 +185,149 @@ \subsection{For-statement}\label{for-statement} for-index: IDENT [ in expression ] \end{lstlisting} -The following is an example of a prefix of a \lstinline!for!-statement: +The following is an example of a prefix of a for-statement: \begin{lstlisting}[language=modelica] for IDENT in expression loop \end{lstlisting} -The rules for \lstinline!for!-statements are the same as for \lstinline!for!-expressions in \cref{explicit-iteration-ranges-of-for-equations} -- except that the \lstinline!expression! of a \lstinline!for!-statement is not restricted to a parameter-expression. +The rules for for-statements are the same as for for-expressions in \autoref{explicit-iteration-ranges-of-for-equations} - +except that the \lstinline!expression! of a for-statement is not restricted to a parameter-expression. \begin{example} \begin{lstlisting}[language=modelica] -for i in 1 : 10 loop // i takes the values 1, 2, 3, $\ldots$, 10 +for i in 1:10 loop // i takes the values 1,2,3,...,10 for r in 1.0 : 1.5 : 5.5 loop // r takes the values 1.0, 2.5, 4.0, 5.5 -for i in {1, 3, 6, 7} loop // i takes the values 1, 3, 6, 7 +for i in {1,3,6,7} loop // i takes the values 1, 3, 6, 7 for i in TwoEnums loop // i takes the values TwoEnums.one, TwoEnums.two - // for TwoEnums = enumeration(one, two) + // for TwoEnums = enumeration(one,two) \end{lstlisting} -The loop-variable may hide other variables as in the following example. Using another name for the loop-variable is, however, strongly recommended. +The loop-variable may hide other variables as in the following +example. Using another name for the loop-variable is, however, strongly +recommended. \begin{lstlisting}[language=modelica] - constant Integer j = 4; + constant Integer j=4; Real x[j]; equation - for j in 1:j loop // The loop-variable j takes the values 1, 2, 3, 4 - x[j] = j; // Uses the loop-variable j + for j in 1:j loop // The loop-variable j takes the values 1,2,3,4 + x[j]=j; // Uses the loop-variable j end for; \end{lstlisting} \end{example} -\subsubsection{Implicit Iteration Ranges}\label{implicit-iteration-ranges} - -An iterator \lstinline!IDENT in range-expr! without the \lstinline!in range-expr! requires that the \lstinline!IDENT! appears as the subscript of one or several subscripted expressions, where the expressions are not part of an array in a component of an expandable connector. -The dimension size of the array expression in the indexed position is used to deduce the \lstinline!range-expr! as \lstinline!1:size(array-expression,indexpos)! if the indices are a subtype of \lstinline!Integer!, or as \lstinline!E.e1:E.en! if the indices are of an enumeration type \lstinline!E = enumeration(e1, $\ldots$, en)!, or as \lstinline!false:true! if the indices are of type \lstinline!Boolean!. -If it is used to subscript several expressions, their ranges must be identical. -The \lstinline!IDENT! may also, inside a reduction expression, array constructor expression, \lstinline!for!-statement, or \lstinline!for!-equation, occur freely outside of subscript positions, but only as a reference to the variable \lstinline!IDENT!, and not for deducing ranges. - -The \lstinline!IDENT! may also be used as a subscript for an array in a component of an expandable connector -but it is only seen as a reference to the variable \lstinline!IDENT! and cannot be used for deducing ranges. +\subsubsection{Implicit Iteration Ranges}\doublelabel{implicit-iteration-ranges} + +An iterator \lstinline!IDENT in range-expr! without the \lstinline!in range-expr! requires that +the \lstinline!IDENT! appears as the subscript of one or several subscripted +expressions. The dimension size of the array expression in the indexed +position is used to deduce the \lstinline!range-expr! as +\lstinline!1:size(array-expression,indexpos)! if the indices are a subtype of +Integer, or as \lstinline!E.e1:E.en! if the indices are of an enumeration type +\lstinline!E=enumeration(e1, ..., en)!, or as \lstinline!false:true! if the indices are of +type Boolean. If it is used to subscript several expressions, their +ranges must be identical. The \lstinline!IDENT! may also, inside a +reduction-expression, array constructor expression, for-statement, or +for-equation, occur freely outside of subscript positions, but only as a +reference to the variable \lstinline!IDENT!, and not for deducing ranges. \begin{example} \begin{lstlisting}[language=modelica] Real x[4]; - Real xsquared[:] = {x[i] * x[i] for i}; - // Same as: {x[i] * x[i] for i in 1 : size(x, 1)} - Real xsquared2[size(x, 1)]; - Real xsquared3[size(x, 1)]; + Real xsquared[:]={x[i]*x[i] for i}; + // Same as: {x[i]*x[i] for i in 1:size(x,1)} + Real xsquared2[size(x,1)]; + Real xsquared3[size(x,1)]; equation - for i loop // Same as: for i in 1 : size(x, 1) loop $\ldots$ - xsquared2[i] = x[i]^2; + for i loop // Same as: for i in 1:size(x,1) loop ... + xsquared2[i]=x[i]^2; end for; algorithm - for i loop // Same as: for i in 1 : size(x, 1) loop $\ldots$ + for i loop // Same as: for i in 1:size(x,1) loop ... xsquared3[i] := x[i]^2; end for; \end{lstlisting} \begin{lstlisting}[language=modelica] -type FourEnums = enumeration(one, two, three, four); -Real xe[FourEnums] = x; -Real xsquared3[FourEnums] = {xe[i] * xe[i] for i}; -Real xsquared4[FourEnums] = {xe[i] * xe[i] for i in FourEnums}; -Real xsquared5[FourEnums] = {x[i] * x[i] for i}; +type FourEnums=enumeration(one,two,three,four); + Real xe[FourEnums]= x; + Real xsquared3[FourEnums]={xe[i]*xe[i] for i}; + Real xsquared4[FourEnums]={xe[i]*xe[i] for i in FourEnums}; + Real xsquared5[FourEnums]={x[i]*x[i] for i}; \end{lstlisting} \end{example} -The size of an array -- the iteration range -- is evaluated on entry to the \lstinline!for!-loop and the array size shall not change during the execution of the \lstinline!for!-loop. +The size of an array -- the iteration range is evaluated on entry to the +for-loop and the array size may not change during the execution of the +for-loop. -\subsubsection{Types as Iteration Ranges}\label{types-as-iteration-ranges} +\subsubsection{Types as Iteration Ranges }\doublelabel{types-as-iteration-ranges} -The iteration range can be specified as \lstinline!Boolean! or as an enumeration type. -This means iteration over the type from min to max, i.e.\ for \lstinline!Boolean! it is the same as \lstinline!false:true! and for an enumeration \lstinline!E! it is the same as \lstinline!E.min:E.max!. -This can be used for \lstinline!for!-loops and reduction expressions. +The iteration range can be specified as \lstinline!Boolean! or as an enumeration +type. This means iteration over the type from min to max, i.e. for +Boolean it is the same as \lstinline!false:true! and for an enumeration E it is the +same as E.min:E.max. This can be used for \lstinline!for! loops and reduction +expressions. \begin{example} \begin{lstlisting}[language=modelica] - type FourEnums = enumeration(one, two, three, four); + type FourEnums=enumeration(one,two,three,four); Real xe[FourEnums]; Real xsquared1[FourEnums]; - Real xsquared2[FourEnums] = {xe[i] * xe[i] for i in FourEnums}; + Real xsquared2[FourEnums]={xe[i]*xe[i] for i in FourEnums}; equation for i in FourEnums loop - xsquared1[i] = xe[i]^2; + xsquared1[i]=xe[i]^2; end for; \end{lstlisting} \end{example} -\subsubsection{Nested For-Loops and Reduction Expressions with Multiple Iterators}\label{nested-for-loops-and-reduction-expressions-with-multiple-iterators} +\subsubsection{Nested For-Loops and Reduction Expressions with Multiple Iterators}\doublelabel{nested-for-loops-and-reduction-expressions-with-multiple-iterators} -The notation with several iterators is a shorthand notation for nested \lstinline!for!-statements or \lstinline!for!-equations (or reduction expressions). -For \lstinline!for!-statements or \lstinline!for!-equations it can be expanded into the usual form by replacing each `\lstinline!,!' by ``\lstinline!loop for!'' and adding extra ``\lstinline!end for!''. -For reduction expressions it can be expanded into the usual form by replacing each `\lstinline!,!' by ``\lstinline!) for!'' and prepending the reduction expression with ``\lstinline!functionName(!''. +The notation with several iterators is a shorthand notation for nested +for-statements or for-equations (or reduction-expressions). For +for-statements or for-equations it can be expanded into the usual form +by replacing each `\lstinline!,!' by ``\lstinline!loop for!'' and adding extra ``\lstinline!end for!''. For +reduction-expressions it can be expanded into the usual form by +replacing each `\lstinline!,!' by ``\lstinline!) for!'' and prepending the reduction-expression +with ``\lstinline!functionName(!''. \begin{example} \begin{lstlisting}[language=modelica] Real x[4,3]; algorithm for j, i in 1:2 loop - // The loop variable j takes the values 1, 2, 3, 4 (due to use) - // The loop variable i takes the values 1, 2 (given range) + // The loop-variable j takes the values 1,2,3,4 (due to use) + // The loop-variable i takes the values 1,2 (given range) x[j,i] := j+i; end for; \end{lstlisting} \end{example} -\subsection{While-Statement}\label{while-statement} +\subsection{While-Statement}\doublelabel{while-statement} -The \lstinline!while!-statement\index{while@\robustinline{while}!statement}\index{loop@\robustinline{loop}!while-statement@\robustinline{while}-statement} has the following syntax: +The while-statement has the following syntax: \begin{lstlisting}[language=grammar] while expression loop { statement ";" } end while \end{lstlisting} -The \lstinline!expression! of a \lstinline!while!-statement shall be a scalar \lstinline!Boolean! expression. -The \lstinline!while!-statement corresponds to while-statements in programming languages, and is formally defined as follows: +The \lstinline!expression! of a while-statement shall be a scalar Boolean +expression. The while-statement corresponds to while-statements in +programming languages, and is formally defined as follows: \begin{enumerate} -\item - \label{while-execution-top} - The \lstinline!expression! of the \lstinline!while!-statement is evaluated. -\item - If the \lstinline!expression! of the \lstinline!while!-statement is false, the execution continues after the \lstinline!while!-statement. -\item - If the \lstinline!expression! of the \lstinline!while!-statement is true, the entire body of the \lstinline!while!-statement is executed (except if a \lstinline!break!-statement, see \cref{break-statement}, or a \lstinline!return!-statement, see \cref{return-statements}, is executed), and then execution proceeds at step~\ref{while-execution-top}. +\item The \lstinline!expression! of the while-statement is evaluated. +\item If the \lstinline!expression! of the while-statement is false, the execution +continues after the while-statement. +\item If the \lstinline!expression! of the while-statement is true, the entire body of +the while-statement is executed (except if a break-statement, see +\autoref{break-statement}, or a return-statement, see \autoref{return-statements}, is executed), +and then execution proceeds at step 1. \end{enumerate} -\subsection{Break-Statement}\label{break-statement} +\subsection{Break-Statement}\doublelabel{break-statement} -The \lstinline!break!-statement\index{break@\robustinline{break}} breaks the execution of the innermost \lstinline!while!- or \lstinline!for!-loop enclosing the \lstinline!break!-statement and continues execution after the \lstinline!while!- or \lstinline!for!-loop. -It can only be used in a \lstinline!while!- or \lstinline!for!-loop in an algorithm section. -It has the following syntax: +The break-statement breaks the execution of the innermost while or +for-loop enclosing the break-statement and continues execution after the +while- or for-loop. It can only be used in a while- or for-loop in an +algorithm section. It has the following syntax: \begin{lstlisting}[language=modelica] break; \end{lstlisting} @@ -325,30 +340,30 @@ \subsection{Break-Statement}\label{break-statement} input Integer val; output Integer index; algorithm - index := size(x, 1); + index := size(x,1); while index >= 1 loop - if x[index] == val then + if x[index]== val then break; - else - index := index - 1; + else + index := index -- 1; end if; end while; end findValue; \end{lstlisting} \end{example} -\subsection{Return-Statements}\label{return-statements} +\subsection{Return-Statements}\doublelabel{return-statements} -Can only be used inside functions, see \cref{function-return-statements}. +Can only be used inside functions, see \autoref{function-return-statements}. -\subsection{If-Statement}\label{if-statement} +\subsection{If-Statement}\doublelabel{if-statement} -The \lstinline!if!-statements\index{if@\robustinline{if}!statement}\index{then@\robustinline{then}!if-statement@\robustinline{if}-statement}\index{else@\robustinline{else}!if-statement@\robustinline{if}-statement}\index{elseif@\robustinline{elseif}!if-statement@\robustinline{if}-statement} have the following syntax: +If-statements have the following syntax: \begin{lstlisting}[language=grammar] if expression then { statement ";" } - { elseif expression then - { statement ";" } + { elseif expression then + { statement ";" } } [ else { statement ";" } @@ -356,16 +371,20 @@ \subsection{If-Statement}\label{if-statement} end if; \end{lstlisting} -The \lstinline!expression! of an \lstinline!if!- or \lstinline!elseif!-clause must be scalar \lstinline!Boolean! expression. -One \lstinline!if!-clause, and zero or more \lstinline!elseif!-clauses, and an optional \lstinline!else!-clause together form a list of branches. -One or zero of the bodies of these \lstinline!if!-, \lstinline!elseif!- and \lstinline!else!-clauses is selected, by evaluating the conditions of the \lstinline!if!- and \lstinline!elseif!-clauses sequentially until a condition that evaluates to true is found. -If none of the conditions evaluate to true the body of the \lstinline!else!-clause is selected (if an \lstinline!else!-clause exists, otherwise no body is selected). -In an algorithm section, the selected body is then executed. -The bodies that are not selected have no effect on that model evaluation. +The \lstinline!expression! of an if- or elseif-clause must be scalar Boolean +expression. One if-clause, and zero or more elseif-clauses, and an +optional else-clause together form a list of branches. One or zero of +the bodies of these if-, elseif- and else-clauses is selected, by +evaluating the conditions of the if- and elseif-clauses sequentially +until a condition that evaluates to true is found. If none of the +conditions evaluate to true the body of the else-clause is selected (if +an else-clause exists, otherwise no body is selected). In an algorithm +section, the selected body is then executed. The bodies that are not +selected have no effect on that model evaluation. -\subsection{When-Statements}\label{when-statements} +\subsection{When-Statements}\doublelabel{when-statements} -A \lstinline!when!-statement\index{when@\robustinline{when}!statement}\index{then@\robustinline{then}!when-statement@\robustinline{when}-statement}\index{elsewhen@\robustinline{elsewhen}!when-statement@\robustinline{when}-statement} has the following syntax: +A when-statement has the following syntax: \begin{lstlisting}[language=grammar] when expression then { statement ";" } @@ -373,9 +392,10 @@ \subsection{When-Statements}\label{when-statements} { statement ";" } } end when \end{lstlisting} - -The \lstinline!expression! of a \lstinline!when!-statement shall be a discrete-time \lstinline!Boolean! scalar or vector expression. -The statements within a \lstinline!when!-statement are activated only at the instant when the scalar or any one of the elements of the vector expression becomes true. +The \lstinline!expression! of a when-statement shall be a discrete-time Boolean +scalar or vector expression. The algorithmic statements within a +when-statement are activated when the scalar or any one of the elements +of the vector-expression becomes true. \begin{example} Algorithms are activated when \lstinline!x! becomes \textgreater{} 2: @@ -385,14 +405,19 @@ \subsection{When-Statements}\label{when-statements} y3 := 2*x + y1+y2; end when; \end{lstlisting} -The statements inside the \lstinline!when!-statement are activated on the positive edge of any of the expressions \lstinline!x > 2!, \lstinline!sample(0, 2)!, or \lstinline!x < 5!: +The statements inside the when-statement are activated on the positive edge of any of the expressions +\lstinline!x > 2!, \lstinline!sample(0, 2)!, or \lstinline!x < 5!: \begin{lstlisting}[language=modelica] -when {x > 2, sample(0,2), x < 5} then +when {x > 2, sample(0,2), x < 5} + then y1 := sin(x); y3 := 2*x + y1+y2; end when; \end{lstlisting} -For \lstinline!when!-statements in algorithm sections the order is significant and it is advisable to have only one assignment within the \lstinline!when!-statement and instead use several algorithm sections having \lstinline!when!-statements with identical conditions, e.g.: +For when-statements in algorithm sections the order is significant +and it is advisable to have only one assignment within the +when-statement and instead use several algorithm sections having +when-statements with identical conditions, e.g.: \begin{lstlisting}[language=modelica] algorithm when x > 2 then @@ -402,27 +427,30 @@ \subsection{When-Statements}\label{when-statements} y2 = sin(y1); algorithm when x > 2 then - y3 := 2 * x + y1 + y2; + y3 := 2*x +y1+y2; end when; \end{lstlisting} -Merging the \lstinline!when!-statements can lead to less efficient code and different models with different behavior depending on the order of the assignment to \lstinline!y1! and \lstinline!y3! in the algorithm. +Merging the when-statements can lead to less efficient code and +different models with different behavior depending on the order of the +assignment to \lstinline!y1! and \lstinline!y3! in the algorithm. \end{example} -\subsubsection{Restrictions on Where a When-statement may occur}\label{restrictions-on-where-a-when-statement-may-occur} +\subsubsection{Restrictions on When-Statements}\doublelabel{restrictions-on-when-statements} \begin{itemize} \item - A \lstinline!when!-statement shall not be used within a function. + A when-statement shall not be used within a function. \item - A \lstinline!when!-statement shall not occur inside an initial algorithm. + When-statements may not occur inside initial algorithms. \item - A \lstinline!when!-statement cannot be nested inside another \lstinline!when!-statement. + When-statements cannot be nested. \item - \lstinline!when!-statements shall not occur inside \lstinline!while!-loops, \lstinline!for!-loops, or \lstinline!if!-statements in algorithms. + When-statements may not occur inside while, if, and for-clauses in + algorithms. \end{itemize} \begin{example} -The following nested \lstinline!when!-statement is invalid: +The following nested when-statement is invalid: \begin{lstlisting}[language=modelica] when x > 2 then when y1 > 3 then @@ -432,59 +460,52 @@ \subsubsection{Restrictions on Where a When-statement may occur}\label{restricti \end{lstlisting} \end{example} -\subsubsection{Restrictions on Statements within When-Statements}\label{restrictions-on-statements-within-when-statements} - -\begin{nonnormative} -In contrast to \lstinline!when!-equations, \cref{restrictions-on-equations-within-when-equations}, there are no additional restrictions within \lstinline!when!-statements: -\begin{itemize} -\item - In algorithms, all assignment statements are already restricted to left-hand-side variables. -\item - If at least one element of an array appears on the left-hand-side of the assignment operator inside a \lstinline!when!-statement, it is as if the entire array appears in the left-hand-side according to \cref{execution-of-an-algorithm-in-a-model}. - Thus, there is no need to restrict the indices to parameter-expressions. -\item - The \lstinline!for!-loops and \lstinline!if!-statements are not problematic inside \lstinline!when!-statements in algorithms, since all left-hand-side variables inside \lstinline!when!-statements are assigned to their pre-values before the start of the algorithm, according to \cref{execution-of-an-algorithm-in-a-model}. -\end{itemize} -\end{nonnormative} - -\subsubsection{Defining When-Statements by If-Statements}\label{defining-when-statements-by-if-statements} +\subsubsection{Defining When-Statements by If-Statements}\doublelabel{defining-when-statements-by-if-statements} -A \lstinline!when!-statement: +A when-statement: \begin{lstlisting}[language=modelica] algorithm - when {x > 1, $\ldots$, y > p} then - $\ldots$ - elsewhen x > y.start then - $\ldots$ + when {x>1, ..., y>p} then + ... + elsewhen x > y.start then + ... end when; \end{lstlisting} -is similar to the following special \lstinline!if!-statement, where \lstinline!Boolean b1[N];! and \lstinline!Boolean b2;! are necessary because \lstinline!edge! can only be applied to variables +is similar to the following special if-statement, where \lstinline!Boolean b1[N];! and \lstinline!Boolean b2;! are necessary because the \lstinline!edge()! operator can +only be applied to variables + \begin{lstlisting}[language=modelica] - Boolean b1[N](start = {x.start > 1, $\ldots$, y.start > p}); - Boolean b2(start = x.start > y.start); + Boolean b1[N](start={x.start>1, ..., + y.start>p}); + Boolean b2(start=x.start>y.start); algorithm - b1: = {x > 1, $\ldots$, y > p}; - b2: = x > y.start; - if edge(b1[1]) or edge(b1[2]) or $\ldots$ or edge(b1[N]) then - $\ldots$ - elseif edge(b2) then - $\ldots$ + b1:={x>1, ..., y>p}; + b2:=x>y.start; + if edge(b1[1]) or edge(b1[2]) or ... + edge(b1[N]) then + ... + elseif edge(b2) then + ... end if; \end{lstlisting} -with \lstinline!edge(A) = A and not pre(A)! and the additional guarantee, that the statements within this special \lstinline!if!-statement are only evaluated at event instants. -The difference compared to the when-statements is that e.g.\ \lstinline!pre! may only be used on continuous-time real variables inside the body of a \lstinline!when!-clause and not inside these if-statements. +with \lstinline!edge(A)= A and not pre(A)! and the additional guarantee, that the +statements within this special if-statement are only evaluated at event +instants. The difference compared to the when-statements is that e.g. \lstinline!pre! may only be used on continuous-time real variables inside the body +of a when-clause and not inside these if-statements. -\subsection{Special Statements}\label{special-statements} +\subsection{Special Statements}\doublelabel{special-statements} -These special statements have the same form and semantics as the corresponding equations, apart from the general difference in semantics between equations and statements. +These special statements have the same form and semantics as the +corresponding equations, apart from the general difference in semantics +between equations and statements. -\subsubsection{Assert-Statement}\label{assert-statement} +\subsubsection{Assert Statement}\doublelabel{assert-statement} -See \cref{assert}. -A failed \lstinline!assert!\index{assert@\robustinline{assert}!statement@\robustinline{statement}} stops the execution of the current algorithm. +See \autoref{assert}. A failed assert stops the execution of the current +algorithm. -\subsubsection{Terminate-Statement}\label{terminate-statement} +\subsubsection{Terminate Statement}\doublelabel{terminate-statement} -See \cref{terminate}. -The \lstinline!terminate!\index{terminate@\robustinline{terminate}!statement@\robustinline{statement}}-statement shall not be used in functions. -In an algorithm outside a function it does not stop the execution of the current algorithm. +See \autoref{terminate}. The terminate statement may not be in functions; In +an algorithm outside a function it does not stop the execution of the +current algorithm. diff --git a/chapters/stream.tex b/chapters/stream.tex index c7014c4e9..b7f81eb69 100644 --- a/chapters/stream.tex +++ b/chapters/stream.tex @@ -1,19 +1,41 @@ -\chapter{Stream Connectors}\label{stream-connectors} - -The two basic variable types in a connector -- \emph{potential} (or \emph{across}) variable and \emph{flow} (or \emph{through}) variable -- are not sufficient to describe in a numerically sound way the bi-directional flow of matter with convective transport of specific quantities, such as specific enthalpy and chemical composition. The values of these specific quantities are determined from the upstream side of the flow, i.e., they depend on the flow direction. When using across and through variables, the corresponding models would include nonlinear systems of equations with \lstinline!Boolean! unknowns for the flow directions and singularities around zero flow. Such equation systems cannot be solved reliably in general. The model formulations can be simplified when formulating two different balance equations for the two possible flow directions. This is not possible with across and through variables though. - -This fundamental problem is addressed in Modelica by introducing a third type of connector variable, called \willintroduce{stream variable}, declared with the prefix \lstinline!stream!. -A stream variable describes a quantity that is carried by a flow variable, i.e., a purely convective transport phenomenon. -The value of the stream variable is the specific property inside the component close to the boundary, assuming that matter flows out of the component into the connection point. -In other words, it is the value the carried quantity would have if the fluid was flowing out of the connector, irrespective of the actual flow direction. +\chapter{Stream Connectors}\doublelabel{stream-connectors} + +%TODO-FORMAT This chapter uses _ in code blocks and inline code. +%This is no real Modelica code, but indicates a mathematical index. +%We currently use \texttt{m\textsubscript j} instead of \lstinline!m_j! + +The two basic variable types in a connector -- \emph{potential} (or \emph{across}) +variable and \emph{flow} (or \emph{through}) variable -- are not sufficient to +describe in a numerically sound way the bi-directional flow of matter +with convective transport of specific quantities, such as specific +enthalpy and chemical composition. The values of these specific +quantities are determined from the upstream side of the flow, i.e., they +depend on the flow direction. When using across and through variables, +the corresponding models would include nonlinear systems of equations +with Boolean unknowns for the flow directions and singularities around +zero flow. Such equation systems cannot be solved reliably in general. +The model formulations can be simplified when formulating two different +balance equations for the two possible flow directions. This is not +possible with across and through variables though. + +This fundamental problem is addressed in Modelica by introducing a third +type of connector variable, called stream variable, declared with the +prefix \lstinline!stream!. A stream variable describes a quantity that is +carried by a flow variable, i.e., a purely convective transport +phenomenon. The value of the stream variable is the specific property +inside the component close to the boundary, assuming that matter flows +out of the component into the connection point. In other words, it is +the value the carried quantity would have if the fluid was flowing out +of the connector, irrespective of the actual flow direction. The rationale of the definition and typical use cases are described in -\cref{derivation-of-stream-equations}. +\autoref{derivation-of-stream-equations}. -\section{Definition of Stream Connectors}\label{definition-of-stream-connectors} +\section{Definition of Stream Connectors}\doublelabel{definition-of-stream-connectors} -If at least one variable in a connector has the \lstinline!stream!\indexinline{stream} prefix, the connector is called \firstuse{stream connector}\index{stream!connector} and the corresponding variable is called \firstuse{stream variable}\index{stream!variable}. -The following definitions hold: +If at least one variable in a connector has the \lstinline!stream! prefix, +the connector is called \firstuse{stream connector} and the corresponding +variable is called \firstuse{stream variable}. The following definitions hold: \begin{itemize} \item The \lstinline!stream! prefix can only be used in a connector @@ -24,13 +46,19 @@ \section{Definition of Stream Connectors}\label{definition-of-stream-connectors} The idea is that all stream variables of a connector are associated with this flow variable. \end{nonnormative} \item - For every outside connector (see \cref{inside-and-outside-connectors}), one equation is generated for every variable with the \lstinline!stream! prefix (to describe the propagation of the stream variable along a model hierarchy). - For the exact definition, see the end of \cref{stream-operator-instream-and-connection-equations}. + For every outside connector (see \autoref{inside-and-outside-connectors}), one + equation is generated for every variable with the \lstinline!stream! + prefix (to describe the propagation of the stream variable + along a model hierarchy). For the exact definition, see the end of + \autoref{stream-operator-instream-and-connection-equations}. \item - For inside connectors (see \cref{inside-and-outside-connectors}), variables with the \lstinline!stream! prefix do not lead to connection equations. + For inside connectors (see \autoref{inside-and-outside-connectors}), variables + with the \lstinline!stream! prefix do not lead to connection equations. \item - Connection equations with stream variables are generated in a model when using \lstinline!inStream! or \lstinline!actualStream!, - see \cref{stream-operator-instream-and-connection-equations} and \cref{stream-operator-actualstream}. + Connection equations with stream variables are generated in a model + when using the \lstinline!inStream()! operator or the + \lstinline!actualStream()! operator, see \autoref{stream-operator-instream-and-connection-equations} + and \autoref{stream-operator-actualstream}. \end{itemize} \begin{example} @@ -52,159 +80,170 @@ \section{Definition of Stream Connectors}\label{definition-of-stream-connectors} \lstinline!X_outflow! are the stream properties inside the component close to the boundary, when fluid flows out of the component into the connection point. The stream properties for the other flow direction can be -inquired with the built-in \lstinline!inStream!. The value of +inquired with the built-in operator \lstinline!inStream()!. The value of the stream variable corresponding to the actual flow direction can be -inquired through the built-in \lstinline!actualStream!, see -\cref{stream-operator-actualstream}. +inquired through the built-in operator \lstinline!actualStream()!, see +\autoref{stream-operator-actualstream}. \end{example} -\section{Stream Operator inStream and Connection Equations}\label{stream-operator-instream-and-connection-equations} +\section{Stream Operator inStream and Connection Equations}\doublelabel{stream-operator-instream-and-connection-equations} -In combination with the stream variables of a connector, \lstinline!inStream! is designed to describe in a numerically +In combination with the stream variables of a connector, the +\lstinline!inStream()! operator is designed to describe in a numerically reliable way the bi-directional transport of specific quantities carried by a flow of matter. -\lstinline!inStream(v)! is only allowed on stream variables \lstinline!v! and is informally the value the stream variable has, assuming that the flow is from the connection point into the component. -This value is computed from the \firstuse{stream connection equations}\index{stream connection equations}\index{connection equations!stream} of the flow variables and of the stream variables. +\lstinline!inStream(v)! is only allowed on stream variables \lstinline!v! and is +informally the value the stream variable has, assuming that the flow is +from the connection point into the component. This value is computed +from the stream connection equations of the flow variables and of the +stream variables. -For the following definition it is assumed that $N$ inside connectors -\lstinline!$m_{j}$.c! ($j = 1, 2, \ldots, N$) and $M$ outside connectors -\lstinline!$c_{k}$! ($k = 1, 2, \ldots, M$) belonging to the same connection set -(see definition in \cref{inside-and-outside-connectors}) are connected +For the following definition it is assumed that \lstinline!N! inside connectors +\texttt{m\textsubscript{j}.c} (j=1,2,...,N) and \lstinline!M! outside connectors +\texttt{c\textsubscript{k}} (k=1,2,...,M) belonging to the same connection set +(see definition in \autoref{inside-and-outside-connectors}) are connected together and a stream variable \lstinline!h_outflow! is associated with a flow variable \lstinline!m_flow! in connector \lstinline!c!. -\begin{lstlisting}[language=modelica] +\begin{lstlisting}[language=modelica,mathescape=true] connector FluidPort - $\ldots$ + ... flow Real m_flow "Flow of matter; m_flow > 0 if flow into component"; stream Real h_outflow "Specific variable in component if m_flow < 0" end FluidPort model FluidSystem - $\ldots$ - FluidComponent $m_1$, $m_2$, $\ldots$, $m_N$; - FluidPort $c_1$, $c_2$, $\ldots$, $c_M$; + ... + FluidComponent $m_1$, $m_2$, ..., $m_N$; + FluidPort $c_1$, $c_2$, ..., $c_M$; equation connect($m_1$.c, $m_2$.c); connect($m_1$.c, $m_3$.c); - $\ldots$ + ... connect($m_1$.c, $m_N$.c); connect($m_1$.c, $c_1$); connect($m_1$.c, $c_2$); - $\ldots$ + ... connect($m_1$.c, $c_M$); - $\ldots$ + ... end FluidSystem; \end{lstlisting} \begin{figure}[H] - \begin{center} - \includegraphics{fluidsystem} - \end{center} - \caption{Examplary \lstinline!FluidSystem! with $N = 3$ and $M = 2$.} +\caption{Examplary FluidSystem with N=3 and M=2} +\begin{center} +\includegraphics[width=2.3in,height=2.08125in]{fluidsystem} +\end{center} \end{figure} \begin{nonnormative} -The connection set represents an infinitesimally small control volume, for which the stream connection equations are equivalent to the conservation equations for mass and energy. +The connection set represents an infinitesimally small control +volume, for which the stream connection equations are equivalent to the +conservation equations for mass and energy. \end{nonnormative} With these prerequisites, the semantics of the expression -\lstinline!inStream($m_{i}$.c.h_outflow)! is given implicitly by -defining an additional variable $\mathit{h\_mix\_in}_{i}$, and by +\texttt{inStream(m\textsubscript i.c.h\_outflow)} is given implicitly by +defining an additional variable \texttt{h\_mix\_in\textsubscript{i}}, and by adding to the model the conservation equations for mass and energy corresponding to the infinitesimally small volume spanning the connection set. The connection equation for the flow variables has already been added to the system according to the connection semantics -of flow variables defined in \cref{generation-of-connection-equations}. +of flow variables defined in \autoref{generation-of-connection-equations}. -\begin{lstlisting}[language=modelica] +\begin{lstlisting}[language=modelica,mathescape=true] // Standard connection equation for flow variables -0 = sum($m_{j}$.c.m_flow for j in 1:N) + sum(-$c_{k}$.m_flow for k in 1:M); +0 = sum(m_j.c.m_flow for j in 1:N) + sum(-ck.m_flow for k in 1:M); \end{lstlisting} -Whenever \lstinline!inStream! is applied to a stream variable of an inside connector, the balance equation of the transported -property must be added under the assumption of flow going into the connector +Whenever the \lstinline!inStream()! operator is applied to a stream +variable of an inside connector, the balance equation of the transported +property must be added under the assumption of flow going into the +connector \begin{lstlisting}[language=modelica] -// Implicit definition of inStream applied to inside connector $i$ -0 = - sum($m_{j}$.c.m_flow * - (if $m_{j}$.c.m_flow > 0 or $j$==$i$ then $\mathit{h\_mix\_in}_{i}$ else $m_{j}$.c.h_outflow) - for $j$ in 1:N) + - sum(-$c_{k}$.m_flow * - (if -$c_{k}$.m_flow > 0 then $\mathit{h\_mix\_in}_{i}$ else inStream($c_{k}$.h_outflow) - for $k$ in 1:M); -inStream($m_{i}$.c.h_outflow) = $\mathit{h\_mix\_in}_{i}$; +// Implicit definition of the inStream() operator applied to inside connector i +0 = sum(mj.c.m_flow*(if mj.c.m_flow > 0 or j==i then h_mix_ini else mj.c.h_outflow) + for j in 1:N) + + sum(-ck.m_flow* (if -ck.m_flow > 0 then h_mix_ini else inStream(ck.h_outflow) + for k in 1:M); +inStream(mi.c.h_outflow) = h_mix_ini; \end{lstlisting} -Note that the result of -\lstinline!inStream($m_{i}$.c.h_outflow)! is different -for each port $i$, because the assumption of flow entering the port is +Note that the result of the +\texttt{inStream(m\textsubscript{i}.c.h\_outflow)} operator is different +for each port \lstinline!i!, because the assumption of flow entering the port is different for each of them. Additional equations need to be generated for the stream variables of outside connectors. -\begin{lstlisting}[language=modelica] +\begin{lstlisting}[language=modelica,mathescape=true] // Additional connection equations for outside connectors for q in 1:M loop - 0 = - sum($m_j$.c.m_flow * - (if $m_j$.c.m_flow > 0 then $\mathit{h\_mix\_out}_{q}$ else $m_j$.c.h_outflow) - for j in 1:N) + - sum(-$c_k$.m_flow * - (if -$c_k$.m_flow > 0 or k==q then $\mathit{h\_mix\_out}_{q}$ else inStream($c_k$.h_outflow)) - for k in 1:M); - $c_q$.h_outflow = $\mathit{h\_mix\_out}_{q}$; -end for; + 0 = sum($m_j$.c.m_flow*(if + $m_j$.c.m_flow > 0 then + h_mix_out_q + else $m_j$.c.h_outflow) for j + in 1:N) + + sum(-$c_k$.m_flow* (if + -$c_k$.m_flow > 0 or k==q + then h_mix_out$_q$ + else inStream($c_k$.h_outflow) + for k in 1:M); + $c_q$.h_outflow = h_mix_out$_q$; + end for; \end{lstlisting} Neglecting zero flow conditions, the solution of the above-defined -stream connection equations for \lstinline!inStream! values of inside connectors and +stream connection equations for inStream values of inside connectors and outflow stream variables of outside connectors is (for a derivation, see -\cref{derivation-of-stream-equations}): -\begin{lstlisting}[language=modelica] +\autoref{derivation-of-stream-equations}): +\begin{lstlisting}[language=modelica,mathescape=true] inStream($m_i$.c.h_outflow) := - (sum(max(-$m_j$.c.m_flow,0)*$m_j$.c.h_outflow for j in cat(1, 1:i-1, i+1:N) + - sum(max( $c_k$.m_flow,0)*inStream($c_k$.h_outflow) for k in 1:M)) - / - (sum(max(-$m_j$.c.m_flow,0) for j in cat(1, 1:i-1, i+1:N) + + (sum(max(-$m_j$.c.m_flow,0)*$m_j$.c.h_outflow for j in cat(1,1:i-1, i+1:N) + + sum(max( $c_k$.m_flow,0)*inStream($c_k$.h_outflow) for k in 1:M))/ + (sum(max(-$m_j$.c.m_flow,0) for j in cat(1,1:i-1, i+1:N) + sum(max( $c_k$.m_flow ,0) for k in 1:M)); // Additional equations to be generated for outside connectors q for q in 1:M loop $c_q$.h_outflow := (sum(max(-$m_j$.c.m_flow,0)*$m_j$.c.h_outflow for j in 1:N) + - sum(max( $c_k$.m_flow,0)*inStream($c_k$.h_outflow) for k in cat(1, 1:q-1, q+1:M)) - / - (sum(max(-$m_j$.c.m_flow,0) for j in 1:N) + - sum(max( $c_k$.m_flow ,0) for k in cat(1, 1:q-1, q+1:M))); + sum(max( $c_k$.m_flow,0)*inStream($c_k$.h_outflow) for k in cat(1,1:q-1, q+1:M))/ + (sum(max(-$m_j$.c.m_flow,0) for j in 1:N) + + sum(max( $c_k$.m_flow ,0) for k in cat(1,1:q-1, q+1:M))); end for; \end{lstlisting} \begin{nonnormative} -Note, that \lstinline!inStream($c_{k}$.h_outflow)! is computed from the connection set that is present one hierarchical level above. At this higher level -\lstinline!$c_{k}$.h_outflow! is no longer an outside connector, but an inside connector and then the formula from above for inside connectors can be used +Note, that \lstinline[mathescape=true]!inStream($c_{k}$.h_outflow)! is computed from the connection set that is present one hierarchical level above. At this higher level +\lstinline[mathescape=true]!$c_{k}$.h_outflow! is no longer an outside connector, but an inside connector and then the formula from above for inside connectors can be used to compute it. \end{nonnormative} -If the argument of \lstinline!inStream! is an array, the implicit -equation system holds elementwise, i.e., \lstinline!inStream! is +If the argument of \lstinline!inStream()! is an array, the implicit +equation system holds elementwise, i.e., \lstinline!inStream()! is vectorizable. -The stream connection equations have singularities and/or multiple solutions if one or more of the flow variables become zero. -When all the flows are zero, a singularity is always present, so it is necessary to approximate the solution in an open neighbourhood of that point. +The stream connection equations have singularities and/or multiple +solutions if one or more of the flow variables become zero. When all the +flows are zero, a singularity is always present, so it is necessary to +approximate the solution in an open neighbourhood of that point. \begin{nonnormative} -For example, assume that \lstinline!$m_{j}$.c.m_flow = $c_{k}$.m_flow = 0!, then all equations above are identically fulfilled and \lstinline!inStream! can have any value. +For example, assume that \lstinline[mathescape=true]!$m_{j}$.c.m_flow = $c_{k}$.m_flow = 0!, then all equations above are identically fulfilled and \lstinline!inStream(..)! can have any value. \end{nonnormative} -However, specific optimizations may be applied to avoid the regularization if the flow through one port is zero or non-negative, see \cref{derivation-of-stream-equations}. -It is required that \lstinline!inStream! is appropriately approximated when regularization is needed and the approximation must fulfill the following requirements: +However, specific optimizations may be applied to avoid the regularization if the +flow through one port is zero or non-negative, see \autoref{derivation-of-stream-equations}. It is +required that the \lstinline!inStream()! operator is appropriately +approximated when regularization is needed and the approximation must +fulfill the following requirements: \begin{enumerate} \item - \lstinline!inStream($m_{i}$.c.h_outflow)! and - \lstinline!inStream($c_{k}$.h_outflow)! must be unique with + \lstinline[mathescape=true]!inStream($m_{i}$.c.h_outflow)! and + \lstinline[mathescape=true]!inStream($c_{k}$.h_outflow)! must be unique with respect to all values of the flow and stream variables in the connection set, and must have a continuous dependency on them. \item @@ -212,153 +251,165 @@ \section{Stream Operator inStream and Connection Equations}\label{stream-operato equation system identically (upto the usual numerical accuracy), provided the absolute value of every flow variable in the connection set is greater than a small value - ($\abs{m_{i}\text{\lstinline!.c.m_flow!}} > \text{\lstinline!eps!}$ for $1 \leq i \leq N$ and - $\abs{c_{i}\text{\lstinline!.m_flow!}} > \text{\lstinline!eps!}$ for $1 \leq i \leq M$). + (\texttt{\textbar{}m\textsubscript{1}.c.m\_flow\textbar{} \textgreater{} eps + \textbf{and} \textbar{}m\textsubscript{2}.c.m\_flow\textbar{} + \textgreater{} eps \textbf{and} ... \textbf{and} + \textbar{}c\textsubscript{M}.m\_flow\textbar{} \textgreater{} eps}). \end{enumerate} \begin{nonnormative} Based on the above requirements, the following implementation is recommended: \begin{itemize} -\item $N = 1,\, M = 0$:\hfill -\begin{lstlisting}[language=modelica] -inStream($m_1$.c.h_outflow) = $m_1$.c.h_outflow; +% This shouldn't be an itemized list, but a list of definitions +% faking that by using raggedright +\raggedright +\item \textbf{N = 1, M = 0:}\newline +\begin{lstlisting}[language=modelica,mathescape=true] +inStream($m_1$.c.h_outflow) =$m_1$.c.h_outflow; \end{lstlisting} -\item $N = 2,\, M = 0$:\hfill -\begin{lstlisting}[language=modelica] -inStream($m_1$.c.h_outflow) = $m_2$.c.h_outflow; -inStream($m_2$.c.h_outflow) = $m_1$.c.h_outflow; +\item +\textbf{N = 2, M = 0:}\newline +\begin{lstlisting}[language=modelica,mathescape=true] +inStream($m_1$.c.h_outflow) =$m_2$.c.h_outflow; +inStream($m_2$.c.h_outflow) =$m_1$.c.h_outflow; \end{lstlisting} -\item $N = 1,\, M = 1$:\hfill -\begin{lstlisting}[language=modelica] -inStream($m_1$.c.h_outflow) = inStream($c_1$.h_outflow); +\item \textbf{N = 1, M = 1:}\newline +\begin{lstlisting}[language=modelica,mathescape=true] +inStream($m_1$.c.h_outflow) =inStream($c_1$.h_outflow); // Additional equation to be generated $c_1$.h_outflow = $m_1$.c.h_outflow; \end{lstlisting} -\item $N = 0,\, M = 2$:\hfill -\begin{lstlisting}[language=modelica] +\item \textbf{N = 0, M = 2:}\newline +\begin{lstlisting}[language=modelica,mathescape=true] // Additional equation to be generated -$c_{1}$.h_outflow = inStream($c_{2}$.h_outflow); -$c_{2}$.h_outflow = inStream($c_{1}$.h_outflow); +c1.h_outflow = inStream(c2.h_outflow); +c2.h_outflow = inStream(c1.h_outflow); \end{lstlisting} -\item All other cases:\hfill -\begin{lstlisting}[language=modelica] + +\item\textbf{All other cases:}\newline +\begin{lstlisting}[language=modelica,mathescape=true] if $m_j$.c.m_flow.min >= 0 for all j = 1:N with j <> i and $c_k$.m_flow.max <= 0 for all k = 1:M then - inStream($m_i$.c.h_outflow) = $m_i$.c.h_outflow; -else - si = sum (max(-$m_j$.c.m_flow,0) for j in cat(1,1:i-1, i+1:N) + - sum(max( $c_k$.m_flow ,0) for k in 1:M); - inStream($m_i$.c.h_outflow) = - (sum(positiveMax(-$m_j$.c.m_flow,$s_i$)*$m_j$.c.h_outflow) - + sum(positiveMax($c_k$.m_flow,s_i)*inStream($c_k$.h_outflow)))/ - (sum(positiveMax(-$m_j$.c.m_flow,s_i)) - + sum(positiveMax($c_k$.m_flow,s_i))) - for j in 1:N and i <> j and $m_j$.c.m_flow.min < 0, - for k in 1:M and $c_k$.m_flow.max > 0 + inStream($m_i$.c.h_outflow) = $m_i$.c.h_outflow; + else + si = sum (max(-$m_j$.c.m_flow,0) for j in cat(1,1:i-1, i+1:N) + + sum(max( $c_k$.m_flow ,0) for k in 1:M); + inStream($m_i$.c.h_outflow) = + (sum(positiveMax(-$m_j$.c.m_flow,$s_i$)*$m_j$.c.h_outflow) + + sum(positiveMax($c_k$.m_flow,s_i)*inStream($c_k$.h_outflow)))/ + (sum(positiveMax(-$m_j$.c.m_flow,s_i)) + + sum(positiveMax($c_k$.m_flow,s_i))) + for j in 1:N and i <> j and $m_j$.c.m_flow.min < 0, + for k in 1:M and $c_k$.m_flow.max > 0 // Additional equations to be generated for q in 1:M loop - if $m_j$.c.m_flow.min >= 0 for all j = 1:N and - $c_k$.m_flow.max <= 0 for all k = 1:M and k <> q - then - $c_q$.h_outflow = 0; - else - $s_q$ = (sum(max(-$m_j$.c.m_flow,0) for j in 1:N) + - sum(max( $c_k$.m_flow ,0) for k in cat(1,1:q-1, q+1:M))); - $c_q$.h_outflow = (sum(positiveMax(-$m_j$.c.m_flow,s_q)*$m_j$.c.h_outflow) + - sum(positiveMax($c_k$.m_flow,$s_q$)* inStream($c_k$.h_outflow)))/ - (sum(positiveMax(-$m_j$.c.m_flow,s_q)) + - sum(positiveMax($c_k$.m_flow,s_q))) - for j in 1:N and $m_j$.c.m_flow.min < 0, - for k in 1:M and k <> q and $c_k$.m_flow.max > 0 + if $m_j$.c.m_flow.min >= 0 for all j = 1:N and + $c_k$.m_flow.max <= 0 for all k = 1:M and k <> q + then + $c_q$.h_outflow = 0; + else + $s_q$ = (sum(max(-$m_j$.c.m_flow,0) for j in 1:N) + + sum(max( $c_k$.m_flow ,0) for k in cat(1,1:q-1, q+1:M))); + $c_q$.h_outflow = (sum(positiveMax(-$m_j$.c.m_flow,s_q)*$m_j$.c.h_outflow) + + sum(positiveMax($c_k$.m_flow,$s_q$)* inStream($c_k$.h_outflow)))/ + (sum(positiveMax(-$m_j$.c.m_flow,s_q)) + + sum(positiveMax($c_k$.m_flow,s_q))) + for j in 1:N and $m_j$.c.m_flow.min < 0, + for k in 1:M and k <> q and $c_k$.m_flow.max > 0 end for; \end{lstlisting} \end{itemize} The operator -\lstinline!positiveMax(-$m_{j}$.c.m_flow, $s_{i}$)! +\texttt{positiveMax(-m\textsubscript{j}.c.m\_flow,s\textsubscript{i})} should be such that: \begin{itemize} \item - \lstinline!positiveMax(-$m_{j}$.c.m_flow, $s_{i}$)! = - \lstinline!-$m_{j}$.c.m_flow! if - $-m_{j}\text{\lstinline!.c.m_flow!} > \mathit{eps1}_{j} \geq 0$, - where $\mathit{eps1}_{j}$ are small flows, compared to typical - problem-specific values, + positiveMax(-m\textsubscript{j}.c.m\_flow,s\textsubscript{i}) = + -m\textsubscript{j}.c\_m\_flow if + -m\textsubscript{j}.c.m\_flow\textgreater{}eps1\textsubscript{j}\textgreater{}=0, + where eps1\textsubscript{j} are small flows, compared to typical + problem-specific value, \item - all denominators should be greater than $\mathit{eps2} > 0$, - where $\mathit{eps2}$ is also a small flow, compared to typical problem-specific + all denominators should be \textgreater{} eps2 \textgreater{} 0, + where eps2 is also a small flow, compared to typical problem-specific values. \end{itemize} -Trivial implementation of \lstinline!positiveMax! guarantees continuity of \lstinline!inStream!: -\begin{lstlisting}[language=modelica] -postiveMax(-$m_j$.c.m_flow, $s_i$) = max(-$m_j$.c.m_flow, $\mathit{eps1}$); // so $s_i$ is not needed +Trivial implementation of positiveMax guarantees continuity of \lstinline!inStream()!: +\begin{lstlisting}[language=modelica,mathescape=true] +postiveMax(-$m_j$.c.m_flow, $s_i$)= max(-m_j.c.m_flow, eps1); // so $s_i$ is not needed \end{lstlisting} More sophisticated implementation, with smooth approximation, applied only when {all} flows are small: -\begin{lstlisting}[language=modelica,escapechar=!] -// Define a "small number" eps (nominal(v) is the nominal value of v, see !\cref{attributes-start-fixed-nominal-and-unbounded}!) -eps := relativeTolerance*min(nominal($m_j$.c.m_flow)); +\begin{lstlisting}[language=modelica,escapechar=!,mathescape=true] +// Define a "small number" eps (!\textbf{nominal}!(v) is the nominal value of v !--! see !\autoref{attributes-start-fixed-nominal-and-unbounded}!) + eps := relativeTolerance*min(nominal($m_j$.c.m_flow)); // Define a smooth curve, such that alpha($s_i>=eps$)=1 and alpha($s_i<0$)=0 -alpha := smooth(1, if $s_i$ > eps then 1 - else if $s_i$ > 0 then ($s_i$/eps)^2*(3-2* $s_i$/eps) - else 0); + alpha := smooth(1, if $s_i$ > eps then 1 else + if $s_i$ > 0 then ( $s_i$/eps)^2*(3-2* $s_i$/eps)) else 0); -// Define function positiveMax(v,s_i) as a linear combination of max (v,0) -// and of eps along alpha -positiveMax((-$m_j$.c.m_flow,s_i) := alpha*max(-$m_j$.c.m_flow,0) + (1-alpha)*eps; + // Define function positiveMax(v,s_i) as a linear combination of max (v,0) + // and of eps along alpha + positiveMax((-$m_j$.c.m_flow,s_i) := alpha*max(-$m_j$.c.m_flow,0) + (1-alpha)*eps; \end{lstlisting} The derivation of this implementation is discussed in -\cref{derivation-of-stream-equations}. Note that in the cases $N = 1,\, M = 0$ (unconnected port, -physically corresponding to a plugged-up flange), and $N = 2,\, M = 0$ -(one-to-one connection), the result of \lstinline!inStream! is trivial +\autoref{derivation-of-stream-equations}. Note that in the cases N = 1, M =0 (unconnected port, +physically corresponding to a plugged-up flange), and N = 2, M=0 +(one-to-one connection), the result of \lstinline!inStream()! is trivial and no non-linear equations are left in the model, despite the fact that the original definition equations are nonlinear. The following properties hold for this implementation: \begin{itemize} \item - \lstinline!inStream! is continuous (and differentiable), - provided that \lstinline!$m_{j}$.c.h_outflow!, - \lstinline!$m_{j}$.c.m_flow!, \lstinline!$c_{k}$.h_outflow!, and - \lstinline!$c_{k}$.m_flow! are continuous and differentiable. + \lstinline!inStream(..)! is continuous (and differentiable), + provided that \texttt{m\textsubscript{j}.c.h\_outflow, + m\textsubscript{j}.c.m\_flow, + c\textsubscript{k}.h\_outflow}, and + \texttt{c\textsubscript{k}.m\_flow} are continuous and differentiable. \end{itemize} \begin{itemize} \item - A division by zero can no longer occur (since \lstinline!sum(positiveMax(-$m_{j}$.c.m_flow, $s_{i}$))! $\geq \mathit{eps2} > 0$), - so the result is always well-defined. + A division by zero can no longer occur (since \texttt{sum(positiveMax(-m\textsubscript{j}.c.m\_flow,s\textsubscript{i}))\textgreater{}=eps2} + \textgreater{} 0), so the result is always well-defined. \item - The balance equations are exactly fulfilled if the denominator is not close to zero (since the exact formula is used, if - \lstinline!sum(positiveMax(-$m_{j}$.c.m_flow, $s_{i}$))! $> \mathit{eps}$). + The balance equations are exactly fulfilled if the denominator + is not close to zero\\ + (since the exact formula is used, if + \texttt{sum(positiveMax(-m\textsubscript{j}.c.m\_flow,s\textsubscript{i})) \textgreater{} eps}). \item If all flows are zero, - \lstinline!inStream($m_{i}$.c.h_outflow)! = - \lstinline!sum($m_{j}$.c.h_outflow for $j \neq{} i$ and $m_{j}$.c.m_flow.min < 0) / $N_{\mathrm{p}}$!, - i.e., it is the mean value of all the $N_{\mathrm{p}}$ variables - \lstinline!$m_{j}$.c.h_outflow!, such that $j \neq i$ and - $m_{j}\text{\lstinline!.c.m_flow.min!} < 0$. This is a + \texttt{inStream(m\textsubscript{i}.c.h\_outflow) = + sum(m\textsubscript{j}.c.h\_outflow for + j\textless{}\textgreater{}i and m\textsubscript{j}.c.m\_flow.min \textless{} + 0)/Np}, i.e., it is the mean value of all the \lstinline!Np! variables + \texttt{m\textsubscript{j}.c.h\_outflow}, such that \texttt{ + j\textless{}\textgreater{}i} and + \texttt{m\textsubscript{j}.c.m\_flow.min \textless{} 0}. This is a meaningful approximation, considering the physical diffusion effects that are relevant at small flow rates in a small connection volume (thermal conduction for enthalpy, mass diffusion for mass fractions). \end{itemize} -The value of \lstinline!relativeTolerance! should be larger than the relative +The value of relativeTolerance should be larger than the relative tolerance of the nonlinear solver used to solve the implicit algebraic equations. As a final remark, further symbolic simplifications could be carried out by taking into account equations that affect the flows in -the connection set (i.e., equivalent to $m_{j}\text{\lstinline!.c.m_flow!} = -0$, which then implies $m_{j}\text{\lstinline!.c.m_flow.min!} \geq 0$). This is interesting, e.g., in the case of a valve when the stem +the connection set (i.e., equivalent to m\textsubscript{j}.c.m\_flow = +0, which then implies m\textsubscript{j}.c.m\_flow.min \textgreater{}= +0). This is interesting, e.g., in the case of a valve when the stem position is set identically to closed by its controller. \end{nonnormative} -\section{Stream Operator actualStream}\label{stream-operator-actualstream} +\section{Stream Operator actualStream}\doublelabel{stream-operator-actualstream} -\lstinline!actualStream! is provided for convenience, in +The \lstinline!actualStream(v)! operator is provided for convenience, in order to return the actual value of the stream variable, depending on the actual flow direction. The only argument of this built-in operator needs to be a reference to a stream variable. The operator is @@ -371,23 +422,30 @@ \section{Stream Operator actualStream}\label{stream-operator-actualstream} \end{lstlisting} \begin{nonnormative} -\lstinline!actualStream! is typically used in two contexts: +The \textbf{actualStream}(v) operator is typically used in two +contexts: \begin{lstlisting}[language=modelica] -der(U) = c.m_flow * actualStream(c.h_outflow); // (1) energy balance equation -h_c = actualStream(c.h); // (2) monitoring the enthalpy at port c + der(U) = c.m_flow*actualStream(c.h_outflow); // (1)energy balance equation + h_c = actualStream(c.h); // (2)monitoring the enthalpy at port c \end{lstlisting} -In the case of equation (1), although \lstinline!actualStream! +In the case of equation (1), although the actualStream() operator is discontinuous, the product with the flow variable is not, because -\lstinline!actualStream! is discontinuous when the flow is zero by construction. -Therefore, a tool might infer that the expression is \lstinline!smooth(0, $\ldots$)! +actualStream() is discontinuous when the flow is zero by construction. +Therefore, a tool might infer that the expression is smooth(0, ...) automatically, and decide whether or not to generate an event. If a user wants to avoid events entirely, he/she may enclose the right-hand side -of (1) with \lstinline!noEvent!. - -Equations like (2) might be used for monitoring purposes (e.g.\ plots), in order to inspect what the actual enthalpy of the fluid flowing through a port is. -In this case, the user will probably want to see the change due to flow reversal at the exact instant, so an event should be generated. If the user doesn't -bother, then he/she should enclose the right-hand side of (2) with \lstinline!noEvent!. Since the output of \lstinline!actualStream! will be discontinuous, -it should not be used by itself to model physical behaviour (e.g., to compute densities used in momentum balances) -- \lstinline!inStream! should be used -for this purpose. \lstinline!actualStream! should be used to model physical behaviour only when multiplied by the corresponding flow variable (like in the -above energy balance equation), because this removes the discontinuity. +of (1) with the noEvent() operator. + +Equations like (2) might be used for monitoring purposes (e.g. +plots), in order to inspect what the actual enthalpy of the fluid +flowing through a port is. In this case, the user will probably want to +see the change due to flow reversal at the exact instant, so an event +should be generated. If the user doesn't bother, then he/she should +enclose the right-hand side of (2) with noEvent(). Since the output of +actualStream() will be discontinuous, it should not be used by itself to +model physical behaviour (e.g., to compute densities used in momentum +balances) - inStream() should be used for this purpose. The operator +actualStream() should be used to model physical behaviour only when +multiplied by the corresponding flow variable (like in the above energy +balance equation), because this removes the discontinuity. \end{nonnormative} diff --git a/chapters/synchronous.tex b/chapters/synchronous.tex index 63608331e..8ac1d3c5e 100644 --- a/chapters/synchronous.tex +++ b/chapters/synchronous.tex @@ -1,94 +1,123 @@ -\chapter{Synchronous Language Elements}\label{synchronous-language-elements} +\chapter{Synchronous Language Elements}\doublelabel{synchronous-language-elements} -This chapter defines synchronous +This section presents language elements for describing synchronous behavior suited for implementation of control systems. -The synchronous behavior relies on an additional kind of discrete-time -variables and equations, as well as an additional kind of \lstinline!when!-clause. -The benefits of synchronous behavior is that it allows a model to define large -sampled data systems in a safe way, so that the + +\section{Introduction}\doublelabel{introduction2} + +\subsection{Overview}\doublelabel{overview} + +\begin{nonnormative} +This chapter defines additional kinds of discrete-time +variables and equations, as well as an additional kind of when-clause, +in order to define sampled data systems in a safe way, so that the translator can provide good diagnostics in case of a modeling error. The following small example shows the most important elements: \begin{figure}[H] - \begin{center} - \includegraphics{plantmodel} - \end{center} - \caption{A continuous plant and a sampled data controller connected together with sample and (zero-order) hold elements.} +\caption{A continuous plant and a sampled data controller connected +together with sample and (zero-order) hold elements} +\begin{center} +\includegraphics[width=7in,height=4in]{plantmodel} +\end{center} \end{figure} \begin{itemize} \item - A periodic clock is defined with \lstinline!Clock(3)!. The argument - of \lstinline!Clock! defines the sampling interval (for details see \cref{clock-constructors}). + A periodic clock is defined with \textbf{Clock}(3). The argument + of \textbf{Clock}(..) defines the sampling interval (for details see \autoref{clock-constructors}). \item - Clocked variables (such as \lstinline!yd!, \lstinline!xd!, \lstinline!ud!) are associated uniquely + Clocked variables (such as yd, xd, ud) are associated uniquely with a clock and can only be directly accessed when the associated clock is active. Since all variables in a clocked equation must belong to the same clock, clocking errors can be detected at compile time. If variables from different clocks shall be used in an equation, explicit - cast operators must be used, such as \lstinline!sample! to convert - from continuous-time to clocked discrete-time or \lstinline!hold! to + cast operators must be used, such as \textbf{sample}(..) to convert + from continuous-time to clocked discrete-time or \textbf{hold}(..) to convert from clocked discrete-time to continuous-time. \item - A continuous-time variable is sampled at a clock tick with - \lstinline!sample!. The operator returns the value of the + A continuous-time variable is sampled at a clock tick with the + \textbf{sample}(..) operator. The operator returns the value of the continuous-time variable when the clock is active. \item - When no argument is defined for \lstinline!Clock!, the clock is + When no argument is defined for \textbf{Clock}(), the clock is deduced by clock inference. \item - For a \lstinline!when!-clause with an associated clock, all equations inside the \lstinline!when!-clause are clocked with the given clock. All equations on an associated clock are treated together and in the same way regardless of whether they are inside a \lstinline!when!-clause or not. This means that automatic sampling and hold of variables inside the \lstinline!when!-clause does not apply (explicit sampling and hold is required) and that general equations can be used in such \lstinline!when!-clauses (this is not allowed for \lstinline!when!-clauses with \lstinline!Boolean! conditions, that require a variable reference on the left-hand side of an equation). + For a \lstinline!when!-clause with an associated clock, all + equations inside the \lstinline!when!-clause are clocked with the given + clock. All equations on an associated clock are treated together and + in the same way regardless of whether they are inside a + \lstinline!when!-clause or not. This means that automatic sampling and + hold of variables inside the \lstinline!when!-clause does not apply + (explicit sampling and hold is required) and that general equations + can be used in such when-clauses (this is not allowed for + \lstinline!when!-clauses with Boolean conditions, that require a variable + reference on the left-hand side of an equation). \item The \lstinline!when!-clause in the controller could also be removed and the controller could just be defined by the equations: \begin{lstlisting}[language=modelica] -/* Discrete controller */ -E * xd = A * previous(xd) + B * yd; - ud = C * previous(xd) + D * yd; + // discrete controller + E*xd = A*previous(xd) + B*yd; + ud = C*previous(xd) + D*yd; \end{lstlisting} \item - \lstinline!previous(xd)! returns the value of \lstinline!xd! at + The operator \textbf{previous}(xd) returns the value of xd at the previous clock tick. At the first sample instant, the start value - of \lstinline!xd! is returned. + of xd is returned. \item - A discrete-time signal (such as \lstinline!ud!) is converted to a continuous-time signal with \lstinline!hold!. + A discrete-time signal (such as ud) is converted to a + continuous-time signal with the \textbf{hold}(..) operator. \item - If a variable belongs to a particular clock, then all other equations where this variable is used, with the exception of as argument to certain special operators, belong also to this clock, as well as all variables that are used in these equations. - This property is used for clock inference and allows defining an associated clock only at a few places (above only in the sampler, whereas in the discrete controller and the hold the sampling period is inferred). + If a variable belongs to a particular clock, then all other + equations where this variable is used, with the exception of as + argument to certain special operators, belong also to this clock, as + well as all variables that are used in these equations. This property + is used for \emph{clock inference} and allows to define an associated + clock only at a few places (above only in the sampler, whereas in the + discrete controller and the hold the sampling period is inferred). \item - The approach in this chapter is based on the clock calculus and inference system proposed by \textcite{ColacoPouzet2003ClocksFirstClass} and implemented in Lucid Synchrone version 2 and 3 \parencite{Pouzet2006LucidSynchrone30}. - However, the Modelica approach also uses multi-rate periodic clocks based on rational arithmetic introduced by \textcite{ForgetEtAl2008MultiPeriodic}, as an extension of the Lucid Synchrone semantics. - These approaches belong to the class of synchronous languages \parencite{BenvenisteEtAl2003SynchronousTwelveYearsLater}. + The approach in this chapter is based on the clock calculus and + inference system proposed by (Colaco and Pouzet 2003) and implemented + in Lucid Synchrone version 2 and 3 (Pouzet 2006). However, the + Modelica approach also uses multi-rate periodic clocks based on + rational arithmetic introduced by (Forget et. al. 2008), as an + extension of the Lucid Synchrone semantics. These approaches belong to + the class of synchronous languages (Benveniste et. al. 2002). \end{itemize} +\end{nonnormative} -\section{Rationale for Clocked Semantics}\label{rationale-for-clocked-semantics} +\subsection{Rationale for Clocked Semantics}\doublelabel{rationale-for-clocked-semantics} \begin{nonnormative} -Periodically sampled control systems could also be defined with standard \lstinline!when!-clauses, see \cref{when-equations}, and the \lstinline!sample! operator, see \cref{event-related-operators-with-function-syntax}. For example: +Periodically sampled control systems could also be defined with +standard when-clauses, see \autoref{when-equations}, and the sample operator, see +\autoref{event-related-operators-with-function-syntax}. For example: \begin{lstlisting}[language=modelica] -when sample(0, 3) then - xd = A * pre(xd) + B * y; - u = C * pre(xd) + D * y; +when sample(0,3) then + xd = A*pre(xd) + B*y; + u = C*pre(xd) + D*y; end when; \end{lstlisting} -Equations in a \lstinline!when!-clause with a \lstinline!Boolean! condition have the +Equations in a when-clause with a Boolean condition have the property that (a) variables on the left hand side of the equal sign are assigned a value when the when-condition becomes true and otherwise hold -their value, (b) variables not assigned in the \lstinline!when!-clause are directly +their value, (b) variables not assigned in the when-clause are directly accessed (= automatic \lstinline!sample! semantics), and (c) the variables -assigned in the \lstinline!when!-clause can be directly accessed outside of the -\lstinline!when!-clause (= automatic \lstinline!hold! semantics). - -Using standard \lstinline!when!-clauses works well for individual simple sampled blocks, but the synchronous approach using clocks and clocked equations provide the following benefits (especially for large sampled systems): +assigned in the when-clause can be directly accessed outside of the +when-clause (= automatic \lstinline!hold! semantics). This approach to define +periodically sample data systems has the following drawbacks that are +not present with the solution in this chapter using clocks and clocked +equations: \begin{enumerate} \item - Possibility to detect inconsistent sampling rate, since clock partitioning (see \cref{clock-partitioning}), - replaces the automatic sample and hold semantics. Examples: + It is not possible to detect sampling errors due to the + automatic sample and hold semantics. Examples: \begin{enumerate} \def\labelenumii{\alph{enumii}.} \item - If \lstinline!when!-clauses in different blocks should belong to the same + If when-clauses in different blocks should belong to the same controller part, but by accident different when-conditions are given, then this is accepted (no error is detected). \item @@ -99,387 +128,426 @@ \section{Rationale for Clocked Semantics}\label{rationale-for-clocked-semantics} controller part, and different integer multiples are given, then the translator has to accept this (no error is detected). \end{enumerate} - Note: Clocked systems can mix different sampling rates - in well-defined ways when needed. \item - Fewer initial conditions are needed, as only a subset of clocked - variables need initial conditions -- the clocked state variables (see \cref{clocked-state-variables}). - For a standard \lstinline!when!-clause all variables - assigned in a \lstinline!when!-clause must have an initial value + Due to the automatic sample and hold semantics, all variables + assigned in a when-clause of the above kind must have an initial value because they might be used, before they are assigned a value the first time. As a result, all these variables are ``discrete-time states'' - although in reality only a subset of them need an initial + although in reality only a small subset of them need an initial value. \item - More general equations can be used, compared to standard \lstinline!when!-clauses that require - a restricted form of equations where the left hand side has to be a variable, in order - to identify the variables that are assigned in the \lstinline!when!-clause. - This restriction can be circumvented for standard \lstinline!when!-clauses, but is - absent for clocked equations and make it more convenient to define - nonlinear control algorithms. -\item - Clocked equations allow clock inference, - meaning that the sampling need only be given once for a sub-system. - For a standard \lstinline!when!-clause the condition (sampling) must be explicitly - propagated to all blocks, which is tedious and error prone for large systems. + Only a restricted form of equations can be used in a standard + when-clause, since the left hand side has to be a variable, in order + to identify the variables that are assigned in the when-clause. This + is a severe restriction, especially if nonlinear control algorithms + shall be defined. This restriction is not present for clocked + equations. \item - Possible to use general continuous-time models in synchronous models (e.g.\ some advanced controllers use an inverse model of a plant in the feedforward path of the controller, see \textcite{ThummelEtAl2005InverseModels}). - This powerful feature of Modelica to use a nonlinear plant model in a controller would require to export the continuous-time model with an embedded integration method and then import it in an environment where the rest of the controller is defined. - With clocked equations, clocked controllers with continuous-time models can be directly defined in Modelica. + All equations belonging to a discrete controller must be in a + when clause. If the controller is built-up with several building + blocks, then the clock condition (sampling) must be explicitly + propagated to all blocks. This is tedious and error prone. With + clocked equations, the clock condition need to be defined only at one + place, and otherwise is automatically propagated by clock inference. \item - Clocked equations are straightforward to optimize because they are - evaluated exactly once at each an event instant. - In contrast a standard \lstinline!when!-clause with \lstinline!sample! conceptually - requires several evaluations of the model (in some cases tools - can optimize this to avoid unneeded evaluations). - The problem for the standard \lstinline!when!-clause is that after \lstinline!v! - is changed, \lstinline!pre(v)! shall be updated and the model re-evaluated, - since the equations could depend on \lstinline!pre(v)!. - For clocked equations this iteration can be omitted - since \lstinline!previous(v)! can only occur in the clocked equations - that are only run the first event iterations. + It is not possible to use a continuous-time model in when + clauses (e.g. some advanced controllers use an inverse model of a + plant in the feedforward path of the controller, see (Thümmel et. al. + 2005)). This powerful feature of Modelica to use a nonlinear plant + model in a controller would require to export the continuous-time + model with an embedded integration method and then import it in an + environment where the rest of the controller is defined. With clocked + equations, clocked controllers with continuous-time models can be + directly defined in Modelica. \item - Clocked subsystems using arithmetic blocks are straightforward to optimize. - When a standard math-block (e.g.\ addition) is part of a clocked sub-system it is automatically - clocked and only evaluated when the clocked equations trigger. - For standard \lstinline!when!-clauses one either needs a separate sampled math-block for each operation, or - it will conceptually be evaluated all the time. - However, tools may perform a similar optimization for standard \lstinline!when!-clauses - and it is only relevant in large sampled systems. + At a sample instant, an event iteration occurs (as for any other + event). A clocked partition, as well as a when-clause with a + sample(..) is evaluated exactly once at such an event instant. + However, the continuous-time model to which the sampled data + controller is connected, will be evaluated several times when the + overall system is simulated. With when-clauses, the continuous-time + part is typically evaluated three times at a sample instant (once, + when the sample instant is reached, once to evaluate the continuous + equations at the sample instant, and once when an event iteration + occurs since a discrete variable v is changed and \textbf{pre}(v) + appears in the equations). With clocked equations, no event iteration + is triggered if a clocked variable v is changed and + \textbf{previous}(v) appears in the equations, because the event + iteration cannot change the value of v. As a result, typically the + simulation model is evaluated twice at a sample instant and therefore + the simulation is more efficient with clocked equations. \end{enumerate} \end{nonnormative} -\section{Definitions}\label{definitions} +\section{Definitions}\doublelabel{definitions} In this section various terms are defined. -\subsection{Clocks and Clocked Variables}\label{clocks-and-clocked-variables} - -% We can't use \subfloat just yet due to LaTeXML issue (fixed on master 2020-06-27): -% https://github.com/brucemiller/LaTeXML/issues/1292 (marked as fixed as of commit 9f5c893b) -%\begin{figure}[tb] -% \centering -% \subfloat[A piecewise-constant variable.]{\includegraphics{piecewise}\label{fig:piecewise-constant-variable}} -% \subfloat[A clock variable.]{\includegraphics{clock}\label{fig:clock-variable}} -% \subfloat[A clocked variable.]{\includegraphics{clocked}\label{fig:clocked-variable}} -% \caption{The different kinds of discrete-time variables. The \lstinline!hold! extrapolation of the clocked variable is illustrated with dashed green lines.} -%\end{figure} - -In \cref{discrete-time-expressions} the term \emph{discrete-time} Modelica expression and in \cref{continuous-time-expressions} the term \emph{continuous-time} Modelica expression is defined. -In this chapter, two additional kinds of discrete-time expressions/variables are defined that are associated to clocks and are therefore called \firstuse{clocked discrete-time}\index{clocked!discrete-time expression}\index{expression variability!clocked discrete-time} expressions. -The different kinds of discrete-time variables in Modelica are defined below. - -\begin{definition}[Piecewise-constant variable]\index{piecewise-constant variable} -(See \cref{discrete-time-expressions}.) Variables $m(t)$ of base type \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, enumeration, and \lstinline!String! that are -\emph{constant} inside each interval $t_{i} \leq t < t_{i+1}$ (i.e., piecewise constant continuous-time variables). In other words, $m(t)$ changes -value only at events: $m(t) = m(t_{i})$, for $t_{i} \leq t < t_{i+1}$. Such variables depend continuously on time and they are discrete-time variables. -See \cref{fig:piecewise-constant-variable}. -\end{definition} - -\begin{figure}[H] - \begin{center} - \includegraphics{piecewise-constant} - \end{center} - \caption{A piecewise-constant variable.}\label{fig:piecewise-constant-variable} -\end{figure} +\subsection{Clocks and Clocked Variables}\doublelabel{clocks-and-clocked-variables} -\begin{definition}[Clock variable]\index{clock!variable} -Clock variables $c(t_{i})$ are of base type \lstinline!Clock!\indexinline{Clock}. -A clock is either defined by a constructor (such as \lstinline!Clock(3)!) that defines when the clock ticks (is active) at a particular time instant, or it is defined with clock operators relatively to other clocks, see \cref{base-clock-conversion-operators}. -See \cref{fig:clock-variable}. -\end{definition} +In \autoref{discrete-time-expressions} the term \emph{discrete-time} Modelica expression and in +\autoref{continuous-time-expressions} the term \emph{continuous-time} Modelica expression is +defined. In this chapter, two additional kinds of discrete-time +expressions/variables are defined that are associated to clocks and are +therefore called \firstuse{clocked discrete-time} expressions: +\begin{longtable}[]{|p{7.3cm}|p{7.3cm}|} +\hline +\multicolumn{2}{|p{14.6cm}|}{\textbf{The different kinds of discrete-time variables in Modelica}}\\ \hline +\endhead +\begin{tabular}{p{7cm}} +\includegraphics[width=3in,height=1.875in]{piecewise} +\end{tabular}&\begin{tabular}{p{7cm}}\textbf{Piecewise-constant variables (see \autoref{discrete-time-expressions})} + +% henrikt-ma: Get rid of the use of \underline below. +Variables \textbf{m}(t) of base type Real, Integer, Boolean, +enumeration, and String that are \underline{constant} inside each interval +t\textsubscript{i} $\le$ t \textless{} t\textsubscript{i+1} (= piecewise +constant continuous-time variables). In other words, \textbf{m}(t) +\underline{changes} value \underline{only at events}. This means, \textbf{m}(t) = +\textbf{m}(t\textsubscript{i}), for t\textsubscript{i} $\le$ t \textless{} +t\textsubscript{i+1}. Such variables depend continuously on time and +they are discrete-time variables. +\end{tabular}\\ \hline +\begin{tabular}{p{7cm}} +\includegraphics[width=3in,height=1.875in]{clock} +\end{tabular}& +\begin{tabular}{p{7cm}}\textbf{Clock variables} + +Clock variables \textbf{c}(t\textsubscript{i}) are of base type Clock. A +clock is either defined by a constructor (such as Clock(3)) +that defines when the clock ticks (is active) at a particular time +instant, or it is defined with clock operators relatively to other +clocks, see \autoref{base-clock-conversion-operators}. \begin{example} -Clock variables: \begin{lstlisting}[language=modelica] -Clock c1 = Clock($\ldots$); -Clock c2 = c1; -Clock c3 = subSample(c2, 4); + Clock c1 = Clock(...); + Clock c2 = c1; + Clock c3 = subSample(c2,4); \end{lstlisting} \end{example} -\begin{figure}[H] - \begin{center} - \includegraphics{clock} - \end{center} - \caption{A clock variable. The value of a clock variable is not defined -- the plot marks only indicate \emph{when} the clock is active.}\label{fig:clock-variable} -\end{figure} - -\begin{definition}[Clocked variable]\label{def:clocked-variable}\index{clocked!variable} -The elements of clocked variables $r(t_{i})$ are of base type \lstinline!Real!, \lstinline!Integer!, \lstinline!Boolean!, enumeration, \lstinline!String! that are associated uniquely with -a clock $c(t_{i})$. A clocked variable can only be directly accessed at the event instant where the associated clock is active. A constant and a parameter can always be used at a place -where a clocked variable is required. -\begin{nonnormative} -Note that clock variables are not included in this list. -This implies that clock variables cannot be used where clocked variables are required. -\end{nonnormative} - -At time instants where the associated clock is not active, the value of a clocked variable can be inquired by using an explicit cast operator, see below. In such a case \lstinline!hold! semantics is -used, in other words the value of the clocked variable from the last event instant is used. See \cref{fig:clocked-variable}. -\end{definition} - -\begin{figure}[H] - \begin{center} - \includegraphics{clocked} - \end{center} - \caption{A clocked variable. The \lstinline!hold! extrapolation of the value at the last event instant is illustrated with dashed green lines.}\label{fig:clocked-variable} -\end{figure} - -\subsection{Base-Clock and Sub-Clock Partitions}\label{base-clock-and-sub-clock-partitions} - -There are two kinds of \firstuse{clock partitions}\index{clock!partition}: - -\begin{definition}[Base-clock partition]\index{base-clock partition}\index{clock!partition!base-clock} -A base-clock partition identifies a set of equations and a set of variables which must be executed together in one task. Different base-clock partitions can be associated to separate tasks for -asynchronous execution. -\end{definition} - -\begin{definition}[Sub-clock partition]\index{sub-clock partition}\index{clock!partition!sub-clock} -A sub-clock partition identifies a subset of equations and a subset of variables of a base-clock partition which are partially synchronized with other sub-clock partitions of the same base-clock -partition, i.e., synchronized when the ticks of the respective clocks are simultaneous. -\end{definition} +\end{tabular}\\ \hline +\begin{tabular}{p{7cm}} +\includegraphics[width=3in,height=1.875in]{clocked} +\end{tabular}& +\begin{tabular}{p{7cm}}\textbf{Clocked variables} +The elements of clocked variables \textbf{r}(t\textsubscript{i}) are of +base type Real, Integer, Boolean, enumeration, String that are +associated uniquely with a clock \textbf{c}(t\textsubscript{i}). A +clocked variable can only be directly accessed at the event instant +where the associated clock is \textbf{active}. A constant and a +parameter can always be used at a place where a clocked variable is +required. + +At time instants where the associated clock is not active, the value of +a clocked variable can be inquired by using an explicit cast operator, +see below. In such a case \lstinline!hold! semantics is used, in other words +the value of the clocked variable from the last event instant is used. +\par +\begin{nonnormative*} +This is visualized in the left figure with the dashed green lines. +\end{nonnormative*} +\end{tabular}\\ \hline +\end{longtable} + +{]} + +\subsection{Base-Clock and Sub-Clock Partitions}\doublelabel{base-clock-and-sub-clock-partitions} + +The following concepts are used: +\begin{itemize} +\item + A \firstuse{base-clock partition} identifies a set of equations and + a set of variables which must be executed together in one task. + Different base-clock partitions can be associated to separate tasks + for asynchronous execution. +\item + A \firstuse{sub-clock partition} identifies a subset of equations + and a subset of variables of a base-clock partition which are + partially synchronized with other sub-clock partitions of the same + base-clock partition, i.e., synchronized when the ticks of the + respective clocks are simultaneous. +\end{itemize} -\subsection{Argument Restrictions (Component Expression)}\label{argument-restrictions-component-expression} +\subsection{Argument Restrictions (Component Expression)}\doublelabel{argument-restrictions-component-expression} The built-in operators (with function syntax) defined in the following sections have partially restrictions on their input arguments that are not present for Modelica functions. To define the restrictions, the -following term is used. - -\begin{definition}[Component expression]\label{def:component-expression}\index{component!expression (argument restriction)} -A component expression is a \lstinline[language=grammar]!component-reference! which is a valid expression, i.e., not referring to models or blocks with equations. -% "an element of records" below looks strange: -In detail, it is an instance of a (a) base type, (b) derived type, (c) record, (d) an array of such an instance (a-c), (e) one or more elements of such an array (d) defined by index expressions which are parameter expressions (see below), or (f) an element of records. +following term is defined: +\begin{description} +\item{\textbf{Component expression}:} +\par +A Component Reference which is an Expression, i.e. does not refer to +models or blocks with equations. It is an instance of a (a) base type, +(b) derived type, (c) record, (d) an array of such an instance (a-c), +(e) one or more elements of such an array (d) defined by index +expressions which are parameter expressions (see below), or (f) an +element of records. \begin{nonnormative} -The essential features are that one or several values are associated with the instance, that start values can be defined on these values, and that no equations are associated with the instance. -A component expression can be constant or can vary with time. +The essential features are that one or several values are associated with the instance, that start values can be defined on these values, and that no equations are +associated with the instance. A Component Expression can be constant or can vary with time. \end{nonnormative} -\end{definition} - -In the following sections, when defining an operator with function calling syntax, there are some common restrictions being used for the input arguments (operands). -For example, an input argument to the operator may be required to be a component expression (\cref{def:component-expression}) or parameter expression (\cref{variability-of-expressions}). -To emphasize that there are no such restrictions, an input argument may be said to be just an \emph{expression}. +\end{description} -\begin{nonnormative} -The reason for restricting an input argument to be a component expression is that the start value of the input argument is returned before the first tick of the clock of the input argument and this -is not possible for a general expression. +In the following sections the following notation is partially used when +defining the operators: -The reason for restricting an input argument to be a parameter expression is that the value of the input argument needs to be evaluated during translation, in order that clock analysis can be performed during translation. -\end{nonnormative} - -\begin{example} -The input argument to \lstinline!previous! is restricted to be a component expression. +% This should ideally be a set of definitions instead +\begin{description} +\item{The input argument is a \textbf{component expression}:} +\par + The meaning is that the input argument when calling the operator must + be a \emph{component expression}. + \begin{nonnormative} + The reason for this restriction is that the start value of the input argument is returned before the first tick of the clock of the input argument and this is not + possible for a general expression. + \end{nonnormative} + \begin{example} + \end{example} \begin{lstlisting}[language=modelica] -Real u1; -Real u2[4]; -Complex c; -Resistor R; -$\ldots$ -y1 = previous(u1); // fine -y2 = previous(u2); // fine -y3 = previous(u2[2]); // fine -y4 = previous(c.im); // fine -y5 = previous(2 * u); // error (general expression, not component expression) -y6 = previous(R); // error (component, not component expression) + Real u1; + Real u2[4]; + Complex c; + Resistor R; + ... + y1 = previous(u1); // fine + y2 = previous(u2); // fine + y3 = previous(u2[2]); // fine + y4 = previous(c.im); // fine + y5 = previous(2*u); // error (general expression, no Component Expression) + y6 = previous(R); // error (component, no Component Expression) \end{lstlisting} -\end{example} - -\begin{example} -The named argument \lstinline!factor! of \lstinline!subSample! is restricted to be a parameter expression. +\item{The input argument is a \textbf{parameter expression}:} +\par + The meaning is that the input argument when calling the operator must + have parameter variability, that is the argument must depend directly + or indirectly only on parameters, constants or literals, see + \autoref{variability-of-expressions}. + \begin{nonnormative} + The reason for this restriction is that the value of the input argument needs to be evaluated during translation, in order that clock analysis can be performed during translation. + \end{nonnormative} + \begin{example} \begin{lstlisting}[language=modelica] -Real u; -parameter Real p=3; -$\ldots$ -y1 = subSample(u, factor = 3); // fine (literal) -y2 = subSample(u, factor = 2 * p - 3); // fine (parameter expression) -y3 = subSample(u, factor = 3 * u); // error (general expression) + Real u; + parameter Real p=3; + ... + y1 = subSample(u, factor=3); // fine (literal) + y2 = subSample(u, factor=2*p - 3); // fine (parameter expression) + y3 = subSample(u, factor=3*u); // error (general expression) \end{lstlisting} -\end{example} - -None of the operators defined in this chapter vectorize, but some can operate directly on array variables (including clocked array variables, but not clock array variables). -They are not callable in functions. - -\section{Clock Constructors}\label{clock-constructors} - -The overloaded constructors listed below are available to generate clocks, and it is possible to call them with the specified named arguments, or with positional arguments (according to the order shown in the details after the table). -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!Clock()! & Inferred clock & \Cref{modelica:clock-inferred}\\ -\lstinline!Clock(intervalCounter, resolution)! & Rational interval clock & \Cref{modelica:clock-rational}\\ -\lstinline!Clock(interval)! & Real interval clock & \Cref{modelica:clock-interval}\\ -\lstinline!Clock(condition, startInterval)! & Event clock & \Cref{modelica:clock-event}\\ -\lstinline!Clock(c, solverMethod)! & Solver clock & \Cref{modelica:clock-solver}\\ -\hline -\end{tabular} -\end{center} + \end{example} +\item{The input argument is an \textbf{expression}:} +\par + There is no restriction on the input argument when calling the + operator. This notation is used to emphasis when a standard function + call is used (is an \emph{expression}), instead of restricting the input + (is a \emph{component expression}). +\end{description} + +Note that the operators defined in this chapter do not automatically vectorize, +but some operate on arrays in a similar way. + +\section{Clock Constructors}\doublelabel{clock-constructors} + +The following overloaded constructors are available to generate clocks, and +it is possible to call them with the specified named arguments, or with positional arguments (according to the order below): +\begin{longtable}[]{|p{3cm}|p{12cm}|} +\hline \endhead +\textbf{Clock}() +& +\begin{tabular}{@{}p{119mm}@{}} +\textbf{Inferred Clock}\\ -\begin{operatordefinition*}[Clock]\label{modelica:clock-inferred}\index{Clock@\robustinline{Clock}!inferred} -\begin{synopsis}\begin{lstlisting} -Clock() -\end{lstlisting}\end{synopsis} -\begin{semantics} -\firstuse{Inferred clock}\index{inferred clock}. The operator returns a clock that is inferred. \begin{example} \begin{lstlisting}[language=modelica] -when Clock() then // equations are on the same clock - x = A * previous(x) + B * u; +when Clock() then // equations are on the same clock + x = A*previous(x) + B*u; Modelica.Utilities.Streams.print ("clock ticks at = " + String(sample(time))); end when; \end{lstlisting} -Note, in most cases, the operator is not needed and equations could be written without a \lstinline!when!-clause (but not in the example above, since the \lstinline!print! statement is otherwise not associated to a clock). -This style is useful if a modeler would clearly like to mark the equations that must belong to one clock (although a tool could figure this out as well, if the \lstinline!when!-clause is not present). +Note, in most cases, the operator is not needed and equations +could be written without a when-clause (but not in the example above, +since the \lstinline!print! statement is otherwise not associated to a clock). +This style is useful if a modeler would clearly like to mark the +equations that must belong to one clock (although a tool could figure +this out as well, if the when-clause is not present). \end{example} -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[Clock]\label{modelica:clock-rational}\index{Clock@\robustinline{Clock}!rational} -\begin{synopsis}\begin{lstlisting} -Clock(intervalCounter=$\mathit{intervalCounter}$, resolution=$\mathit{resolution}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\firstuse{Rational interval clock}\index{rational interval clock}. -The first input argument, $\mathit{intervalCounter}$, is a clocked component expression (\cref{def:component-expression}) or a parameter expression of type \lstinline!Integer! with \lstinline!min = 0!. -The optional second argument $\mathit{resolution}$ (defaults to 1) is a parameter expression of type \lstinline!Integer! with \lstinline!min = 1! and \lstinline!unit = "Hz"!. -If $\mathit{intervalCounter}$ is a parameter expression with value zero, the period of the clock is derived by clock inference, see \cref{sub-clock-inferencing}. - -If $\mathit{intervalCounter}$ is a parameter expression greater than zero, the clock defines a periodic clock. -If $\mathit{intervalCounter}$ is a clocked component expression it must be greater than zero. -The result is of base type \lstinline!Clock! that ticks when \lstinline!time! becomes $t_{\mathrm{start}}$, $t_{\mathrm{start}} + \mathit{interval}_{1}$, $t_{\mathrm{start}} + \mathit{interval}_{1} + \mathit{interval}_{2}$, \@\ldots{} -The clock starts at the start of the simulation $t_{\mathrm{start}}$ or when the controller is switched on. -At the start of the simulation, \lstinline!previous($\mathit{intervalCounter}$)! = \lstinline!$\mathit{intervalCounter}$.start! and the clocks ticks the first time. -At the first clock tick $\mathit{intervalCounter}$ must be computed and the second clock tick is then triggered at $\mathit{interval}_{1} = \mathit{intervalCounter}/\mathit{resolution}$. -At the second clock tick at time $t_{\mathrm{start}} + \mathit{interval}_{1}$, a new value for $\mathit{intervalCounter}$ must be computed and the next clock tick is scheduled at $\mathit{interval}_{2} = \mathit{intervalCounter}/\mathit{resolution}$, and so on. - +\end{tabular}\\ \hline +\begin{tabular}{@{}p{29mm}@{}} +\textbf{Clock}(\newline + intervalCounter,\newline + resolution) +\end{tabular} +& +\begin{tabular}{@{}p{119mm}@{}} +\textbf{Clock with Rational Interval}\\ + +The first input argument, \lstinline!intervalCounter!, is a clocked Component +Expression (see \autoref{argument-restrictions-component-expression}) or a parameter expression of type +\textbf{Integer} with min=0. The optional second argument \lstinline!resolution! +(default=1) is a parameter expression of type Integer with \lstinline!min=1! and +\lstinline!unit="Hz"!. If \lstinline!intervalCounter! is a parameter expression with value +zero, the period of the clock is derived by clock inference, see +\autoref{sub-clock-inferencing}. The output argument is of base type Clock that ticks when time +becomes t\textsubscript{start}, t\textsubscript{start}+interval1, +t\textsubscript{start}+interval1+interval2, ... The clock starts at the +start of the simulation t\textsubscript{start} or when the controller is +switched on. At the start of the simulation, previous(intervalCounter) = +intervalCounter.start and the clocks ticks the first time. At the first +clock tick intervalCounter must be computed and the second clock tick is +then triggered at interval1=intervalCounter/resolution. At the second +clock tick at time tstart+interval1, a new value for intervalCounter +must be computed and the next clock tick is scheduled at interval2 = +intervalCounter/resolution, and so on. If interval is a parameter +expression, the clock defines a periodic clock. \begin{nonnormative} -The given interval and time shift % What given "interval" and "time shift"? -can be modified by using the \lstinline!subSample!, \lstinline!superSample!, \lstinline!shiftSample! and \lstinline!backSample! operators on the returned clock, see \cref{sub-clock-conversion-operators}. -\end{nonnormative} +The given interval and time shift can be modified by using the subSample, superSample, shiftSample and backSample operators on the returned clock, see \autoref{sub-clock-conversion-operators}. -\begin{example} +Example: \begin{lstlisting}[language=modelica] - // first clock tick: previous(nextInterval) = 2 - Integer nextInterval(start = 2); - Real y1(start = 0); - Real y2(start = 0); + // first clock tick: previous(nextInterval)=2 + Integer nextInterval(start=2); + Real y1(start=0); + Real y2(start=0); equation - when Clock(2, 1000) then - // periodic clock that ticks at 0, 0.002, 0.004, $\ldots$ + when Clock(2,1000) then + // periodic clock that ticks at 0, 0.002, 0.004, ... y1 = previous(y1) + 1; end when; when Clock(nextInterval, 1000) then - // interval clock that ticks at 0, 0.003, 0.007, 0.012, $\ldots$ + // interval clock that ticks at 0, 0.003, 0.007, 0.012, ... nextInterval = previous(nextInterval) + 1; y2 = previous(y2) + 1; end when; \end{lstlisting} -\end{example} - -Note that operator \lstinline!interval(c)! of \lstinline!Clock c = Clock(nextInterval, $\mathit{resolution}$)! returns:\newline -\lstinline!previous($\mathit{intervalCounter}$) / $\mathit{resolution}$! (in seconds) -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[Clock]\label{modelica:clock-interval}\index{Clock@\robustinline{Clock}!interval} -\begin{synopsis}\begin{lstlisting} -Clock(interval=$\mathit{interval}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\firstuse{Real interval clock}\index{real interval clock}. -The input argument, $\mathit{interval}$, is a clocked component expression (\cref{def:component-expression}) or a parameter expression. -The $\mathit{interval}$ must be strictly positive ($\mathit{interval} > 0$) of type \lstinline!Real! with \lstinline!unit = "s"!. -The result is of base type \lstinline!Clock! that ticks when \lstinline!time! becomes $t_{\mathrm{start}}$, $t_{\mathrm{start}} + \mathit{interval}_{1}$, $t_{\mathit{start}} + \mathit{interval}_{1} + \mathit{interval}_{2}$, \@\ldots{} -The clock starts at the start of the simulation $t_{\mathrm{start}}$ or when the controller is switched on. -Here the next clock tick is scheduled at $\mathit{interval}_{1}$ = \lstinline!previous($\mathit{interval}$)! = \lstinline!$\mathit{interval}$.start!. -At the second clock tick at time $t_{\mathrm{start}} + \mathit{interval}_{1}$, the next clock tick is scheduled at $\mathit{interval}_{2}$ = \lstinline!previous($\mathit{interval}$)!, and so on. -If $\mathit{interval}$ is a parameter expression, the clock defines a periodic clock. - -\begin{nonnormative} -Note, the clock is defined with \lstinline!previous($\mathit{interval}$)!. Therefore, for sorting the input argument is treated as known. The given interval and time shift can be modified by using the \lstinline!subSample!, \lstinline!superSample!, \lstinline!shiftSample! and \lstinline!backSample! operators on the returned clock, see \cref{sub-clock-conversion-operators}. There are restrictions where this operator can be used, see \lstinline!Clock! expressions below. \end{nonnormative} -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[Clock]\label{modelica:clock-event}\index{Clock@\robustinline{Clock}!event} -\begin{synopsis}\begin{lstlisting} -Clock(condition=$\mathit{condition}$, startInterval=$\mathit{startInterval}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\firstuse{Event clock}\index{event clock}. -The first input argument, $\mathit{condition}$, is a continuous-time expression of type \lstinline!Boolean!. -The optional $\mathit{startInterval}$ argument (defaults to 0) is the value returned by \lstinline!interval()! at the first tick of the clock, see \cref{initialization-of-clocked-partitions}. -The result is of base type \lstinline!Clock! that ticks when \lstinline!edge($\mathit{condition}$)! becomes \lstinline!true!. + +Note that operator interval(c) of Clock c = +Clock(nextInterval,resolution) returns:\newline +previous(intervalCounter)/resolution; // in seconds +\end{tabular}\\ \hline +\textbf{Clock}(interval) +& +\begin{tabular}{@{}p{119mm}@{}} +\textbf{Clock with Real Interval}\\ + +The input argument, \lstinline!interval!, is a clocked Component Expression (see +\autoref{argument-restrictions-component-expression}) or a parameter expression. +The \lstinline!interval! must be strictly positive (\lstinline!interval>0.0!) of type \textbf{Real} with \lstinline!unit="s"!. +The output argument is of base type Clock that +ticks when time becomes t\textsubscript{start}, +t\textsubscript{start}+interval1, +t\textsubscript{start}+interval1+interval2, ... The clock starts at the +start of the simulation t\textsubscript{start} or when the controller is +switched on. Here the next clock tick is scheduled at interval1 = +\textbf{previous}(interval) = interval.start. At the second clock tick +at time t\textsubscript{start}+interval1, the next clock tick is +scheduled at interval2 = \textbf{previous}(interval), and so on. If +interval is a parameter expression, the clock defines a periodic clock. \begin{nonnormative} -This clock is used to trigger a clocked partition due to a state event, that is a zero-crossing of a \lstinline!Real! variable, in a continuous-time partition or due to a hardware interrupt that is modeled as \lstinline!Boolean! in the simulation model. +Note, the clock is defined with \textbf{previous}(interval). Therefore, for sorting the input argument is treated as known. The given interval and time shift can be modified +by using the subSample, superSample, shiftSample and backSample operators on the returned clock, see \autoref{sub-clock-conversion-operators}. There are restrictions where this +operator can be used, see Clock expressions below. \end{nonnormative} +\end{tabular}\\ \hline +\begin{tabular}{@{}p{29mm}@{}} +\textbf{Clock}(\newline + condition,\newline + startInterval) +\end{tabular} +& +\begin{tabular}{@{}p{119mm}@{}} +\textbf{Event Clock}\\ -\begin{example} +The input argument, \lstinline!condition!, is a continuous-time expression of type +Boolean. The optional \lstinline!startInterval! argument (default = 0.0) is the +value returned by the operator \textbf{interval}() at the first tick of +the clock, see \autoref{initialization-of-clocked-partitions}. The output argument is of base type Clock +that ticks when \textbf{edge}(condition) becomes true. + +\begin{nonnormative} +This clock is used to trigger a clocked partition due to a state event, that is a zero-crossing of a Real variable, in a continuous-time partition or due to a hardware interrupt +that is modeled as Boolean in the simulation model. Example: \begin{lstlisting}[language=modelica] -Clock c = Clock(angle > 0, 0.1); // before first tick of c: - // interval(c) = 0.1 + Clock c = Clock(angle > 0, 0.1) // before first tick of c: + // interval(c) = 0.1 \end{lstlisting} -\end{example} -\begin{nonnormative} -The implicitly given interval and time shift can be modified by using the \lstinline!subsample!, \lstinline!superSample!, \lstinline!shiftSample! and \lstinline!backSample! operators on the returned clock, see \cref{sub-clock-conversion-operators}, provided the base interval is not smaller than the implicitly given interval. +The implicitly given interval and time shift can be modified by +using the subsample, superSample, shiftSample and backSample operators +on the returned clock, see \autoref{sub-clock-conversion-operators}, provided the base +interval is not smaller than the implicitly given interval. \end{nonnormative} -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition*}[Clock]\label{modelica:clock-solver}\index{Clock@\robustinline{Clock}!solver} -\begin{synopsis}\begin{lstlisting} -Clock(c=$c$, solverMethod=$\mathit{solverMethod}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -\firstuse{Solver clock}\index{solver clock}. -The first input argument, $c$, is a clock and the operator returns this clock. -The returned clock is associated with the second input argument $\mathit{solverMethod}$ of type \lstinline!String!. -The meaning of $\mathit{solverMethod}$ is defined in \cref{solver-methods}. -If $\mathit{solverMethod}$ is the empty \lstinline!String!, then this \lstinline!Clock! construct does not associate an integrator with the returned clock. +\end{tabular}\\ \hline +\begin{tabular}{@{}p{29mm}@{}} +\textbf{Clock}(\newline + c,\newline + solverMethod)\newline +\end{tabular} +& +\begin{tabular}{@{}p{119mm}@{}} +\textbf{Solver Clock}\\ + +The first input argument \lstinline!c! is a clock and the operator returns this +clock. The returned clock is associated with the second input argument +of type String \lstinline!solverMethod!. The meaning of solverMethod is defined +in \autoref{solver-methods}. If the second input argument solverMethod is an empty +String, then this Clock-construct does not associate an integrator with the returned clock. \begin{example} \begin{lstlisting}[language=modelica] -Clock c1 = Clock(1, 10); // 100 ms, no solver -Clock c2 = Clock(c1, "ImplicitTrapezoid"); // 100 ms, ImplicitTrapezoid solver -Clock c3 = Clock(c2, ""); // 100 ms, no solver + Clock c1 = Clock(1,10) // 100 ms, no solver + Clock c2 = Clock(c1, "ImplicitTrapezoid"); + // 100 ms, ImplicitTrapezoid solver + Clock c3 = Clock(c2, ""); // 100 ms, no solver \end{lstlisting} \end{example} -\end{semantics} -\end{operatordefinition*} +\strut +\end{tabular} +\\ \hline + +\end{longtable} Besides inferred clocks and solver clocks, one of the following mutually exclusive associations of clocks are possible in one base partition: \begin{enumerate} \item - One or more rational interval clocks, provided they are consistent with each other, see \cref{sub-clock-inferencing}. - \begin{example} - Assume \lstinline!y = subSample(u)!, and \lstinline!Clock(1, 10)! is associated with \lstinline!u! and \lstinline!Clock(2, 10)! is associated with \lstinline!y!, then this is correct, but it would be an error if \lstinline!y! is associated with a \lstinline!Clock(1, 3)!. - \end{example} + One or more Rational interval clocks, provided they are consistent + with each other, see \autoref{sub-clock-inferencing}. + \begin{nonnormative} + For example, assume \lstinline!y = subSample(u)!, and \lstinline!Clock(1, 10)! is associated with \lstinline!u! and \lstinline!Clock(2, 10)! is associated with \lstinline!y!, + then this is correct, but it would be an error if \lstinline!y! is associated with a \lstinline!Clock(1, 3)!. + \end{nonnormative} \item - Exactly one real interval clock. - \begin{example} - Assume \lstinline!Clock c = Clock(2.5)!, then variables in the same base partition can be associated multiple times with \lstinline!c! but not multiple times with \lstinline!Clock(2.5)!. - \end{example} + Exactly one Real interval clock. + \begin{nonnormative} + Assume \lstinline!Clock c = Clock(2.5)!, then variables in the same base partition can be associated multiple times with \lstinline!c! but not multiple times + with \lstinline!Clock(2.5)!. + \end{nonnormative} \item - Exactly one event clock. + Exactly one Event clock. \item - A default clock, if neither a real interval, nor a rational interval nor an event clock is associated with a base partition. In this case the default clock is associated with the fastest sub-clock partition. + A default clock, if neither a Real interval, nor a Rational interval + nor an Event clock is associated with a base partition. In this case + the default clock is associated with the fastest sub-clock partition. \begin{nonnormative} - Typically, a tool will use \lstinline!Clock(1.0)! as a default clock and will raise a warning, that it selected a default clock. + Typically, a tool will use Clock(1.0) as a default clock and will raise a warning, that it selected a default clock. \end{nonnormative} \end{enumerate} Clock variables can be used in a restricted form of expressions. -Generally, every expression switching between clock variables must have parameter variability (in order that clock analysis can be performed when translating a model). -Thus subscripts on clock variables and conditions of if-then-else switching between clock variables must be parameter expressions, and there are similar restrictions for sub-clock conversion operators \cref{sub-clock-conversion-operators}. +Generally, every expression switching between clock variables must have +parametric variability (in order that clock analysis can be +performed when translating a model). +Thus subscripts on Clock-variables and conditions of if-then-else switching between Clock-variables must +be parameter expressions, and there are similar restrictions for sub-clock conversion operators \autoref{sub-clock-conversion-operators}. Otherwise, the following expressions are allowed: \begin{itemize} \item @@ -489,7 +557,7 @@ \section{Clock Constructors}\label{clock-constructors} \end{example} % Ok, that bug in pdflatex was weird: \emph{Example: \lstinline!Clock c1[3] ={Clock(1), Clock(2), Clock(3)}!} {]} \item - Array constructors of clocks: \lstinline!{}!, \lstinline![]!, \lstinline!cat!. + Array constructors of clocks: \lstinline!{}, [], cat(...)!. \item Array access of clocks. \begin{example} @@ -501,338 +569,324 @@ \section{Clock Constructors}\label{clock-constructors} \lstinline!c1 = c2! \end{example} \item - \lstinline!if!-expressions of clocks in equations. + If-expressions of clocks in equations. \begin{example} -\begin{lstlisting}[language=modelica] -Clock c2 = - if f > 0 then - subSample(c1, f) - elseif f < 0 then - superSample(c1, f) - else - c1; -\end{lstlisting} - \lstinline!! + \lstinline!Clock c2 = if f>0 then subSample(c1, f) elseif f<0 then superSample(c1, f) else c1! \end{example} \item - Clock variables can be declared in models, blocks, connectors, and records. - A clock variable can be declared with the prefixes \lstinline!input!, \lstinline!output!, \lstinline!inner!, \lstinline!outer!, but \emph{not} with the prefixes \lstinline!flow!, \lstinline!stream!, \lstinline!discrete!, \lstinline!parameter!, or \lstinline!constant!. + Clock variables can be declared in models, blocks, connectors, and + records,. A Clock variable can be declared with the prefixes + \textbf{input}, \textbf{output}, \textbf{inner}, \textbf{outer}, but + \textbf{not} with the prefixes \textbf{flow}, \textbf{stream}, + \textbf{discrete}, \textbf{parameter}, or \textbf{constant}. \begin{example} -\begin{lstlisting}[language=modelica] -connector ClockInput = input Clock; -\end{lstlisting} + \lstinline!connector ClockInput = input Clock;! \end{example} \end{itemize} -\section{Clocked State Variables}\label{clocked-state-variables} - -The previous value of a clocked variable can be accessed with the \lstinline!previous! operator, listed below. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!previous($u$)! & Previous value of clocked state variable & \Cref{modelica:previous} \\ -\hline -\end{tabular} -\end{center} +\section{Discrete States}\doublelabel{discrete-states} -A variable to which \lstinline!previous! has been applied is called a \firstuse{clocked state variable}\index{clocked!state variable}\index{state variable!clocked}. +The previous value of a clocked variable can be accessed with the +previous operator. Such a variable is called a clocked state variable. -\begin{operatordefinition}[previous] -\begin{synopsis}\begin{lstlisting} -previous($u$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The input argument $u$ is a component expression (\cref{def:component-expression}) or a parameter expression. -The return argument has the same type as the input argument. -Input and return arguments are on the same clock. -At the first tick of the clock of $u$ or after a reset transition (see \cref{reset-handling}), the start value of $u$ is returned, see \cref{initialization-of-clocked-partitions}. -At subsequent activations of the clock of $u$, the value of $u$ from the previous clock activation is returned. -\end{semantics} -\end{operatordefinition} +\begin{longtable}[]{|l|p{12cm}|} +\hline \endhead +\textbf{previous}(u) & The input argument is a \emph{component expression} (see +\autoref{argument-restrictions-component-expression}) or a parameter expression. The return argument has the +same type as the input argument. Input and return arguments are on the +same clock. At the first tick of the clock of u or after a reset +transition (see \autoref{reset-handling}), the start value of u is returned, see +\autoref{initialization-of-clocked-partitions}. At subsequent activations of the clock of u, the value of +u from the previous clock activation is returned.\\ \hline +\end{longtable} -\section{Partitioning Operators}\label{partitioning-operators} +\section{Partitioning Operators}\doublelabel{partitioning-operators} A set of \emph{clock conversion operators} together act as boundaries between different clock partitions. -\subsection{Base-clock conversion operators}\label{base-clock-conversion-operators} - -The operators listed below convert between a continuous-time and a clocked-time representation and vice versa. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!sample($u$, $\mathit{clock}$)! & Sample continuous-time expression & \Cref{modelica:clocked-sample} \\ -\lstinline!hold($u$)! & Zeroth order hold of clocked-time variable & \Cref{modelica:clocked-sample} \\ -\hline -\end{tabular} -\end{center} - -\begin{operatordefinition*}[sample]\label{modelica:clocked-sample}\index{sample@\robustinline{sample}!clocked} -\begin{synopsis}\begin{lstlisting} -sample($u$, $\mathit{clock}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Input argument $u$ is a continuous-time expression according to \cref{continuous-time-expressions}. -The optional input argument $\mathit{clock}$ is of type \lstinline!Clock!, and can in a call be given as a named argument (with the name $\mathit{clock}$), or as positional argument. -The operator returns a clocked variable that has $\mathit{clock}$ as associated clock and has the value of the left limit of $u$ when $\mathit{clock}$ is active (that is the value of $u$ just before the event of \lstinline!c! is triggered). -If $\mathit{clock}$ is not provided, it is inferred, see \cref{sub-clock-inferencing}. -\begin{nonnormative} -Since the operator returns the left limit of $u$, it introduces an infinitesimal small delay between the continuous-time and the clocked partition. This corresponds to the reality, where a sampled data system cannot act infinitely fast and even for a very idealized simulation, an infinitesimal small delay is present. The consequences for the sorting are discussed below. - -Input argument $u$ can be a general expression, because the argument is continuous-time and therefore has always a value. It can also be a constant, a parameter or a piecewise constant expression. - -Note that \lstinline!sample! is an overloaded function: -If \lstinline!sample! has two positional input arguments and the second argument is of type \lstinline!Real!, it is the operator from \cref{event-related-operators-with-function-syntax}. -If \lstinline!sample! has one input argument, or it has two input arguments and the second argument is of type \lstinline!Clock!, it is the base-clock conversion operator from this section. -\end{nonnormative} -\end{semantics} -\end{operatordefinition*} - -\begin{operatordefinition}[hold] -\begin{synopsis}\begin{lstlisting} -hold($u$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -Input argument $u$ is a clocked (\cref{def:clocked-variable}) component expression (\cref{def:component-expression}) or a parameter expression. -The operator returns a piecewise constant signal of the same type as $u$. -When the clock of $u$ ticks, the operator returns $u$ and otherwise returns the value of $u$ from the last clock activation. -Before the first clock activation of $u$, the operator returns the start value of $u$, see \cref{initialization-of-clocked-partitions}. -\begin{nonnormative} -Since the input argument is not defined before the first tick of the clock of $u$, the restriction is present, that it must be a component expression (or a parameter expression), in order that the initial value of $u$ can be used in such a case. -\end{nonnormative} -\end{semantics} -\end{operatordefinition} +\subsection{Base-clock conversion operators}\doublelabel{base-clock-conversion-operators} + +The following operators convert between a continuous-time and a +clocked-time representation and vice versa: +\begin{longtable}[]{|l|p{12cm}|} +\hline \endhead +\textbf{sample}(u, clock) & +Input argument u is a continuous-time expression according to +\autoref{continuous-time-expressions}. The optional input argument clock is of type Clock, and can in a call be given as a named argument (with the name clock), +or as positional argument. +The operator +returns a clocked variable that has clock as associated clock and has the +value of the left limit of u when clock is active (that is the value of u +just before the event of c is triggered). If argument clock is not provided, +it is inferred, see \autoref{sub-clock-inferencing}. +\par +\begin{nonnormative*} +Since the operator returns the left limit of u, it introduces +an infinitesimal small delay between the continuous-time and the clocked +partition. This corresponds to the reality, where a sampled data system +cannot act infinitely fast and even for a very idealized simulation, an +infinitesimal small delay is present. The consequences for the sorting +are discussed below. + +Input argument u can be a general expression, because the argument +is continuous-time and therefore has always a value. It can also be a +constant, a parameter or a piecewise constant expression. + +Note that \textbf{sample}() is an overloaded function: If +\textbf{sample}(..) has two positional input arguments and the second argument is +of type Real, it is the operator from \autoref{event-related-operators-with-function-syntax}. If +\textbf{sample}(..) has one input argument, or it has two input +arguments and the second argument if of type Clock, it is the base-clock +conversion operator from this section. +\end{nonnormative*} +\\ \hline +\textbf{hold}(u) & +Input argument u is a clocked Component Expression (see \autoref{argument-restrictions-component-expression}) +or a parameter expression. The operator returns a piecewise constant +signal of the same type of u. When the clock of u ticks, the operator +returns u and otherwise returns the value of u from the last clock +activation. Before the first clock activation of u, the operator returns +the start value of u, see \autoref{initialization-of-clocked-partitions}. +\par +\begin{nonnormative*} +Since the input argument is not defined before the first tick of the clock of u, the restriction is present, that it must be a Component Expression (or a parameter expression), +in order that the initial value of u can be used in such a case. +\end{nonnormative*} +\\ \hline +\end{longtable} \begin{example} Assume there is the following model: \begin{lstlisting}[language=modelica] - Real y(start = 1), yc; + Real y(start=1), yc; equation der(y) + y = 2; - yc = sample(y, Clock(0.1)); + yc = sample (y, Clock(0.1)); initial equation der(y) = 0; \end{lstlisting} -The value of \lstinline!yc! at the first clock tick is $\text{\lstinline!yc!} = 2$ (and not $\text{\lstinline!yc!} = 1$). The reason is that the continuous-time model \lstinline!der(y) + y = 2! is first initialized and after initialization \lstinline!y! has the value 2. At the first clock tick at $\text{\lstinline!time!} = 0$, the left limit of \lstinline!y! is 2 and therefore $\text{\lstinline!yc!} = 2$. +The value of \lstinline!yc! at the first clock tick is \lstinline!yc=2! (and not \lstinline!yc=1!). The reason is that the continuous-time model \lstinline!der(y)+y=2! +is first initialized and after initialization \lstinline!y! has the value \lstinline!2!. At the first clock tick at time=0, the left limit of \lstinline!y! is \lstinline!2! +and therefore \lstinline!yc = 2!. + +Sorting of a simulation model:\\ +Since sample(u) returns the left limit of u, and the left limit of u is +a known value, all inputs to a base-clock partition are treated as known +during sorting. Since a periodic and interval clock can tick at most +once at a time instant, and since the left limit of a variable does not +change during event iteration (i.e., re-evaluating a base-clock +partition associated with a condition clock always gives the same result +because the sample(u) inputs do not change and therefore need not to be +re-evaluated) all base-clock partitions, see \autoref{base-clock-partitioning}, need +not to be sorted with respect to each other. Instead, at an event +instant, active base-clock partitions can be evaluated first (and once) +in any order. Afterwards, the continuous-time partition is evaluated. +Event iteration takes place only over the continuous-time partition. In +such a scenario, accessing the left limit of u in sample(u) just means +to pick the latest available value of u when the partition is entered, +storing it in a local variable of the partition and only using this +local copy during evaluation of the equations in this partition. \end{example} -\subsubsection{Sorting of a simulation model} +\subsection{Sub-clock conversion operators}\doublelabel{sub-clock-conversion-operators} -\begin{nonnormative} -Since \lstinline!sample(u)! returns the left limit of \lstinline!u!, and the left limit of \lstinline!u! is a known value, all inputs to a base-clock partition are treated as known during sorting. -Since a periodic and interval clock can tick at most once at a time instant, and since the left limit of a variable does not change during event iteration (i.e., re-evaluating a base-clock partition associated with a condition clock always gives the same result because the \lstinline!sample(u)! inputs do not change and therefore need not to be re-evaluated) all base-clock partitions, see \cref{base-clock-partitioning}, need not to be sorted with respect to each other. -Instead, at an event instant, active base-clock partitions can be evaluated first (and once) in any order. -Afterwards, the continuous-time partition is evaluated. +The following operators convert between synchronous clocks: +\begin{longtable}[]{|p{4cm}|p{11cm}|} +\hline \endhead +\multicolumn{2}{|p{15cm}|}{ +The operators in this table have the following properties: -Event iteration takes place only over the continuous-time partition. -In such a scenario, accessing the left limit of \lstinline!u! in \lstinline!sample(u)! just means to pick the latest available value of \lstinline!u! when the partition is entered, storing it in a local variable of the partition and only using this local copy during evaluation of the equations in this partition. -\end{nonnormative} +The input argument u is a clocked expression or an expression of type +Clock. (The operators can operate on all types of clocks.) If +u is a clocked expression, the operator returns a clocked variable that +has the same type as the expression. If u is an expression of type +Clock, the operator returns a Clock - except for noClock where it is an error. -\subsection{Sub-clock conversion operators}\label{sub-clock-conversion-operators} +The optional input arguments \lstinline!factor! (default=0, min=0), and \lstinline!resolution! +(default=1, min=1) are parameter expressions of type Integer. -The operators listed below convert between synchronous clocks. -\begin{center} -\begin{tabular}{l|l l} -\hline -\tablehead{Expression} & \tablehead{Description} & \tablehead{Details}\\ -\hline -\hline -\lstinline!subSample($u$, factor)! & Clock that is slower by a factor & \Cref{modelica:subSample}\\ -\lstinline!superSample($u$, factor)! & Clock that is faster by a factor & \Cref{modelica:superSample}\\ -\lstinline!shiftSample($u$, shiftCounter, resolution)! & Clock with time-shifted ticks & \Cref{modelica:shiftSample}\\ -\lstinline!backSample($u$, backCounter, resolution)! & Inverse of \lstinline!shiftSample! & \Cref{modelica:backSample}\\ -\lstinline!noClock($u$)! & Clock that is always inferred & \Cref{modelica:noClock}\\ -\hline -\end{tabular} -\end{center} - -These operators have the following properties: -\begin{itemize} -\item - The input argument $u$ is a clocked expression or an expression of type \lstinline!Clock!. (The operators can operate on all types of clocks.) If $u$ is a clocked expression, the operator returns a clocked variable that has the same type as the expression. If $u$ is an expression of type \lstinline!Clock!, the operator returns a \lstinline!Clock! -- except for \lstinline!noClock! where it is an error. -\item - The optional input arguments \lstinline!factor! (defaults to 0, with \lstinline!min = 0!), and \lstinline!resolution! (defaults to 1, with \lstinline!min = 1!) are parameter expressions of type \lstinline!Integer!. -\item - Calls of the operators can use named arguments for the multi-letter arguments (i.e.\ not for $u$) with the given names, or positional arguments. +Calls of the operators can use named arguments for the multi-letter arguments (i.e. not for u) with the given names, or positional arguments. \begin{nonnormative} Named arguments can make the calls easier to understand. \end{nonnormative} -\item - The input arguments \lstinline!shiftCounter! and \lstinline!backCounter! are parameter expressions of type \lstinline!Integer! with \lstinline!min = 0!. -\end{itemize} - -\begin{operatordefinition}[subSample] -\begin{synopsis}\begin{lstlisting} -subSample($u$, factor=$\mathit{factor}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The clock of \lstinline!y = subSample($u$, $\mathit{factor}$)! is $\mathit{factor}$ times slower than the clock of $u$. -At every $\mathit{factor}$ ticks of the clock of $u$, the operator returns the value of $u$. -The first activation of the clock of \lstinline!y! coincides with the first activation of the clock of $u$, and then every activation of the clock of \lstinline!y! coincides with the every $\mathit{factor}$th activativation of the clock of $u$. -If $\mathit{factor}$ is not provided or is equal to zero, it is inferred, see \cref{sub-clock-inferencing}. -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[superSample] -\begin{synopsis}\begin{lstlisting} -superSample($u$, factor=$\mathit{factor}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The clock of \lstinline!y = superSample($u$, $\mathit{factor}$)! is $\mathit{factor}$ times faster than the clock of $u$. At every tick of the clock of \lstinline!y!, the operator returns the value of $u$ from the last tick of the clock of $u$. The first activation of the clock of \lstinline!y! coincides with the first activation of the clock of $u$, and then the interval between activations of the clock of $u$ is split equidistantly into $\mathit{factor}$ activations, such that the activation $1 + k \cdot \mathit{factor}$ of \lstinline!y! coincides with the $1 + k$ activation of $u$. +The input arguments \lstinline!shiftCounter! and \lstinline!backCounter! are parameter +expressions of type Integer (min=0).} +\\ \hline +\textbf{subSample}(u, factor) +& +The clock of y = \textbf{subSample}(u,factor) is factor-times slowerthan the clock of u. At every factor ticks of the clock of u, the +operator returns the value of u.. The first activation of the clock of y +coincides with the first activation of the clock of u, and then every activation of the clock of y +coincides with the every factor-th activativation of the clock of u. If argument +factor is not provided or is equal to zero, it is inferred, see +\autoref{sub-clock-inferencing}. +\\ \hline +\textbf{superSample}(u, factor) +& +The clock of y = \textbf{superSample}(u,factor) is factor-times faster +than the clock of u. At every tick of the clock of y, the operator +returns the value of u from the last tick of the clock of u. The first +activation of the clock of y coincides with the first activation of the +clock of u, and then the interval between activations of the clock of u is split equidistantly +into factor activations, such that the activation 1+k*factor of y coincides with the 1+k activation of u. \begin{nonnormative} -Thus \lstinline!subSample(superSample($u$, $\mathit{factor}$), $\mathit{factor}$)! = $u$. +Thus \lstinline!subSample(superSample(u, factor), factor)=u! \end{nonnormative} -If $\mathit{factor}$ is not provided or is equal to zero, it is inferred, see \cref{sub-clock-inferencing}. -If an event clock is associated to a base-clock partition, all its sub-clock partitions must have resulting clocks that are sub-sampled with an \lstinline!Integer! factor with respect to this base-clock. - -\begin{example} +If argument factor is not provided or is equal to zero, it +is inferred, see \autoref{sub-clock-inferencing}. If an Event clock is associated to a +base-clock partition, all its sub-clock partitions must have resulting +clocks that are sub-sampled with an Integer factor with respect to this +base clock. +\par +\begin{example*} \begin{lstlisting}[language=modelica] -Clock u = Clock(x > 0); -Clock y1 = subSample(u, 4); -Clock y2 = superSample(y1, 2); // fine; y2 = subSample(u, 2) -Clock y3 = superSample(u, 2); // error -Clock y4 = superSample(y1, 5); // error + Clock u = Clock(x > 0); + Clock y1 = subSample(u,4); + Clock y2 = superSample(y1,2); // fine; y2 = subSample(u,2) + Clock y3 = superSample(u ,2); // error + Clock y4 = superSample(y1,5); // error \end{lstlisting} -\end{example} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[shiftSample] -\begin{synopsis}\begin{lstlisting} -shiftSample($u$, shiftCounter=$k$, resolution=$\mathit{resolution}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The operator \lstinline!c = shiftSample($u$, $k$, $\mathit{resolution}$)! splits the interval between ticks of $u$ into $\mathit{resolution}$ equidistant intervals $i$. The clock \lstinline!c! then ticks $k$ intervals $i$ after each tick of $u$. +\end{example*} +\\ \hline +\begin{tabular}{@{}p{4cm}@{}} +\textbf{shiftSample}(u,\\ +shiftCounter, resolution) +\end{tabular} +& The operator \lstinline!c=shiftSample(u,k,resolution)! splits the interval between +ticks of \lstinline!u! into \lstinline!resolution! equidistant intervals \lstinline!i!. +The clock \lstinline!c! then ticks \lstinline!k! intervals \lstinline!i! after each tick of \lstinline!u!. It leads to \begin{lstlisting}[language=modelica] -shiftSample($u$, $k$, $\mathit{resolution}$) = - subSample(shiftSample(superSample($u$, $\mathit{resolution}$), $k$), $\mathit{resolution}$) +shiftSample(u,k,resolution)=subSample(shiftSample(superSample(u,resolution),k),resolution) \end{lstlisting} - -\begin{nonnormative} -Note, due to the restriction of \lstinline!superSample! on event clocks, \lstinline!shiftSample! can only shift the number of ticks of the event clock, but cannot introduce new ticks. Example: +\par +\begin{nonnormative*} +Note, due to the restriction of superSample on Event clocks, shiftSample can only shift the number of ticks of the Event clock, but cannot introduce new ticks. Example: \begin{lstlisting}[language=modelica] // Rational interval clock -Clock u = Clock(3, 10); // ticks: 0, 3/10, 6/10, $\ldots$ -Clock y1 = shiftSample(u, 1, 3); // ticks: 1/10, 4/10, $\ldots$ +Clock u = Clock(3, 10); // ticks: 0, 3/10, 6/10, .. +Clock y1 = shiftSample(u,1,3); // ticks: 1/10, 4/10, +... // Event clock -Clock u = Clock(sin(2 * pi * time) > 0, startInterval = 0.0); - // ticks: 0.0, 1.0, 2.0, 3.0, $\ldots$ -Clock y1 = shiftSample(u, 2); // ticks: 2.0, 3.0, $\ldots$ -Clock y2 = shiftSample(u, 2, 3); // error (resolution must be 1) +Clock u = Clock(sin(2*pi*time)>0, startInterval=0.0) +// ticks: 0.0, 1.0, 2.0, 3.0, ... +Clock y1 = shiftSample(u,2); // ticks: 2.0, 3.0, ... +Clock y2 = shiftSample(u,2,3);// error (resolution must be 1) \end{lstlisting} -\end{nonnormative} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[backSample] -\begin{synopsis}\begin{lstlisting} -backSample($u$, backCounter=$\mathit{cnt}$, resolution=$\mathit{res}$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The input argument $u$ is either a component expression (\cref{def:component-expression}) or an expression of type \lstinline!Clock!. -This is an inverse of \lstinline!shiftSample! such that \lstinline!Clock y = backSample($u$, $\mathit{cnt}$, $\mathit{res}$)! implicitly defines a clock \lstinline!y! such that \lstinline!shiftSample(y, $\mathit{cnt}$, $\mathit{res}$)! activates at the same times as $u$. -It is an error if the clock of \lstinline!y! starts before the base-clock of $u$. - -At every tick of the clock of \lstinline!y!, the operator returns the value of $u$ from the last tick of the clock of $u$. -If $u$ is a clocked component expression, the operator returns the start value of $u$, see \cref{initialization-of-clocked-partitions}, before the first tick of the clock of $u$. - -\begin{example} +\end{nonnormative*} +\\ \hline +\begin{tabular}{@{}p{4cm}@{}} +\textbf{backSample}(u,\\ +backCounter, resolution) +\end{tabular} +& +The input argument u is either a \emph{component expression} (see +\autoref{argument-restrictions-component-expression}) or an expression of type Clock. +This is an inverse of shiftSample such that \lstinline!Clock y=backSample(u, cnt, res)! implicitly defines +a clock y such that \lstinline!shiftSample(y, cnt, res)! activates at the same times as u. +It is an +error, if the clock of y starts before the base clock of u. + +At every +tick of the clock of y, the operator returns the value of u from the +last tick of the clock of u. If u is a clocked Component Expression, the +operator returns the start value of u, see \autoref{initialization-of-clocked-partitions}, before the +first tick of the clock of u. +\par +\begin{example*} \begin{lstlisting}[language=modelica] // Rational interval clock 1 -Clock u = Clock(3, 10); // ticks: 0, 3/10, 6/10, $\ldots$ -Clock y1 = shiftSample(u, 3); // ticks: 9/10, 12/10, $\ldots$ -Clock y2 = backSample(y1, 2); // ticks: 3/10, 6/10, $\ldots$ -Clock y3 = backSample(y1, 4); // error (ticks before u) -Clock y4 = shiftSample(u, 2, 3); // ticks: 2/10, 5/10, $\ldots$ -Clock y5 = backSample(y4, 1, 3); // ticks: 1/10, 4/10, $\ldots$ + +Clock u = Clock(3, 10); // ticks: 0, 3/10, 6/10, .. +Clock y1 = shiftSample(u,3); // ticks: 9/10, 12/10, .. +Clock y2 = backSample(y1,2); // ticks: 3/10, 6/10, +... +Clock y3 = backSample(y1,4); // error (ticks before u) +Clock y4 = shiftSample(u,2,3); // ticks: 2/10, 5/10, +... +Clock y5 = backSample(y4,1,3); // ticks: 1/10, 4/10, +... // Event clock -Clock u = Clock(sin(2 * pi * time) > 0, startInterval = xx) - // ticks: 0, 1.0, 2.0, 3.0, $\ldots$ -Clock y1 = shiftSample(u, 3); // ticks: 3.0, 4.0, $\ldots$ -Clock y2 = backSample(y1, 2); // ticks: 1.0, 2.0, $\ldots$ +Clock u = Clock(sin(2*pi*time) > 0, startInterval=xx) +// ticks: 0, 1.0, 2.0, 3.0, .... +Clock y1 = shiftSample(u,3); // ticks: 3.0, 4.0, ... +Clock y2 = backSample(y1,2); // ticks: 1.0, 2.0, ... \end{lstlisting} -\end{example} -\end{semantics} -\end{operatordefinition} - -\begin{operatordefinition}[noClock] -\begin{synopsis}\begin{lstlisting} -noClock($u$) -\end{lstlisting}\end{synopsis} -\begin{semantics} -The clock of \lstinline!y = noClock($u$)! is always inferred, and $u$ must be part of the same base-clock as \lstinline!y!. At every tick of the clock of \lstinline!y!, the operator returns the value of $u$ from the last tick of the clock of $u$. If \lstinline!noClock($u$)! is called before the first tick of the clock of $u$, the start value of $u$ is returned. -\end{semantics} -\end{operatordefinition} +\end{example*} +\\ \hline +\textbf{noClock}(u) +& +The clock of y = \textbf{noClock}(u) is always inferred. At every tick +of the clock of y, the operator returns the value of u from the last +tick of the clock of u. If \textbf{noClock}(u) is called before the +first tick of the clock of u, the start value of u is returned.\\ \hline +\end{longtable} \begin{nonnormative} -Clarification of \lstinline!backSample!: +Clarification of backSample(..) operator: -Let $a$ and $b$ be positive integers with $a < b$, and +Let a and b be positive integers with a \textless{} b, and \begin{lstlisting}[language=modelica] -yb = backSample(u, $a$, $b$) -ys = shiftSample(u, $b-a$, $b$) +yb = backSample (u, a , b) +ys = shiftSample(u, b-a, b) \end{lstlisting} Then when \lstinline!ys! exists, also \lstinline!yb! exists and \lstinline!ys = yb!. -The variable \lstinline!yb! exists for the above parameterization with \lstinline!a < b! one clock tick before \lstinline!ys!. -Therefore, \lstinline!backSample! is basically a \lstinline!shiftSample! with a different parameterization and the clock of \lstinline!backSample.y! ticks before the clock of \lstinline!u!. -Before the clock of \lstinline!u! ticks, \lstinline!yb = u.start!. +The variable \lstinline!yb! exists for the above parameterization with \lstinline!a= subSamplingFactor_$i$_$j$; +Clock_i_j_activated = BaseClock_i_activated and Clock_i_j_ticks >= subSamplingFactor_i_j; \end{lstlisting} -The \lstinline!Clock_$i$_$j$_activated! flag is used as the guard for the sub +The Clock\_i\_j\_activated flag is used as the guard for the sub partition equations. \begin{nonnormative} @@ -1446,15 +1527,15 @@ \section{Semantics}\label{semantics} \begin{lstlisting}[language=modelica] model ClockTicks Integer second = sample(1, Clock(1)); - Integer seconds(start = -1) = mod(previous(seconds) + second, 60); - Integer milliSeconds(start = -1) = - mod(previous(milliSeconds) + superSample(second, 1000), 1000); - Integer minutes(start = -1) = - mod(previous(minutes) + subSample(second, 60), 60); + Integer seconds(start=-1) = mod(previous(seconds) + second, 60); + Integer milliSeconds(start=-1)= + mod(previous(milliSeconds) + superSample(second, 1000), 1000); + Integer minutes(start=-1)= + mod(previous(minutes) + subSample(second, 60), 60); end ClockTicks; \end{lstlisting} -A possible implementation model is shown below using Modelica~3.2 semantics. The base-clock is determined to 0.001 seconds and the sub-sampling factors to 1000 and 60000. +A possible implementation model is shown below using Modelica 3.2 semantics. The base-clock is determined to 0.001 seconds and the sub-sampling factors to 1000 and 60000. \begin{lstlisting}[language=modelica] model ClockTicksWithModelica32 @@ -1464,9 +1545,9 @@ \section{Semantics}\label{semantics} Integer minutes(start = -1); Boolean BaseClock_1_activated; - Integer Clock_1_1_ticks(start = 59999); - Integer Clock_1_2_ticks(start = 0); - Integer Clock_1_3_ticks(start = 999); + Integer Clock_1_1_ticks(start=59999); + Integer Clock_1_2_ticks(start=0); + Integer Clock_1_3_ticks(start=999); Boolean Clock_1_1_activated; Boolean Clock_1_2_activated; Boolean Clock_1_3_activated; @@ -1474,30 +1555,27 @@ \section{Semantics}\label{semantics} // Prepare clock tick BaseClock_1_activated = sample(0, 0.001); when BaseClock_1_activated then - Clock_1_1_ticks = - if pre(Clock_1_1_ticks) < 60000 then 1 + pre(Clock_1_1_ticks) else 1; - Clock_1_2_ticks = - if pre(Clock_1_2_ticks) < 1 then 1 + pre(Clock_1_2_ticks) else 1; - Clock_1_3_ticks = - if pre(Clock_1_3_ticks) < 1000 then 1 + pre(Clock_1_3_ticks) else 1; + Clock_1_1_ticks = if pre(Clock_1_1_ticks) < 60000 then 1+pre(Clock_1_1_ticks) else 1; + Clock_1_2_ticks = if pre(Clock_1_2_ticks) < 1 then 1+pre(Clock_1_2_ticks) else 1; + Clock_1_3_ticks = if pre(Clock_1_3_ticks) < 1000 then 1+pre(Clock_1_3_ticks) else 1; end when; Clock_1_1_activated = BaseClock_1_activated and Clock_1_1_ticks >= 60000; Clock_1_2_activated = BaseClock_1_activated and Clock_1_2_ticks >= 1; Clock_1_3_activated = BaseClock_1_activated and Clock_1_3_ticks >= 1000; - // ----------------------------------------------------------------------- + // ----------------------------------------------------------------------------- // Sub partition execution when {Clock_1_3_activated} then - second = 1; + second = 1; end when; when {Clock_1_1_activated} then - minutes = mod(pre(minutes) + second, 60); + minutes = mod(pre(minutes)+second, 60); end when; when {Clock_1_2_activated} then - milliSeconds = mod(pre(milliSeconds) + second, 1000); + milliSeconds = mod(pre(milliSeconds)+second, 1000); end when; when {Clock_1_3_activated} then - seconds = mod(pre(seconds) + second, 60); + seconds = mod(pre(seconds)+second, 60); end when; end ClockTicksWithModelica32; \end{lstlisting} diff --git a/chapters/syntax.tex b/chapters/syntax.tex index 7df78bb51..3e8f6ccd6 100644 --- a/chapters/syntax.tex +++ b/chapters/syntax.tex @@ -1,104 +1,95 @@ -\chapter{Modelica Concrete Syntax}\label{modelica-concrete-syntax} - -\section{Lexical conventions}\label{lexical-conventions} +\chapter{Modelica Concrete Syntax}\doublelabel{modelica-concrete-syntax} +\section{Lexical conventions}\doublelabel{lexical-conventions} The following syntactic meta symbols are used (extended BNF): -\begin{center} -\begin{tabular}{c l} -\hline -\tablehead{Syntax} & \tablehead{Description}\\ -\hline -\hline -\lstinline[language=grammar]![ $\ldots$ ]! & Optional\\ -\lstinline[language=grammar]!{ $\ldots$ }! & Repeat zero or more times\\ -\lstinline[language=grammar]!$\ldots$ | $\ldots$! & Alternatives\\ -\lstinline[language=grammar]!"$\mathit{text}$"! & The $\mathit{text}$ is treated as a single token (no white-space between any characters)\\ -\hline -\end{tabular} -\end{center} - -The following lexical units are defined: -% Beware that the first lines of the lexing rules below are duplicated in \cref{identifiers}, and must be kept in sync. \begin{lstlisting}[language=grammar] -IDENT = NON-DIGIT { DIGIT | NON-DIGIT } | Q-IDENT -Q-IDENT = "'" { Q-CHAR | S-ESCAPE } "'" -NON-DIGIT = "_" | letters "a" $\ldots$ "z" | letters "A" $\ldots$ "Z" -DIGIT = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" -Q-CHAR = NON-DIGIT | DIGIT | "!" | "#" | "$\mbox{\textdollar}$" | "%" | "&" | "(" | ")" - | "*" | "+" | "," | "-" | "." | "/" | ":" | ";" | "<" | ">" | "=" - | "?" | "@" | "[" | "]" | "^" | "{" | "}" | "|" | "~" | " " | """ -S-ESCAPE = "\'" | "\"" | "\?" | "\\" - | "\a" | "\b" | "\f" | "\n" | "\r" | "\t" | "\v" +[ ] optional +{ } repeat zero or more times +| or +"text" The text is treated as a single token (no whitespace between any characters) +\end{lstlisting} + +The following lexical units are defined (the ones in boldface are the +ones used in the grammar, the rest are just internal to the definition +of other lexical units): +\begin{lstlisting}[language=grammar] +IDENT = NONDIGIT { DIGIT | NONDIGIT } | Q-IDENT +Q-IDENT = "'" ( Q-CHAR | S-ESCAPE ) { Q-CHAR | S-ESCAPE | """ } "'" +NONDIGIT = "_" | letters "a" to "z" | letters "A" to "Z" STRING = """ { S-CHAR | S-ESCAPE } """ S-CHAR = see below +Q-CHAR = NONDIGIT | DIGIT | "!" | "#" | "$" | "%" | "&" | "(" | ")" | "*" | "+" | "," | + "-" | "." | "/" | ":" | ";" | "<" | ">" | "=" | "?" | "@" | "[" | "]" | "^" | + "{" | "}" | "|" | "~" | " " +S-ESCAPE = "\'" | "\"" | "\?" | "\\" | + "\a" | "\b" | "\f" | "\n" | "\r" | "\t" | "\v" +DIGIT = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" UNSIGNED-INTEGER = DIGIT { DIGIT } -UNSIGNED-REAL = - UNSIGNED-INTEGER "." [ UNSIGNED-INTEGER ] - | UNSIGNED_INTEGER [ "." [ UNSIGNED_INTEGER ] ] - ( "e" | "E" ) [ "+" | "-" ] UNSIGNED-INTEGER - | "." UNSIGNED-INTEGER [ ( "e" | "E" ) [ "+" | "-" ] UNSIGNED-INTEGER ] +UNSIGNED-REAL = UNSIGNED-INTEGER "." [ UNSIGNED-INTEGER ] + | UNSIGNED_INTEGER [ "." [ UNSIGNED_INTEGER ] ] ( "e" | "E" ) [ "+" | "-" ] UNSIGNED-INTEGER + | "." UNSIGNED-INTEGER [ ( "e" | "E" ) [ "+" | "-" ] UNSIGNED-INTEGER ] \end{lstlisting} -\lstinline[language=grammar]!S-CHAR! is any member of the Unicode character set (\url{http://www.unicode.org}; see \cref{mapping-package-class-structures-to-a-hierarchical-file-system} for storing as UTF-8 on files) except double-quote `"', and backslash `\textbackslash{}'. +\textrm{S-CHAR} is any member of the Unicode character set +(\url{http://www.unicode.org}; see \autoref{mapping-package-class-structures-to-a-hierarchical-file-system} for storing as UTF-8 on files) except double-quote """, and backslash "\textbackslash{}" -For identifiers the redundant escapes (`\lstinline!\?!' and `\lstinline!\"!') are the same as the corresponding non-escaped variants (`\lstinline!?!' and '\lstinline!"!'). -The single quotes are part of an identifier. -For example, the identifiers \lstinline!'x'! and \lstinline!x! are different. +For identifiers the redundant escapes (`\lstinline!\?!' and `\lstinline!\"!') are the same as the corresponding non-escaped +variants (`\lstinline!?!' and '\lstinline!"!'). The single quotes are part of an identifier. E.g. \lstinline!'x'! and +\lstinline!x! are different IDENTs. Note: \begin{itemize} \item - White-space and comments can be used between separate lexical units and/or symbols, and also separates them. Each lexical unit will consume the maximum number of characters from the input stream. - White-space and comments cannot be used inside other lexical units, except for \lstinline[language=grammar]!STRING! and \lstinline[language=grammar]!Q-IDENT! where they are treated as part of the \lstinline[language=grammar]!STRING! or \lstinline[language=grammar]!Q-IDENT! lexical unit. + Whitespace and comments can be used between separate lexical units + and/or symbols, and also separates them. Each lexical unit will consume the maximum number of characters from the input stream. + Whitespace and comments + cannot be used inside other lexical units, except for STRING and + Q-IDENT where they are treated as part of the STRING or Q-IDENT + lexical unit. \item - Concatenation of string literals requires a binary expression. - For example, \lstinline!"a" + "b"! evaluates to \lstinline!"ab"!. - There is no support for the C/C++ style of concatenating adjacent string literal tokens (for example, \lstinline[language=C]!"a" "b"! becoming \lstinline[language=C]!"ab"!). + String constant concatenation \lstinline!"a" "b"! becoming \lstinline!"ab"! (as in C) is + replaced by the \lstinline!"+"! operator in Modelica. \item - Modelica uses the same comment syntax as C++ and Java (i.e., \lstinline!//! signals the start of a line comment and \lstinline!/* $\ldots$ */! is a multi-line comment); comments may contain any Unicode character. - Modelica also has structured comments in the form of annotations and string comments. + Modelica uses the same comment syntax as C++ and Java (i.e., \lstinline!//! + signals the start of a line comment and \lstinline!/*! .... \lstinline!*/! is a multi-line + comment); comments may contain any Unicode character. Modelica also + has structured comments in the form of annotations and string + comments. \item - Each description-string or string in annotations (= \lstinline[language=grammar]!STRING! with production annotation-clause in the grammar) may contain any member of the Unicode character set. - All other strings have to contain only the subset of Unicode characters identical with the 7-bit US-ASCII character set. + Each description-string or string in annotations (= STRING with production annotation-clause in the + grammar) may contain any member of the Unicode character set. All + other strings have to contain only the sub-set of Unicode characters + identical with the 7-bit US-ASCII character set. \begin{nonnormative} - As a consequence, operators like `\lstinline!>!' or `\lstinline!! and \lstinline!! or \lstinline!! and \lstinline!! define optionally begin and end of content that is HTML encoded. + As a consequence, operators like `\textgreater{}' or `\textless{}', and external functions only operate on ASCII strings and not on Unicode-strings. + Within a description-string the tags \lstinline!! and \lstinline!! or \lstinline!! and \lstinline!! define optionally begin + and end of content that is HTML encoded. \end{nonnormative} \item Boldface denotes keywords of the Modelica language. Keywords are - reserved words and shall not be used as identifiers. + reserved words and may not be used as identifiers. \item Productions use hyphen as separator both in the grammar and in the text. Previously the grammar used underscore. \end{itemize} -\section{Grammar}\label{grammar} - -\subsection{Stored Definition -- Within}\label{stored-definition-within} - +\section{Grammar}\doublelabel{grammar} +\subsection{Stored Definition -- Within}\doublelabel{stored-definition-within} \begin{lstlisting}[language=grammar] -stored-definition : +stored-definition: [ within [ name ] ";" ] { [ final ] class-definition ";" } \end{lstlisting} -\subsection{Class Definition}\label{class-definition} - +\subsection{Class Definition}\doublelabel{class-definition} \begin{lstlisting}[language=grammar] class-definition : - [ encapsulated ] class-prefixes class-specifier + [ encapsulated ] class-prefixes + class-specifier class-prefixes : [ partial ] - ( class - | model - | [ operator ] record - | block - | [ expandable ] connector - | type - | package - | [ pure | impure ] [ operator ] function - | operator - ) + ( class | model | [ operator ] record | block | [ expandable ] connector | type | + package | [ pure | impure ] [ operator ] function | operator ) class-specifier : long-class-specifier | short-class-specifier | der-class-specifier @@ -106,31 +97,29 @@ \subsection{Class Definition}\label{class-definition} long-class-specifier : IDENT description-string composition end IDENT | extends IDENT [ class-modification ] description-string composition - end IDENT + end IDENT short-class-specifier : IDENT "=" base-prefix type-specifier [ array-subscripts ] - [ class-modification ] description - | IDENT "=" enumeration "(" ( [ enum-list ] | ":" ) ")" description + [ class-modification ] comment + | IDENT "=" enumeration "(" ( [ enum-list ] | ":" ) ")" comment der-class-specifier : - IDENT "=" der "(" type-specifier "," IDENT { "," IDENT } ")" description + IDENT "=" der "(" type-specifier "," IDENT { "," IDENT } ")" comment base-prefix : [ input | output ] -enum-list : - enumeration-literal { "," enumeration-literal } +enum-list : enumeration-literal { "," enumeration-literal} -enumeration-literal : - IDENT description +enumeration-literal : IDENT comment composition : element-list - { public element-list - | protected element-list - | equation-section - | algorithm-section + { public element-list | + protected element-list | + equation-section | + algorithm-section } [ external [ language-specification ] [ external-function-call ] [ annotation-clause ] ";" ] @@ -147,30 +136,23 @@ \subsection{Class Definition}\label{class-definition} { element ";" } element : - import-clause - | extends-clause - | [ redeclare ] - [ final ] - [ inner ] [ outer ] - ( class-definition - | component-clause - | replaceable ( class-definition | component-clause ) - [ constraining-clause description ] - ) + import-clause | + extends-clause | + [ redeclare ] + [ final ] + [ inner ] [ outer ] + ( class-definition | component-clause | + replaceable ( class-definition | component-clause ) + [ constraining-clause comment ] ) import-clause : - import - ( IDENT "=" name - | name [ ".*" | "." ( "*" | "{" import-list "}" ) ] - ) - description + import ( IDENT "=" name | name [ ".*" | "." ( "*" | "{" import-list "}" ) ] ) comment import-list : IDENT { "," IDENT } \end{lstlisting} -\subsection{Extends}\label{extends} - +\subsection{Extends}\doublelabel{extends} \begin{lstlisting}[language=grammar] extends-clause : extends type-specifier [ class-modification ] [ annotation-clause ] @@ -179,32 +161,28 @@ \subsection{Extends}\label{extends} constrainedby type-specifier [ class-modification ] \end{lstlisting} -\subsection{Component Clause}\label{component-clause} - +\subsection{Component Clause}\doublelabel{component-clause} \begin{lstlisting}[language=grammar] -component-clause : +component-clause: type-prefix type-specifier [ array-subscripts ] component-list type-prefix : [ flow | stream ] - [ discrete | parameter | constant ] - [ input | output ] - + [ discrete | parameter | constant ] [ input | output ] component-list : component-declaration { "," component-declaration } component-declaration : - declaration [ condition-attribute ] description + declaration [ condition-attribute ] comment -condition-attribute : +condition-attribute: if expression declaration : IDENT [ array-subscripts ] [ modification ] \end{lstlisting} -\subsection{Modification}\label{modification} - +\subsection{Modification}\doublelabel{modification} \begin{lstlisting}[language=grammar] modification : class-modification [ "=" expression ] @@ -221,7 +199,7 @@ \subsection{Modification}\label{modification} element-modification-or-replaceable | element-redeclaration -element-modification-or-replaceable : +element-modification-or-replaceable: [ each ] [ final ] ( element-modification | element-replaceable ) element-modification : @@ -231,7 +209,7 @@ \subsection{Modification}\label{modification} redeclare [ each ] [ final ] ( short-class-definition | component-clause1 | element-replaceable ) -element-replaceable : +element-replaceable: replaceable ( short-class-definition | component-clause1 ) [ constraining-clause ] @@ -239,14 +217,13 @@ \subsection{Modification}\label{modification} type-prefix type-specifier component-declaration1 component-declaration1 : - declaration description + declaration comment short-class-definition : class-prefixes short-class-specifier \end{lstlisting} -\subsection{Equations}\label{equations1} - +\subsection{Equations}\doublelabel{equations1} \begin{lstlisting}[language=grammar] equation-section : [ initial ] equation { equation ";" } @@ -260,22 +237,19 @@ \subsection{Equations}\label{equations1} | for-equation | connect-clause | when-equation - | component-reference function-call-args - ) - description + | component-reference function-call-args ) + comment statement : ( component-reference ( ":=" expression | function-call-args ) - | "(" output-expression-list ")" ":=" - component-reference function-call-args + | "(" output-expression-list ")" ":=" component-reference function-call-args | break | return | if-statement | for-statement | while-statement - | when-statement - ) - description + | when-statement ) + comment if-equation : if expression then @@ -310,9 +284,9 @@ \subsection{Equations}\label{equations1} end for for-indices : - for-index { "," for-index } + for-index {"," for-index} -for-index : +for-index: IDENT [ in expression ] while-statement : @@ -324,30 +298,25 @@ \subsection{Equations}\label{equations1} when expression then { equation ";" } { elsewhen expression then - { equation ";" } - } + { equation ";" } } end when when-statement : when expression then { statement ";" } { elsewhen expression then - { statement ";" } - } + { statement ";" } } end when connect-clause : connect "(" component-reference "," component-reference ")" \end{lstlisting} - -\subsection{Expressions}\label{expressions1} - +\subsection{Expressions}\doublelabel{expressions1} \begin{lstlisting}[language=grammar] expression : simple-expression - | if expression then expression - { elseif expression then expression } - else expression + | if expression then expression { elseif expression then expression } + else expression simple-expression : logical-expression [ ":" logical-expression [ ":" logical-expression ] ] @@ -394,14 +363,11 @@ \subsection{Expressions}\label{expressions1} | "{" array-arguments "}" | end -UNSIGNED-NUMBER : - UNSIGNED-INTEGER | UNSIGNED-REAL +UNSIGNED-NUMBER : UNSIGNED-INTEGER | UNSIGNED-REAL -type-specifier : - ["."] name +type-specifier : ["."] name -name : - IDENT { "." IDENT } +name : IDENT { "." IDENT } component-reference : [ "." ] IDENT [ array-subscripts ] { "." IDENT [ array-subscripts ] } @@ -410,7 +376,7 @@ \subsection{Expressions}\label{expressions1} "(" [ function-arguments ] ")" function-arguments : - expression [ "," function-arguments-non-first | for for-indices ] +expression [ "," function-arguments-non-first | for for-indices ] | function-partial-application [ "," function-arguments-non-first ] | named-arguments @@ -434,7 +400,7 @@ \subsection{Expressions}\label{expressions1} function-partial-application : function type-specifier "(" [ named-arguments ] ")" -output-expression-list : +output-expression-list: [ expression ] { "," [ expression ] } expression-list : @@ -450,7 +416,7 @@ \subsection{Expressions}\label{expressions1} description-string [ annotation-clause ] description-string : - [ STRING { "+" STRING } ] +[ STRING { "+" STRING } ] annotation-clause : annotation class-modification diff --git a/chapters/titlepage.tex b/chapters/titlepage.tex deleted file mode 100644 index 6e6c9e414..000000000 --- a/chapters/titlepage.tex +++ /dev/null @@ -1,37 +0,0 @@ -\begin{titlepage} -% Note that things like \vspace and linebreaks with height (\\[2\baselineskip]) are lost in generated HTML; -% only line breaks and paragraph breaks survive. -\addtolength{\parskip}{\baselineskip}% Lots of space between paragraphs on the PDF title page. -\vspace*{\fill} -\begin{center} -\ifpdf -\includegraphics[width=8cm]{Modelica_Language} -\else -\includegraphics[width=15cm]{Modelica_Language} -\fi -\vspace{1cm} - -\huge -Modelica\textsuperscript{\textregistered} -- A Unified Object-Oriented Language for~Systems Modeling - -Language Specification - -Version \mlsversion - -\vspace{1cm}% This has no effect in the generated HTML. - -\Large -\makeatletter -\@date - -\@author -\makeatother -\end{center} - -\ifpdf -\vfill -\else -\newpage % In the HTML, this will appear as some extra vertical space. -\fi -\input{chapters/abstract} -\end{titlepage} diff --git a/chapters/unitexpressions.tex b/chapters/unitexpressions.tex index 909a7c6bd..e2918162a 100644 --- a/chapters/unitexpressions.tex +++ b/chapters/unitexpressions.tex @@ -1,4 +1,4 @@ -\chapter{Unit Expressions}\label{unit-expressions} +\chapter{Unit Expressions}\doublelabel{unit-expressions} Unless otherwise stated, the syntax and semantics of unit expressions in Modelica conform with the international standards @@ -16,8 +16,7 @@ \chapter{Unit Expressions}\label{unit-expressions} \lstinline!"kg.m/s2"!, \lstinline!"kg.m.s-2"! \lstinline!"1/rad"!, \lstinline!"mm/s"!. -\section{The Syntax of Unit Expressions}\label{the-syntax-of-unit-expressions} - +\section{The Syntax of Unit Expressions}\doublelabel{the-syntax-of-unit-expressions} \begin{lstlisting}[language=grammar] unit_expression: unit_numerator [ "/" unit_denominator ] @@ -32,7 +31,7 @@ \section{The Syntax of Unit Expressions}\label{the-syntax-of-unit-expressions} The unit of measure of a dimension free quantity is denoted by \lstinline!"1"!. The SI standard does not define any precedence between multiplications and divisions. The SI standard does not allow multiple units to the right of the -division-symbol (\lstinline!/!) since the result is ambiguous; either the divisor shall be enclosed in parentheses, +division-symbol (\lstinline!/!) since the result is ambigous; either the divisor shall be enclosed in parentheses, or negative exponents used instead of division, for example, \lstinline!"J/(kg.K)"! may be written as \lstinline!"J.kg-1.K-1"!. \begin{lstlisting}[language=grammar] @@ -89,7 +88,7 @@ \section{The Syntax of Unit Expressions}\label{the-syntax-of-unit-expressions} A tool may present \lstinline!Ohm! as $\Omega$ and the prefix \lstinline!u! as $\mu$, and similarly \lstinline!m2! as $m^2$. \end{nonnormative} -\section{Examples}\label{examples2} +\section{Examples}\doublelabel{examples2} The unit expression \lstinline!"m"! means meter and not milli (10\textsuperscript{-3}), since prefixes cannot be used in isolation. diff --git a/css/MLS-navbar-left.css b/css/MLS-navbar-left.css deleted file mode 100644 index effb2b307..000000000 --- a/css/MLS-navbar-left.css +++ /dev/null @@ -1,236 +0,0 @@ -/* - * CSS for left navigation bar. - * Developed from LaTeXML-navbar-left.css as starting point. - */ - -body { - margin: 0px; - background: #F6F6F6; -} - -nav > div.ltx_TOC { - margin-left: 1em; -} - -.ltx_page_navbar { - display: block!important; - position: fixed; - z-index: 2; - top: 0px; - margin: 0px; - padding: 0px; - font-size: 14px; /* Less than what is inherited from .body, to reduce need for scrolling. */ - line-height: 1.3; /* Less than what is inherited from .body, to reduce need for scrolling. */ - color: black; - border-style: solid; - border-color: #707A85; /* "Bouncing ball trace gray" */ - border-width: 0px; - border-right-width: 8px; - background: #F6F6F6; - height: 100%; /* Provide fixed height for .ltx_TOC to refer to. */ -} - -.ltx_page_navbar:before { - position: fixed; - z-index: 4; - left: 0px; - top: 0px; - margin: 0px; - padding: 0px; - font-size: 25px; - color: #DE1D31; /* "Bouncing ball red" */ - height: 30px; - width: calc(3rem - 8px); - background: #F6F6F6; - text-align: center; - content: "☰"; /* Chinese character that looks like hamburger. */ -} - -.ltx_page_navbar a[rel=start] { - display: none; /* Don't show sidebar title, as it is too long to look good, and seem to lack structure for adequate layout. */ -} - -.ltx_page_navbar .ltx_tocentry_document > .ltx_ref_self { - display: none; /* Similar to sidebar title, but for the top page. */ -} - -.ltx_page_header a[rel=prev] { - display: none; /* Don't show link to previous chapter. */ -} - -.ltx_page_header a[rel=next] { - display: none; /* Don't show link to previous chapter. */ -} - -.ltx_page_footer a[rel=bibliography] { - display: none; /* Don't show link to bibliography. */ -} - -.ltx_page_footer a[rel=index]:before { - display: inline-block; - content: ""; - height: 1.5rem; /* Same as .ltx_page_header. */ - width: 1.5rem; - padding: 0.5rem; /* Same as y-direction in .ltx_page_header. */ - margin: 0px; - border-style: solid; - border-color: #707A85; /* "Bouncing ball trace gray" */ - border-width: 0px; - border-left-width: 8px; - background-image: url("Magnifying_glass_icon.svg"); - background-position: center; - background-repeat: no-repeat; - background-size: 25px 25px; -} - -.ltx_page_footer a[rel=index] { - position: fixed; - z-index: 4; - top: 0px; - right: 0px; -} - -.ltx_page_footer a[rel=index] span { - display: none; /* Don't display the "Index" text; we have added a magnifying glass instead. */ -} - -.ltx_TOC { - padding-right: 1em; - overflow-y: auto; -} - -.ltx_TOC > ul.ltx_toclist { - padding: 0em; -} - -.ltx_tocentry_document > ul.ltx_toclist { - padding: 0em; -} - -.ltx_toclist ul { - padding-left: 1em; /* Indentation of each table of contents level below the top. */ -} - -/* How to deal with the long section titles in the table of contents (overriding styling from LaTeXML.css). - * The right boundary for these titles is the .ltx_page_navbar padding-right. - */ -.ltx_page_navbar li { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.ltx_ref_title .ltx_tag_ref { - font-size: 75%; /* Compress navbar even more by shrinking the numbering. */ -} - -.ltx_page_main { - position: absolute; - z-index: 1; - margin-top: 0px; - margin-bottom: 0px; - border-width: 0px; - max-width: 80em; - padding: 0px; -} - -.ltx_page_header { - position: fixed; - z-index: 3; - top: 0px; - height: 1.5rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 0rem; - /* Add right padding corresponding to part being covered by magnifying glass. - */ - padding-right: calc(1.5rem + 2 * 0.5rem + 8px); - background: #F6F6F6; /* Same as body. */ - color: black; /* Same as side bar. */ - border-bottom-color: #DE1D31; /* "Bouncing ball red" */ - border-bottom-width: 2px; - white-space: nowrap; - text-overflow: ellipsis; -} - -/* Make current jump target appear below the page header instead of behind it. - */ -:target:before { - visibility: hidden; - content: "X"; /* Hidden, but needs to be non-empty to work in Chrome. */ - display: block; - position: relative; - top: calc(-(2.5rem + 2px)); /* Offset by total height of .ltx_page_header. */ -} - -.ltx_page_content { - padding-top: 2rem; - padding-bottom: 1rem; - padding-left: 1rem; - padding-right: 1rem; - background: white; -} - -.ltx_page_footer { - padding: 1rem; - background: white; -} - -/* Layout for wide screens, with navbar always expanded. - * The threshold for being considered wide is set so that it should be possible to get a collapsable - * navbar at the same time as extending .ltx_page_main to its max-width (currently 80em). - * This max-width is added to the .ltx_page_main margin-left in the collapsable layout, currently - * resulting in 1306px if 1em is converted to 16px: - * 80em * 16px/em + 2px + 16px + 8px = 1306px - * Add 4px of slack, and the threshold becomes 1310. - */ -@media screen and (min-width: 1310px) { - .ltx_page_main { - margin-left: 350px; - } - .ltx_page_navbar { - left: 0px; - width: calc(350px - 8px); /* Width of .ltx_page_main, minus .ltx_page_navbar border-right-width. */ - } - .ltx_TOC { - height: 100%; - } - .ltx_page_header { - width: calc(100% - 350px - (1.5rem + 2 * 0.5rem + 8px)); /* Subtract total horizontal padding on this element. */ - } - .ltx_page_navbar:before { - display: none; - } -} - -/* Layout for smaller screens or other media where navbar is only expanded when hovered. - */ -@media screen and (max-width: 1310px) { - .ltx_page_main { - /* Leave just enough space to fit the hamburger plus the right border of the .ltx_page_navbar. - * Don't define this in em units, since the em is not the same below in .ltx_page_navbar. - */ - margin-left: 0px; - } - .ltx_page_navbar { - width: 500px; - height: 2.5rem; - left: calc(3rem - (500px + 8px)); - transition: 0.3s; - } - .ltx_TOC { - margin-top: 20px; /* Reserve space for hamburger. */ - height: calc(100% - 20px); - } - .ltx_page_header { - padding-left: 3rem; - width: calc(100% - 3rem - (1.5rem + 2 * 0.5rem + 8px)); /* Subtract horizontal padding on this element. */ - } - .ltx_page_navbar:hover { - left: 0px; - height: 100%; - } - .ltx_page_navbar:before { - display: block; - } -} diff --git a/css/MLS.css b/css/MLS.css deleted file mode 100644 index 422ab1a36..000000000 --- a/css/MLS.css +++ /dev/null @@ -1,94 +0,0 @@ -/* This CSS makes adjustments for the MLS on top of the style sheets that come with LaTeXML. - * By not editing copies of the ones from LaTeXML, we can take advantage of upstream improvements to the LaTeXML files. - */ - -/* Changes by Martin - */ -body { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 16px; - line-height: 1.5; - color: #333; - background-color: #fff; -} - -a { text-decoration: none; color: inherit; } -a:hover { text-decoration: underline; } - -.ltx_titlepage { - padding-top: 2rem; /* The big Modelica Language logo doesn't look good too close to page header. */ -} - -.ltx_tocentry_subsection { display: none; } - -/* Undo bold here to remove the browser's native styling, - */ -.ltx_th { font-weight: normal; } - -/* Compensate for default font size ratio 13:16 for monospace to normal. - * 16/13 = 1.2307... - * When inline code is displayed side by side with MathJax math, even this is on the small side, but when the - * MathJax math is inside the inline code (using mathescape), the math is scaled down with the text. - * Hence, rather than scaling up the monospace font, it seems better to scale down the math that isn't doesn't have - * font set to monospace (the font probably only matters for font size selection in the case of math content). - * 13/16 = 0.8125 - */ -/*.ltx_font_typewriter { font-size:123%; }*/ -.ltx_Math { font-size: 81.25%; } -.ltx_font_typewriter .ltx_Math { font-size: 100%; } - -/* Undo the ltx-report.css setting that destroys parskip.sty style paragraphs. - */ -.ltx_para > .ltx_p:first-child { text-indent: 0; } - -/* Treat heading for table of contents on front page as if it were a chapter title, - * by copying the style of .ltx_title_chapter in ltx-report.css. - */ -.ltx_document .ltx_TOC h6 { - font-size: 200%; - font-weight: bold; - margin-bottom: 1em; -} - -.ltx_dates { - display: none; -} - -.ltx_biblist { - padding-inline-start: 0px; -} - -.ltx_bibitem { - padding: 0.5rem 0px; -} - -.ltx_bibitem .ltx_tag { - margin-left: 0px; -} - -/* Treat heading for document index as if it were a chapter title, - * by copying the style of .ltx_title_chapter in ltx-report.css. - */ -.ltx_page_content .ltx_index h1 { - font-size: 200%; - font-weight: bold; - margin-bottom: 1em; -} - -/* Remove indentation of index terms at the top level. - */ - .ltx_index > .ltx_indexlist { - margin-left: 0px; - padding-left: 0px; -} - -/* Change space between term and links into a dash in order to get better separation. - * This is needed since LaTeXML produces many links that begin with words that makes it hard to see where the - * term ends and the links begin. - */ -.ltx_indexrefs > .ltx_text:first-child:before { - content: " –"; -} - -.ltx_page_header *[rel~="up"], -.ltx_page_footer *[rel~="up"] { display: table; margin: 0 auto; text-align: center; } diff --git a/css/Magnifying_glass_icon.svg b/css/Magnifying_glass_icon.svg deleted file mode 100644 index 36ee4389f..000000000 --- a/css/Magnifying_glass_icon.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/edit/Sublime/.gitignore b/edit/Sublime/.gitignore deleted file mode 100644 index 5ab1b2e17..000000000 --- a/edit/Sublime/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.sublime-workspace diff --git a/edit/Sublime/config.sublime-project b/edit/Sublime/config.sublime-project deleted file mode 100644 index 1cd0b3dd9..000000000 --- a/edit/Sublime/config.sublime-project +++ /dev/null @@ -1,37 +0,0 @@ -{ - "folders": - [ - { - "file_exclude_patterns": - [ - "*.aux", - "*.lof", - "*.log", - "*.lot", - "*.fls", - "*.out", - "*.toc", - "*.cache", - "*.xml", - "*.html", - "MLS.pdf", - "LaTeXML.css", - "MLS.tar.gz", - "ltx-article.css", - "ltx-listings.css", - "ltx-report.css", - "LaTeXML-maybeMathjax.js", - "MLS.fdb_latexmk", - "MLS.synctex.gz", - ], - "folder_exclude_patterns": - [ - "media", - ], - "path": "../.." - } - ], - "settings": { - "TEXroot": "../../MLS.tex", - }, -} diff --git a/media/Modelica_Language.svg b/media/Modelica_Language.svg deleted file mode 100644 index 735c17424..000000000 --- a/media/Modelica_Language.svg +++ /dev/null @@ -1,75 +0,0 @@ - -image/svg+xml \ No newline at end of file diff --git a/media/bezierpoints.pdf b/media/bezierpoints.pdf deleted file mode 100644 index 76a3c2e613d257ef8ad8bd4f33a72f20ca3f8471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31271 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/clock.pdf b/media/clock.pdf index 0e8467045828fcb12fb94bbe00ed0ce7bf125723..3b3fe639529ad659434b53b1c7d3db76ae2ca48a 100644 GIT binary patch literal 298123 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

6_;m2=!LJ7=I=MtAe*$eMfUf~xgZ?wne+Kv# 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

&r{6uL-~_6#eLFC>4(NPVZl-Qtrr&S5 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 z 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

o#!;oE82lG0x)9&x1kU-uf^Yi}NpmtI{8< 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/clocked.pdf b/media/clocked.pdf index 02908ba23c5bb55579222d03737898c21204e45d..3de47a1778970613222769a5dfa0be8b648258cd 100644 GIT binary patch literal 10581 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 literal 60359 zcmeFY1yonx_Ag3H3ra}I7XfMbHeW!L?(Puj?(PslM5I$m1q1}7kp@vhN)%AKkyNAv zq~0b}&N;tx?m7Q)-Wcz`dl^GmYwxw@ntRsz%(<4#N@5aR5NvGFz!MdG9yLz~QxK1+p^Kr7y*d8PoA{=7 zCdUJz=O&0A6SK6p6Ek!%1+j|pL%~omm=_Fz@Ig>u6bBgiVZ-N9az5PTk4OA}|1E(m_iA4u;P zhbK&*n|l2E&r~}XQ#%)D5aM_aK99VqiKU^4y$3*ri;o)&hVj98L0nKMH!lPVM}k2R zID{JthC?6_5HE_G4~9U&pvNmI89D)Eeo02f)Y;zE$run7@|5hUsE!#q$H(!Kzxa?d zwKI3I06`Hb#PJAc7eH>d_&gq9keEI22Xg$!5g!6@bo>JX|3l;VD+mP64Tr$^`1n9v z5C}IC42SVTLB_|#pvP2{@xk0s#0eEifDWLJV}kC$2Sa}m{oT;}vycf0AHj`8fVfcH z2r$SNbkYGtfP#Z;Kp@qBmpN`E1P0*)10n@;L%=8)nD3M|*ePo;K5iJm_t_e!z5jR- z7=jyyK%yYfe^>>6x(bqyn-^f=Y?agAf4mA3kN^^ng2Vn{6~yT(5HOM(_Gg*1?ti=v z1PtYdA`!eO)IThQ{H0GY--!~z+;I3=eVC#itSn1PI{; zbbKnA)82oe>6r@v0R$5c*V7z5^i{O;s2*PpSc&69D!kkhv(15byadwtq8KBa!zIXC>I zc}B(p1QG!p>r`HVVLLl{~c4we*vd4h_f8yl-o_PK^@&6Ui9}w|-FFNO=|5rYL zB_CeEGZAno6abvZkmzwef>T2Y2lF}R#J&(f8!60+zzdzWokjguw0UO3|F3KFL_oiih;yBjCK7;@fLM+-$_u~|zDM? z#mVwGz5eYxznA&l_{UcO2WPwh%boMwvnch?bnP(=Qv;)kh=M*< zfRO_*7+h7VXU++K>Z3a*lxvH#`%xE}$j5+n@M08Mutj)G*Qi?eAPJ8zFC!+Cx`c$6 zS%QR63yC<0{Ps(R+h}406fS>Z{3kK-Uq}uK<^u!;0zfSiiGuS14HN*n0QB`A2#yc& zKNcKN*Wm*y0LbIz{s<0w7SsQ^;Fvq|i37ld!G?`FxmYFN#w!wn@LcGGg&k1iw`>?# z8u|6nCMdlUR9mG8=Zz^4FU2ngibM;o9y+sYu?5~KR$TR2_@ZL~ihJS_6(oMeripV` z(~q_6#V(rQL-Ovw665)*(O($g|2M^WwjchxVl4fpq9fakRTGf`LeZ|$S4PF^r$&Ox zl{;lSu4qsCj2hX!fCM~qGAXV-h{5lnea$@>;(o&>nH>+jl#&%2B#wQ<@Y6oWQb*yJ zn}V_AJ%1&}^L4TRZNzwnCH|EdpB`JIxN>7rE|%~sw@hm;Jls=rJiPTNDlvbYLCUtD z8cu1VjQR%ld_cegh8v$t&HA>KaIe*;NE2FlLlCEiUrRcESqP8m`27BMCas7chbO%p&d$YF4kpWvc zzkuHGZ^f8R-uqW#JYVAc3o-KY9hZVZ5FihQ!GS^t05E}V4~ay={*&kkfkFSr;Smai zM<6hR|1Lb9!PtK;N!xA+0S1H+d$PXqS|)L#^^;0zjn_0OWqGmJP*v>*{wvzSmznC= z=vPVKy7fa@FY8>Yy3yS829=F_UqcnUv7*tbRSw@Tc;-vB;GSWMlm=5~yUHd`j+PPc zEyN@CIqNSMLAe&q!@`i@yI|eLr9<Q9m0uW?Ly`{SY5g)cTuYC&(CT95L% z(etF*Yu+ikV||FcaS!^G`R*ZUHOu8Upd>Sdl?g#{YkN#lAHmkOQXhX|FKc}r9n`7=0LD90m0Bbx8q+)`+V*s z?%^V->T-O@0sZ@A2Xa2!IXCV!>-dut0Y$?);C4g-kdJ1`t zGnl{2@_5utJzM}g{zLI(m;VJ#&QU~xfV%Wa%JUynJbxJU-=TPZ-~aDWJii70cPO6U z4bD*nDrjc_;G7(JB%lxwa42+^@%|fHIv*te`_#|J1R#+G@`)480|_kbEXn~{CG6A# z&za77I@8J=b71oha;gFM8v9~p}gMhhIOwCp~oe;8Gf)>e`}W)w(METn;hO-tjy=JqV{kodzb z>L0j;pE=n%Zjt{MxA0S|`orysyZ& zz+t#9;L{);RS-}}-~ncWAs`;$0)ZLOf`fQ0Ks=T}ix0$O3*xZ@@z{fS8~}iV0P#43 zcw9g{uE!AVjDxeFasG?X$17oH1t|3FO>sI{FSQ(y#8^e_bun9ghgc%Wct z3w+H#H}=zTB5Y?4%ma*D)y33S12|&+^-+IoKS0IyjBPj!a{fDi1z24W0s)*rpB89% zfeQ*}2l+rv26X%nI5y_xJ~@gx?H@lw0(cK{Is+)){CW$VwSvxf&yfY@oPPrhJhvzu z4*yk%{p+VN@NWi>*El!m9MSWG{&0M5015^Jj?s^Q&Qth1f`~s;VSEtabpK>LjPEyx zFcbiKPoJLSL+=>Y9s9|NPyce5zcX1Bh(`+qOBVeTfbmnma{veMn^Iw_e z$rkX7?k}@EHn#I-3G8#n8{U6nmOupK0xoeJdk*SE-N(hG-$wZ>K>aq#|HZa;-ZHr$ z0C#7$30Uc$z4XsE{LgIjWZOFaSisMr$CoQklz>2if0-!~1^v}Lr;opG9@{DKdB86? z1o=y$2!QOF$-|+1zf2wugZ{Q<;9AMqy71!*8mBA(span`FE0pjT#-F}1N&pcz@47+ zRL-VC`B2;^cPfCh5nkX#9{l^p3~=@1H(OxXFTaArk-x^n5yw}Bj(pR)~ep$)iS|4CQJSV3XHl}7k5Iku*orE($@jPCpPC%Hnw*%sii#yPAv2Zdq z{nrM09vuHN$p1#11R^^SCxO!<1QPfKT$cKqI0=~Q>7M!9B>yRPId6==!zAy27$#4k z$*CzKfTP$m4gN2ie>C!I2L!In{D~arntw)~-|T(~^uOTYkTVB|09F6v*nQr?5x=sI z-_rco(B-^H&-phmP&WCG{QK7)3*4{+!++WKA4&Y$noiQzzd925b<_vrLjth-_{ zT3Fi}ylEH8$A!CALLJb+A0Xi3rkEIfJ~X0~E?e6mqLhH!Xl^X9fRyMy$(4``n3yb_ zY(j(RW9dt`5atiax*MHcn4g)=*VNQ{1tiTPdLgR9^+4$fCaaAt+I=AyCdcJ~ zLOda=Tw*2VOUh~(57;{L+BuXz`Z8%aRhE^x?iAe#ii=Z!Yk}5`QQC10ErXp%NKRaO z_kBLJ_e-X~Ds@1?ddPud>czHOQ_yQ27#-B>*B)*9_n;YIRiV+*b|1wZM2@%LcQ}eKG(3uHF@w8*naOJJ)rX&$9g!Iq>-&!2KhT5v(o;12YcXl> zHu-ZHn@#R$7L?c3!JCGgMqBYLj17!8rxr{mXIF50k7T#ku&85?#y}*X*_FxfIrqE# zlW7lgy8K^pTkJVPZ8;R}F+U&GK`?2|B_sU}Hdfn^r4^2FcNeF90Y(x7BRlNZo)B`H9-gaM5(=P z)oTAV{4>*9a`4u7yk!5$S(D{Sg`>t$TTA0*tC?N@D{@`7kK_*x>{o0gi;RrzRte)s z4tcgOlCLznJQrd?!$h;Vh*m@O_`?y~4yFEKF4a-)t$^=8%F8M+ldfp-Vbpia2hiIW zr$yj!3kAg9gY}MVq~G^XG@u$nZ~Y>nK(BUmg>ta5RCX|F5Ce6j;qS6O@%-o-dW(Lh z%q}FSwGyfE4b3*0~yuz&w0*UHiuL@|!aK9Af{--o8*(T;-&y`wkc zL_0aU_}aP`tTFSCiXRI+d{T=ZKG&W4sO#|l5BvI{*w+`1ux;cD1L!}mC(6vdm(uoi z*fu^&I?~oh(~+R4JSz6>{n-8yXJG-?U{`=}2mP(T%l_TNbU*aXYbqE|VjlJ%B_sWJ zLkF)6Q74ZiVI*k{q2Uk{<9sV7q`z%oWQy$p^&=U%vhaga8*S4CS*bwJfF@whVjmD% zh`EwZFlT_%%W+--(Hkk_)2&ad6&HR?V`R;>(R%$(F zVmEs)qSHSxOt4G82{_kWIh$|C>5Y97^tEv7~?N?BINwt;`ACmMn(WAAU zRYm?Ijet#k*j}WCu&^$#q7H=_4jR|x`8Gs}Px-c^huf-u7~-cl(ILWx{_T$a?t5Yk zw7YgfjDy*px{TjIVR5ZdQ2OY=cTTt}3N^7Zgg0H^d3?{_eCI~XIW=l~4dnmSzf2!T z`)Of0DltMarcu6x-;$(eV8pBQ)r(LX zgi^=pKNw{a)?g>(nr&`~f+d(3zSj6X`xYQUzSbzFvSQ*OnDJ2Q#&8i&KCOsluz*|B zRN&-p%w$6HL-h8`6^4-8ecmSE*rw*|BtkO;bONad8_d^(+siN`8{i;CuA7cfeQ!%2 z^*eY{qFCLrew+}Hk7(>A+|I2PBX#Ia|+Kcp}#eqrIS7Mh?%<5nNjWPH|TTV zm||UunD&pRD%oSs7t7-(}}MwZ}$?_g7&cDTV7Gq>WL=X zWF$&)aUr>OaI2P_C#-UB;|1=E*=nYug2bk(#!KXe>cZzBuVn9Yl8$r~mwt3%2jS*( zOQj7z?#|T|0rk4N7Aw7~W>%e{AlJ;ru}BS8$kfJp)%PaFn45Yq>jReuUUl2_<{Qhw zc-{-{iWF_|0a7RRl906-cGuf%yfRiS5+To$*=qf0qpx)!rR@79UT}-obuo={%GS-9 zH28>a8TsP7kv$4~9EHA%5d=?Q6!l9)6iS0$m$Qrv^=mC~Uv6*FcJa%9hP%ri@#>|H z&CzIPz}E)vp2!}_=dX6uDNC45rP3k?)t6$2XP-uNhJC%S@rCh#<-O$l=$hWDOPr;!Th7yOzN@ZH-4yJ{o8iuse?=m*ShoK`cU>_| zU-M-)wiUOQjewXd)e6fLg?EKoJTQ)&SNw~9LpybrO@skn7%PFHpj-|E@Umw11 z*1LDF9y#eM;VJrkdSR?Bj`-f4$dSpm+_mMaE*HR4Qt&miHPatI0v2dxDQ7Q;eUyk$ zml^f(FTD`li~T736Q-Dnfn{A5>hZ_{2Pu!k8rgHA`D6s8&PvJ@%Y4x+sRp~0w-`Ow zCfj;cfo0h4!;BirAm;nEx7-ULds}#>;l*@Hmi#sZRDD`I?ekb@5q7EhQJVL+#Hk^#ThMW={6phx5V`eEwA}*T2`3T)IK&|GkOcPh>-U zR=wD%Q73cC`C{V*2h!5XcvghYm6X20Sbp~mJy_-_m-ekz0&sM`xj)YQoMjE_`#~%E zM44mB&x%HR<%p-5?7R0rNL_PZ2&pJ(u@|r_3zE2z_7neZFX+VvjUAe=?1Y&0ybfhv zTh(Iw9g&qBORqaYe)mIfQ@@qdK9~@1RtS0SCocEdz2f4k(vE?u?d*a0+MIi8A?qR2 z_eMFN1&SEi`4QMflBm~eTqpmtjFCO#pvWq-le60y+d|}sG5RQ`7_Y4q3 z`Jx|-b9`wsp*jL87OQQ-%Vsw$-B(1BZ_?gJUlPrt5&rgpUDpEsjgvH@IA~MQhG+iz zkeUZU;hU088!1UCB(E`top(6Iw&rY_ljXY^)z;R;{4#!Q zDPU-?L1~s1ZE`MBUlP!lMrxajGrC>4GWhaq7We_~*og9`9~o{6yY6AH*tZBZ$^(Y$ zFWN04UKMY}K~vET6B1r32b(=7O2e*QtDPplk;G56ZqS$aArxP>AS@i)Pr)Sdv&#Ut zG&!C$8`~%|uk3XSUzw(a8|w{+2H^)$xH-!8SOQ7YByF%hZG3*8qO`F$CWoc&!M%@fNl z75_5yrYrnzY7Y(FGQVBXKVZsUAa=e*a*^;0cB%huy5^mib1<%2LJA7%k7aik-D187 zS@$ByNppnAXYLzB5gdoU$w<)i`){4?C{+WS__&NfjUBci9{>q zNmy=nC4W?%(sGNl4xA~-?{JveYtiI|5)hbt5qGhPdM~Z()28ke^ny(A!Jv)?8N5%P zOy%xCU!!N_O+&nnPddx`FNfmhJCZr5o)CTbj53KKr!mRTkjh^TCEbs~`tI7^r<11> z82duz6+)il4mLsSs-dUh_0RjbZ7HcwU+fThe|mecFm8hJJfL@0Z$S0_6@PUu%YDHB zfmIc`XOR2U+tGB@Vo6dH^yKu?&XCacs`>#^#Ex(rg&&n7t%=aAGe|L=L{7IR$9t9G z`a49&hr9MPPwu@$Ej`x>pi<0DR9wxd`1&Z(D_ZZlKD*B};b*bibJfb)84T>7o!#*E zk-3+0i0>MhDpRngJ8sMF&ldW%=!MTkTv=twALwe3`grMz+)wJOWxFjBU8*dX4)uIG zUpS&hHseBlRj0EV&ZAHR3nj9jD=G|-HWb|YmKW83XHeg z$c)w&21l;*cD`?<$#|!2!trQYEQqWPfSH6Y>e@b)&1zf`)0 znrA)t^)EEh3N{Z41pG?0M=1lAn^BxC*T%2-ZNAd2uj5$JW|Q(A+%2Io`Wn=~p%P4S zL%teP#>FbI+VlSP=mXCu(4}SG!%dore&NL$b~!D+X#Ll@+wS2lJNNKL#hd)Ssyo&l zy7(%dU-njL=3k#%x&pq}L#c4J+JwVesX$)PJ!D>7iaC}ZOgWq$`5x!1ncX1gDAuU( z;6obvE%O&4pjnwxau=;et_oNnZ+FJxk)M;^=MnMwfV{jzC+byZ2nb*D9=#s5QKp3z zsk1;*lugN#aZJ8YW6{!e26FFjGxXkU49FnZyu`~&EF${8&qD@o#DR_ zANO+y9xdc*gFD{eqo97bK*m*!qN<3#t^EBX}cS!lL1{-b_j5VwkOLXPkXVS}3(N223^Ppj%?#VoKUOB*{pM zn#$0}noS$6K#i@onL-M4ijk=%QEf=@yY9Qg-O;>@7P(^KmnTLwYlR0d48Q(>&O!1X zrHt8^hrjwbXLk9D;5UzquRGDD($C^pq<5K2koO;u+TF~%Mf^OdwP@f+dse5}Ht7Xi z^Lqww=7?9n9MF&i%zPfJ!55uetnNcqeBsmHN)ye#^#dceg~GL}5bdU1A_dlLKW5PL zk4F%SZ4vFX=vftE+lQ5Ak#eRK?SkcMy1}9kLeOn&NT#>>m!4vo0t+!q z5{azvTxw;X*S5YgDV85eX6bdyKWKj*7v1(&ve3hq1S{fO)C_&cun^P$zxJ|X1e?kf z|AB!=>K$51L7Tt^l6rHr>wYrymBmg`dp4DPV{XPiHJ^ml{DjgA@{H&;=tB;lzG4GJ*XQ%mlnq_ubEY5-@)HkKYIIvV0H|GOzyJ!5gffvYT&GD3sQ%O6fh0FKB zWc^lo2Y)cec#b0@x+Y8B+|J&8H6>2;Eu5oX`_>2bS6pT6(i-&|+C$|k{>5V5JJ76F z8Q9pLmBy0mnx-i&!sV}*p0o3Yu86WhWl0uwTH$%=DOU}g zLOy98n24!b?~;89dLNe7auw}$oQDT~r1wU-TvCg|MSkkG z=0EHKVML>e{JP$ zDoncidhhmq1oq>&vC4iM%{pt!yR6-WFX*@?vETa?jK)m}$=p<}>Cxa)P-MCDl0A!U z>lp=0y~?P>M4Z#6Y1@oLZT5kC%XsL}o}r0@ObIH*_M@`mR3|HQ$kX+j`)vyTmR0tZ z-(MyPhnkUnc}(P7iH!ADjq5jNa?H0|!3|?AxiJA6=K6r%vyLqvBpaehzB#tt@?~EU^Zb5*8`#p(v|&w$ zoR8D(r@fwLMjQ1J5{PB+YI-DoE08ZJA?TNtY+nx`IpCu7Z1c(a+3K>(-Tc->YR7NM zQT_f;xiWLs-Vm{kdY15?D^M=PD_-dl=7vx!jbdX@_5{N@fj=JmCA`9}jLz%f-NKH*__lm^KM;#bc1)qB zb%gU}L6xLd=^60jqpWrbe&ju}^~%NccbC()M7Y}J;`ZoTx|s^B?RxP(wD8}w{6JFe zmciheT|K;mRWFrSYn!FN4T;7X)=O4km}&3K(`q&ezjF;$Dk;p6LxWJ1bMFc0mnijLBXBAAX>9nghllM% zK=0vPb@a9{_D%eJ5u1r4wce#%f@lkTg&#^B`Q1sC`t`z(Y6M-3h>RlVzYxp@oo@5)b4_a z>E~GmV(C+-9H{4C#-hq*RLS?1zqf|J>1Q=Bo?zx|Ya{q^nmXXRAmr@D+EOIz>hzAm=lYt;&PJat8j`I{+bl82Aze8YY+hgH4k5}eR*&ihbDC!OY* zP4q3gP|j6ShkY!ExljP2rYP$1C{elU%gZOOleOKEbvXn!*Q++Ux+LF-t-YC7( zCD-f5Ip3A!K(oJC@Kg0^-BTI%2!`E{9#X(fJ=55D%tc-zBkRXktJfrbGxquDEy$h4hevV?DD5Vhd zy?cb0-;G`@IghqVJ3zY1{dLaP7uXpkZ;&Od5}JPnhGgx1}ZpQx;G3 zgH0a6#w>M-MIPK|z9YjPXW-;(H!he~!c3Mcmx_r+l}R;i`+^hi)-dHAEZHWvxtr}< z{>Y7PHNHac%?;TrUp+_aswnw9*yL$_%YEp@bafIx8zD3orn~RW)$UMW?LD6jhkt+h zO0X?LEFQPaLR(y*+Qx4cB3~Oekq!98F|}<@|`r{qa(BOLzE60zG2uIdid$@~C+Q-$UDRlaZma z31*^^@!|sR2P0Ni5Vqc|tAfsW_8T(&6qT8g3Ktf>4_cEsv)YU<`4bG}V^7_ENBcrA zcTWfDGS?sw_Ed}%!8Gi>To4&)i92N|k@ePGX|SSRUz5S;!1NvSp0`aeYlV+nf?jpn z$4h-^exWS^-|iR(@Uyt;Sy7}lBQN7ot!u`FQCydriKuSX@(Qfzl*vYBY6XX44jM}T zNEeqF?%|g^yk2a3;C)9>wVcu*_+B)jUp#8Uo?#@!B))7Q5-#^_*g5>ORdu(SPj|g# z6*u08EGm@Q(yGl(#-~q|%Zd!DDvds+A~A%tVwgIkq^c6StZEQQV(?419h2@n;{{NC~@OwPl&+UaI{?sRUD>ltj*1uy##tjL~H@4^VAsxu*v;15ehUNt` zM%%o-O1)fFq@KP^_kox%ex(<0X#5Fj>S8t-TQHX1H3$9(KCI^Ir=*+LF^nb+86Z+) z7OC1l--fs7i&(V@u}d#lD_q8oWm2_{sZx2&39gp%ARPC`FnsVy3&FNzc70^&9rc@! zMGPx+kE^&!UCa9zDTeAykZz?s%_=jngA_pLxYAyz6lU zMIZ@(Qg^27Dy0jxhKzS)l=X&njSDaqDDz9_!}1UuBH;;VS1q{)MP7kkk$LVZ}j)Qy3D&SmkpO#XL$m+FENk$4XR~p{U zCG3TcBKI6nmBg*@2em%-UdomJAZAtbI&!FSRfiwTBfGXda87kLzr~eUyD2W>w**cH*;d|mWok2`Gf zSxi7!*OM6X_v~*=Ul%N{vV>h{$8&L*d~m?--80b5_@!sM*DM|%zZI&&u&=Of%4>af zvh#Xo%X2KY2xh~Efk*mpCENV2PD(4fSh`j`nwixfpUK7)49e>zYIS~g+Yt$uo|UC# z>47AN6tgK?rRKcHV>Y>Js+ZnxBtNj3@eFQN=W_i`U^T^Ko;CSsBiR_n3;gIV1y^ucmQmY8>Z`{iI_#z)P-ULprl<0kEsdc#XT#T37-S{I-Eb$kj3ZfuOK|hX-jjb&y zIsb&0GbBsIF-~c4Ld<*8TYk>823rk>;`bDjUxqloUSL9xx4OY1t}$Czo)V2FsWW`B zOqg)$-Dh*Zf}EV7Vw`VJ`+K9ZG%2L6JS2koulpYAfSOGt+V-tqmr?spUs33eU+6Tw z+O_bA(sY{c74{mZjxaY7`|2u5{`KN#*L}UkBP493$Dh5oS9K`Lo}@DpEDQA+ZLTwF zB7aIx$13Bw>;NCJHAD##B5iz{Z&+03mZ@gnmhg;8#Ad$Mu?YWAq7j-oz{;qHc{R!O zjZ&Ey2Z^b5VV^fu%!OHokE*e^UPjm~HThiU&Qy}FQ;x*ECo}W=xe z{#!6|vs<^ahVnXIJ(tclqsi>!P@0dxjQ6@r&wlp`JT@=RpkCb4b*sku7Txw_jm8>% zG+DX%mO1fk%x8jx+?(Hfu3OATkm3-jP(>DA)L(RVb|WC-b5tAIK;%$~Xoi=(*b&cY zqn0ItxDn^EtU@Wn6jdV2^mO8g0>}n{`J?pV20W!?gOGn6w%BuDeL^kVk>K&7aG(@ z!-npP)j{J|O`k@&eeo=T+Fif~&61fMQn66@YD-2(U$fw+T(WddSUB2{Jb>+3uhIzq zItoDJvzb92LDFvtDY4HlL4Bcz&G^{!a7M{n3{1SKB z36RyfQCQF|sZ7znGQYK+AA}?itq%F6TVr-^MdgYm%iH0=IX(I0B;9Bl&7=e5i*I?- zl#S@B^a|*t7j5o}9C%vnqkbTt6eh7(3vIN+>g&%J!sP=gvPO8n2Ib`!HsY+J zA92Zd8OKkg&?Z)nK7O^^6LrWAEe(A%o}A_;4q4`!zrus+D|h&g}=Jl~vXO z!$P3U$w6;#{KU+gLE<|b`>wd?vT#v? zm+RAA#??WcPs*3gvfpDIeEbovYfiZtNF+=c5jHo@Afj;pi{ZQWJnLf4jfDN`EZyyz zz&ckB=bTI~66v~(JF}UX%nrP!X}NYu4E&~4mAMLLqRk@DoOpjOPiR4TH}tm<;e1(( z(gC zHC5A|RP0Z85`OAptD1_`STY`<^T?jPs4uaqGH-dt)m+;2V>%a;EzQ z@*gXy2~&zGAh{+s-?7`t>)>_!2iegEr3Sdl$vI!Evz_pm+*dt(zg*sy?U%mBy4?xJ+fZ3YN*f8+f#qWOS>&ucIS$z!n(Mv@#a}3fcO=P^2x$usg8RG!| zWuF+Ub4(5QN5jIG!Yej27@?p@iTxJ%G`{B81;+W^%6&(ZMuY93S4z*;aqC35#J<10 zZ7jO@eX+HJl01Wb1Dl+D;X|^=&f}}j@JJ7^Zh-$-)DIM!pUL>B2j#^}d7Qj4k*K0Q zPm##n^s6^w1xA@Z3--8&iS0;RaZu&%zAI0v1C!}Zu9g?l`4wMY9`xv5Vw%I{iRMkY z;QvJ(Q>`#iPeDIE98|r+>qB{^I5AAqySg3ZUbFXZ+?L|C_5%wHC(1CcAKrC0=bbuquz+3FP5S4<2J+tQu@O-RPvU-W{7!!dpp1v*Jx?bt_O&oeq&my++QY zq&}O-sNQbu;($IY-b!{m52GQ)vOR`^-q|qCMD4x)W{Bd1sC`(pwfQJ@=z#xH%y?e! z`_`#I1;IY&;tXK|f90nKcvo#vewd=7SWH5s3lnxdALZ=IUV1qQMAnblYqLFD;91DQoOgQuj<9H;KmmrkQ)`2Ye!KkRhTVeg8oYfdq{#l7#ORA7 z88#2)SgRMVL<%iA{H$?50v$IhFWOEAV3JcU7oZb<7Efs*^&}BjXZ?2bOUjztdJgIB z`mL?r2@6C`-J|=7S=c@A^7jNk#N-mH{=juLl`&bSAbrBJqob=|QEHr}yrQ3UNxz}) z(={(_;s(X9y$vsKQi)ZLEM5;=)+uu{!=i@2OsH4!p}=foS^|rc2F0q-RW(u=;)_r8 ztzc8IP(%wSK{`v-LPi)0HC=KU+X8eOn=Fr5gQE1p*Fh7?VXxxoiug-9!C!Cb+<|6y z$4f>qR93P0B=w0*{rCzR+WGp%;6B0(POXQ5y zR^E$_jTgGVc+`0x-}08&bYQ2Rd`-ojLdP$YA8PWbXSoD`UmxL4z&6V2 z649EoXQC{(32#=sFfnL#fb3jMRCuVAmXE>g>9>6STWexj)w|XX{2#3hX8l46T(>GW zDpt9#(lUzA1&1>h?#1<&V$pKu1t>u^uzd9I={{HEcinbGHcIjaxsjS%kYK0zbui6V z+r_HkUT5bot7O=Am8m2w#Bo=r3+idK<$u7cRJ}eM?z_H90D96CPZgMZ*~*y&jXxR$ zCKd{{omgt4$MJe~^j4E<8Hd|^#Yud8q>HqIJgWP!;r75Cnmp$Cx9Jp9SWlT9@gIhY z6o_;1f6feQBGuu(t}jlw;NyO<~ z(NPeyy-!3;Wl3vX5sYQjL!y4vl#Ytfq#t&plChMU`_eSVbxwtLJe?B1a^u#GG^5Wb zG`4K_dtaKog2fr3OMACxfJzpqH6RHZjkcz2%WapS1J0iq&!#7^_j8-E*;l-XmNwhG z`8_+|2R}a~V}m`11doN%RZ$pSJ2t1Wtz*uv#50dl@IMw6)E@#bZC*yMVaG3Yif}$(s@ZYhI02dZ{6OK-WT)YUOvHVNa3$WY z_m(gxrA`UGs7AMVODX-V%#{oBv>?wZ!mAv87dnC!(VgzgO?;|EFjk}&8-Ekwd>yad%rTH@FhRuoio^H2 z-=tgpUFk4!3toM0c-!Hqij^5jFjO|oaP_9y*kiNoYjN9|e!D;4-49_k<(T6O#8`aS zOuR^NA9YnePvt`xj`afm*ZQ~G&#erTws0uNTt5+as0Vt%kURLJDi#i?u3d#TuO6ceg7!NlY+~$AxW2Ky3s~`KpT& zbJAh$18r9po7fixv=AmWgLq|&cQ5Pf^Xxw%msOo>X~5yq z!H9gNH?g$O!d+Vo;oJ~}u$s{{t9o`|Iv?2^x|uI}N;A{9JDVh+VnN}neCYgOY(k#( zcmcakbeP>o^bM`U*H0g;>VnjVT>aYBh_SH0x_jM0b*`3FZGE>^itc|D#~X61E%lL2 z`%5vG-Gn<%uj}BlOK}ADgX~Q5NidAQx0RKGulMKnzZ$f7;n22kEi)?eT%J!+j2&j` zH47Ve*64kY4~IiHMYxCjSS=LVS+QR|6ALT%X3lhU7z#}kz8q;zc*|%U%bHHCQ6P8; zs~rnhY6Le*Gm9fCvo)lPW04G~6`XQR1T*gH!8-#Y~uslmq+23AX10b=GpL?LJh8 zwv!JnBB7bNEqK1vp?*%NRyW^hOXUr!dL7@C1(+cqNT;8`J2&1R3LRyQTr>P6!fg9P6UxkhFNW!xyXcSx&L92|?D zyyeMZY-xULsLm-rba;Hetu4jIXYT6ERk?s@wTwXx(7j0hSkp&W7bZ+Rd{sER^cY#c z#jjxCh@#W1h_$Anf}UQBAVNmVurlV8n%Yzq&aRI%>NTroX%)cvD>$&$d7|VW+b$F5 z%TqmX(dv1())hacpE}|gN&ih?kvuDa#5#dk$-h}`+|NF;Q}Xd6*8+x%FQ{I=-7r^x zkWpLV$-a}Gv)O;vdm!CkUc!HOXFg1sRHtID+kJ`TeOG7A4Sn<67_HoE740z!%W`8X zD=7m_GR$*NB&=@AiCI(7E^SqhWv04BJjA>Ba+>yDEnUys$JBZ__0;(eIG^Ynhre#I zibCQiZNJt~Z|56F>9(lUep+~9Mo&bl_M;h350yGddL8s=ek`-EOKR+CORIE)XZMds zHCyws1B2cdoZ9VIh@l{(51*o@v{DXuMZQiLj+d1{6o4zt#8@=baw;}^G$9bbnq zKVtn_kre!38w2z_=S~>E@Aj;?MOk%{X4no5e#Ll_dSS7%zoKs5RURIK$5OL)(x0R% z$><^jz|1T3%VPY)@{NhS<=38K#7IYa@lP~}&PCK$k?tZ0v|CL-eZ)~q9Sidcdi9~6 zq$}<|Z?w-8{rp#-@9M!0Mi`HuiKVNk!0hoC)YiuLKF(Qby*I!6PR2vax98KPF_d@D zQ#D25O}Nw>?h1F(TNnBeKE#$5t)%)zbyxBS^3@;G7p2JH!ANCpWw9q@y`D4pHfGYY z8aNz)^%=ZYs`%c8u`BUKvTVMr$@)5i1BYIflnEXU7xq-ceP+|YzhF6a4Tr4<-EJ72 z@?(N>a3o>s_IKOo-(K>$+zrSqr=l6_#?#qwAbMK4~%fylEddgI22*a*cK7GpZ&fR5-=vt=o1$hRT;VtWo zr-M^GtWwlOD~}uEEr}elI|Uvd;R{`uOSaNn2;_p+$RvD`upN%Ks(rxhSLMYmIdIRG z&~yKrg#F#r_l;;rIEr>=(_Ajz1ayvFo)Qb3N`rI0kHesJb_X{^gPs|_DT4aAGDc1P z=ou2RToC)9x?+*gl7zvLKA@GfcV|~X#NXSsYOyj8zjl^+?p^nEggIAQ$xd>8?#=AS zk)`R0TrXJZ(t#t(=|}ChVv#;?th+FHS#R7VH5Zp7lyAypYkww9E=q&)G~cmt5bu!R zroPURH$#$}UzHMh86nk2BA75DVR4fJJ#DK;BZKt11TVVLCAuu>q3Wo5`VP%@`T%xJ}|PDDKFm{SZ%is z58KY9Mr3h5l-Q|zb052c1;mWG`YBZM$9kWwCbgB89)F1uqlls;soKrY+!9s3^9Nj| z8ZYu;+hMaINvaPMK=L=_6&Op?4TTKNoLNoSE2J$pxNmldlY5&utY~`rS@WfJ(Xqy? zIvH7XhmLl{e+0|*rvo?r{N=pcIB&o{Za+x@*~IxfB>ldIq8W zK7X(*4IYOCqHkuQNho!|P=CnnMp`Okg>LSM-0SMzyRWbDO=A`|M0AC1XOutVerPWf zC@1xmV)5qkbwT4+wYxiU*D*@2+rJz0slaselWVINGJFtQ_Opg^;_7uG&)ZJ+h{&d%+6WTSJ~;siZ?~{h-IRmkHE<|-EstF8)s;aMmLu=8YR0r zgYq`QbF5{#^%-|ym+tg-e$ z2Hg6|C((AC-NV27K$B5}cTF(tnO~8s@I?%t@sDK2tuC;9_eg zfd#knugFErxtQ9MZ!q{7PS|G3`=Us{gzIhiEE!ezjJ(=F-j^o)-r_ zJu9u+M+9Rl$d&4t*2p8s9H=}!NpbP}M58Zq27ZhU^eOBb2nYjMw^&7va zWSpjABZHAn;k&_XQ&tuIkB4bl$+OIJlwKHb+IdUtL!Bj;HR;#9bZ}c97J`!F8=lXw zeGiv~^~)zlL&Z`qDS+uRt|srM^rn??N#( zt$9x~6ifG0TJ0+vc?|=W;^N^tPNQ3Bsy}A1<5!E-v{zIDd@7_x?q>5m=ualBG%ZS3 zZ9SM&DKN$^qGy+*oZEe;%t}OYphhWM1Ix|cBJEtYWW~BI(*lJ&F8vTXQC&~N5^D8@Z8>; zYq;6j)?^uWLoN!LU=XoxlU~FX_4|MgY(c^sZw5cVJ z99T$05kR2WFgErUzQDU$457v`#TX#t^~myLgjEmJAmK}QuMpur^1|E(n+hX(AL)V z!Mt;}{BZvfVB1Z~4L4%VUFEq&8eoB>?r^r5BE*XY4v1@#!#E_4dl>lEciQmEnO<*c-sHD^ztiL`89N_2jfhsD0c%p$GWYe`}fk)`(j3lQ{?q-hi?w&Xa z_L*8X_7zl0v>;|#^GV{phwd9U7S`C)!XS_c!$;p5Ei(CLmia=>(VnCQ);}u**eH#{ zX0YAUbTbD#1t-7@*Av>@_PlQ{uur}Y54qEd+b&ryXD~G$tnFr>*^7oe1wWAU*i!z4 zGLV>X29ZFF{Z#(u{=Alp?-kVfMQJNYM5J+2)P0QvVy^&=z2n&fM!Dx~wr%CNNV*zr zw_+%O_}Idl8c5$`W*3iX`Z}!=Mp=%?#Lgop=e9K&fG(A!+@pw4HRORTszoW}1O+RI zE2}G=8lMRc31y+s#7D;o;N(KYyb*uP0fooXOF)ZTCIn-4Uu=_|Uh#DLR6X9+YgEqc6)@;F@!-!aE)us-=gf0n+UV|eDW`EV$ z2oK`T12@^gOjik`(dw(XBXe6u$R-p$X$9dUFQKHn;eXd&n4ji=O z%O}i;;Dp4i#mK*@Kxa@_bmr-(^FoQ5t=wA9EV7-Yz6)WozxnXvHx!)8ibYyZ&;kma zYvNEc)6u^d$e^3E)rpSQI<4c|;h~(Mm^08(JqqP4k9$cy9*xwrhojgN3$iczjw|y? zyTlhU`SSr3eZu6NE(Yos@xAyleLC$2w*O(_`9N%0y|$?>maGJvrJ1PM!KP@?!WE(J(4qI4CpU3HRiMgWwkA$d>E z9NtjIFrx!~uzlnW!a8;?Bz6gD=(r@fPWZ0{1xiD9V%~My#LNo+RX!|GjDRixo zP5f@^*)rk3Z+U$@*V;9!sT=#kSaSH9{LspH;K_pahGW}GS2gWOx*3V>zG{HS02uN< zglk8X1-RX7SQw}1yWv~!w47q4$(Ul^Dp#ftn7u|FcDc!x3VVqXKZCy=Ezv+<>+02}!up{9{ZV@FJArjHJE z2!Z#rz2uqWp(L0;k&$ZC%~VB{baex1T}RPJXlip`cEX7YC(h5|N}2{4~P ztlGg#6J|Rir~Vjc;q0von&J2&xdhZgvWc6`g2W>}G|O(abh_}z;EZWlmb%ZAOS*-4 zzP{5RShEU1?g=*e;np|s0iMQBBsvJiDIWU7ZVi&+kcg@&12(cnC;ouXIlp;4ae+$_ zou+*j+7ia2-hYNqg&x6*1NvVYf)TKn(#AR~$+ZTRHXkm; zuw-z$sdD2skB1Q9Hpt`M@+krgEY?A&Ekrpuu@U(%?uAungQOthHn+&b8;wph^=j#t!o;GuZOpCx;z>Ox;o`Jz!u@~(U zg{Nk*)xV`_KLf<-Op?Nc@cTYZR0CHUQ7j9qHNcpAW6F>5p3lyu45ZzpISeD;)Abd` z$Lf!2k=DhFQvYZ*AFrk&I&0?_Z9%$z*WEMI#Yg%>t9oT)IvXGdW{%JgsZv&{%R}g1 zD@2Yz;687Ue@hM>;{m`~U<|)kvng?~SMCpIa2ai(95&@}HWl5MZrzg*FA^uQascvU zQqeb4-NJQm7%@1TH9<%$PA!_ZTXJ`SCRcYkdX57+cu`2!p<(HDP-F1*6vu}6c1Oy~ z=XAcP)t<4zn{jLI{&nFje#BAB&o#xfYxc$zWhlYBMv+xnDKEas0gRRBzYBo~zxJ5--X1`c7 zNsfN*UDgtKFy1i;Eu}S9IzEFmPp@l<1v`sdvJtB%^dj$G_Z!5!l_x~7{&S<>VwCjv*$PMXL32n9B>L|K01i|_Ypn7dYp%vlG$02Z0RnnoUFsC}e@|J3N2Vod zMzj;4+e-euaOHRz zfWtZ-cChgmEsH~1-WR0wzGtJAg`70l!@cvcVIA5FU>RwU^=5CUuUlt)xLJXa`3i^b zy|{GhgBn=27i{AaVC$FxfxOw$i}>S(sc=I?KIk8rvSC(y%&5KRU7=*FO`wXXj7(={*!{jrcM7fFWVm8bJgfFQpS<)&H|4}b z4ll%$WI)Z4!xG235-v^85MgGxnK{|!f@e3FSC#<<|R4^j4W4Ds0!{GYn*N4Gk~ za>T?|-huq%VD%-{uHbHt2T7dr73cOdSC9zWc-tkE$EWuO5ge~_*8w)Jy99rsnv+-9 z5$8gkgat}3RJvj_Uh?J2v}skSTbC`FGg1d{=j^y@#UM-27N zsPCRQBy|d(JRjQlp=WxsmWTYtlpd}#2FZDELgc2_p|Iuo7aT9r<}op0Nt`7JIqu4> zihsrZCb-k@TJ%Z6$#nO@^NA}j<&Mgb>I~^qJ#3i^Jj>R%{X!C8cATLTNCH+Fr=Bdp z3L*0TDvQyID+Ow^Ihd-Jc)mz=6{HUGVF&kp!%|EFRnUN8(KcYy)=Dc1Aq_~-JmHY+ zKF44Ez)vrWHzM?l6m7Z}J0ZeO4UMILL>mSejRhmz^MQeFV!XQbAmj=%oki|fWAl)a zKw(OZV~&7qWoec~pZ0~9^0tG>?8#CVBYEb3F3e~DX$c4?72v#47=g(C#pOPuYi$gS z@0ny+3zlFxnn^U*$FKDv5nG#1l{5U>D<)4}l1YZj*_^RiFcqm@powZE@O&8zDdU$P zrkzfogA3p<>1j1gfYNkhjMFU??+nueACMZ3)1*jk7Pb0ZMluUC3mRJC8OXH%tX~rAWivm(zn)+1D=m4`sO6@#+e{0hYyWo7(sEl$2Nd|u&6 zTflqG0CcAeMLTAx$|RYtd61$p4dQROH57dPATK`m>MDxP&z)jrzq&cv#|OKR<8$KP zBF~uPLLWM<0ZU%L_*ibA>TH^EA#~v>eX5t^cUGIeLy`tTKIhVo0#{Ed=r0$Zz#nY^ zu-O5<%AL($ZNZ|7A^sJT+XOha-?$}V^Qio{tU8S@q=fM)SQT9k8i^Zx#i*k}q4WyA}UkbkEsIK+ltwyyE6+QYy7}=Fl;-ZUlyY;tb`G zUJ4v;EahID5RN0D$8Ga1q8Ci2GSb?Wd;_O^XCZ`dW4spBdcy|lJgWT+xME;h_d1i< z<_^}-v9uV6^7dr3SSXp9Eo#MCyQ$iQBXoR~lh(N|PPwp_oW0~nMiwDjHOQxnmMLi0 z6|97K&<0zd{faDUC`MR1*L9a)fS^SEzbk9d!%MshAOHQ75KSl57= zlC~Esd9z^0$~{%CqNs@kkQ#t`#)BUEt}^xeBe3Q2!iY>s6i+9w{c4b)>Vip2l3_&z ze&LCcLzG@7XCYBatkUJuoL;gUjGqfR?sTd19Z>&#hAOXm|FXU7Iy{grkA?#DI-^DkW{|Iy>$x;DP+)}t~rAF$MNWmCQ2 z^g|nSS#U)qVv$94J~HY+Rh7V&&lg9@otus@G&3)pFyB zNjve->#F3B^_v=07}4eI5|ARc6?%zCScr6|!Y%ai8VAD81RtL7V=XH8KKH60+ED|{ zcu0;oqdyuu0uR!3J?HxJ9ka<~18Es1jP=}GlE8i{nrEltLi9S1O=QzmcQkuPmtU^x zed-%G&8axO|739I;A9Z_k$VBv%Y)UVw)~SCJcC@w$ z5-jk0!Amsvi2vqjmhA8i1=vf@Yf;3udMhEtQALEv&^L$S)||iQ0Z{HStya#oH|xI%CZHNHrI19y~uun?%}|Z?XWh1)Nj1+*$qlOBEC# zGG~l+)-?UBn@s&~=A)8!rv9Cj@E)b>6-ptbV>*e_{fFa62g^TgN?|O&Cp5HtI_%za zI8S1KKe+_J3A(M0ec(W*L-vzw{>6A~s}B=9q)3PIG!2Ojfu!qqMdzrQTJi~I&iM%y z#n`e}dGyCH+yN&fhq415Emle;LvNQJZ&4+MZs3O{ArR}#y(HT^^|PF!{m6#Gkh z>JR*4TkT99A$NRd)4Z8<{)K>s&K5u+)2@8j>d(wf6d;wjsUZ!LiJY75U2kLz9DFLt zcxt}{636J$DU6G*MkM~Eeb9ur zQ~Od$C=m!EX3DSbgv=wangclb3wm<4m}L3N>CYe1)Kco$cd#4jECxFc zjOn*!jV!Z2DY%flIXi=yndzmIl}FLqyw}TxKm?i#JTg@tJJJUFKOanco_>|UC~*da=;C)=O=wX^*!+mTX%B%(OaLhD96Gp##0g!` zUsyS$UIrwN-Vo0}W*+EE!x8s0;q-sMYd#E=C%Jz~vs6!~T&VHI&URMi+WMJKxJ7!I z5y0xnZT5@f(c8MovO2Cbdd=V1<pprg;+6uzVp~(8DBQ2~{>8p5T3qKD@!rU$3>h5MMMws=LCaG~n=msc zT)ke(Gci2B=N#1~91nUAAs5kd(9Iv5GjJquS|AA^WMeZ@>ba}GWKKRMlVvb(FVELE zn^&P9lNZJ->z&q>=RI_)9@*90zFp+Q zeyppG{n2Cfz(l-J>UXOPI_7;Db4|{cp7HMtH(}f+mgG3eLEFXc`_yr|@pn|C))u^| zEOj=klTJIO6ns~PlZ9jZ5_W@JUGYM#+vcuw>g<}RZL6@}T`bc*KUBmAn$G#W$8urV zu&K(Fl`uQh5iT=FxV-;&j!-TqhuMbDF@0*t?OTz+$9QD(EsJaYc3QjY=e=THMoTuX zc`7mZJSf{^Z6CN6uhusdNNPO&9g#)& zeT5EXm_lB=>*>qOGLFY{v$68$Q@9T&a2;MDev2<_qY}~99ru}9b9SLsnFZ$O0(J}< zuE}^N4NV+>;g^SgM84Vv$}J-%uP6b?WY-hyz*p7Es~e4o%lpRcD?kGV1u&@PZQ05z zi)>OLSS)YdfRsKB0sC|%kNe1+D$>>yg@5APJYEj$kQN?p^x=Vy7IiTv8a!MgY1_xk z*Z1ua-a6xb6X0KlJVe`axB8g!0U=iGmF2n=%6&P{RDF;>he3D)ZZfY&_nB^*an5BS zxrQCpH8Jr+mSjXSZO!1OgR=}w=tCu6o2z?1Ri>Kk6 z{)W6S2eMnU=zcrFfm1CDuGCQnvLjYYU5QPyARC+(JIsdt`8RgFZ}n9<7R~jmbmOzT zLZ&{tR#fh0IW=>ArurPE63Fp#3+UqZf}_;6x|c1p9i#iazkZfyzQ$qu=5$PP#+Zei zLWMX|CwL118c)|5;C6S6DQQtxh_i9_S9S(AVln#+T%X)uvyA%oBI`oD?CwI3X)a9M zl&I?El7l0{-bsS8f*EmAMNE1}0}gw_IpIl#SOpezksY^rG}AX|9p9g0xg@XahQg)( z08QTQi7-5!O=VN)ArH41j3CpR&7g%Zm1f)g;_gB3K3^y=c<>SCb0rg2iB)7vI?x@;h0z9-$ ziHg)Frb1P?ncV5og)}IDZGDuvqG5Ylg+L9@NgVq3Wwlydp?hkb6E+4Aq*DcF9%vjs%Z2zRzD#;jLr zp4~9G4B4DeCLFC8kvFHjwZ%V!hHfz5o}FWzb`=8V>X%t{9n6S1EiSLLgH4R<5-AdX zw$Z_W-KzU%MVOJc)x%xp2LX)jn)thntSEG0Vk&@X(q-!^pY3j-ptSEn)Ua%1=HFFh4*(-p3eb7xWDe`Nf(Y8-NP~CHbGrJsqNQAH{z$+jkwJaY9^}v0e2X68e6G9TSZQ)y65uj z4)L!?20Ebw6!5S2U){PJqXQ^F`(lIVmDy4V+?OAtck(H6sfXCsWa(8C$y+5&>3(K{ zrHY{Q=3_%5e74J>b8tX`3_kDQw^jz>nLmqjZ`nNq-D@X;3Bu2_RxX}Xjo5$)2J!ik zEIgii2k+my1G_=UG+>X^`pO(LM$dCn>zJdShv;($nN7#mc~)(zi*Zxb7~^`uWfu`3 z6QUWuLTEoimQnhY5BnqlA8R}2f+bYum%JRl(2z6OIkQWD-rMS1Jj;*dHFfB?2U9=` zJSyue;9>>VcMXwm)sxq3OJ@YB>xKyV&P|J9MHzt^HIi8fGMl*_F+a&}JHqF%OTIZqYbeb*`)FYS27l!hG_j*dj@ z+5>tbezG6%G~Jh{^zVZRBu6}6L@MMWPuPNEBx%aj#B^DN*)NPVjftG{>@SSucK6~nK$+01r`YYgGkaW?nn*eOEDQPG2S)TG*ceCxJ_{jF!J#l(O>cE~?c|E9_mJD&5AvlN+fIW!Ao= zDrs*SPJEY8!|egx;w=!pu@$Ko|*n82D#=WJUTq&2$AKlt~K9o3k@J?>T_E z8Dv%IyvmEqUBlYr$sRK)pNZOLRr~gk%2t!!4*Hpv;}{!y5e>YV3I6y~8owV{5o-UL z8a9hH4M@%}k4rx=`t{G2O)7Gu7}7D7&hRcFR9kQKu?ciIlmEIL6QqHVr3vTngb8hBk8oU5u-Do55HMpJm$s=HN;JJ+&A%W+j@a-$s!U zF5_oIsxc|zeT$5%qe&EpQtW#7>#}wLkA~VI?F!yvv{t7hE=5GY@ zk4UlceNlQ>2!9J20o5Hi0lqY^7VU&?P~qMwC#}lrnTA#$_H~%2}hDfoeaH z@%nL<0?N~0RX|0LrI~fFiCY0gX1oW&iBHM~OQ~C!*e3z5AMCmNKhu!8I}V+DM{INA z1H*1+l4jDa=8#d6IPK>GvvTWFS;2%%rE)*GX4>Z}2%JMNwJ=y6SgUm1#%^86u2G9> z7+uxBngyyF57+C2S(C?XGLje9EWGqJ=#-9Q%;2I2qp$F=GtRzOuo_1cLq~h%p+rV^wwl` z739@VbGqdhg^8*T7#)|@z_OnWlzPMjgH^yi%b2XfO6jVupc=?F2@zh@6-k$DyKy3X zy5O|22U-a$!Gk}LEAg;&2YtJIBe<_T8W#)HA8f_`Cc7yTE67qtGTp--V4DD{(Y~E`l0N1wk;u zFhN_~pM5|pff8XEOK^*3e}O?;{m1_sBJCe{`hSpS|DQ;BCPv18?8JX1!m}~{Gco=v z5&j=3@SolP9SGm7?5eJGiUlrQ+^@l(a;6q%jfRbqgy=%gKOhexlGMPZ>L462Y0svM$1Sx{hx5bTL$QOVotyF)%Z&T;$Wef#Oj_ibzT z<0i(61lLYPA3=^R?$VbjXAM7VhPaJRe@i8M97XE;+791|< z;%61?;LnE=EvT>`hoDc_!tT8X)*pw^*eKuzlqX1$n1cWt?~kZNHiv*10dE>X&jccN zr$2@PZ7*7Y9MlCtM>TB_Gb+U-QJ4+UmpFbvY)`}sPjA3_MdQH3O>1ZWl&=JUQis;Y@O8f6 z%L!uiM!W)q&uNmn(vMTTuMD*vk0)Ii7rwv*z!(-BM3mEXg}w$u|921HOr1h3On4j$ zfS4{qbQ3Y$-rhb4q8@^jU;sj}i9aNE<~W=mhv*3SiZ%!&u8P4hExH-`SkMu&Xc2IS z8x16qz&wtc(KKp6GaS^w3k2M|6lb~fEhaZAHGFZ?Y_ChT2?v@chpNnv9To6QJe5&ma`AE=k!H}HC<9odZ z1kFLX{Jgd(gq<6Zc!VxVHYR+^d07lEUJZ&b=MMHEUQ{WOx~o1AR_sJq@jH%A*R@}A zH7J2mY*Hyo+I5t$h(VbMyZNWKn|iLia2o#?dcdOr37qT)8+9mnBgX<|-SE6H*ixWv3T^Bz4Y5k>l_e;qoV#86Z) z02PYRxI``%Z>rs2%f6F(`KYJ0gT24&Jo<1zR;NoC39%);XZn9d`(DN|v@}_PppgKu z5B9=%AtK@j&wd*n^_Cn^p+R`3D8|lw*M>3{aHrf}_bD zj)#S;u;7jDPcyhnbES?U#2^U#$h8o}PgG4D(L$UyK`^T8E5pgVw~AaU|5#xdX?S5E zh5La@m;}_#c=_XDhoW#1e7J)wa(_wx21_%VLQM&-akB%ZX=nnL$d5_)#nXrU`wt*t z6!l_7`BR8MfTRyHEXd!4Ap?dZ9F`cfJ_3diSVWcn*AhCcs+W{;9S9*fH%!$pY+`8k zexc}+#)$kp7x>G0cKolea@buyKOT1HF`s=u9O==pEup~@k&(yM>%HZrDd^MhdW2j- zc2?XQNmn~&U#5m3Ihn>9fTfh;gK2zKJG7XnMb#|6@p%g{L`0~1+YVh&Gac~*|MtuT ziloG6{rg8tQ2hleoInm}M0e;Wb~B5%57t63Ym!Z^95o|_NZ0mtONm!6E*<>BtUU76 zmhGCF<0s3e>mfZ;a7ICQ(1BYcyI-I9pMsYn+|E49ucgMf(>}kfUi`-QJ-lRxsbS%Wy`kMMjMa20zO5s?Fr1Q8{==RIE%I>-j|!J zinY|+W)Bo?G36T#HM6@2{8&oLj$Yg6jV&RD&E-K`)~=@duccx(ODk*QTphl-a}SvY zlXjbri>dU2LbQ^I9670#*sI!$E1yZdb+_0rC0XTA=V3gSi0!*^D!9*=_ik8l$bjNZ zOPB-HY}VNKb@Mj-hCynO-}-Vti*vhCGiC%_5tr>>yVCl6K#rgxOEIXm@iQGl}$!b25{UsIrc_Bz2hA<^h{R^oP%)@=f7X_njR&Lor89 zWp7;_d#UO>487;eXDr)T_j}ql#Kz1z+3QIxa<{e%F1w?LQsEt6DQH;u_$rhWP&0Nt zR!vI%7N4{|aUF^JI-AAXw|T+>S=mvaAlq95+wE-Y_M3{9tz_~j*+h5^o=0S9d5#Zi zb6B;>U(vE-)p9{XX_R6q3UACW#I4m zFtDoBoKzUHctd8ZIuFrmUo?$eH`XpiUM*BH`6%oURhm(DW-F#O4bO5EQ+C>)@9+gu z*1bPTF1SvTxwL(0+&`tPi=Trevk+w}nF{PQfSp6lB#M+w#NP&NY5{w9pPF(BA95sa zw>6y~=2xgAr+XFL3oBFO#dF>ct$8%|hxV7XT)Z4fE{Efn6pFNvmPU@LeqIzEUGGyC zzuN~tA7}A=J!_S<+AIDP65Sh4gX*TK#2w!)mlF(h#C#<`xR!*oqE$%JWx#kP z8rryRN-rG|dw&OiBx^0_wC3Ux7p_nd3b0Z6R^t;;ot8x2|A{0uaQSVISL3K<%r&X` zbiM>a{`oP71Lx|n%-Ethj)!e3X;`Ft6=u@VpEKR@49Pjq+Xx%g_M%awk$9eva#NJaOx zqnEI)sie;3-_#HHu^8?NKOs+gl^oSe-04BAp3h9?dB_X-0*Q8&h>D?nl9%z^wHPas&*2=pS6NUat`hw zHu5hvXio3`nX9i6+K-q@i?7LK@po4}(i(w&pZB!Qwv+bYGFocL-?RLvzRyr@Oc zF2A3((Dlv_G4Ok=KvbP}UP9~oInFHP=s2Fq5L4?cMDgzmtf+T7HfPTSDE6mzdPrJ30WA>_kjhYaDu0K1o!fjqZb zP_`L2n|8Cj7onc+i(?F?_rKsu7x|`C@$jwW36|W>t*}?`!vrBdh4+267FxSJ$}?W3 zM_fK!yX99Itb=bK>7C`U5&cacH6nCRZag=Pf>Yir!98&e#n`ZEnKF7enB5*Cm1oM) z4pVMdNZH>BG8u-8BQ$b3wIK>A^9tz6HI|cX03C8cy$bVd`paeAvTZ(#l9fw=U(MI{ zJDQi1KhT~Unz{c?CG@`lwEqxq|L903V~2mXv(-N^TG;rXfcwwp{NLry|J1P9|FNe3 zRSL1P{{vh9QwlM#v9SHWajXtw<$o_4X`?zlAr{&?|9xE1|5pDtKnjpGcD=kDh#HcyAzs+ZM@Qlmu`%SZu%f~pY$gDW$rBqygIhB`*NJKzIUMa&Bs zoHk4azZ4r6GCBY?F%uIP5NL23^c=|F>oWoyAfN}JHhxtAQl>evvrup*CU_uFeyB45 zr+4}cVCilEDE_$cj#T70P=4!&S^o8T)FFL~gAW5RPIXN#0CQf!A)M?k?JC-8eqYBr z2Kuk*CpOI_L;_1glgqPx3rkpfdwTFOMk;zB6kHx&eoKJnLf}3WGh;(jK)WV@GT>%F zEDNLx3jj(LQdnaatdZCu3maM47`oqK5osA6p$I$zx`Hw~Kmdyc;3DRwrQe?lU|ile ztp#9|WxgxlOE2~xShYBLbcI!g6n%paE^q+oKHRedi|^JeU%SFDeXuvaC0;>VZJg_0 zN`Sl;Apb14^fYd6ZVcLOZGos5x|Aqcm)|?3)&>_)H};M-Al@1}ey%;fXnRNcUo-MC zsJB`WUvy9cTWc^UJJ2841gEdm`JcjMd;xs+Gv6?8W}qjw((T?Yz#9I&-sE~l`)_hp zT@4L9eOtq803gmZ_B3zy0BL@k8h}IJy4XK+Sr>XB{s0VY=&8LdC_kG=4}8WynH^<^ zqf<}UUSHDOKaRuFI9uA?ziPHW-Ww({a5XD61gpNrAV4%#*M7e1oj*EEmZ84%pok)v z5|Av;VDIqz9P||IK2D?lh)0kgqo20Ci1zNf0BlU;e!-!*eP4u%kl>CCVxFJyD>V?l zo8&g%^W<@bk?4!R#gQmYOaN!*Cc{syTYMJp(2ZZgd>ebGheu~1b@cU)pdT7q0DN>1yftJu`~YLauxF=_ zy|BN$g8KVFXy|pav)J z8yX%Sg7$wGf~dm50l-gzm&pX?`Bi}O3!m>td_n}Wa{zt^q`}ca_^Bb|g7+Jr2Yf^S zGM(xN(g)IL2lz!F`0{sS|Cvq8#_l_Ub$Um?yG=^|wORLF8vF7+xzjUU=QCo7i!7v- zpWOI5#QD{ugCZk9x0K^Kfv2qZ+QZNN{V~0>1*Q0zrF+wxFDQt~;f1-{vH}28#Zv`< z20tBzhoj*Kz!B4jRE-$yFc`9(iEKWC>_QNdczr5I2wc`v~Pcv1Z!1fwUP0fMqml$c?)lTVIuUd$wv` z^nq&K3zf$sd7|N?-@azxMpwA+>Z6-;0|MU7XE;2X_7q+fxCA~88jQZap`o}1llN()j#S4y6;rx zYf)q>R%WY8XQ%4`=9`gkNcyV^@CF&Yjfx50la?`25|9dNdX$r?$`dMG>{2JkwKOhD zX}us-`0B{`hRBr~SS9l~@FI#6P;4XVRjg_L%JuL;;uA3$KgMuW^i<;LdORTuEYq0d zdvbDcSyf=G$lzb$q0cp1tG~4-gY%xHQO?DW&L5r~10ezjC;Y3l!5`*e9k^RUT&XO< zcG=&3Ms*GgMkbrxC6Y91WF!ZRMNB$B>=*NaRO%Pgs~CmL0-vWLoEw(xPlo4L9-$Yo zOiR-njyZ-#;BgX(xE63pz_F1tx2e=x*N^re={AddsX zdvu17ynW_4l<##X(Aacz5*C2sXH}m46P984v_EA3W#x;%h#Q?X|n z`3rM%BBHygdfDJIp=9p!v*Gh!tjC8a@PYR{yFGq9)AhPn`;*Y0i4AvWuLH;vfzEj> z?}cji@mbuV!0LuKRw|FnPon!HXMaeg=Nwr!rKU``JJM=20e+y&&5$E#v_)bNP7ULTn$QXf=`^)Lh2q$Bqf<59Rk7ep$7yY=S>*eK<+R zJdQvK54yxPPJF9v@Y%g?&y10jSX%reo`*AzE~de~*%G9Hj^CRk)ziL)6Liv%ToPV# zCt(?kYY(u$90hhI53GE=T-1&pT5@7Yg829?BLLHaeuti`-PVj&1NsUtpknq7QQvHQ z@1Xt=JxD0Uzg#2})?P`I06LKPDcbbsgoBGe3u{MW@C?lr;tAr(+DuJtHPbr ztTTu8Gj!R8T-DipR;NM@?t82N#DhOoA!7>JW%hs^uoX-Chs{(f0_s;Vd>6vca&*os z?Obz=`QseV8cWbo^b;ol^~M?Uca06M)IKp+KsIj#EH$!A2=Lq_sJdjR-z$OkV?2I% zP?F?hbSxVbueUycwpH7(9#oUR2hrS)+<{?xv`0-~0l~S3plq|rF+kYL=+lnwZ%03V zCu@tRykFyxDbcWz&op4J()kQ|Wdr6)h0W&FWB4{@Q)>&a=N7yeX0JlOnpa)%AP<#f zCgTNtIVhqe3y#OOL`ahhSkJ+FxvhZ+FBO9%V&G)0C-(5$s(ld+cr|dr=vA;;KI5fg zV_;I2Q=GjR521at^SF!iP6vay%~-{h-v$a#pFngZP@t4qpD0hI=Lk5Fn|-RzrU4%S zYIMG%k^W1*JZ%oROc7Xx6LC9f8f#3^cKGV_uBNV0`a~KR$|hsK%e1i6J$Q1Y9;6EOeLpmCAKJM+iv??JIpxa zYG~hG*jFE{)w$xDpc4P4an(xhH`0)H06h=Du-V=!H9`YVh}dNJM7a+&kA zP{;;<4A3!_d7!4;M0#cixEbm!mNuQ5^MNLwv->0G`x(i0V$(kh8=s`{@-u5Rqn=`z z1x$$iY*z;OMjN*N?5M~}^-Ns_gHp4ehO^50F8WY>7@YhM#_nNB6fW!zaND+R+ox^Y zwr$(CZQHhO+qV1vCP}3#8RQ!FVC!Aaifs&5qJVoP<*}Dk(?8kA|0u-?7S%VAz~`{X^XwbmUMp9+w28Hk4=j(yEu6zh0y~xh(#;r z^)#W+2MQz? zQ|08~mZLNX9#W`leEvPOx_cx6h0ac6C|)2k$RuBwvH1uME||W<8PYHZazld?V=YIq zYxCkA&=S281zyk;Nefs;gC{)uHeI|cC)#lmi@ngk`$i14|K5hd0RQgW0UHgKL)_L| zj7a3CvPx01bqVc+{%)9>g+PYQWsC5D%{)r3FmlF?)^?GLwHiML97Md)n5{<|n@<%8 z{+QNr12*r2G7bMH&xJ9wuoS6q;<0FNIR&+>*8H6{m-|%TGyjID$AM*E=rgtqbqZjP z)@Ij$FgS~s5@nA;>)`Jd$e`n!H@CSF?)fov&Qs1wOQkJA-U;glc-Io|$0ZOucGsN7 zwE7p9l$to56S}GEslbZf~0dXcDGU5450ipWVL&XnsS*HhIK? z>1dfX_?qvJH>#~HHyV{N^)WUmYG2Z3S{dYq7M-6Tu4?W@eAW7^v5v9 zf>V|izHy3u{T@oY>*=Kt0ZbR16MQk_MO#Dz5v(kOkbd} zuq{-v?iNB8-ty2Q5|~(uixP-lp4URIX8GUG1I3C8NmidpZ{brtf|z0jqp3<{-f zf#aV|g zUZG1nV(7hQx`&Irmh-T^(M^T=jxmWM)bincB~jraUP%6f1T1-~Ge}R9zDpaDbEv3Z zxziFRRd7ko{;BMvdOsHrA17{tsQoCE)>vK#?@RCn;cO<{I1eR+Dyc~UW%Jr@Q)u#r z*i8*=kANB42df(&Hc>MJ5f>}gATliXxmnZ0Pv(gwak@1VVagF7h~*b_Zz)!l7m1Te znbq!dF4`cs(8T6a{hQ}+Ign`EFk>XkftsHDNjv$G9dvnSS57ZaN^V^J_p2dg6%y7O zDLVkj(a||l-FyK6hWvL@8!Tkql$Ud;958ha8kT}|*L7_veFxV?g|h6A3&<8ko^#(=KZs!}!~_#98!-{GmVgtCB;Ty>|=mxu^UdBxrYS$m&z1mU2?X zsiUS)bvD~9L(nejChx1M8xmb$1EfefD-vI(hX+N{SA@sinMMAzrjYe({;^YluX7CXjuyL7{c;3CyMTV%9y2?_r~ z^59;uNd!g1DYhIt-W|Y?@)tYo+`=*~u+_zw1X5>Ovl@|S8;G#tv z3peHb0XvG$ub0DhozQKM?>Eyf05{Xn-bIy)KEyfk^br~RP%Gz|5f49R>gS?>Pw#yR zckFnx#2iE?V*Jzr=e^>eFjl3qH;NL>iU&0eX`pNb|ewCH&G zCB%4Jee5#r5$M?9avglC(~MWB*lAE64GBx-BnLh%so(_|m=3vpVi+~obv)qu*~nEO zb#+_Lj7D5E;VuW3GgA5Fh<uM{L+8SgYOJLcFkM!kK zYMgSR9AQ7~HF1H?xk~i88bNeRTgujD7o(=UMCp>sCs!p>Mo6f=;@2@wz7hb^5{=h` zRCJ>_i*$MjF4|7rctfV%iVb#lQ!VMs2OT^(*8}~U`bGD+8#{<N3$fNLLP{|9`6huRZRf7PS6hKbyvH}f`s zs3OhCSvK4~`1yl=BsVD%4bb@K(fhnRm%basOwnr8)ruY@oifX!&1k)`6QYZpcu>|^ zt})oR^f97}iIav5F`z~|gOa0NtS`Kbt%jSIWwNAsw4L)TIgsxk?Hb9 zp4R!-+y3I#bs!`*m*Mo^feZp~r|r5rD&n3s21+P6W8=3jB)6Wx>_dxs>r8~2{*A@t zUAha~M|O5hT5@D!!}svQKDDOsI~rWw{f+cxUT^W|eZ-rbEIRh5?^b+n1SrdHhlv$b zul^fOzsm9_q9T?n-ZCLv-5EC~8u*#K}jWf(C0{G#xmD*)OomSmRj%2ZA37fy)3;P48^RhlP(B`8z6QcTA&cdiPivfK|FX$y zkUQ-9DdLIyVpfuX{djug@2l`AFkUQf@c}mN39s2!&G$+^r=;|xCWcKdi+BC%d3~o3 z4KMAH?I7dd-_wk%(d`pCS{>zg(WkZ(mfjyI+u%A)@am9jF9gF`sKPde5({1nsG~J7 z63EHU_)(l^A(*zZtbi+wri9kop3@(go1FV3cAzKe2$Gx9)`W68MZshCUTnCjd58^6 zu_REy$2h}Rc$Qv)*X@5E393gLDYD!|z6Wj64(UpaicasW z&2}vS8Mc3F00TeI=hkGwp31u_{unPOxbUERQ8OjNA+Dz6BKHJ(n2VNF%Wg%w_SGnk zNaev4dU?HCgy~)x{gZ0G(@l_+D0;EmWc`5#qtWu%h5Wx#>pdlGjM_Vx+Liuw*Hb9}+|LTfgQ!h>)X6!(fg`_ZnT zvqd_$lhIOw3qtze5bwQ!^x7()P_-xdZvfFgxAHatu(3hrX3a(1O?T1ilBr>LCH>A- z%S4)l=#Y(>ee{q+l@a^B=QJ9Yh3Ck{Z{H+zBO=-TG)7;$e})&?71kj1;qK{@TEcon zEVu?Zo>sSJlwQ34^b|+!3u{XE;lkCc)>4YS@=tgjVS(yk zwO61z8eXY5@p+huqz0hnIHl>ekMs(J|t^J4|a7yIIAo78ts(mvL&Wx?df8+!sWI6ilSCD z+j)US^!}T|iFlwH>kF?NF>Oycka`sl3C3G(r}??ElbILAY;o2E(tz9w=4!Kh0xm6Q%&;fNz37py1xL3seRYQu9%bV zd}6c%jxQRKmKP^=p^adJJZt1$rK((;+79lvSEP%KzQ5}OtIS&KrRyo_{>7w%bV&yj z5(|@1%Q!CyD=m0B8pF(rG|T6YU)o42UvCgtM4>8K4XgP^*O{%e*$Yeu$`pavJhzwVJagg*!i9Ip?_r23sOYA{tar>!k=@_{tR7ud2xErsi@`nD{01r(w#sPsmjrD`62-|C^XuXxgqn|s$|a7R@$7I z*#j>@YE%+QM$Fl;$_4n7hY(02t$FN05i+&(pRgDsliPPI?sO||q;>n=Nf=X{N@QDz?gHLu} z&yT=KxGVvRoEUt@K>Ktnmy=Fe1AF;L8gj*H$%MC#sLjIi^>Im=nisC1H*Y-B%Y-D& z&m*INOcL>U_njKY9)PlU$fOp)rbfp&0(9o_B(!H@g7ET{fAoHfQbGI@6=8&byCg&) zvI#m=fe>4oc^qVUypAf-T(0>HOz30PN9~|=*=e`fMPJN(Y-FE6^a5rOJ>nkq^W&yB zTiEzyotHSHeB*OHR3-B4IbF)Jf{VCZk6Lm&->?LQXWUnvYW1TT>Z*4*0z`X+$wCMI z81@V+%Zq5tCVTgOvks{&?mBK&LFIO2^OiV_iw7<&g_{p(#x-vlP)-YBYo?J5Kn>=e zrDM!x>_CYgJuX+K$5}_LMUH?fr!tiF=2I9Xq?;6RHhLhZs#Qf_d%A7+flSB&ED@!=@Ca$x$=Tjg_1U#&ActEcbnE7r}wTn*N#Vrgj@4Tl@YGPyFD_Cd?-81G_3 zHC=1aJ6I`4a^f^y-@Av6yYeF><(p@E?Ke@;u_47s?@=02_Wl&Rm@TCHQvx)@7(ljR z&HZf5{eE7{NP5LAVp|l90Aen^&Gc&{bYH$&sU5lu)425@%SRP)4${MkA~=~7r?*a( zpD-G}bB|vJf36@@JUNK@zk}I3rW~{YSk1+~4|dY&+tNM^xhe3CxBz7hcbH6TL-mo6 z45DZ+vBIoHLJSB7uzY7Go@ohBLEp2U8B%~n#8$0lUPCeLA-0M$$EPlooKE0Xd(A7- zToB@_?2zC5RWjwF?={jt&|TYSK#c$4sW696i8bfWM`{;Gt<7FL_d?Y{_(7WpXli53oD%Tx`MOBR#Gj6sEnhe4<>~=s5q_60=(ai@ zgTy>R4P>u<>E_{v>r)aR5>wa3ny+Tg(%`h90wB@w%(5euXfA&1XXi34d4(b9ruvNDHpp*(Mr8n zoNW0R*tdl2NrwQXgzVlV@04>_vqT4qv1g%8d^L$aG^%y^qE8RHj3JsP5^#u)A0W5- z&Hjh}wOnA)RkCqC94K4~+a0ycU0U}Zz9AlGJH7qFS|ve@$;r5Y)*f ztMk=LdC3jEy|&Tac$eoz&*b;~CSRP$Jm{iNXmBR7TvxRxD@T3Ge*cT{ zJohcwREe_D*9()qth`8QRjZp5<0~nZ9)NC{K2uh#E37U_|F@Hl%Gfp(Zege{4ArKH zpxhk&v)#Qa`=tWiL`cy_B6m-V#0OVPzJ!5oI#2;6ha2g@xh&q#;8dxFjxoSx$Cbv8 z`wf69nFi+64r&Rua47NO*how(ehoPzxw)Ov-{4{R)St=Jo=S)eW@2LaMzREUK8hHV z*<*|~8|v%e;QPsJE4c1uXdb-g(%@fWAYi<~db~Q;hnJ_o@5>ka5!6D zj%yEP*k@haK+T7ezpU!b9V&Ji24378{f;9?ImVAPYi?7ovRmF%w6?Mdm>#YfO( zME6-B;DK;zA;VKLVAje0_h6i?l!XQ*6r|?4x&d3>`BwTh~G}n?#tSnbDE@aF6$pnTViLu`HwMRE=TyQWCJ#N=-`U^OU8u`ae94w zf@T#KEa&fTewgz*dp%oIJ`+S&2+=qTIOW%~XoclFT{bX&iV75y&|{egIYHq$kTz=L zdrv+Rj}279F%t@H`TXW5|6L*sHf!K6XvAeyuoC^D(4r3-GqK_*R=bteu-%rH@g`B7Rr9}f$8ZaB+~wT@)M!RU zpi}EBKgYyMesjq9ZX&@_lM^GT>&IegO~8Kzd}HXr1HOugm@vLkb#*&S2b;p0Mqf86 zd!Uwo9l6a!jkb{?W1R*6&LoejwdW-YWJxuCnu{?uoq0tgg(Vzc9VVt63+K!>#?`pRe_cp>mfSIi z7B%2c6*>0c_ykgz#un`Hz>m7lSq8G(sw=O+TCmj`<=s5RinchUHk5o2D?^O;d4x5M z8)8mw8)-I3Io-{9?)U(IAx@Sx@A=SnZ<_LeM3@NWV7xp64zTc=Sc)GyhZe7W_YS@F z&9E(p7b~=F_CWbTc6?)%#H>x^AwBRCTR*`6Luq%+D%Yby8V}OvVJSJ1!Y|+K=!bsdA?6OUq=P6b3$8=Klk;Xac%RxxW`8&caTZB@mU361Oj^m^X zkAUD3n)$5QbJS4f))4L$c$QAR_1Fy`8|?iRznp7#PZ-1_K(IXt$l8>VAv7(M;e9R% zi;w8FoL)<}0INc| z%2i}ChYb;7LYg=Kh>Mgu5evLU^4I2&Uo;Bs&7l_1ux-ohW!-hO!&8NOsy4UN)@gi@ z%4rJ2$|_z)@v~M-eWd>J>BH+9k*Aq%`@^Eqt$bhKFY(Bp0gCW0!1ou-fI=!weYc48kgBo(g z%$Eh2zw~G^F&yzR*V+%FiKIh?^_}|WI(Qej8nS8s9!>YYgb-5|?Gypuw`mUtni&`s z;?1NUPnWfVT?Lfz&yqtD-Trn_cwp49GX=_K=TTiIWCltAP+e8%tOvh z$cTE|56ooJbHjo0A!Z1t?1Ri84DoU8v4g4E%8$Zb9p%?d#Vvc`(6EGZN9YVIACu1W zrDoHLqKoEfV-{C>_xMYl{+((!BcD6#+{GD<;4aTbUe~|sBNqb@**_iOe8*^319Iex zV@m??B9xvww9j>@$Tm(aj7h;%#7aOrIvGT1NP`*pC;>*DL^?~HzsZ^*vvr4pJ|NuL`PrWV`LmHn!py14${#K$uvpRuAkeaZ}scYB9$);+r>v0{Rz(u^}r8N{6ls zP8dk07?Bw}E0$ksCI7l`^@maYpnfkQLR*OkR)Q&=8|xKD$ta!uqLQ$3a*a#{!NH*k zH|Tsh)H>IP57SUTBVFrEK2;ue0nHq9C7#i_Vu{BLp^x;MuC~k-qR390r4j2~o;HF( zHr#=-u81T4+U7wF)}7aB{xLLls{#63Q|e|Qb_lod(!MruyNY(PgRF|N8JTh2#tTi& zhQ=+nZXfe}!sfBU5Dq+9FYnEt8e48lYzxzV1ep5GN4-;b!XoybVG}$8Se5qhW2-`1 zhpUU_uUcYi&)F%wey%}LBc17bAtK*htN}kHSzrQymT+%U7#2Wd!|T|S2%RWoX$W#! z!2S@QJi+=M>0`>4fo_ZAC`di_vNUDvY_4p8|2-<%!EyZ%;Q!OitI~O%{ z5}*RfT!n^y?-2I1eHz;T*jB&N;~>L}KtbI<1x$l=v#?ItS?eq|4n4J`o)X-PO^!|w zV=SP?`-gmPsjdeVG?_U6HfzETyU{f%{TfI{_0UJn(S5N<*sOSn_$z7R`?^^bMxodOpSk-=poEN=S?xoTn^rAM< z?7*-@{u>>BlZ3-mSzA``^O1p18(}PTx<|->mi{e_M;4xjMqBVuf5u}|3dPfnt~~ku z_ruJa6QxJaTHr{mHle21pu=gG2*qdZy;B2ViUc8xWfz+_@U4PG<=u>V4r>t~v(BL~ zYzO$T*LV{b-@@dr*wI6yzhh&1^z%8^ODIYB{>>RMt;BGyllmCR0oAlnl!$zVW01~D z<^UUb%YiJNkzKvFr@eo>&UNM6>&#iXm1ZvGNK?B_<94nGS^IV_xiF9=1gC5bU zVMaKl z0iU{QUk7dXqXAb0ZpU=}fwQ@x8k&Tjft{gIlr^46<09#cJ;$hyyhL8Kxe~>{=y*Efavh9;BD%Hf^Q)JKs(KYuG+kiR) zbfw>gMWodU0@99c>mwn4%gn4ks7 zcC5-~6VbN0_fGZ(&Cj*S^Sdtg=4Kqd*)tsO>x99eAD&uyY`19f+zX`tsmk-mt6OyA zz1;pmI{i9sbN{@57ti(k%1Kr5NYK=9S*(>=PHFnPHwCS+F0Z1s9HOVWN?}DtA!T0pgTX(1@|5hZnKzcx~p#zZt zPmjZ4+EB8f1iv3uxxb<=BsO?QUBH);`{B!MEkrU?3X6CiJ%h7vF|1gKLb^YzBHXO| zw7;&wVV%qt^>prLj**(opc$M)Vukj2-Oy}lM({LnqGSWU)g0d$_ zkZ&q5!bS6slHhH8$bRDuMHwYJoyZG_D;UeRS%p_%d-VFiK305XNE&05$$~Uv`E<{2 z9mkItQbjhH2Dph)W)F~Z6xt{g8^(+>1Qxo%aPn1g*&2dDX-`$HK*dM!$yUG#bj7?i z(>ME7DnDs%Mpy5iVxkdF&YTE&R(PGPJoHd)kgj+dt=)aYu5i9e-gOY0Cq2JIIsJk7 z&?%hv!wp@9Ub=CgMlE!~R)pN7|F^Z;iQDZI#YgoL84LPGE8}jUv&vJwjCy$w4l{&@ zKIbq({ZO`~kTH#CG35hAPFqvxk>xE51``rkvnxx+r065SL+X4Mq4?oNGad*W@TQK% z$%W7E9h&G&g+zCwWj{Z7`_f`h3o!_NW;xF{VDzK@S+Hb){|CHsvxH6kdy34Ww@YoLG3q-uho0u$6eF1U(9fVJWl%E>=zaK6p!EOfoNZMVyl z+?heA|6bMJ`6J=ZVq8~V%R%3pGDpxvJ2vOKay8Bwwvj9q;WZK^ycFTHpyxKtFi#RW zzyB^64%i~#K?OHcGCkNU+)NB4)9f_I*zYa3I_JPe2yUe+%f;fCa~vepk^K}*4l#KR z)tk05dhyEj&EYYYtUSwDg9=htzV5HQP;#;%oIM7?#77%I4_8zE=g3KyD!u-w*cj=H zYXwa(y)&-Mef?oTjn0|mc9Q^aHK;L@xaDxO7`Vx5p>R_c!r{O;PLC)Yy7Z<-XoZ@= z14Ut0?}o6}zSfb4L3@~?f0tShcJk({*lUABq*>WOGC`pNu} zE%UUIgpvY@x5W?E$^m6eIIZfBFk7mL`%iZmLdx-tX_&;5d2WSw!fkd>QN?(KJ#~0DS&ig;ayN5r^gy* zHgQK~Akh7+_hdsN;z;y!5=R1AB*IO`aQiL3v57p=%&SHLzk=jhOOOUW{j|#QH+t7= zUgBvpED)|vyyh~2eZ8qZb?7IEydOs5g%=!QUsrkhM89CaL8H?f*`BIn`6it(R>nF6h~KE; z1+?Vtnj+FW395Wlc$F+hv07vibta*Ixpki_`GSK>0>K=X=BhvZ1!*a4E?&ESjuE5M z>!)H+CIK|Iz@FKTAD>vf(LDesN>RV9??|Z>4L%4Jqmnc>PNoTh58nWhtu_6UAlJ(b3_&Z5Ny!4g9!TKFG)e^GWk=B z{2POAZbPeac`u5ny+r2SJf94(B$kPg{81&PR|jo|YMz(rfoJLDV-^itX9muox6qeC zO4-P+2-Poa>WQp+;UnEG`#M#%V!vB${Z8z@K3-WkZG2G#3P&xy?MJ;lk|OlY{6x#i zEJ(#np0Zm~HYq9b?~onEr@HbgPeselJFx;yzbt{g=01pdUNvMWWh8JouIL0c>Lzxe zRgk75fD}ft0==RXO1Q3Y#mn^_bk$pMEa49g#;Su|MX(LD#&!aYT zrz-`d6MgUL5T^h(rnr(t+7l|l_Fa(S$5(uTh$iiWyySUiu3LbLSt79g2X4jqE8Z1)e+!kztst>G!a&dgi}R`Yy_sfhQBhUE-NM=ia&)$FoUUzxbRC)Vpz#t0Uj2|pQSN{y}jd$zes=8@M%HSdI3 z03*EJ>SWiJ$rr6J0-5=om5Vp0epFdgswebnG(NzU?l^S|F;*@m?-hHt7Qg%Nt!z7& zu7`hapHZ)Nd#vWPGbO{05vOWYIV%2=RVjt8@OPk_;H6Rsm0k2a!z>r$`SbA^>4Dt1 zuRac1>O3J=k%L?ezywug0<@>X0w>^K?uxj)Ane-|&=_R#O({osWx~4Jt>Gi zH87)%6$ZxEhk;bEh8ZabsYoyoeiB^C6iDiE#m{66=-B@ftep$bYG zLslasjd1@>=~d!7f|Tm0sZQxRp*hBR!+lnNNpNHuH6eG<{g`jf0*9lcO%Kj%-Ls~M zt2XZy{enl(sd*#D7u=FMl*SOn-KsBT@z+{F$Q&zkTaDD^FJbb@nS0nMphTdl*FEny zQ2-NUpkOv)=M&aF{q~NK+m=P*ge6hVcHY}H9dLv`wuRS$Oi@O%MCU$ev z#(_|YinE3LuINK-)$?+R87;{q zug^-!Y*0%jQ@>)7xj-7-(icP1C|7hSArk{qR~zG5X&rmihO~7tK-iDQEhmbxrmp)P zSsvT+_(8X#M9MxG=$r$qMQ5FBbv3M2nY0~BY$wOGuXyoA zQFvqJ7InAVHu%G}pk#gVw76O`A18LNqTgQ=1ZcxpJ#H4%81)&>WhKqzJ%Bb&bxY~w zm0e{lB!E8L0-2}XcLY4OTd6{dGwD$tT>Z4t(3uG0QW)~ZhfBN= zATL8!c{f?gmDFzjEAe_Km|T5UgksEw;Od7mPmF}5;K9txDUz5VMzp5PbL!*=z~yi_ z3Gl{zg315=X<4=T9N|@u;#BH7AsvKlq7cY9`AAHKoGHfN0?Lp{LpM&s< z%0Fw19aDDrQD}KPnx~2b8}$H{rn~1DS-*#8rM7s;8n$!JZ{tJ@ z3*DgCcB5ob+>i`s%cLw|ObBN7w2+f|1v~)&n8D_Z^NKwYJ+pU_#!wif7sYOdUzuml#)&!6ZRh*gS3^byF;fv3&U;x>QGP9y=|^?N!4p9vmqm_htML zPC{lMGbQuc{3BldW`ywDAPS(ed#`;(#Qr)hNu-06qbFDj0YMK(x$E1Y`G~wC;oe}I&F%T_JcYs4~{|QW^t4dlf@V~*|KRiAwpy*6+4Ra8qBu<;rxuGW@ zoU-7jkk&vk{#&dP>C=?#YaC;n7a4Die76D2kbZjBHpc5jP&uBHq5I`pk5b>VJoP;` zV-Gs_{Q=Oq^m%x=kE&+QoUlCc6&DV(4iyGtU{_G&!C+Pa{wg&Q*dC0^R`wW-Oqu09 z%*^SvF<_KE@Fd-!qj3es)`j|I$@2(5NCTsj41Dx9ENl_gZ_05FUGmfLn04L+-ce&b0X3W{>0~9$>L*Rbf9>(&}z)YY>pFB+WKE=_AiUYcM}+9jrse5K2yqtdEy!og(yo}4v>B(@8_eN!yzYr+DkbyC@_V3MN7&s8S!Ri(707N8@JG1V^@ubGrjWN zb`qxT3wdlq-UWv25uKFx{P{y~0hfG_l#g3>#&7FD;z1xPZujjfjZH?**^dgO<%QE!rm+o#XU3Uem*eTc|pvbub~Ih!t=yF57LQV{>1%$Fb76sfl35LU`=CzPqw`UMhTk4nai|9Ilv4XxY<$v6)cH5{mky<@w z6jomEtKB~Hpts7tc%9y3N8Ho4YWx(z`==n7{^=b-t7r55z)Q}ROlv$$DY1oBYAI$LL7z#{ag2H>2nJgRPlGDIA8yIp9Pl+O= zI3)ur&*6Y*S*}z;-rJ1xGuTVp0{_N%jy=@|e`F)l#B?gb4Q}imK&AxarKYYs3QG}B zY8*_fj+5`RgTzS1<7`f`jk7T;7={{(LwIDuny=?ajA2DxVLn)rUm?crE#iu`fWq+p zN2c(;*_2iU<_$>32>rgu6bBNQiI(qy)l1k4c|08MZFX0lN3k*z9LejTl3Akyg5|kn zl!K!r3DxMfJ10GK>jX%8a}0$*r3EOLxAj>s3JZBqUPwA1&ni+oAh1uzeWPoCT_>ZS z9oKs!6-MrJpYYtJC*O80iR6?ZO(EA#i*=oor*h;I&x-2(7-#c@v~V;xV2*!Ri^hdh5I&DpEBe%@hWz6qmx}#ebo{_I4lA84*>~yOP@X=zA5eZEbHRJdjJ{ z7D2&k1<0*Mz;csr#Ss2&L^0hhKvd5#10u)h7k0w7X$NqVSZD=(N)!0^VT+KRaHD5@ z5FR#@?vc@Y6BD>G_vB_`@E3N;%eD@IYb+l$6`esDvX!yXL;un&MgGPPjV!(Q$2TU` zN*~wts{XPQAL(7qp>?$iOGqZ-pyT0pogFC$cjW*=aON@$Cc*Nh1kGBLpmGO1?_8zu z-py#t<@~Z_wMOC}q_+Hnf$Wd{^OZ74a%>GWMu%)3H3G%KKoFR0s4okj(T)}g@n1+q z2Ia;@CPsCzm)gkjap^G>gcaG;n32f{K-=zEIQt)Q4g}GIH9y8_ zE0Hi4_CXvf6=G-MuLj+Gc%8x5DIxq|{6?T5fJU31e$Co=_YA|F2ymfx+QYo*@E^xS z+d5N(Tj9&bDhF~!a>2*>kMjBUeOnN3`m>hnMw}m_rkPrF{47HeTBAQ_m~X7)8H^v! zz?`iJ(gbjbZfp2?<2Iwnon_o|Sf64K3T%kxHxhreUhu>&lB(>6P_+^rR{FcfqNB*% z!I`!-0fNS8{_7G_oDQ=e((#DZ8)?VA_pU%AKNvkKe$$5*L4XTqh zbGFu31i#YHX`Gh`e+9u+X!@5^(HsNHI>Zd}_6@jO%;77gI&bKEugyMl&tB{61nGGD zK+--*sr(ily@s zkXELWJyic)8c_S(8;>5Hrj*Q#V8G>KHE{yCyGYd}S#Clb`ktvfHY5;A%xw+++PVo{ zE1LPG%T4sOQ{#Waydj}3vy3cE z?Egz%`oGy(FKs0g{JG&RY2b(u|91j7@J?)YP-PrzA^R+;bbd?6_1p&HEzYNFX|`~I zisKptAqL?A!H({DcL8XHA>nDH;p8k0$$&`pQ&g%Jr_j>J*WVA{S+le251qcbw~t@E z)G(qNt<7!iu@ z$!7o_F(&2S3V<%0GdM&skn0ej-JkLN0jdLo5lgn<22Mo?f#(VoDzJdowy*$NQ%PV4 zcyuKtq1Y#kNjf+ZhFQ<8-wm6~5sUYQneuxcg2l4q*UMhcd(qFt|^okuxY$c$>>}HDf(aKu{_zRlNJ&Q zAbx)eK&FZ&-p+a{_9jjK3<}|e1=uzKOZY6rk^*coZ!`;WBNR{~!@zShIxc-3Mqmbi zOr^NwKybx><`Iv+x*7e`qFzf{> zN2pFK#*> z>)*kPzgiNlY7C_VOB5-fUcdkVLWtqPeWk~HSO@?MAjv07^VSRS`*sXjMaq7CqNM;Z za*St8=yyQ>utm1fDGZcn_s!=~Ke)?_9uqCGB#>MfBL!9$t3CulKvMZ9BwkW9K$Egu zv%l1yW&aoLGy4B&?MkDX$g*&|%%D*YJ>9k}0v(&yw6a*0q^eQ~*pjg6C=Eg**oXm> zh*8KSgiV2_TLd>y8Bn%%97Tn&2tkl7h>AH47#i7;fFL9wAz=~1V#37v(KAiW&w0P< ze0ATw-~H};@7y}4PSx?mgh3fO`4i6BH4psPF>z0tKZ#x3e<8nq>DfKci&ZRkbmXdY z%m;yCWkdN_AQH&On=X{4LKDOY1(s+en)Qo-6A z5`&{m>7sc#A^Fh@H}$-D7f+C>${Wa3lLFIx{l%9O1~yyEb`A{Kuv-c!aKnM;^N31M>9-86cKh%+J9p!wg5{XB@O$o?K<*m5IpOQv<%g2Xc}OQOg1eY3s? ztgFvm$Zm1j{WI7KyX%A#pDr-zy?q%_Mau7jc;-&&k`~~}dPQ+hjBU*9P zg|RcX*^69-U7TpPYyMBSVthq^yB?^PC;njgZMd?0J~eS`N+_fysDt7`&J>R;}-WQ=V$!rr>Oa&Ud5~a(mj(U zS4V3zWX9$FA%U)=Q+;dbb@7c}ZR0F)`VJRgM`@Mq`H>G?mWT@pO-w6GxJa97v`25@ zf=^HmuTfC-f~Yrq$ermuOAdM1$Gck<*=>gs@O6e)FiMG8VBGCC-*~CD&Z6R5w~_ z8v0E8dw;T7TBdZnpTzl3Guh7!6RJy=vJw-LuW%Y0rIV9^#mJzKqI)ixfvaJ1GAa(o z1^rVqA#4zCTXGN3_6JW0Rz;m^`l83DQ1RsHYfE7HmUB~z>FC+Ryx3Buha&HJkMXnd zcQ)HIaRgJl*tSxSQ=&)o$i!i@l;+RQXR#J;1r)Xzb%q}sx+C%kak<;v;hWZ_cG)RQ ze_z|MHAEH04lG(uig}-87iSzK4s!GpIrZ2_9~+SbX9mi=+r{+Y(VG{tQjR#$0Y!Ia z`n@Bqb#j5q=Cx61!`z%o%l8VF%)LtraBzFgkML;CBba&4EN-eBw6=)u|K6%>=0QHI zNn%LV>o454oxWPGY3v%PL_?!4?e#~rvCHunv6}LAdkRS8 z_O}dr4(pOgDDz4;@BZ|pb)S6qWE4k$SVl^!T(4RUw?Y**Sik#>dHfFE_5H6E?6i>N zh2hB=Yki53RV1n>F6-mKaqs`p2u5-lOdNoRh&bT)frlZ81mT(Z-!YP|UHmxkA^*X2 z4;3phkb<=%lCgFq1YS9p1b}2L22(JY?(3fz4F32Rg+KBmgF3b=F)}s=86jghLjX1| zL_(pJ{vd=%T#3N|1;Yi__0SkQGS(mbQS}v^VHiZP7>bR7V6}%Su&yotqb@K?#>7AX z62>0_k}z`-kb9?LoWd$eJD7Z@$n>caKQ1x=-jY>pKTBdpcLG;ZBFjaxPJjMW+|rt diff --git a/media/clocked.svg b/media/clocked.svg deleted file mode 100644 index db8eb457c..000000000 --- a/media/clocked.svg +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/diagram_examples.png b/media/diagram_examples.png deleted file mode 100644 index 275ca7e4f2925ede575a0fc4559e56c990ea4cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115826 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� 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 NN3x6EHIm<{e*x{ceYF4p diff --git a/media/fluidmix.pdf b/media/fluidmix.pdf deleted file mode 100644 index 13d94dc5dabbd8f493884e5731401bc10141f152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63378 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 sqU-GJ!G6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/fluidmix3.pdf b/media/fluidmix3.pdf deleted file mode 100644 index ce383555f15b3fede208e72a176197d79628dbb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84812 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 diff --git a/media/fluidmix3.svg b/media/fluidmix3.svg deleted file mode 100644 index 207fc14bc..000000000 --- a/media/fluidmix3.svg +++ /dev/null @@ -1,526 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/fluidmix4.pdf b/media/fluidmix4.pdf deleted file mode 100644 index 1838fbdfa8bd3556b021ba6d8aab0e5aed1c2346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95204 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�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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/fluidsystem.pdf b/media/fluidsystem.pdf index bffd85f4c92f9cb9cbbd5e14e4918340fd0a5d80..dc3763aa18bd70bff746ce30a51a78512428272b 100644 GIT binary patch literal 83570 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

!kvE)At&Z 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 Bz7zle literal 45273 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

Xvr)@q=lY)$z2K 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 LEG$wg(uDs7_?27> diff --git a/media/fluidsystem.svg b/media/fluidsystem.svg deleted file mode 100644 index ed27ffc11..000000000 --- a/media/fluidsystem.svg +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/hierarchical-statemachine.pdf b/media/hierarchical-statemachine.pdf deleted file mode 100644 index cb55339927d1e0f8f262433312f489549b95be56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118755 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 - - - - state1 - stateA - - - stateB - - - stateC - - - stateD - - - - - - - - - - - - - - - stateX - - - stateY - - - - - - - - - state2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/innerouterconnector.pdf b/media/innerouterconnector.pdf index fbbae6cdc8dbf5229e3a8a8c93dd70b03c15f2dd..81b65fd1c2a362ec390f1260dc43c28785fa191b 100644 GIT binary patch literal 10101 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 H2J`;_g!)9e diff --git a/media/innerouterconnector.svg b/media/innerouterconnector.svg deleted file mode 100644 index 3b8195919..000000000 --- a/media/innerouterconnector.svg +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/modelicapath.pdf b/media/modelicapath.pdf index 74ff64ffca80bfffbc8b56ee5e4c3b8fd17f3a20..4afba5647253e97dd9ea40b565ed9f69bd33d67a 100644 GIT binary patch literal 148554 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

>ocd17R;ed?vupV}5_XB6%rNF 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/overdetermined.pdf b/media/overdetermined.pdf index ab548fd827c3dbcb3fd77d784d0356f496b5349e..6acaf33a9bfdb43ad5463f420619960b9f7d1edd 100644 GIT binary patch literal 96683 zcmeFZbyS>7(mxI%Kmvi_8YH;G;1b*&2G;}`oWb4Q-JRgUEx2oN5AGUV0>Sx`WbfYH zy>IUBzWeSuzdwEtJ!iUms^wEv{d84zA4uhdL}&qYEC_ISAq5CbD=I)qNUvaPZKr3eXbl1ZEi7ya z8QFi3Nb6Xeih~U-9=rLT1?dw$l7V<09|SlMSpUZm-#h!ev3`s}FKA&0wj~76OB(Cj zXb>`e?@o*GZ`*yZ`a`?N30i|5+x?s&5M*OvXRQaac^qHF0&M&J3qZ*7y)PafdSORf zQ3YEaThL>*r~(@y+xPm%96RBU$v;x4%Icbc^u9L}H-7}qLCEogUTl_3C z5dwZp@-IaeLcou4{!(Nk1pMs&Cou;h;BUHO1Q0%^zjnpQMEIC~FR~Ca{x)SfYYROE zkgW#&qrm7DL5{XRyBGNRCHV78{5zlMr9t|}Isz7s8jn3O5V8Om=$Kdu85vpW*tG~B znG3dkWRndc^N(>vtu5>J3IB9=miz%g+TVkdLW>vz+>l% zI=VKGBtM1zljSyq41X(~?;Zap9T8(QTaY!qh}k2rg+O{1`XG8K5ZKVxh>(dH!1%qD zjjc6E#~cC9F?CTx!vaqj#l3dpVKjmjNH*~e|M>}D2a$3}^|Kr|!Z%pGz91X5)WEx& z8#kpX8-sAeaKJGNykF{WdV|X2sg|~F6#TxU-!{zh2KpBFtp)E|Hv9ER4PtueF}6~X;hzk*pvOS8-sPW3^- zA|@rj((aZHMOdj<-I{$3$773M)(>vC6E zf%7uWC<>(G&Bo4A+|@Ev~q#lnajCq@tj0SD@^z6%c&Xb@kxc(m`Yehu{;qZ%E1+S)v_Pp&=g6ukd~H4a`)^N%-Y`FcuJgUTEz4Gy0$; z&UHJnPp2BV1?aH6(*XH*(y$G1&viEE@|Ci}8_<5D%Y%vu%_Zd+?r%K&G@(eWc z6@s>;z0k0`~auf~=n0=p)3wd=&PssTG_#LLU{fp`sY6w7mk| z^FEAzwDt7OmUcLKYDK%>!A8)Gk;1d9^?WZy{M3v}YdrK&{;S5pnR9>`FPCKemWHPko8A6xzy7l3B%o4>Rup*GWa)AUe;i_EenGP-E|G~A(67fdzQKMlXUSx8Eck|)#E=dgjsU8Uot7B8M>o&Q9Nf(LrKit|4SeoB$->hxA0H`l zdRu6j^NI_;LJS#0DLg6-8b!2!E*s@&0zs{$LcXXTQ&&G+iB#C%@&UN|>az4!Rg z*IlkSH(BVy1DQ_EJ&S=RMZ4(m9=_n1k~r+1q<}@QPh`|8uY)%~NchOS4#e)24;SY| z66KDj+IkW7_I zSijNm?e#iNBY`K{K7>)m4e79s#A{-ac5DvMQtQYN4&S*s?0Sv{SrRabN z#rlj3#D{f6RJ}~6e9X*iLUIzRgV<6ZD46HIrt+lt6y?fPNHim7K}fS@bbC1J)`0k17dUpxnguFf^S}eJ>WDigdNS3=B3$8 zGzy{_#dE5J#2k$py{v^aKP;#2J}`saCXb>8X9f7O?>yXit>P=bR7cKyE0(tkH}M|Q zeyub1Se7lw`@UNnlIMAHLAH9BkRuamn5BJK6T}-Re!3y7Thc0FR(M+19V25*X@SJ> zB}|?>#MUe+Bbs2<5{>u>bfrS)t_a9br4Ve(Q=;0c%uz z+9jdchj=oQwx(|1rKsK`s`ikN+vscZT)_mJ>pfgR-#4eP^e1r|JYkt5aF)r7o2i}? zO+WcYGP2d5(hb2Kkm#ogL6wpW=;MO%sk^kY>^DyD@e05!^PheFdN9HqqFtyVcy@!a z8C6;A8N5acOAwkB>CvM3DqyGT%SWZI=~>Y$ zwI&invm6TCl?#BxHq*P5#%6h&TdJX?iZ8g_OHZFG%h5OtsW`uFu6MR$s^30Z_zaWo z%?;)1bhdGI`{GzdZ}~ZC<4T)s<^44I;lUO5GTg{ZkZpuRzcWtZ;T={pD6x*KSp}eKVBSDqnru9uRDxC1^y;|!Ds6D)qKpt|z z`2omaXrqSg^Lg-1!lhM}@mj#Kz~=5Z)kV`4XU$QO)R>v11m(012{U|EP|O?ckf;)O z9@-%<$|AX;R|n~m(aNzRl^a}gL~E*buTSw1-^Xtk&s}y^3z04MP^|7v^jmD|$ZjE* z?4t*Kz&pn$vS`STEm2CQi2|D7X*e`i8z&Q+ktp!?lX`#i+6txFn_%o>NA5aJg%4Kd zoFnQv)ehaXV(W>|iH%~MeOXx{HWjY71dcrEjkvUNu{qBuB6zE3ysRmMdDuH&RGYB5 zcD)^T>5}-064NQHk~ZL`^XpB@X{Ed3(iA>C)NbNpNQmJP^Lx@O8ymMTqB*QDV6Yu| z1G&e$58~XOpyq^NCU|^Ir94x&5gokw47$j_-U~IGME~p+DNNN2{i5q+@&Je!;u^fr z$Ah9j()6W=b3~P{NOik80ER1?ZzP{j7wQCQ*N$y+{flj3Y-m_Hdy)(;7x_UrZG`vy z*d3!k#K=74J>encxCGZ=ZO2W-j&kAG_(T6Q7NXjIqAdbno5ss>?BbUb#<9fhh|{eS zlx9z@TrcxtCpaYp+rbl&C)5`)sw#0bJ;kwMrvp#XV?m*Z7*!n0&n1Of$0aU!Slk+m zwho4HyD~ObmLrWVw28LI{Zt0U0*n>`=SLVspgwUffm^5RJbklq%0*4rn$ZPV3Jto2 zB1r-|Fpni(!^;G8{~20q_ttpIPvrB!1zh=FH?Gm!ZkBK7YA;T^+}%@5?B>~3LG?;Z z8`{j`0W_alErKar@*20jXd+0qgVCPJx4hjNDR;s6WKQluw?h$tdj8%`BcKi$|Hwj{ zIQO0Dt!FX>va`#VNAvokZ|`-e)jrVx-te~uvlfkxdIUf0VdV6O0^@;Cr{gDxE zD*f?RUY89#8PQF1_2Dit(!C(FTj^M7WU-vxBP}!Rncz^h=>rWX{}47>!&l36gO|^nh*v1J#AH_0IDKR_TeMk4sm(8)#4X{1t+5}R zs08u|nmd&<=Syzy8f|RKI43RA<`*T-8Yyx_#YCg*!^5y(fPPT$3kV7c3sVc~ zm>KI@8`BGeAH6waupzyQF_<50WBk|hcVZ!sjh?l!rLBcEA?pt}Q^eTX##Ycs$C{9d z@iBVvmplN#{@7gK*2w13q5eVmw|?aJia$*B_nv>a^*?6$4>NmoHVtjQk0bsVxG>h^ z2OFA!2pQ=4ZS=l}2iRB`9{t&$d0NKDf}oD27|7Vr=;u%T_J%)ZM99Jjcnn-P{wx64 zn3;Zzr}C4MnSp^`^)Icy_n}}5GFN_V@`Fa;hwDwt!oWoMeE>oLBQwMIVIQ6E@4R_* zi9w8ycz*;1{ub}|ioe7A*C++OfHb{~g|)ek8NHqkA>eNteUDfC(?){)f8XeP0OIc& z{UzG*S1tGvs`x3I$C+}_{{<>D^JDnH%)(m1Qb!N;dsKj4z}VJC4rDE8VQy&w{?24} zdhy37gSDl_cfX&|K*!7mM6V#NV`EAP_#Tn~(*H?Zfc@{I0tfAo2oMku9hu)`&0oTz zJ!b#rX={b#)`WokANBmlNdH$TMXhz59@W9t7W6Zy@?Dt!66#+AW&8tB0OTXIj?8me z^XIaeKTx{EpxOQk-X8*We=0;a#=i=YwXBhC;qGV$FM{K{V zDLj4VU*+f-07?E!`TcE3@W<}*zsL9A5FhJ5LiG9$t26UTfnfEC(xbW_zd-nko#^f55K)f`+jC!(qkWnk9&Azt)gPW_U_M*{1yp_P=L} zF+G}?e^CgSpM)T{@wonCkySr$<@E_+tUGx5aU-o{`U-XR;J%pH1mIM5HSAxhWYRIz;8~+ z-$R9fsKZt|{}tAM&oKXUtp5dVV*0~2_dDF*jn`6`SNXpJ_-|R}fIkQLc!2(|IgLME zWyXJIn*Y(u`W@Z>MwtJWmHtn#{(n-K|E8(V@Y~8{W&Dp#GRA*qsaRSPA5;35Hv=ZXpR(h>AaCX$fv*4AcljSVvSKQU_N#ULx7Iknovo3D zHHFyYB^N?jGaDNV@Z&8e!N+STkMT;1`v(YV2xAC62x|xn2%E=`0fa3?DFh*e%46Od zLjN(x2*CgWfMEKqk+B6>=rPPiA;ihZ0AOce1#mF1voJHUQZq1;Gcb@pl1W?W{}YPG z+dcYrdZ2%A`0rlpZ&6*QKP+BZT@wXcb9xygf|3#Otl|!XZZ_#9ozTp#k5@*2uU!}_ht_{2lY)kB(=q8l%_lbg}gxb=1UYQ zl9F$SLCgpR#AkU)2WOG$$;a({Vy}T@2!ps}n(o{;1Ies@2aCc^3N zdNU+H^4s2CuQ|8>gde*?V3i-cO5mAaom^muUmY{-x2>AH!w6nXUb>nPgOi&q?Kd>f z9QK4mT5*=a$Fp?qH|af^8^9nm(;`L921Ts~MePQ~w+)K#8WeRJ6m^~BdwM)``vH%s zdjR;sTIxp{q}hDMwkiGLlhltiNE3ypf~Zj_`aRvI(@bU4J|?X`vk#vh)4s=XO?7Ta zIxaf)Mc@<7r83qBPlV1Q)P3%6iR>TOZL-JbuIdX~Yci6{vRz`k^d#8Wy#l^ggo#9M z8<;pGGS}DIWk)YvC4FK}B4+GgzC@6)wnF9$&eEmsh+`KJikAze!oiY?cP@u#!V8z~t>Dtk#+ zFm4c)F<0SWqKkC0GrQi6qOc9>leqNpP&!qE#BRePbFLQZBUcSIhvI!BGc;niaz@#- z;w707Ns!xCcV+vwJ?!(>R6p(+Oe|Z> zpO;Z<+By)V93;p}pXEBwYjQ8W&O1yANNE5IhY%>M%x|sS2jIHmFSKfvfm8N;=;Lem zM$X$+PkeNy=clxI0oR(c1V{LEL9)Z&rtaSEK9HT?PfL~Uy7$r(2WVMgjXjhXG0Eof zw?;%oHL^9|&lh89o4v2SD~_7(ZSUAgAC6C;zkee8eroA|K4|!HboFB+)%bqR^6`M< zZ~vGc&w;*weyd|-`EE4-Ykw?Ezqk9>TKp{)GaJX_nG_2l^W&Y;AKx6`gDlK!kN037 zYZ;lo(=xOC%&~F&q-9}b`|&Ho;{{C)LM9FXArsSgvx%97QH${R?dIq4)o;ebuLDi& zj0~)7f4TDccx#r8jp-ka)_vFKnhGj&_Z;8+Ng{no_-3AvU_r7F5(Tb2iBb|$?4l^3 zcve^aajj*tWD2aR!KHOz!Z!awOTdh}M9a+d+mL;O)N}TY<2kYvZ^mV@sI>|P5&m5jHv?;48YoFX_zqQWOJSElJ&5u(co2E6vbA!=y z847(1DlI-sDA-*&N@V0nuLx!%n+CmnI4mh;2|eLmE0m@UNtq8}oo*UY6~XM8t}Rwy zMbvaUChghnWx$AMZgp#4D{CzUFl~JVV5HY&IyrGk>f&p9aQDn(q*mJB=ZR|-uzhCQ za@Et(u-P*#s^#{&GR)@oc>N-N{@fzd9k2_9NvB<5a7b)Gt|tMhXPhDn*048OZ?BmO z)v7^vqvHjMOP+Pw$$Iq6%)RLW=Fxz)C(=1xSL}>BuM=-3x4O-PYH1fg%?y+D&SCI?QNN zJ^~Duz4lDBY_(gUN_xuEbm|is{ZzTThJlGul%E-d)8>a< zks6H<{7qwR+195`Vh-U$&>Vtii9IwCJiP7(gjITyAI`@fID{W?8V_o<1wFpdKTHd| z`3>D?gpX}jr0u?8JyW?b=R9;?uIhRCa(<5*;v5-v$#Umgma|n>$@H+fw`jTWhRdTg zq9yKN-=#UDICo{5yK3p)Z3~#r>Jxpd#FyjBr^pJ^J=q@^PrU zP2O4xmD4~EV@<5a{pIF(4^erHDkd+xhm>hK(Q@;Ll(TOM_v3#d&TakrKNlX_g%Ms; zex25VmG=QYk?IAH?X#*5%3-j2A{Yp&Q5NZ#n<1MTQqNG;6y=NJ8tQ;qDJJIzG0J0R zE9Iz$%M31&u*0Mis8(n0R&)7>lB&Ceeet)Ty#Db&Iq73J83xcJaBbj&b3CTB&R_D{FSvw~HOu(|mNUtd^u_s*CrhfoqN7>x#e zQS_@Cw3Zc);fh>B8_jj;i5Nk#lVy4_vhs%Wi9J71)o>5j+DME7{Z!- zAMaqBidXIe<--l~YTsK5>7}iOX5)eq^U zS7#lFUs{z;S3D``PZ3xy!svlz9kDS4b==H3;Ixb#A{Km+K2yhl1B3UDW8aBfxjX!l)`p8YvPs zHc1r^Xf2H?iom1UIGOAnf$F&fxXu=ao9k&JSOV>y>Pnu-jSq0`YHY)5N)IdVk6ax( z8=ACDLwsX#+?~hiQaGJ?;`4Id`okRhNBO#1ROf-=wP6Hf5r^hAMcl3l?{+P(m$H3W z%rnPz)rF3aM*70}LZ3dHCh4SL!TJ`zurxIueX=5;+O~=58dGBzB zNYZtixZ3jS_PEW{VP0NDT1Yh4v8|dOTq#dG6`C4;HkIY7mdwLb$-a0}2(3z$3=*d7 z#xFkR+|--ejZ<%~<-GUZqMF@5WNd1E45kvE0?XX$4>|8`2?3lJDii6AHvJ2{jg$J3@(X&4< zJC#LL45=5%Fd3c4(+xAH$j`BxegS?mh+&0h#hZ0amPUJ%bLnRZ=rFHuRC<$sjsVY< zjMKHMTj3acxdnMhsSDYyFxiLR%z?COO#M9Z4QYoq&3?E3G<+i@u1~KuyJ%NVIN8fJ zG*(4!8|%5?!o=~#sfovVopWqQ`74@zoNXJt=BvZ3;H5Eta;*f%+^&f|voKEcx&8KB zxA=8QVJ_snvP>YIl9%Nm5`HoyH&r!2mrGX;J{tP;et zG}mbJMbG_a1u}wY^2wvBz;Mk7%MC7l8DebGIHNd%BZN_5WKIT^3>9BpXzCc zqmM>g;fUFr+pv+Xq4C-nA`To&IHAy;N)8E?=cUJvJdnB}Xog}|4QMI3GbG(2l&oSE z+QAb!s^s13l%K^a)Pt3P#j(16Xal*bRKksDk~!>3!QH@AqV7ImDoHmHC5A)=U+@*M zT6~O3I0Wr1$0$BaJh&b>7?mX-JPRC**3Cmh08UB*1cSc-FLM*ggwxOzatq>ggVADg z6G?=_&`@&=;&r{zlz^cLS-@a8%Klu6m@LI$6v`g))tD^RU?R#M34loO7%((COD^~c zrHDinefKlU)0|Inx^-wAz!xz@8o}>@`r=WPek#GQfiL29Bhj#dIg(Li-F%d9fG;A6 zl;CR7=qQ0XVvkpt;quXffFxqb^unoV6+rf!z$ha1U<%58;7m@r1Tv+cFkBTH86{E9 zvxE)`KYqAoG#%hhj$E!>&I+(Ra)ldcD`_PaOptS_9h?nxCGV~Ux)OI!16@hG6M(mZ z!Sp$on!zJEmyKu{5>`UNvN@Nk!4Wx^a=|Zi9Nz}Fil3-ZF2$_T18>!W9dg-ex-)Vd zMT2W|9VLU=avcSOr*ki}(aOY63en2MPAbtnBG*VMwPV*J(dflan$SkXPm0k-#7?Tw zWW`T%&}79<>d+#@t>l75a~*|(19I63y9I%7D7vA53-sOYl!q~E+LR4BGvwXezy;cF zE#Q6}5ruF*8YJam>>45^IAM*I@Gv59%4Ey}W}%qiimtl~bu*U+8qthl?Q$d=p&`(dP!ZyY$I3E$lMN8}=c@Um zZXzLM_f-b@kJr&;NfFVHA!W4-`2;c=?b>EBC)*H41sFj{r%7z&S3a5C*A!p=!llkOzGAS(%%*uCzWOBv~222GcSW1vMq8r3iWK?h>t9Qe_Ky#_lB?ug8W-230jqJz*LZh;$ zVK3(P_^zEu)y0FS8lGAa0!9bV^{YM23 z91j}zwqMQl62ecmff!1Xh^aTmz?6pzlO&TMvPL0AA$@8dmU)?Jjz~dglmZ`2YK_#5 zB#bIN2Em0;9yKO`Ca(XQQ9%~zWY- zEEBhNdX{ZN@DMz~e~QmQZ?|Zny)|c{eb_M4)L}vFY{`_ zse`+g7_@`lnhUC@3pik00j{8|=&lg0IAA%v-kL`S^x5%u=}%uF!)wkHgRRprt*Z8< zScX0-(OR0XLYFe#rrhNp&F(L6EUzrr8Tu?&d!?|lvng7zn|G!oSb&d(zYu@EnZA;p zuNrRs+&b54FkM@lb=f2pV7)PyK__lPzMftQc&UHqjv^=gR?l7*< z$8GUSrl@IW+KOz&0Cd0Fho{h7o^k%I4h>qoD-!Os#uTw{pc~Yu9p%VbH_m zRmdH=j#mgA#wF&V+DgXT(OrxAiCqiI#BB>Yqtg*uqpu^g6FV7N3=_PjBT^oM{LLOP z*Ru49Ti=e7w#ujr&Se)B_A)dX`gosTBzv1Yba7AJKZjnwQ*!CKp@yfr-K=wp*O#;= z|G-+|DK4)1+~zb|M<(N}{ER6-oC9hYN`|FBc}GGKMg!IH%f{0d5*>vO=;wtj_kNDu zn7r&&9XQ_v7BbfE@$*A2x)Jcz+jY$=4ppaKAJWzssQdMFgSt3~t6fTh&T~{$@fLP1 zIby97e3))@ZVc_GP9hJWQ*=LC7k%t4ye!@UhuI2Kt!0w~&xN-_i_6tDF@#;es!pnA zKw|*({GIx%;fne|z}xP;KC*5@D!P*6q)LA!hPXx!!vz>%m@fLlYGGUb67E1J`_gvW z#BS5lE*)`-Iv#^e68g&a)A8M|{4#q3J`WksE5qT!qmA2Jf0@!)8ThWioF!;fys;2D0xb;2%mbkC)$aCS4NySaJ6&e=anG9EOmAWra%d z3~PgV$8CvIj;IP>457J5Fh^sG=u#65xuhvbD=h7$EU^0e@>@GSEx^Q8CkfOrd$ z0hIyi0m}m&4v_&t07U>v@Pq*32+9NM9Ii0D zF2F9p+d|%Wx_CBvHF`GlA?-YU(w5eS*LKim-iE)Tyz;G$wr!{lyh64jvI4W>yu$eo z(~{N_!IH%i-ICN2x*WCcRo#m^w7REtSar`X@ho4LL)AgB6U-o{!kR&GdfIr|cvg8; zc`~W()eXJc&RD;-N%aUn8?n0Q80PK0+Gc$fdLKi~x#Y!OLD}X04jAa)@I93}n z6#IWz`P;aL8SDEtsczv_BUTq2!#usS+w3>5zE?hcwz_O>V!r(he@Rb&VzbR)Q0HH9 z7!rQNbws&OQj==lGp%OE)fmX#wWNPGgHe!XhB-gvKJsK==K{^;VEN2&Q?X&%pVq*@ zj$oq7sK+_{;?E9J7oB|cF9Ge%7@Kj= zBVB8jsC~``r76FKGSg2v)|W9fG?HLct0^zpmwNNDYL;Vv;cao+d=cjit37`D+10+c zM`102%Dh(@{OnOV0i8iYx#aBT45mtDkxaRE-fY>s>2lKwL!o)na?K*jF=t+v)WxC0 zcMg><%x`PjOgE6fBwQuGoL}`huj{0BQKos6FIUza>D=9e(ZOEa+e!%!&8c1{6%&^CGS&A?Zj_BUO+)Fge ze!_d>pHZf3bByj^P_60qTwVwSqx{KahJt81_d>Q`$lA^w&{ALj8dC0^mI2`My6e^y}@y!m4n8V3X~LrLjO6d*kM^_X(Mn%V3J8Y^Vx{=<6jr|u)C0?xRw5$gBHbjy0fzd9u^H#b*Aw_N%yisbS{AbHY0IB&6py->usgwL zv&q48A!q~TI##o@$b#$ZsDfaz7xnylAw6&5*+~2sB4=`E+$f=J2DbtoZ6nInx?wp* zgfdlx-ZTg;1Z1?RjzGSBLS^>Oy@ZlyI2td5N%06raqm?0s`IuOig`2z zr~kZ-d2_!uJ1ZC4bb1O?F+dtj*%%;NC;+mIXr4|ax7Q0s>9ygg$&5s7p2k|22$T$C zrCO{n?2CG}E*1o!T#Q@5T9*lQ5XEIogJ0}~=?OTS(z&Hk$fD-fshGkxmtjsu(9waZ zlCNF42|+-HQGylK8#vhic!bY5n#%s^s`G`NLx1E`1xMRTC{c6!5#*1mZpoXB1n`#& zpHWoA?So9YSc}4B2lv*NFNxGd{Nt>cQ1SJ%eH+K@VlAskyU5lW zyAtKKg2yoRB3wc@XHR3tU{Bcx)}5RLdl9~@$z+_5Lh!uvq`S&~kJ{4$DjloXUnA~b zlVZcK2pP$>!P#tivy(QVnkXHPubs$bhIm`li!Uup01$Xs*B-))5^ZGGA2SYT8Epw0 z!b|4`($DiE>hntu718|2{Ien`1uWy^SZ1QrK>za!{ zc1nX0|d5(4Gi%-s$a7n2M>O{;O(OnO;@YcBZ;i2xgqAZ}Fx zFSg+*99v_z8LAmy&$jYXrB(WPKStL=I}MjpF^$prOZ{hFL-2&Lo_Ij=usXhtO>_jr)`E2C#*`^o)>D6Y-oq zRs2!FXzBQcf<@q-%hQ0~p7TR07VhRFYP}rixb}23Vr`2!F2j$hYn)FpWiwwgP&eLs{Be*h=}k0(A!mARy6VL1yLYQW>%^b98$w@Ra(x2`(V*GG$0bD)=;#WBbi)jUu3Ehk*3AWCm$O+xyv#U zz=?wA|H+p^vU)PKokDB^Q~lz;-_Cs;hrttu)=jPcm4L3*Pk-e@xLV@x_-a)$GfzKAAMT#AH*3 zXRSK8oZS`{G)QXoF!>XaDY>Y<^9kg`cFlD{&GY^`=Yr#|WR}TxiTt#Q$Nu$)PyyK= z`0gwRFJB)$Cd~{wsnOJ0&}fCZ2ZewXJ18cL%QM3^`QUP(id4`69 z#f+FO(@&DLRG*~95)(OUD7i~2ats!$i!Jp`zHL`w*1;FTunancz49;{F3{~xjAU_) z)YCLREhjp8fSsAOQC#$M7`LpsC|!HQL&Av$leGy?!THrc7_s?%RyRB)T{p>-F!5CM z7!mPbZ7KN%FOQ1N+?5?A$zw?;MR!Dh1SJ9ow_jIRkY{vv497HujkS70Pf#Xgv5W>J zKFFVL?JL3|P=fdc2)ke_>pKt-wI(ZYC{eCteD8D~$c6?h0GM)VvJq$r#Grpwfn5Rb zG!}#yIQ)vcpL%rfiCvKwc&05N42Q7}DN@#*JKYt(vCEKdc-zOuF`PbldPT`mOv6Bi zVsbNZI$uqXc5-uHg>eSL0C6#lqZ%;yex4-&JWazYsB5N-fyyS4LS*krX(p!x^wRpX37v3TS2FlfILo3`@!A2QysDr;GU;z#a$?b0}3)R6u9EW;pF z0t+dFp$!>aVZYof`!Nxv8$%8u-tu0!b~7J$Js{z-@R?*?Fa!=byw+}cI?cer*R>~P zg$efTfI2+oRV|4O=>5Fm&va_cbRug&WQIP67m$85!ZV%0GvJ#+M_V0SF6fvctwV5? zD$i=A-i<9)n>6UEE7EjnmeEgrow~3@Olxm$YcwqqFivzJl%LZjkeBl!Kf|Ls!?&8i zyV?iOi*2=ql837-2^fo>BgA*2Vp9rGshxSfu@vI5K}7(`_J_hPtekll-y0^YjLD! z1Xjt`O&&J7_N{!Z`~8K87o=k4F=Z{;8)po2$tidQATPV}(SjSvd8AK#_=CkaoY4Zh z=c79+F`~v==+T0O2`_~8r7u19-CSH_rtTg%oTABP$8)47Zv0q{C5dwk`iRGjcG`)YwMw8tcp_bXktlw2Ihu}FXztb>pOtge5I0ga+6k>7o{eonYFUMIM2P! zOu|Xd!8eLg^dbE)pd9TiAPGc>??N;X_X(ZE>I2J04QfX1zrgA{RE`=nh_Wya-S2sr zXJG6M(+SplfTt-YM6Z2%PSp*DD(t(Reo~|Sfqw2ln)qR}&tm~yW@GYxPT{O*H>!5B zMJ{B!028%`J}K^~zlvN+mC%ezqT^KcD+ zdexD`C_D|{&T@oC(d!xRah~x4=OFoWlx&Z4Kw&f6sX3QKy};>!J`J@pIOg$U;2CWd z*fC)L3*4+v#KI-q)hF-Jrl5Lb{$UjCxOY>A7{hhu@A`c9;W$FyzRv$Tpy9N4$tBu7 zVG-ZzcBClTe>@p}a{p282EkPXX@wi%uGdfm9qjl4e98^dBWAR~8?P|GXsQ4eO-%u- zLR$0XuajM#O21T)M$1zt8?-27nDW;dR8)?}ZMUbTaq^uF?dtS)vq4aU{-Psab4$S* zaJkl9TUOkr<`2^h_&ia)N`}nR$ehI=t$Up#{1`)wikWj8|C*L)BS}!jT@oQqE%%;; zlXBr5gILt8U-tdg>G{OgQk2tO$J0I|W?!;${AIF?=~sLaXMJ9p6PaI7^G1?ez}J!! zcBoT`GK#be@@W9n*=|k&X^lz4XD;LG^?k;I6aL94GjK6&7zs~nR!GXH9#7meeQS-l zJYohvu{tTxEnh}S1vEX+OOV1*xWLQ~UG~THqla?{fY0s_^%IRSPfE-jpb5NJx1vov zalNEv&sa9+uvkT<8F)}mjsrQQ`zfxQ+?`1}ePh*VYHy6r+G;C@-ZMmO(K}r+%2s|c z7N9Sk$kpJnH0tYKFKh!II7m=yDr7fTmobRdZqv3vL!cx+gFPP^3hnyb(#z953FX09(jPP!QhDXGa55STw^oMGebH&fJ{{n=YI7 zx!0A)U=C@a%_Ca{<9$TZJc7c}BEgZ;QtW8q5p7=1&GO~xO{z0cLK;D(l#Hh2Lo`jz z;C><{sNU_fznWdNn)*7geJbe4S*>$8JQ*h@9*gqJ3(f;AHz3V>n2MvXb4kf^8tOu> zb@zezn(98!qmC~FnKc4V4*g)V`7v<@uG75nz;VZ{*nBOnF**IJE;AJ*YPveh`pG#$ z(MHv~rt-T?m1pH08OrC_;in7ofuSAvNHRBSM*iV>`hY8&JLScS(F(Wte?m(*LIr;(i)kWmxEfUCky{)H2 zs`7Aa&o%xuqH;>xN;0Ra@^TsdiN&rx7y^I{$R?WPr6|tA;h#9E`1~p(DmE4wv+#gD zb4s3)h$Bzd#Fu~mJ^KB7fXEE0Zgj_ahl0A#SWfGOnOFgdQLbFJWk8<^lBMr7A;T@x zlKyxqAd!Th*za9!j!1nP{xoe{J#&n2OX*$;LnkBj!NVFv<9wlMWF&qaukFo5&(Zn5 zEPRl%8+%+95ET`eog*ixDPqk?m*GD%xUmt+4pnki*3h9rRwPcI+#&r?*PR}Rgc2PI zs(l#>|2zmc(8@!xMWCop97RC)|B?0V6?hb{!OX1L1##4aDYlRb(6i_Ou+Uigyq@e zQl$`YmtXmes)F*M;4v)Nl6q5$dL5)xlnTRi?)#<`MqGauO$7&~@&9h&7Z7&$F|5Lx z;#PWg9H34AOn@@Xw&LRYcBLShW%Vok>K$lt`S6TPw&s+Z#|jEh!YV~iF2pka%||{@ zV3~~%av#D?r?&ZBnf9*k>ZaAnC6EKl9>wq<9z*NVOtJz z=R?1^bH~AZ})dV>?Ykc5Ffmbi1kCr5o-@(BtQwbKmmqZd<_$96n`VwVt+)-nAn>*xTaA$ zfe*rXBkUs&IbL(4k#V{OPv3;(bgaPspZk~DjH<+W6 z5(-(w>3r=UG599?Q-Oqb`-<(_V5zb~=$U*u2*VC#e@JAhvTA69$VQl_L8x0R2!o)X z#1EG=U8GUmPNY%p?I(LcA^Nu+O9%zrZc+kfI=M~W7zY;ZInjo%B;DjjxpI?i3Mmq0 z*GvF{Q`9JjwAIKeDPJ|s2t1O0(`@qK2S3=#$WREva>Yy|M?_fk+TM5TNXzePQPzP# z7gBYs;{LvDZ$2&hQPmxkqZkx2J0f;KB@TyGJL z+#h|4+5J(ql%0gae-Liw8pA}f&sBEJv@I@gf_}#Jvz#u_)IraUOY2tGplF3cZADQP4Y~Li$5(%GF?*-8YRqKC!i`&ytj!^X!rU;PJ#1dQVC_k<9)2z z!AgiqBX876)FN7~^b2O)bD-EeKVBwfC8~p9VsKe{0Es6M>BH*d+B@T0C0||S7i}tA zsTS)ys1|c$ha&ovZE9%1lM&!pD5l% z!LN$@d9k1j#g({fWLK9sH(0!_jsB}FYdsr-G0JWo^BrVHIj_Dv&N|l#!TuKY6@3+s z{tf@@X$wayZ=dHWVq~Zhi&#WdL!0)Q24aIP?7^vxqeD!}+_48={(?;0`2O1$-qhE| zT59^7fR!A1{6|Btny)HP7rSTXuNwV*J#7Je=utLhwy|4Cx8jz@!NV#Mv(jqKm~D#U z79NHPc&ie4gXPE53>_TFxnxKc9jbF#V|?}BW6)`ue35o_7fzZ=4jNSnalxtb2CMwG zj`S;PBE5)b{;)Da`>x!wf~ZwH++Z4i9Z-|#Bl=Q+GK3uxej?b-$X+HmdZ>7;;m~iu zJLM4u3es?z-f+#S8PrqzeAz}^g`@$NuEkFJ>zY+NtsCzb>*YV)j662<0UJ9W_SS}; zvw>2OglpRC!VI7tZT^ddW%hL#c9?YUPkOqc@i73{%9Dn96K0s#%%b_bPl=Q_g^?@2 zo#o3EJ4{Wl5O1k1`*p&!4nqbsZa7(OWk4X==ZCoBQq6(*H@z|4#HM;?M9C z2v)(ckABBmoz0*HkK?r1$Xo(5jhdxh95GR!>Wcf^!?o26JL|oSW85FFUu(#GtOFzsC^eNO3!`l`{ULOZQTT}@^GR&~V+f3A)_p=H>1FPd7zG|)D9 zq-9ZEM`OF(Wto@Fb+lSk&X&d{gNp5MQp&0Z^8iq+TBs_CxB zLTqR%S&de%98de9xs~M24y&zrXWj&d*S0;nB0vB2+J=Hg= z+q}3X)bnx4Fftd@%kM$O3c%|)Zem1gHpY$Pv(m)O^WuwUHc#xSNx1W`D{#K0Hnip# zp)VI2DAgNZKJ9LvMv$;AC?B;*Q_RP88%?RJq>I{JWqv->1k^O zC>A%g7A)(O{`muJf;>)UZs)N+Hv9>#qgRePJVm5#<81gTJ(D_l;e@s(k@eC{E>nf` zYd%3{=R?9A6-l*Gb*YP^q8_i_Tz;afX%SpRVw2TcqGG4b-hE@IA{@PW9mmT4f}ToL zz^H@ia=IE>nQ~!~m4I^$-S+7yIumW3eoU$ARkFX^KDn=!F%XhjcM>Am)VaF{ucgdP z%+)lCM3ZXyR8c!TK*Akhj8S~keA3GJ?4(f~e?{x2-rVAPXx9HdrZ=0}ya{qV>#WFi z0p?szG@1<8>t&f84k^7=>eJK+Gpvf=iJqtsbY>|m?5eS+uU4>x9621p)9BcB+DA=` zaf{Yl7327O@7T2tZKT1EHm$cyhw+X*vquu*PW!zMSB9@eE@T=kFuTF~C>QrZ&w4gX9lCj`ZI6GRdN+t###HxL7_Qm+!cf{(hM=n_C!<3~?Nci7=)=r+? z*sibF`aGNEi~5A2phtP}1Hl;R)r-rlIwLH_cYt1X9*ggbqE5X7*S#oOf9Vq2avogb}{fKZn9^3uO^}s0vZ7csN z)lzIqwohgES*cNoyCZUIqvV#bEaHW0qJ4H&8(JSGok|ij8eNLzfokd(IW{j)(Zf^*K#vlR;-#&98Q~R*qIM zmc>~`Hv0p7aHQER!nCr*Gw25E*)w~HhvCJv>Da>4u9&4~EwBWX02!R?Si({J1!8g$ zhEHb#)vvwxL>7>ewheA<2$;mvU(7NLaZl86ZGr2?L?D_S5>^xq$ z2<^#ihW{Mh_h)whCgu=o-i@ZJrGM9kLsqjxX+P-d4nMkPkQm@*q#f4Oq>+ejSo@pe z=OD86LnX-1UJawgpl!>Q2|4Oa{VUT_jJT^Lbac{ zhI-MY<&xsVC{P)q`8YQ%_NInG@Suy0mZOQZb(S`BBltML9lw%pi~UBxo>^FGl+8D8 z-+jJ&Zf9MsqG2t4l}Al|`c1Zi@5vgGOp-+c_1+up(FFxRtI3nJ8;~pKsvZO z>nzqqS}U`nlJW1R^C~p~V)thPo>$vbug{=jULl6SFr4n_EM6X<0jAM%6!;V`TYdV# zh=)#OfG;Dq4Lq0UG=q}pz%htDqfCL-w#0l!S-1A^n0SwE*^meta%D^!HZLw)G*&B* zDI%j>m@p;cI5m}4+X@3Fub|`eR2Ogjz$_-sLf9Ndr(?a8coXMdwB}wXZ`PLqd zaiPdJ4m8MFyIb-E?O2U{FDITU>x&9*QCZ3cdUicFI2GM1R!q4W>rmapy++$`qNL z+(L7K$V^K?Pr2UA*OlgiXEzr)a~GNm!VNY)Z$>7I?=#8YhsA^oqt8<5y}u}scykA$ zRd<}^jC-b7RTcawo8irSOt-=G{r2*m)w*rDa0swwZbX6}SrdiyRB+{cI(d;sTQHQW zBj^4rbCxw_WK@Q=gQJqge)<$~E=W36Bu7KI(&A0Hs4`Bxd}g3Gs!L6hwJ2E!MFIN6^<5r{bQ7%C7%sBzmAQs^2yBmfvdlc zvcZ3q|I!GUAB}#yFy|YhtYJGjD|6O5fVO}MLi&MsiBZJm#al$_^_ESc`qcAfqv{r5 zfb3_o>oEDCRGqgUQ$qL}E^QyP&e6)hu_wh2i-}T5wRl$r|DRbEIP}&+MoOrl~hgXJ!#*AcG9ejF3-Ty0^7Y9R7$dLF0QVfQby&rfgd*@3_#i(2}-Ve$MXx%zXAIXXH95k-?ckr>V?w zY2K89cBRJV;*SVH!@<`Hy9rR;?|E&W^7`NRXUin(Tk9wnsIJZ@I45t4?v_oB-ksM} zBLcca&-kc1FIwo^;a<;x!Fnc>64JPmnmt$L?};k?qP z%3+;4!#U&9OdVHmwddp2IU0?QHgVnfmj0UkJ+|k0T^-yGx2xq0>y`PvvQh(3Zsj4g z^<3upiPFMce?x2hBKP*ny3{b7Q(%+Eq))$V21R%wsPXtgBa`U3+3n%p6-5W%do1I3 z8N3Z*9WQ1JgBkq%mhldQ(cG>zqn}Y5B18Anljb4Pi26-eXDaOa<^3$P`a&zkZS{Da zN;Qi50dM;owJuc-&&#}VlMUT|>wqTLfd<{@Ca+Ng0NF+W&Ol>rpv9UxZ;a#dD*m|Z z3i|c;`+)HbLl|q2Yw5f5LiwAx>zH3`CCEGRz)6vZ75Qr5h2~qoaRax$W?I6Xgx1Ea zV{hsY^w=nEEkoDa7|Qv^MF<0$(kZU~;=Xou1DfAV6*81G;ns3=?dud(NbE4>MSNv7 zT_?wP)+NnO7dz{}%W{L??&8Z&1_RU$bXM(l(FQQ0@c3^8Yt@$q9#Fm1N0F5%w$#+$ z&v!P|%EG3W$MGevr0W|T?dWy{*WB~U%Yyb8>67f`SP5^vtZZ7@zVc)z&Y3%sH8>L@ zu1jg@JX92)rwQ>CqJJ#?;&qx&qhaPUn5H*86W+5e%%2J|#WEttM7)|cv$Ud?ut?BZ zjbGW-&4_CXwyBCutK7kH<;=nsa|dm`Tit7_VN>V092s&e-|*|T;*PB&?jD!XjBplN z>QbWMBB(O^Gu!Limn=olDS334729c`zOHN~tVLbKyodIJW{H|J121ZYexEmjH@8Et zSiZAtdtJ$?7!I_9yEdTZb@KZ{Zu30Lp$gcplDak^3FLj6y1U;oPbM<*t&F_&6JL;d z1C_UMDW8sx)93K?he1*8RQ!smRzWTtz|UOPjqM&6w8H*OQ8aZr`+N6KT~;5~ z)yx#H?;j)cqKF-a>zl9g5{tXc9v}*_#Cgmg%?Psgj47}(my0u<6CUK#ziVqD z@k~{DvZ!rS5HJYf1|%n+n*dfLHrI#bRW#|Q%?S<;Dm)Xzf%4ouu2-s4qdPWw$|HiD zO^E$kQ5ln(ZBe|?+Xt*10uuqrS+fuabw^^TtgFNeDRg!>)Ja$r*KgT<(lUj9gQhHU zxJ|V54JWd#zM_Gz*&AQU#6*`#2~o`k?ctpzQy61XKE=FnY$2PV0p2m6h?EOG%H&c= z{KP1`X+#4rApx1*UpQ_L_N+}Ry`$)fzs?GUTf&Cr<@d^uNOI~)cXx5&rK1K(KgI+J zk0*=5>!SjDx~w58<3@N8D=vNn&=ZAGDu_MeC4huHs7>yIX?d*P@y@t}gui$}ogreX z=iyuLZsfLcbthlvb!(VZIiw<>kN>3I!hKZP!n13UeG-ziC)4g_?QV_s%VyIdI^t7S z=#~Vp2IC@)j|3myRR}|+gt6MI>7_9scI|XBgi=Ii{er4RMMzxgKi7$4Naw(CY!7x0 z$qoU6jOv8!4D1x?B;S-{4r_(d6>Eizl_Dntg9;zS^2Aj{7=^Zj(KW$XllVDhoXnUU ziGEJ}v+7F`X;e4&PtsKpo9;GJspkZ5$rgMd4yPz{T^9IQCt&mQC6@!*1H1!*1$Z>1 zL9A?s*qf@mGXL-Aq!bt1A6YQ;!=a-1R9{%G@Wh$>;(+SIS>bAeY>JSxL*{*ZU^XP( z?8G)C6`u@ougI9iy|EwY9D*aKKomnyw1(e?W*H!){Z0L0EWo@w`M_*`Zy>yU0>S}P zWv2yV4m>t_Hi<7eHoZ3Cz;LDW1+h0j9ZUWRh-C_q{5k3aLU>soG~O_rt&F7vo|RrM zYi!vbUDk(P*56&$FJ0E70Co6V=`dF(It~5=H(mF1<6lbyCqF-oO%MU%E@3a9++Lo7JrvAot8fn%eQ`r+&{guV>L3c#)2eDi`gdB>;=5xQ3&eB;_} zL-cT#qWrDvp8y|g6p-K>tBgn$NM!ouw~3Inz`Z4y5G-|AfEUCgaC^~yN;{eqdK6mDq^8&L;*vYn;B?z-jJYt&wmQWdP0C%$m z5ctXP8U9k2)L@d}=SuB=HEX~OMl|X+zz#lc;%DFFy~K9_Z~Xj%_(1T$;{YqDQ;Y9U z>-W26nDEGXuk>k15S$S|g(_=qBl-Z(kbn3B0s{So~&dvIT98z_R{m%`W%$Sd9it6 zz*_^Axdbs`6JTE7$)dCQi|%q1184^S5Bt34vbOX;BbOa0%fnlMPcVZNV;RbSFO`C^ zWtWSJCkV@1r22-UKLb%|8L&{>X|27ouHT>D7Rlv>?R?L? ze`j{-f^}Z&VWy$GIBY`GR?0m*p?4TAn(({RR8KVeK}WIJ3BNy0|jU zs3C9cSJU&Jw)H-C`EK^$$MW)y_BWVc-kI+OXg=`r&g$Kc&F}XC9ItHr=d6DqB4_rn~*#JHT%;D;3(L7DvXsg@R;PDb!Q%h^cLF{{5x ze|4>V=u{D)9I92S;!IE~`7CQr0W6zbk)`lo z)@*9eTx!o$e2b)C?~^lb$MD2w4a0Jb`z5AL_H3*a#8vr7&K7J(H8KyVi6G_pdm&4b2=FfIT<0aU?U;KAsfKB zIR!a7Me)rpW(5M;p%AZGl%v%yl3&>&d+e|6Ft;$Av`)C@^&QW^4G zvQ|MpkX<5N(il=y!7n26!t=uLBDaFQ-~hh@VS(5Wh?j7e)R#Dy-163Pz;+VCybFj6 zaIXLX@aNcf^G8M>!UwR2FAtv=8M1N+Az}O#9KNT-tPDduX5TAtN}WQ!A+#cUgL!}U z{&Wh%pM-3U43;$*>bm7rN{{jbA~yhw2;)b*P9Gs;3}jWn!*6f#RVsro?%*u}<^c!( z3$gD6nVh!ae!?%=-kL86FA`tvlXdQV{7H$htH9kJzw<*$LQVU(3pRUeZXgfF#vHML zKYS->&mL$z2_@!3Fg4y~d8!6tj9`*Rty07KV@!e*XTy+of?)-G>HL%uph$#J1$J0z z0!0jVt0UY&_D{+O5`jy8n)HP|Oa7ZqKPtiCeuMi2xYSw}d5hyfuM!g`Ir%dUjzATF zsRRUX(sb3}nWAs%AT;`u3E~gWgINc-`XfIuUHiel>1}S%5yoeVJ#lS%?dm1zAfgEx zAb!0DKt2I}{G7nDxy(^}L9MSs3U;L|69M4EohWLC=0g8tg#E^~>d*-%3Kl1b_64yQ ztXdGSlfQU`zc3A95sW7m;x~k)paBv7A&kjpQU>fT%pZU7PC+7EtWOBgAz&f_fKCU) zPmCy7P?6Af;2)p2Q_~QSkst+Z7XmdvsfDt2b zI{sPUI^g$ux2G&)0x+3inV&Kt>LC>%dHf9^Ccru%+}`Zh&-wVzo5w*9l`NJ&&Bzn1 zNATf)WJ5Sd$vkBCrR)6?r!tC0{?DI!*cD?jQZqJ>D}DOUt9#_6nI*8EbHBUo)K zEj`ViT#zr7h9p%G&nm?dZwc=^;ru5tFw>df;Kg~IkipOSaqNXZ3-o;R=-ts#O;-gG zUEDPTgr3;u(2OKwv>r&QGxiNNE$X{~_p@K7^@FP1W-IGH(Trl#jPNY$*^rN`40^|U zeV*44-;sM$(1z(xd&^?2OAD86B}T0r?4@D8`u~whjS^bn8{6)hA=)nlBUho58n+Po zy)q9Z>e)yP#$@_kr9i~e$uDFP^E+ddT=%g>Hm6%kMyFp>{KGg=B*enDTSN@5_`a#| zPV9v8WfC?=U~0w#8M((YFEe$+{f_vUFe92YNBas~uBNMM9vU?F+qBUNR-MQF)~y+U z?_#aHkA&aGjU1!pJLWPMyzDb}aP_S_JzK;2DYaUs>eg1!TN-HWuC%SOurm_QjGP5D zR?lkAwZd5lR`f7Ga1r8_WCWt^`>;TUSX#Tg>?m$YcxX@3{X2$u-${BThm<&R1~xVE zFcTB;Vo)!^(^1G|_=8j&amKHgm!c0ksdbE8Un`4o$z+U`a#^E^BgL4c6~i4VMIfXS zc8DSex;Q_DZZqN$BqkCBz^42laYT#mXX3=zrbRa|=9KBv;)bQzCQXk--WJKJyd^oG z;t!v33^{Ov%QyFUNtW`i7&zF0@W#uE9SDB-K9JnwV|Rq36u^x+iq|mI~nDwy?f0MtN=OSJ)7o_xUsuB5w-u z28CXI-ZuvK4UxFQ!q`3l;wfxOy+9}clq4wxP^Oi1e>W|npNH8yAp68U)ND`m(<4w_ znHy(0x3bv8y!N(@Eac6MRnBBIRh$|Kmz)}0sl9xpOzM;6x?CR!DhA{lNlf;V5_Qz= zw38}GC>wyzN;{4eR~z=5?k!OOd7$#adHz^={1;0({oX3qO()+Q^&DGS zbBNdic{BS|U08*ji*2s;jx3ouHJ8fJFX?err-Gj>iRs0={~HU!7R@405Ep8ha#B2i z9j;a>JBlT7>YzwbC>Tz^EMFK(V7{L|DmwnvWJ!Vl((6PI=DbiqHW*fwGZYTB$YDId zAgrUmw60Zqk*gRpv;8Nc&PAzX zq}}-)c@cj##>}r8Qe(o&#~m(SdRPIopCf=$H7SG4wZeh`rHW+sFAu zyy)z15JzJ;*8a#7!=u}__$m>>sogu3t3lmU`EIt3C{Z}jZqu(9Anj}yj_poY5qN>& zc;Ho2F+7@rKTl>B;<6oD)J;3uk2l&EqZqYvX}pS5!vtU_AMFoXN@2uBH8bwEkxhw$ z{fF5X)Re-AiMnsptt*=n0qe{JpeJBOGL=m62p-BLh~g_9Q1Rr=A5d|jSuM=kUPJWc z$ah!yHzK<)TdXmf2()26UccJ4_C&ci zUPU|er0X272FX*!A7OLn%hsFYJs=(`;CY6MTnzqEPpbPjM);<_4KJN5Bne}x4bn3-HlZY|KRmv61%{2Rro z)s>Z)s?n8NX{n8rXsgftDM|Xju=v}JYGVZGBRG&>{N$5=Jb^1QM4(*T#@Yw!;_kWz zrAJ?mi(FgADg=7t?9LEng%okJM^$o!wpAZ(oh{lPZ)Z*tdKF#Dv}l0(?BJU$BH!0= zGxj5OPchIPY3$&~s#o%+7xDRh+z-R}bRR%I-EWKEs{{akX;mF^c%eIv5d8j9oL@D# z4y<$oFE(3>deL+vP8iWQdO(hRzW%rlBzE1btC2^IPz^@nivp<={Bdr5CBhB5Zv6xZ zEym}!xirQcMfbQ&W2Fs)*XpB4QPo^25rkXyhd&n20G2kHH|K~M)z1zB1f4IJ-(U14 zd%JPNIKvq+`Y45{`g0IqNtL1l83|x^zTk!TIB-UHev<8t2P^EbJn-m7PHa0rc)dWrS(t2&nAfYu&eRCj&%#lD#7@jo`ir)D zTD*&PMDPirjRg=(T?I>#Eat$=xwF+6+5qe?VG?7!R{Ki$F~>mFfjn-4xvQdR30K~d zo&TkEysd;8(+r&L%cCc7y()^3(Bme}6Jh=rh__X07+qwb=Ph1NVO}=jwj~$U- z*ypB3?jC0Z@)Ph8T#G$j1W5M|RiS}CczCK5G>wa0eMt0XjVW73AraXB5aAJ2^aYJ6 z+eZI0A@izxe4s3l{M0l%k?%`?=UkliUs>4nri}?(${{lU6!^Nwo60cB+>Ntc`AGDx z4#j~o|7S~-a7Q^>rfJIVg#k09iE%Jk2x*s7vC$sq_c@U(Ofiq-n$R(lGKa((o~!fh zn9~1HWC$H2D4WM}2hL*u9w%~zE@r{U3NLr|K7gr^)S^FL*RRRnHNgP_j0%; zfh^$puUV8SIffzMvEj`ADO^OfIexqTpXr^U`P*0yYv?qdv@_+uEb^>hIuGCBJ@_k` zTZdEFv1iD|o)OOAam+2!a~wnZvHxcR(`j^&iDV!WkLAA+VZwB>J!2_IcjSM)ajMJA z@xIbaJb#UC`G|{!4di$H)eDq%rnL6!xc;{t&Ajc3>+)Cba@y3Fbb2tCAWJ`I#aoHqs1OOdK*T6#M#pC7JYesrasfp=j9~Nc5A#K1J(Fw zMQ-DK>XBpO24;vFNkMq1Z)>@9%WWAn(n$y=CT9{NM{pXu6$H!TxVV3sEb+O zJKr+1wre#OO?Md9-{jrQ(O!bzTHl95)p zDOF;=YLc=~0#5Gim;4Y)Hqqj5(uhh{Ka@p2EY%b6{AH>+iDKIPKMBLiR+QXK_p&M2 zIt0El#oTO-S;8H;!xfA5m-w#ibo00b8fykoh%1&Ch*|39e&GW>B|yiAkJ~!i3zyS& zLPMplP;;%f2@yDoUr=|;EsOJ2_QoUH;ju>ft9Uq0_&- zy}kS_(`Sv>ua<5NncJe%@J=IK(Pi3$YioDy5;!smY`btk-_wGd)5{g3gAZF7#OT{xx zQ@cMKfKabtnkBK7Y}fle_JZ*GRb&V%^PP9sdqPolSEYxzql>}~?RZ`O0lUVeNmm~} zN`DQ-nppx4#}3}IneB01ePabjZ>!`colio+HA;PiP&lzv<8haW>|V(z%l>KmhLk`8?i!tQ)4G9KFB`C&;lsLi^PB8hbv;B>|Cn)Y$y^OaC zc|Q$}4qW_^nD5D4%gB?yorU3JMM5lAlaV+H&sD3Td;GK);2y|>UV;^nPWX%l&|}F$ zHKvm`*sMCxbD-=cX3BYhBT@=_pjltG787T|DEdK(e`r(3&u5VH``aR1^!!$06?gq` z$pg1~XrXG?+ah$Oy|RuiK-uKIP|3+5sOy;^_=y7UsOS24vv zti-l#pl@GQD+N^nn2w+#aj*m&2z306)VH-oJm*<#)uvjfZ)MxY=j)O}AkgnMupM-0 zeI*tB5$0mKF!5&m2p6GE2n4C{2_O>QKjd-pd5=fFAjg|BE$lnl(l6|n+>eZncx@l> z96)&UzEHlw4!}DqrQpB+-YL91xp#;lPzDmQ-j7IT@^h$_&vHWjqX_dvDJ_5Q7r zFH(XxD+a3lKxxA7`~jGf>W%UdX=>zq9AR9uV&{2`Joqb!ibp@CmaMsDR@&J_?NIUB zb*A35G_(;)NS3_Ab|xkuL4Av8AX64mIQ;#q%8^(!?J#79+)D z7j^C0As9}6!V(_e@z#u6jqoApfM-iqbuQ>mcXHLJI3L~th@*+@``>4JIQ~>1uU%q%KE+gdl47TK9ZSDd1b?jh&Y<>= zsrD{CXYh~)cToDkk@s$<&qw!jL$jK_H%U7`DGk=|av2^t#|=sasRv`s)btJ4O^+Ve zIMFpg--p#N9M`RW;6c4rUO}t{cZ=FvXl{BOr(|OiRSk-rZAjqC+OXqffM!jaw^Tx8RR&$L({UBn_ zrSi@s{sYZtbpgG!8J?G|-T4 zDyx*1IgHHB&Zsvcsz+noRZIHZmc-z@#nQ|Q;pZv8HShw>?$HwNLBEmD`CbxDsc(R$^l|8m>?Kb7o~) z!!7lz43XSAaA-N(ELCo1tiU2|sA)>nhWTq+QG5I`PjTDKCmUw)G}%sa)T*IRHo2$r zDwRXC*33t#vbF3gWou~G9DU2O)zB(sU7xI3y4ceU)8tCW3e;MTX6?A^(&WzyR05A? z4Y}D;$A+~-qhb>x!Db+vnP*a}A2XH3&z|BTfxT4~#` zVb`Z3=*WeXr(5l+k`&^|1>2H$s>`!El_(w9@6F<5Z2aCybMcOkwx7O|<8GH4;5fX8 zUR$qNS#kAhv9q5%J8Sl#!NhfaRM%@)OSYfe(^*3WE#hO|&mDxg=iazzZSkLI3LAP+U8V|xMRIVfX+i4h@N@&)r*}skG(-mV#FrKoa)!zaG8b~ zlTNG1bfYjYv8)oiECK9)RmR8HEZXUn(CFuVTjaXInB}1h3Imf z3{z>yH#vo4h*V^{-j$UW>hkR!M^)%I3dlA|ESl+`!`cr&$!QR{^_80~!IRsShUqj4 z0DWDyF?g&WI{8$eIyV5^EWTnc_eD+_>r2NO<5T9rUM;VA+|hiO#os2F+dKL|$jgWg zOEYGatqPf@2|pO;Gi$NPQg$DyG_jz)2kMo~Q`6h}sFi;>a&q^%x1MJROxh2+w;e_{ zygT^`G_Q;9%fL!2Vdy8!C7a&ZawAPS;^H?uO@YF#8yejrj2k%J zA^;86$j$fJA9PN?u(sFSqHCXga^_UNR>5+J(~=wS^DOh{J$`hd)qdD6_r^$LI7)u* z&y)bw^$w)IU6POKmcs3e>C+%Es zk2$~AP+S+Q4ZnBu$G&Z(fo{tvuuTUZ3RBtP8wGArqoPFZ(GT`$_Q4BNy(#hmTc_0z z(zUIEv9A8WhSg)*&{Y2(G(ATv2N(HcbbOC+QwQyZt*#wb2El-$5Byw1HS;?a zK5ANA{b(cgE+02(ue`>!L8}R9zLRKjkNFD%a(ln&zmShttsJdMC4uxJo>Fg)T@^E- zb2Y8rT$^auE6rilk=d}Ee>QbxJEzag&y+Mnm$D8<#zw%#K#1 zH|9Ybzgpb-)s$<;nuUkal`qz!7;sQLv3dQnxs|?kX->MY(+9#Z2NeUR0g2=EV`0EI?489UXgiYzeoCYXL-OGbMt!K#047Gas`S z-Y^*;U)gcC7!?V6X56fE?|IrbN-)G5b|8)JhH->DRFs98Q&RD+*m;b`fLhtm6e;xnMwS4Z6lBjNBBrA>(r^3)JK5mOAx0CKN1L4OOx&@fR0v!OX-Mbk$A2olMqCEb0SSg&n$gWegy`|j!$7?9Eek{mYfkN+snnuN z2FVLVHQn-UD|C(0Ms2oz^Bj-SJRpL=zzz^XVH*<&7jY@`0@opqnAy()#OUZUqU}BBha|KMX(wAjpD8R7&(T{1{OU{}HRc_H^R%;Aj zzfCu(Qm0XTPhDfSzbGPHQ<4Sfm&I?Pp=L2KOJ!ggOD;ABNra*evVf!=y4mcFB`0%oa%EMqa2`va^u#^H}l`I>a-6aL!N`d?Bb{Mes3 z4%1}*E$Xh7f@kHjjF7=DQmB^rLWE=B1i5cWf8Il)@3(q2bO>BiRl6=5$Qa*<##eOa zJ`l>d$sRAB;$kE7nQHv$d+PR91)9r3DxvEpXVzuf?g3I)<{myr8ef5(%b*t{w+TH6}&(mGA z_x@wLrwvs&NOJ1FPyQK8JvC@4$2OoLjPfr(hHLjP|0Egj9qIehuq?j(CrQOJ`4ah_ zlfLiYL<}cN%#v&*mhpLEZp;2Kk!_~nFI_B%#tG#42%klq$7-D z_g{E?1dc`yX)4&3Ip2|~b-y6v&%?{?Kl!RlWJe1MUhO>r9);%A8&5SFUtC`xb&L7| zZ|9uQdG*G(8x5~-5u8MbZfH1=?xQ~Xziha1yhDQz>>_W$j1+t)MgA@i3AfNaF zmu^VnJ(tS=IYst8A!n~f`%fUVSN}JL?&X^XARDMvvQ4I(F)Vv={lc}b=dZ<=FVgF; z`GfJ}%W>n&K}+QkY&>56qNa^!raZOTY;?8ypUqp7#@t}iPBhx?@jOFb%JfRb5=SM2 zpMM-TqKI{pWOr!HQjI3X?&h!l=oE`Ppf+vU+jN&tR_+KHeaXKXLTFgrfnlmVWzWd_gISrB1k`Pq>TbC_;9o&LfPS644W9ir>?+1`~9> zqmS*OnepNe$BU*8%9Gh-R5kUD89Uo#QRR+m&EM6vu7U%Z(oHWhpIA|m4T=y+cYV#{0{LO{Kdxr!5RmUuW5l-X3C6mLC z!x#+@@WB2D!~hRs6k2~uKrkgB-yj{@c(<$WppldxK;SQ9zgJGcX9tc{j)j9(WRqU+s*LidbhghAU|RNlfr zE9sT}jPEM~L`w(zmG1A~Q;KbFGkAad7i^+3r;ZzzLeSje?}*?#}4>5gxiO{qqoesD@A+x|LQhiJQ{yu&B1KKUj@l2TfWEB zfelJ_IL#f$8!^Z^jR2-y;XJVi_6ic?QzIdyggV(y=>S#g8XVTjZrtuj99Z}BSAHKa zH|sA^7Rs${8q(fN9juMNKn*j_mAxs#C&e#38AUPsA;0g1@v=j+HlQ6^F=iM&#tWf#;4z;Wk{gwl>Yl7=!)$Q3)U z(fs;jBpb00Z(b!<^z)a=Bm*vnj5fVIuaSCSwfrBe_H_vj7Kx&X1xn7wm|{A_5Mzyi^M$#Zd{^?CZyHL2+Va(hv8E_@o$)U_~q zF6*0=xoFVdvRj(6w( z)D34yMubTLkJ}}|@m}5>o$zSRI1FH$3QVB#N1*OPMB)E{qK5_N82jETfJGVAG;sL? z(kx7K4x1%1iT^;(drOpb|GgXp%lA6|WiG#`V4jKf&_OVH-9#J&s|crvcR#$keKvg0 z-w`1V1eO5vE;v#VDPUp(2D@B1#O*&#{y`nD{Y!K|2h2%1`_VZ-5qp=snYo}(8=tcw zR!BuQvYug})YP*@OXFOEY)Y0wL37CDK%qu;rG`nLHs;7Xtx)f%MT1t~X6eyb?z@@5 z0Sa^ax@q%rgYg0N=*)vg#wFSz`g}wMl_6sjE*e~KH!=rKB`h`VtbIX6nekcLP>_%v*UJuIy-)a^B#El z`9EtQ=N~ph?x(ewS390KZ2V^ot{1#=iA0!`eXW^THd8MeApGA}@Gb;E>oV!1_ zE2G1@`?q%YZhSv42UP4`0e%w-R=E6jE?wVwPQT;!ut!?1^=n_>zuxg?ci{Gjy-Z6K z!^nD9+vTlX!Y38P7CFC@31J>_#vg~fxuI_?QfzJv=*STxdWQ&?<(>jr+x2w!T-X1H z`XI|As&#$q@?QJCfql;CfhLc{-6em{?*Tgos}xYwWz)seGWo-z+u0B!wTy58^rvJo zDF@vWb=m)RgXs@Ud|=8WHL#tb3qWSNn#jgP6y=NVx6pKttG6WP1OQE>jK! zd4!oRnhlk6qErm?A88wo&}jEkKq~g!nQ7C9LNGQ#voY0}0rf(dLGP&g7ANPINgSGP zMh=ol7-?6O*Nh&qqVvg*&(0{X$J^OH&$Tgrw-=M5FH3`BPxls-{})8Ddjhs?n!Sf= zw*K1WEp54r@&b=}RquWIzX8$t7o0(C7_UA%VScXH_1eEX>3`7;8`thIO@(?lC!z7a z$K*r(FKC8`F!%Q&ynGDulikc#^`NJm+}Td^7EXw%cfK{?GIakx?lT``#&yF+W*PspEnYx(u>#1J_Q#M&eia>f2XZmy} z)^w)|J{>|YlP)cNvdMXaLF+)WKggdD-PJ^;{aEE|MwoY8T{85jClciP(Jw_D8@vs6 zYC7ykF;!HVC72(AEC+QOdl#gY(FnIrYE8dn^tbp0Ia!8IEJ+=>Iidi6lLLPjun?q7 zpM}h2n`Mv4Q0_m>`q7d(Q$g$`)miX~6MaUeN;kYd`rYfdNKwYUZi9O$=p8o|2`_pW1QltoA@d0PJPGki{EtZW!wQx?T+t{3hs;}KFTvVA&&YbdC`)mOE{!#GU$7K%*SkI%iqbuH}?7%>T7#xUg zNK1qu7078=J~TKA*qhzkrNWykmrj zpVNnt9$9BkC_p|O)-^vp+vQk6$<{FuEZcHZV_K{ehGs3*7=DSFC3BK4acezisYldL zhnNBObn)UhyaM_eG!~)G#DfsU#?QknRTH=t+7|PE5S!CI!>QD`Tg2@U zn*K7sg&mWnq7qO% z648qo5xKwn6kTRMNTHk_D7O==>5u4F!fb;up5z>m7N){Q;Uvk1r`0{~nS{OZDVkAY z^n#>8Jv5q|K4nC;d2ARjF$_TAAO^{x_KKMhiOjR8CH#p)m`6w3K$WesYhQEC0oQv8 zJ=+0M`Ld))Qj=90F(JE1$3}$C@h|q;k)*!|d#|-*V?y>hW$mBJDs#gj?fg{AHC9qI)sO9oaIk ziEEf`90T{+yv}`T&Y+Y=seEY)nY)mI0UX(fNA$lu}S0-8C?)*+y@o z`jALqG}oRPz0MMU7$>D*PRQfdm{^N%nSwRkRn_ z(~VR29bY$dz*-j;HFt4)CgW1SEFovn+WjaFa7jF??elDy=^->uwMz4>@hQMJ=kI1W zjQ9ax-XouX{B=eyB(W{9j06^9zb$IV5bkykAEb$jNmwh@dSmgMu(J1=Db0ZHs;s=@ zaf5r8^|~eqAP*D>5-^{ZLuk)Gpt~>h458@2@Qn$5Q0MBD-P0WYuL7pNNn4+$pT}fCQ*VViFE9xjkz#b8wmotW%hV#Z%w542j5FX~DB|@pLj?Du-1C`GgfTCGYemMPj=mI6%>fj29A972D};>^&96nV$SP>;bmA zt>f(cU+_HBWyLCe9^JA9#VQin-Ao1hCX{7QN_P>h20q!AQ0_a1a?*9e!d+3Aq*^&{`F`XjCjnqqenBrv#aME zt?K}ygXqLzvM`5WA38R0p0PGDWF?JbQ}mSf-g`zW$HWD6kf^SQUeYJ>6}2JkUia!F zTOrXbl!34#@vf8l+vF!s>zo)%;G87I_fjOsGq0CoAJWDq^XC-HI3d4&6uuQxL>AG%hi}XSm-_%1&JzV-VNd~u zd#9)g4>Bm?DvBSRdZi!$&Zr^CupfTV(4*AsZZA>j6iA$hX$Fco%hU?4ls~SHBI-Gd zAAZVJG@0OoQ7D;-6dW&^i5ILGvg!7@>~S5(UmBy)s-_vE`Q_P{8bS!NRg3-=!tC)= zz?3^g%R%!eTBS%OFjHwvR7->ya2G~kHdo6l8TI;!-owgg{w#Ydpa|-M{pxNKs9}M8 zqju4~M36i0$1JsfqN#V|N5oJk`gQiXa{#41gHUhEj{(qx>xX%^?T5#0WEc9{>WEwO z__ap3os|9rW_vbdZh6GyfJ^HHM>~nl-v`)j6=hUEuR+^RDs=)wI``(*nQ|d6cMHRp zOX-qtH>@A1(y?Y1(w_*=7zoc83(v6Gb<)#(4aXlg)Uc>wV%1I}&=4OXRjK53P5)6y z#+L_hKCI6H$Q{;GTjlceVNNEo2ZC?3sjPmx)vC0NtKfHvGnY%8%pv>fT82$2Jg@Il zvGLg9;YR)PI16(=E6z?_*pdXz$SG4O1$TaPzw9io=PJj4Mw||=y8e|H1g1#if7l&( z0va_DKDVs#-db(ME8%{r8%W5ae(5?wb1Z1m$@mDuUr+&x=$v{xMx@e$uoC)5x7?~F zSRng80L+Nah#TW{nM%dHp%Tv%s-qY2L*@^ppyX;@$h;Tzp~SoGLKUG~xZnduZQQk+X=@ zXFP3hd%(~c^pMUut7i)ObjmHpyFki4mfyVQ(Yiyzrz2}vX`sXgPWbpb5wyt1bLEF8B(4K?j5OqFq& zkz7mKx1TVEJ8H7yk^^@#3uE(k7-y1Ac8Ju551fJzh7g?m4@UTQNX_LtSi!s^%~~Li z?Mu|=?y;nm9g5l#mXzh^B>ZZwG3RodBibwKBiJL@+B}{`5(|K}Le=^w`}+0jf#;1oIg^W+@lQNBxSJK=H z(;8}zmkS%5Pl8pK6^_9&3ojK=-K8$kg${Y%x|J33-Gf{7Tain$C($REr8(a}S&XeK zYR4Zh>7R_e(vQE3nTyfeH&`qxjdU(fE=~@0+>&`kA6tmoi?KhgT%AZ>x;?RarIDF; zTKF*zE>kX1j(VLaow#25dIe@C&KxIZ#>Xt{9#`&|xW(yHTP!}EFbT-LHya^LRE^pl zEiDk#eNo6PVvDt&lRTtO`{ws8WjN{(Wlqsfh5Q>*v%Y>FC{Ad${!ph`%~fMQZ?CLCgS`HWk5y*AM%m5$fmMQ_Ayk80b+EjlRQCH3Nm0Sf^x;m%PKL4m z+4Hi%+TmfwNrtVf^MtdG?po$mCTclpW<*9rdDcXB26H(;k+djkZsj|quF=jBTUQJ9kQ=c&N;jKS6rA$k;U9_I`P|`J7qw2T z**u&QxEHCPQbg@)A86Gs&dO{r)-Be?4OcfBkJ8kdlo=yYvwMt;Mm_fm&9&01?z>*v zg^^v@T_G;2*vIlMf;Q1_f|s<{k?nu#uaNGp*+V?G+lSpu>`VFP>~6 zi-41!lS>c}=XTBGx2v7+IHIkwz2LTBy>-3yHfh~!-OG*i4DJlKwc;+Vao}{HuI=aA zobDOj329s6UD8_b)AEYNYroJwd36YIu#L$pF(n$+%Vst5*R9Cg>b{k`flQB8-w#>D zlhq9U&fCqmG#70iK2K8~y&le9Qf+2!1tLPCyrT2Ig1+w0zE5fQ_xIwrR~I4MF^gB* zG5tj=s9Q0El#PS~7X21WmHpY_V%D7$*|>h)zCyiYLscnere?F%V&larQ(b^0l{m*S z0F68$lITmUL63lE5*!9cSAe+ zk{R14;OuQa%_|xc-@-;K13yK~m8Rv~>|fjL_s;vSK-V)Nml8mUy9OosefPfC=ie`~ zm2=Y9_|zlInbhgt5bs9_;!H@hd&vH#pT)#uo|a;U4?v7v`20lVxoF<2TQM^?hLud} zk2Y(6&@m6n(7Hq?TKkniXS91+f3FtVq$oCEk}O$@3!RLEWp5_@*`Rlzg^ejQ5h@`-c~vkFIq9BD>7E(% zn6}mz_^*8`T5%>S@oB4LP&U&aZ!^h9&zx# z=`{y1RLJ4lk020^ojn+l4Y2xs-Rc&%_hS1i=kltl9ihpXajjM)x7?VBvG>M!KYZ6A4X2u05?|<`8K!4ms#&{PI~}ZMS^wJ_9a=eW z^Um*`A4MC%^(hhT#|pRR7X=lztn=_$isk6SnKGqi-;h*@JOnTBvrYx8dCpyobvF(q z9N(_58wY(^T{B^M{zbUoh1Vp+H})uaZEix-ze~U=S0=k1Zy!@emP z!kJSzO730!=zK*{x6v-tQiOw!dU?OL1&9Zt6cvh+r$$RoW;uaEo{B!(8b!Zn7WW~a zoOOucGEg(Uw=wiq#s{!gmpn{}PHl2Ism~1thPrTx^I(-sBcr1t6?jfDGNL(qN3Wft z3f7s|nFqjaC+ngnW*a<__5KSSyoi9_MKTZc?XoUwB3-yjBOA=N;A)|Bl7Wsl;pt5v zLum_EA-+e>V>-tkxag8jHJAECV_q7$OzbMpw=FZk$$f8+LfR9``G&C61O9O0t@p;j zI78MkN0!ajcVeZrR*581sU*2?KC%yB$uE6!FZe=7C~~2V17MxD zJe!*=@e*N^J8wFgU951-bld!p3yQ=UTrwhCpowk`PrgLVZN{Hk4TO@09cUQI^L;2p z4KlK=c0-w2Hp73v!qni6T{}`Pp8MN%k%^F}9HmV5Q%y83l(lEy9!JVAkmHf`=M?xu zH!H0z{VFaZ@N-E>$A4`cvB@vaTZ0ioo5S1-* zNF;{I4>62NyRDG((A32b9u(gu-zqK3=tQaJF;Z4YsrjKz0))M9BR8(_4kI-&xlZAE z;%e1q@nj22OX`4HBJ!Eivo5mc#l&N#h3Q}4PZl`@LK1w<%a-bZIwA@WZ;QZu_ez^* zGb;DgF2i*`uV~JdmG^$RL1exv)EN^_DW)qQR;^Feu25!9JCQzAdppWIRK8vjJHaYY zc4~$GCdu-xNpw;^jG;cJ)v6w5S$bQns^L_5De0_UI6~x@E!dTTSt33wT#n(~pqHcu z_|23$jP08E5>sMwtyjWy&@8JSrgPXNII;gdsjxyr@ZLwAftm!~riXyn2=!N0kiudQ zy^Yb^jzsTu7k{$aP@^rHlC4}!co-pOP?!Hu`-$xke!h{YVk6yZB5B^m@}-C6D2Q+c zOD^2Q#^m_N5So_M&<`^SeJ%6W;@y*Tw@@4VqDHm8cKvm>xNUq-$qd%pa7j?($_neD z7u`DG)@QQFH%(J2(`Q}ukn9?x#&1Z7<+9DGGD8r59s7{%D%!DOx(tVt{p5QbDQ3BA z#gEQK9mfb;TDu4qtubuZt*Itvt3i_sBA#{+z1ffjE0uWiNo-G;)-bX~))?D%51+$N zk$gBy7Xudq*E6*1iBR(k^I3Ze`w7uiX@OPgVYQ2;$V-=JVjU4uzvL`PA7mPGbwMa` z@&i2xZBf}2(T0)BsC=Px$$^QTxW)*cH)HsP#X~t**s?dEva0iQTd!O7hh@XwyQNnw zj6`EPVaCmFSB^d4y?SsqScnR9Bo@g!L^u`qGKciiFf$g(S)8K$jRA%Nvs8MEskYua zgxo6~Qeq8_q=AbVyoj}#hVodBS~YnRc@$HL8ul z_?L#PS52OJv&h68YC6+6+78*h9nAVFYHrDyl0Hjx&nY%AcRa|=m2t=Ptt#sx&kMFN zn7qiIRdH=!Z}DzAcDt#mjJm{o{GUpHlGXqKLqLJKjR;G#FxN28Oe=vTx$dQbE z?v$i?{w-a3iDm2a%E+lyp7OP2-HBeMLBJCe-dT4RFKtv}I0%?HVZwJG##!G!D#1_D zjB?g;){B*x_t6cO{!h^|m*m(xLg{g5p+C<&C~P|nJz?qzvBs*y}oK)(>xLiBg|W|6S!X-3A z!vNpw9&6{vuh1Va9~<->2)ATY9?N#37VaN#`AbRl*t-_dyPvDGpOS8%gn+p=jnV$I z4ZWKAFHp%xVQI}?zRSK!%ma3sJKr36Xk7o~hW$0>(TTz#? zqt`r-(_K)1Mks<0y0#dk)~k2vDg3^d?S4RK3o|6_S1jMQb37noQWLfydIs8{Aak~L z_V$n$c7~0$p!G{Psi^AP)@y&4fBJi`=-A1z*#fEgZ;X=g8*!HS1+V?6oVuh(;YZ>)pMu4@nX}< z*~N}@7Ip5$l4ALgyC=Si^X#6e}kWN&6|eE%#FSi)_Iaax;6b<yH@Wqyx2S;tV}{@ajH@bRwvS(DBFi4L~FwE zpC`5Cr>ys{z&kJi$ouA$Yy1~7+cJoSODAsUtga?Ui`k>B#~2^1_0dg#q!{Hj{UlAd zb5BG?NJ_Cq_iOMS^uq?j^W9_*o8^@V6djuR`Im|}tD*f4xl8*&UICC_?nWul`lfmm zCaWxl87iM4y!`Zhe=bIY!|$gUFWsTUo>T8m)cFe{0Yq*lezX~L#YE8ger|($+qKdH zL6Ooe);zenQQeu}EYGS0E4^%Tj!9irXM?98`*|FVFTcQW`SuO62Dy`0cVwwN#y75F z-><4Va8(Lk$4*Gb5Il-rGR5>oP3&fGKMH~al@NHc3M{iQq&oV%tq+<*f|d00d3}v{ z7j#I#{RIrE9WB=~`=t8k&vTV;)7VWP0R5cL*>Vp`kFFr?{FTH4s@JZiuDo)k^9OGC zmO#1~0Mz3Ka`XO?7D_zg7rG6Ve94zLq`185x4+(%u?B%Ctv-&w(vGUvUo`t7b5o7S z+$&&i@}oJ~y;g#<-$D2tIT06kIzT_1`HG?bubTZ@O_a|ThPHki&+j828wIl28}?~# zupg~_5OBX&$Wo%(+g@?QLKUEB^MwbykK>Q%=Xu1B;*W5eQz_YE4b7z&h~DvHh3KO8 z_r}{53rdn8q-XEUWvBh1XM@ohF9LmxGZAkt1JLLNOuu*B3(bc58?JE!9cJSL3x& z;oR$m{pFVw&2_avy1n!|CvDWGKkD3?&@gMxc)4rra~H!#O&|Ri5~ys-;jS~s%IjsC z(+NRUmfC{Nqy(U!AJqTw!n_{S6rYFPRy1M2eQqudb&X?n$u=5g*KmU$VY3BxcHTPC zoqg8(GcdW1{tzVSQlDk;@vU3>!YtVB)lJojM>$i!Mx-&aQ+OwLQ@O#)4&@jp7weGI z@KZQ-GHF$I^P2I3Dx?r->Qo=NXA$|8`h!z2q;4Nqej0R(8C=@+y)MJ9zm89Ka!=)~ zroFysvDr5ZV|o_UK1zaxmir&EwxM~s`f+fcpt3=&sI=xiCOpfH zk6TfPFBb^WI_7!N9IAEyq(c}P-kCI)1}mm)LVZ_CoJ)!n-sHwoaw3xo)|Eo>G8aponhUxIYwpk^<3Q4zhD;# zl+*Da5c;=%t$%S&kFJj|jJd`E_xgoY{8a~9xemGR+;{%U_u*bXW?ji(zAt&?3w_j` zHq@-oY7$|-K^g2kG-?0ar|YbPZBFUHuL$;~@fJ>r2tIlXq;PiAsPn>XZ(^`G>JNzt?B@$%8yT!d>&vn&KJDxhe37jE$~-UmN@T(K zx>9yFV?XfVB&O#2+C~wo=IHilQkv|4W9Bb}PmS8asc@_5x9Rn#7QY4QN^b)te_gJT z`esJDX0OE$1GMm`_)Ckz831bS-EvhsyHB?qO!_~@P^*T&1zVZ6$Lp@EaiI7D4cwMQ2<|b(?4n+<=reikQG`# z_6mn+6!9L;zoISfGZUQ=wWEPMBQ@}L24cb9spf|<=eiW4XMPDU3aSVt29}eDr=Lkv zu($Q=&e+-X_W}e5_ru;z;O<-I=6Qj^m~=TtZzYX~Jare7JEJ6LqPAh;lC2rQeaj_DWb^F79$qH9^QbIi~h zz76H>V^|V({M{5g7v_hZQZ?C+zxC@_?t=A#^){(VN3S*-i*ORS&u zII&6nIW&`?F=Azj*s-W7!N)=woxp7#%P7X&hY~{SHMXcoVVgPe3O#gM{-OA60T$$NQ22z9{RTzx8eu z7`J5Ydyqlb^pT0w`Q|-P)kHiR;jWwYpIqN#Ts{+xzOnauX9~qzK>L7!n{{}~1utBB zIj{^EHO3)|&q#2=12=1v#J&erZ(AXCkZ1j8&>QgxvTl2C-8As)9OKR3FmgAX5Tw-9 z@{7^Im2YZjZcQSrtTl`tbV|>3DeUP_G~l|{Cj&a7=Y_P`8Ivuz;@WS#5w8ay&y+=f z=9Vx%XGuOzT~QXlk9!W1eAR@SF1UV!_-lQzpndw}zm@n-N(QU&;?P{pIQ)ctwJ%A^ zj=4A>iBL>t71>0sJPBsbEz^SfX`PJRI(3{r>E^BUdudP;z2bJb_13nmMM3R7{DMBN zh0_|(#aB=(y=cYtH(=PL!<(u7W=?FjSZ`hFxhr`4AA!QIlHx|7Td;5Xi*|`JQ(sEc zWBNUprU5RY^9|1h{;tZdieng;LK=NXp)hC+E5+%C$C3EWZ2&p6-qO|cQSjFF)Yql~ zY0NXN^hb>-?&3PeT$Ws>H7PBXkr7}r8Zf?M$2h9m?~X z`10r2XeLtb-bb2ioZv(Qy$u*;Rm9#t^NJY>mipJ1Avb}F`aZVj#d?GtQ_P27ZE_|BaH z5ww+}c_ZmfioZC29@PZR_@jofakNq6*KY%~Is)H@Kc5w*+X9d6w8U|j^&BGXry z-*Z>VjP*(pL^bR7l&@pl(mtnYd5s02$oZ#y>ZNqEV0xx{6~h$S7c+E-A(o=xCZllX zuv!c3G(Z1!_q%_yJoU!Z?fwto{5Km165k837KJxje~{^7A;2>=III1lmKSeX}W~h2c@xVKc8ijot zXrRc@nW5<0jQV^DzgYHDS}T}CGBtpgGN{N7K?%w~if4|jRBPA6;&C#uQ!kXTa4HWF zLI*sV?GX057j?ULMm!h>R{6UUuH%Xt3iOzJTodWS5 zu62itz!IV&5#B&D@5j+&pksAYYCVAg_Up)UxZK7r?$9VhY>GV`dnd`g-}%kO&JphL zLSt~{D}w{7urH~{b46Fo#@+Vt*=6UNuT>;#R#g z+o%JC+H%|8+XmW^j$s$*1QEo$3ds|5655E_npzmynyDiYe8Zo3-N3Ko`R3)^+4@?7 z<|*W3AADGR#+GG-3Nl&r9wi=s5*O%C7s>aO*CHjiPXn}WzdogYU1mSA2>-@BS96pP zHw{BD0--hEbjFdTh>NZ=pC+6pWWnK{Ns*6@{%Y`haC^E_+xg(9OF;dOGd}QH>M>YS z?rn6GMe|YPk-$WVCbQe4BcVh5rQC(!;jG|H8}k6^0IAL!K%nis^np|xQ#+oH-Y}S( zQ=Xuvhowdv!)Vi~m}~^ChN+B2r(uX7nK@+Gh%rz*_EpopS>RA=c;UBQ9a-RIwG%VJ z$HC!>DW^8F$tGAUUBiHk9|U%>_Maal1h98khKCu!f1P&ejF9g}SGmUvapq-E7gcdQ zND1JdfN8-$TfRGy=p3=QOQpF8kh``H>8FlZ=v~h#oFaN9XGF!X?VegvNuLhWHm7)# z%I=LmjM0MGz|oxGkFOM9>l|;s=NQZp z6K(qkD&loP+(>7yL%8;D$9gpY7R)v>e&wO=l^1kG{nnTRWcM1;* zi<%>4%9pmDJhB}$mHqRbqeoiwL<5M6-~_Nq$p-OR-ZQ-?E(_%lWzLTIgLvX9lYPI3 zXnf=EF*i>ksV4CkB9rxxXQq53*+bb?c9(3PgogonIrE~PlsfC|XVMkDmqvAN5~AUk z1|tT!&kL7)jLtfuQSBEM&#VJ(Qlf*#{4qxQT_!9;A!+H=XlnT-0@h~XT=k}Dg_de$ zN9I|~|W*b3Pe z(~Z6yBip%fA6bp?n&nlV7M?O@n~ZeN>#4ClZl%M*LgZO8o#{XD<6>pJN1lL(w}1`c zhUrfGu_4cr>`Xr&{*SLU&Y6CvJ53AYEjrkGuI5`o$~0s^A}+!c?XsjB=wy3z{`tGVHwOJ|pTtaI~|L>iY<9SoA9zF_v*FX%>0__CE(668Y5bIiM20Zm6OZKbUj^>Q#Rkcv zJva}Q4F$eZVZMZLZTK->=@)nPDRX{GUK`Q=FnVdt=RhzdF#+pu=-=fv=cR4!nkpDs zuX3h#W->mzdFbHQZlzvvj5t@gtQDYBOu!YWlOO%rH(wBE_e}FlI!)z}F_E|;TFN(4 zX9Pz*;OlZ8XGwnw7Pn+XkTLK{F2(Hy94t5|=7`gDbpdMJz2UTQDD>hrY=$$=>fO z=1N@4MIa+A6ndW25w*fLX?-{>JOsyd=X)Pn`Y($So<_LFxuW##J;yGISd_HPYZQ|i zSe0soCyI<5J6G;6E61W?}uC zQJ@~&$>f7+;(TKy9z{0)VM_e}XwFCnch@w~ti62jmC*DV@#jYo_jq3=n1j2%fRc~^ zK3#ZJ$7`Z_^-z4{?%x7xldx)?31+y2opMdO_i)D<5$=RiC^X$wlz0^I(fGm}rG1RZpn=y=&#GZT{mlj$|4i^IDgj)Ab8>Bs?<&9NeJdkt+P&-4k?koCw zu0n&rhy+;!Xnj5C==Y5<&rcd#VD}$>cQgbO_`#9+9J7&l!Rc{5e_a2j{Eug0d0-Y% zCPg!mrW!F)Jj26`6nC7rmaqwVU(&`d9~OM(cTo)S)lRNd zvZ7z9zuj=>sUP|oWSID+)Q-GAaI4c$fQ16l$+po$l~)$86DNjd@+K<2ud+X3$T=y` z^up_c>{9P&A9&GLTGi#->uKePzvNr~I#lZ%9Ce=O{=&3;eI2b}$2?_{coHOnUA zi_c8`aGB@=p-8IejYM{TJqc6D6v%AYg~KDN(K_%+!Ulds971}^?(gY(g4Dtb(Da)I7$pJ5DiX6=%IdF;&F!|otFe@x?L5oBgbWc2T$717i{V;BNMtiJ=N{lv&y&rA z7BZ4{>Fuyfwlz`_$_yEa*y-Q6sQf|KNS*9Wc(JYL+1y4}&o4JY`(|og%FgNVp# z?y_u+G+&DC+*oevKj%iD$r)c+1X8q|l#GWP zvE@#g&XVqonIVI|=Bw(W^w~dxuC`gW2ABF`&f+IWA>GOX+!Ivh8K~x~IGz(>UN{V= zW>(f#gFsyF2^w>6OwMiHFr+(b3UADd4dJcs3i&npwI3NUU@0{INtcKNg1TY+{+_RL z^3<%=4yxFw4EUU3-}=7DNZPzB3H_Q+O`nFCj+pBXqN9&X*5WS-y`jOc-pi-f_{?Nn zoli|5$7GE2ueiAIzui3cIn)G-OvY4izPIcxg#KTSujt?UX#czZ^n`FNmVe6q6ZPM| zYFJh51Q{`Ts~k%DIN#Ku>)xKPV)E3`ssO}CBbEu@tJcTn)g> zzSdY~KEWoXWggym%uG~dk^8D*C(#yHn%|REn2)fPEKjF@&|{akPp3Bgt>%Yt@UU77 z^V$?fj1iFeVdSJsR938R-r#|J1Wg&S3N(@#YU-2(YxaTqr&pp^Rnj202!5Gyzeji? z_3R}x=Or=&Cbr`H$1QBdR8>&ZpJ-jjy!pV9z+;VFs$D9rQatt!gc#?Vj}6}?N21d3 zHs5BQCLMgHfUHV6Dn?({!LtA5s7No#-#mgkf?CC*OpxPFak8UQ=NxlcQ$tkmF_uvF ztp30}(pJcV&=Ebv@NKEc8{?VKI7>O))2=ABsL@GQASl^$ETO`?(mTd}(ByB&X>Mu} zVZX2d-ifJdU4p`tV&PH%G6NE}BKLd(b%t=bgIxhKgja%}6$_#MlXRXb8g&LsxUG(g z@C@mNyw~+K_Jus-RvMaNp#W)W1QC6rajJ43hdZq2HID3*9HS(ABMp!kFI3B;oD1G@ zNI6_9I0!AUfImO=2KnRrk1)~iiQ!y+^8c8?VyL3dhaIZlPmd$e=bp}Ojjr1V(Xh6d z=Swa`Qd7e9^LAp|;-`1nVVsaYdd<_!QXCou%9KpVOhsd3D>6u63kM%aaLOaO!W*YH z9Ku<>PZf;OT~_Uzevd6je5qJZ7T2rg%EBV7(fk*AWpqe^>% zqq;&}fs${jZ^6#vlbh7lh)+`0HR>8{U605ljbf4vib)2lo74}mb+ft!b{?5@QMaqx zQIf|b8S1C%ZrDFVOwt80$zHU!50ObcMJ8!#ty+tId3=&i@ySi<=PEcJsRO2v9%)DQ zsCo<*t`wM{9#>Bw&-DV6NG~vf^a4{zFED}h0r=4op#X6%3FR1QS8b z!2n4|@OsiFjVCq1)}&1uPnv>Bq$!v}+N2#VVU}>%xxQeMrMaa!EL>$UnN$X^w?tcF zv6X8LrjXWP5@`)4lh$COCBc$_tz2<1i4+GDNO3UHQer7#Z7C9Khe)iNA~75fmPag) zAVQmh=&Kz?UtK8f8i=^-Y2;^FX0tSkzPebRvpk19S1wE<<-*paT$n=2g~_B`m_*8j zMkcg68RrA}RSi?we#UG=k!(mKk;Wjokj4c+1?OUXYDklirXtNinuRn6X+F|RNK25G zBdtPOi?ji0GtxGsT}bF@5`pu}I#zAvwYF-c@_}R`00cCrgJ_)!9~+^{J}!=L2}A zw5aNcZEe{A!a=|dl;1%4&1FM@+sbUfU1cMI`^v^t9pSaS4&W%{&zCx?j@u5FxqwH@ z#sN>1X;sI$-CJQbmR3}qvYjrQ1Uy$Z)$6f_lzOVp7K&vv2xk$_0V;)gz_7CUz^Jm9 zfU#vufNjc_SDodxyuQMuvQ^p~YecC}!=5c$t1)Yf(#e|4(L321S2|5o3)9Os0JF+A zYbv*Rr}^yxOemeHMOu?fXKT@gJ<7HPF|TZw7R~M6nE^~KovXzc_AT2-co0}X`N3sJ zfy2s90E@~_14ose3!=j*dS@3_I2G?)YewlpEwRw!4AT;+wT=Oc&ly#Z+~Qqm%`RQ6 zr4>$g#uB!v&vUzXv9)LEQZ2J^nlnkuYfoni^7*AJw4B13&UC`8V1Bl<2XL-4 z54h0T7r5A209@)EO!;A24zKH7VeMbKTI+2cSh`N@Q@Fxe6vWleBJb+Lbi> zela-$}fh^5DBruor2vGk-irbMaSLbwAMM)@$xM^)|y##Yt> z+f*I`CRHBO#_(D-Gl6H2pHg~WbCsl2o&=^>o&jc6!ouw}v#rw|Mr~Y44-dyYPe{#N z>r;*pO)Kf^iQrf=ner`w1)ezIU{3;Ym?s%nZluT`_K#No-VS!{jITBl7a zsqpmFCRyh>BDAR-s}rq@94)jNB_2;c(C6u|&ES@rrG9$=Uv_;%=8Q=vNx$vV$dHS4IgB>~Gu&vU>n9J!@tqjkL_Lt9?5!!wU?QGK4sCikZEeXR?0KMPWiWrtvj%w5vmSWHvk7?KvsGI=+UVH{ z4DsyI*7CYFwbq@Ed~JhukE6e~d31!Q?kCv7b41&0t#b_2wpoujhG@G+$9awuo(kp@ zJZH6C*5i)h+P=}r<5>_>$IIG2>nVp_J6O2eIgM~8u$JY|KMH9<=!ZM{i-+Rc`(ea!&wrF~Jf8bN)1HG}fG{-z`8%OW4 zqUXwocu(3g9g9$YUiomekXdf$2urQs9>5&OtKK%Y-i~D$+oJLk;H!ko%AMFV+&vGAH8@;GXh%z`F89-t$FA%3t*v z(asugiY>l;8L+owJ#c_y6UKSGd?oM{N3zt~206BR(~HiQuW5|j?nBsGzTTTuESGQc zMc9Tqc6zgl)$*<0ES~qZunjGT#b$Htq3`9#y83)^Wcd+bbop^$eEBJ0V)Ik&C(tL58llT&fN4he>Prwa)$;D$_IaNoBU9R51ajri8 z8Qho3=RsdavE~|}#TQR<4btNIOytWhp6VLPXC;>nh`Gksvv`JUq?TDc%QXh`3(gl` ze(@ZaOFPJqTVMa;`L1!=x#E{x8gPkglK&X<4dlPCZ%FZS*Hmwkt&eL45c|P5ym*ys z7T+hXIY9q6UF(_;+~9i2TR=0;q0t%RRm?uz^B)_XJw8$!GrH&aXkh;M_<(;t$-P|7 znbG~nCu;MpE5~;PazAr^^uY0H+~0g#Rpv*s`eBgb#1PyD?Z`c=9_>ryHMt|YoBjo@j2H)-xRy( zI_jHlS6nB2Puasl-z`@7C*z3owM(f6D^)~)#FS%SS?(;~8ha0SkE*SlQTW!|^W1s9P4>R-zWi5k z7u3(}_5$}{!ePL{7~59+Fn5t}r@hEM%D2Zp%I)yg*&Xf*-w}I-+v7WK_qct&Q+`fc zD7q(u#rb&@u@t+{Jq_HIc%yx?dnRz2dp1}cKQ_)57P*1;neK(v%s$(_xLUT)buX<} z?F)HHtI@rp>Xd!4dv$fBpSjuQxYt!}wJ&vV#5qnJ)xN^LrRqpwtb0e*S^H}DZuCCN zU5ov&&V2~D(S1xyv~O{r1P5E}K7;Y>aGwY6t}yzh+fG-6p#9p4i0Wwjp^6s1t$Ytu z$J>up#QBfy>O}j=iUhQCrXpF(w4bj?t?oF&Sdmek=4Y5ALMpPWGe<;J^sLU|=S6kz z5iKh6!P3FitNZwIL|jFGKLf8G&;SP!4y9gfgd;~JR1B;-G9tNRNY(KXsTISkPH{$E zJ!V8kg*}jW5su^MSG5+{liE{_ zdd`Uc6%+g%xO#pAd`j3JCeh+U!HuX^uQQ9oZ5 zQWjWMmV`JQ+Hr{E8sj>y%OQp_9M%}t7~(pN!*B?PI4G!)Y`q{ae813Tm6A?l1?Zo zBYRFkED90nfhi{7ISY{|#H9yjnULpP(8Tn3Mj&-~E<(&X?YRuGC0>^~C1v_NR}aj$ z<#{H-x-l~wn4_K<@Sb^|8}R$M=hlHmbB^aW_6VM(1Ix@Q&uZ6Q=B(%5fi>ow=fQz> zX2gpQJY+6$)?S#F}E#8!np1JHz12*=1GeZW237MCF#iF*DAZP%d-B zTNEl#Vt_WmTLQj-cp2sv=557CGq=5Ep<-sqTNx^4R`-lkBN>X*-YTe=La&TGc8gqIC2vMF8(`*g1>_>fKW`n%HEOm7gL zd&?Wa{>uv-$mV$ap*-I^(3Nf}@t%lz3bx35I#kV;cn6_x5KA0LW6Qk5-7|P}p*ptG zJE|~k*L8NMcMRI8^^SuV0G}IbWKH&wP&4*Zp;orZI}vJQTf9>to;7=CLv}oGArEP1 zAIo~@Lfx$7orgURaCj)HL_0X`-m9dssKzdb4&ziQ2^}HnG2DmHNs^vnUEakm4eR$V zcj?(6jz(}~(!H0Bc-NHQ;O`)XyTBKOhA``fhS*;3x)N7}&Z{YmqI);n?|lgVg8U}q z8e#`zO;;{^Le@h>0dYm>0()9EC{YCTDxQXpwVjpIyNcOCISbNZIal%c&<>=bOYEpz zpm_Pv6?RN6?kZ)+dJst|g??*iVJ7lk^x#Z?aQz75HxO;GqR}R;~t5 z4Sqayhnvz`608#>iF5bPDtb)JY8zIU|qbTBB6bPh(hi5EMEqua&H zouknT@R(!4)8f_6@o+t(Q=fm)bgaVo{{(qdm$lPbz{EmsAocg*_Me`e>hUCQu&j6AJ@X z(W6pXpgMY7stnXc1)&(%e6KIi81zd!1I^J>%0A0F9%zm2XO%ssR7>`ib;2FI;|sLK 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

80fqm$;zg|AKK*@=Va59Weij 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 bg#0U}zdlG9(>%c=Flk$(Cg9Q7f1>^uh^Iqa literal 63671 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/piecewise-constant.pdf b/media/piecewise-constant.pdf deleted file mode 100644 index 1193158957fde4c0744f9fcb15355c44c864b75b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60242 zcmdRWby$_n);F!BpmfMax_7eyQM$WBq`ONxL_$P5L}_UOX(R*`C8R_FMLH!FDFG$E zdxOC_$LGA~Ip6#J@$Ku9J#*hPYu2n;>$hU|C9A5WG%th?PQZFI_*Mu=)78Sn9c1DL zGPQ9uarGvEfWROpQ(J<|mqGlhCRP@1AQn?d#aM02!WnMz^`OsZet?u;SdM}B!J=*gdtEcD0(GT6IX!DPa&yWxH);angLQno{&9}8k&() ze4v;7$%mqaqm{cgNI(#Q9^mEIe<=jfDBM@kUa>b@t?AX>C)~kKxDycMLn42z za?<PD*^pPAhfCdG$#OC%rq?A0jcr>IEOY+ zT@_PX3p00+z_CI8#w~RJ=Pbb7P{*&)7AN?#1sFYGacFP=EC{gslO_xV?C+!r2SI*- zqZa}Ih#yapAjl6)0fY$ofdgJB5afgdelI}~GQT}>R_ zoYClI=8c9P{@>UIsMhfYH9Sn+k5L~@^fWwKfk9SoAOKK~SpkD&K>St^^rKUH4F<^r zRBQnm{v4(BFS>q$Dd+)!E}!Z^z(_tYAQSWp0Dk!d0fD01W@xd zpAb6TgFufd@q+mfz-d7N>kJrD^=T9`SR1IBmyFn<_11PW+{l8L*k4Lb1nWj((Z`qlW?SG-U@xF8q_geJgx zzik)#1E>D#w7o_g`kF{uRnOv19bCc9VUXwFIj5^M^8CJ1I^1#G??~3iPW^&J%C0L3 z&YN&QnO7kXs4v=~3{sNG#ncRJjrm&?_;h8TWjKqJz8L2l5cdNGUmKprbF6503^0Wf zyf5=!W5Oa%s&ZFNGGXD-Z+v)F>k$9NbFb0%R{Lq}%0fQwKbXrgw*DJgBft=ppa2Lk zNvI$obSOxG4=Mn7U)0|bH3|U4|5DPwPT?OV{lg9XwWML1U<`2y(7PHiatH>4YsmJ^ zyAn*l^~8qqZu9is?I9O`8?*sliX{)Vj*9OY)9f84<@Xn0#%9rymiDnsmKJRzl>$** zd(3nVLz0lv{ZEoR9ew{nOOaqfKu{pSl_HTSxFFB~+_L}>+5Qb31tQb`R&YR?Aqa$_ z$bVANA5QbH1;^S|OcDep3N>jdD8#AwJW-Pzg73~CCgzNqxN6VD-Xdg#F-hfPsLdISzTYD6{jIO3xuLyW2}u$FiMXBRjYL?bW!U~`Hh)6K7s^2 zbTuz;JcuXgqkqmf9PWA9K9vg}yquPs5F&+p+2q|m_i|V1$15TU6n%dZ z2-g0c7_-sZD5cg?R){0^m9`{0rCfBi8+ENuC14!74aZ=O-Y-psMA-0~l1}tQ>Zi0d?x)eQJG< zkX#N)yE)tTFt4RXng`6B75y*)$Qdpi?%NPBBB)Rd(ysfub&NbeA19Kj-6ub}GmJWT z(78U$8585IAuH-nl0|d))6x7P&PDGw5s|EC?jdFc1vL`Cv#e z^aMTs7vgMy(tjCe1A)y+B;pBB_@Co!U|&FP4MFk&%HjYz-4g(Eeh3H#)B}LJ29Tn| zK`;S6IPx!}vtwx-O9GD0P6hZ-z-$yBklO%lAi0Mj(NP)D1_Nyb;C28?09`N?{RRpH zLNp*a0|GhpxZ@rmXMlnLx(Cbx@+p8C67cY7ssC8#-vnu=lej-v3JL~8p%(*6Hz)x? zI69dC$bwOV$EBP9I7oxT|7#EU7nbrP+x%-wad=%yA`T(KH9q!$m5)b9^v{zn3W|z3 zzh6Jh-jP{lGcOvs=cXS#7vuL3YGQ*`#+l}eGIYa|u&Wn4+HHa6XoVhzeK!%h^1WB? zW*A!uOfB)!v*E(Wi*f4u46jIsR9!>sZh72lRF+O!?v31YloNtOwJ+Rmu62;xDk$64 z!o%KZXbV+1ceQ^QCH^N<`X5qO6d-e;00o4nfZ4#I0_c=p5XmP9g$e+<6rh4Y0SFF7 z90wx*8>aMMr>uX|lz=@T1<-p!qD|>^4+Z2VP!IyfCje9v(B}?9g82mh+LX`|f}cnN zpajeS5;Z_BKzNG+(o`r2$e4gM2`GpNpwN_#QzqaI3<5$3@&Tni`{Ow%5CSO7A<;bu zAL?Wzus)EC98&;zJ-yDqF{RTvtCW|!jD|b9hzmPO9)DLVjA3e4btC{f z|0TuKA>b*B{}()-j)wksD4q@s{&y&zc8I4ao;sz!dorgX`ILT~#0IBM@HBq>dF4Or z2fs96H9!V~)|>xKSN=k?PcZm5N5`uEQ?r2z7wiY50F^Dka~!KFP;LT>$3Is7asL6> zWAONS zc)!`ymQ+xd6$jV^GJk71;Off8?9Vbi(I=p8^HZj%KQQ~lYyV;v0zv*~+@5ICDOEdd z$iKP$4-OwFeErkmqhS9k)qg&G2t?pNVifT&%6%Fi{)Td&27%xElaSMu))D)08XDdX zrcU;5e^MR5b^X&O|5d>e|GdZlOmTp6?my}GX&m|+J3I|4;z}TXWgv(#vHxjPzku(Q z&pHN?pDHRQrvb7wv3CQ?f)ZlC3V;80`e~dwHT}ehe=o>yX7ZcfZrg+i?Kns0I!@&<+{h~n&J&+e72!z={!4$YgKsNwX z`VrCd!U1UJ1xkPDOIYAa1*pNFgpH2wKnQOE0wVkqbpfU*n>YZB{Y zf`XwX0$fWWfMf}f2>c%9DvN;VB z|EQ5b9Lui@+#Csl_|bQqNI>=ez2coV;-6whtJ7)418@@UE&q<<0ih}{kop6h0G0q0 zoc~eCKYhk8wfi5u&1q5dLICc5Xdj@5e@pv*LXQEE0H81B(H|fS00Vda$4w-VOZ;e_ z(#bzJA?Ufsf8aoQ04RN+`v`#S4+3zg;Lo250Oc7z)XxFGvL@i}_}5qzkQJQ_fC~tK z5a@fJlP(MnB>g|$0QV%PsQefY6-52i8q{&R^Xmr+aC8FnV^uH=_~8Kh1B5BapX1>O zAW!=76baO~Pns|wd-^f z_+Tf8aEih|5k&l+3REzE9xzPsmztc?)>Bk|ALZ%j`5&#@g|%&5X^qrWehp z=2p-4A1Umt6aRg_%i>O&xLf2byLxg<((j6xf+T+)P{#a}~J{#4gk6(~O>Tw_i*f zOFP^+Oi&TkeL(o^`7=D@Ide>~U##ZKcHPc*Bj0lDWQMPP!A}jGnloRSQa);laIi63 zv7Oxuq*m;4xT|z%?6hhxQ)X)BxJHyndI(%~Q>?bQ=ZmsqU}IRH!)Tzn|K^Bum&)j{ zkmjiHYS5Rj)m1gvDb%`xSWUf3L5xo28PRxrqCp9_VEv<;nPGwVjA=e#wttjXX4E{Q zrW$UkR2WVf#zGxw2fA-e<{w?cY%|J{--8si*CMq)W0+;(^E8!|4xC}-I6P7u2^>7{ zQCk_0D92OZ=T|%$c=K#ztm|OX@aTmU@os?ufu6w`JM7}4^83Pf9yDS`&G)9??Kuql z>eLjH@chgXuDxPu5aaued-C(IW%c}>cg&7bj`WN$^rb0lkIMb~-*&#mTUhq2|3tW{=Y!VtD%cM6Iq#a_)MoHxen=RQz7V0Ed)UL-!0F*P^F>Bl}| zf?_Tz9Wqs7EcOC_u@-xem|U?IOOIHgP>e-~L#6=p+Jo@jxDTHLU!GH3{6usGd6T05 z<&u$p`_bFO-baCL0fQd<;hlI{M+Munl6`>@Mg#L@chnu^eocF>j)?0by0n3#cpiawo#_ z6J7Cm<@F_R>(vc6O7zA?=qYQRk{wA|X1086tleQF4J_&G?L zV!cIDebwAqBFqBNd$` zWDrh2*kol3?X1F%X@-MTc(1rXjeKqVw65dJk_qZ9U6HL|nU=4j+*Iv33vrlra-9uz zn^%5#9`mKe9D~B4SNt?}cUHYez_8zeOO{P31nYY(@j-ui?m32a;z_pIUH0*UxZv3L zFdsQxvd43;10=G7JzP^!J6rj(4aS{NT`$Ts7vl%^_mUPKo)OE_CBk^_%qiAcQV%Xo zq^+Q-&m_6DveQr82>Onb)b@my-cTadKI@(=FE5gJ_iWv=+oWybHT>XxNe7*DREXqs z-9&}rho@2VkS7XZJY=I?<&|&Uxj<)&`D8Oj?)Mhzh=ck)Jjzv{)U#^LQc~y?;#sGM zD(C3oJsEhBX2wT5oco5?3%|Z&X6uE`aFW0oPZi1z_z;<^Rz>*wESJYMP62sacIohk zsho`g^l_KEkg`sL(vSG0p7yYe@hCi9->qZ z^t_sV^uwU;BHxA1Ha+)%;)iGVxT2pt*0(5juE&f{bri0z zTy#GJo|c8LTdrGt{Tj4LuRt|-M)Iw6w3hssUtr~#(0<&zdGD|#&5doI=A!P89&nTK zJFk=H6ECD9sPtFUrr8(D=E$_UWPK$WdAB$>VoPiy_wHmhP=&CDHD2{BfqdV_w}>id zP_+@VC$yz+pjN94WTo_#z?fQsz4X)Lzn!yS^5RokYTdbqS&dY@w9bv+wzW#E%~^T4 z3hyk4Nec$nwXuC^B0YbZD)7rQ#sKk6sX483*B1SpX}5DNXPn6@r;<1j`qXIy!wEv3 zS%$EjF)R%*H%*iU3if=V7jB3%@Ib3^TZ)7idE{4}sv^fbo zR)t7k&iF=fvmf+mlg<&tUtv23w@4YUurLZcXIAv-p7>d{?{3Dz)}~Wb zJ~LTSJy!0!@NDm0ERs>J7oqPedf}Bzd!HBYa4ffGaFUS5m2MM5sw)KyrX@^P@@#ui zddpV0Ew2`4Ef)yPT`epErRdtmHg3LlitZp6Rpu;6l#@tkVnsR%pONe9;Up!5rkM6T zwejJ%ny5O*|Iy!$kj@`=sSV*GQ-8}CL0l~Hw!FZfE(fYFtZu#5A+}<9*~W8K0{J52 zb=-N0TspDOZ@3Js;h%ZPqRT_JMC|z&*gj}_5thEF*s_-t!DUFsoUrowDVBH{^qKD2 z?L$UAr~LwV&kS;JyF`sI8CKojt&{G}O?-ZuU-?a7LU3Bcu!`~tk+}H|$o(cYm_*ez zDu(nq_K4dqx8(M`eQT;xFSF+Qx@17s*KK7iy>%$vii&-~Iok8WMsi3!D=Fq1XQ+oC zf64{lK07|DwiQ5rHjT^RuwU|Xv?kR76WgOs>*y!t+lkP043p&K$7-RL`NSExjq8mw z6qi$kXf})oirz#JD3nA-;RYz1-+S*q#3x6AFUQF_#wwt|M(HpAEcxCG1JAh~P)FQihKl$}gqa%xw!6Y$kY{;S}#w+Bc|H>h_t7*B3?X z3y%qnF?4^;#)VhW#pirk!KdJQRYdo|W?Mb53iBDY&<)KyCO2|EQyU$yuZz42b9RwZw?K#c*k5Z!S8yfzhdsmj{az=2-bb{d0yx8e!CdTD&&WU8`VYEAO4E2&JvXhJyjB;*}h>g0Y zAu`0SSR!QrjS9WF=$so!C6iRqprOEbjfw3QqU+5~C%Ol>9;24?^@C_s3h$|`Wz~GT zd(S7%FyDyFZ-(f-*?@b{60=L<+~8e6DQa%8&fDD2Ob2DBMQ%|}zO zu@?{ZG|Rp{Pp$Zk_F~mun{)Hi7QfEp%D0^vt>M&PaxkcZQRy zmbmE$sSc{?8#wW(@@fPnA0A%Yp$nAF)YkNF;$!YHu3J1-}S5mm^w(!=#f(3fBmW~2k z4d0JSEd&)69lFx4u|hxuGPf8FX-#viZOPn(Q)2Ba9!y{hMwm%dZkWyN(Pwpso*VDw zfLb+bvzg(VgiEVmPUUs`DqNbo{b11Ylf{myhwk$)&D5zMX|Gpq+h&sHzw~PRtmA1$ z6H1WDKT~~`KyU%47bDOsh!0d<)|(Z$n3VW!7ak|-VSjdFuuoa*W{JFqBxT(o{Rj8F6#!Vh(p|En^fdC_6=}H4Q=~ zZii#q+mp`h2rXyhSP`_7yDx3@xHi&v`sp8hVxEQG21^yQRN>fJ?`0~`5y-+8M=8`6 z$DD9X^@x)Z$ia&xjvBMKwWaFQKLnRzSKK4E#dmL1$Zu?aVqUH^n#$gPqxhgRKQXT3 zrA(=pKPgW1=h#`st`SkFF+t-6m1s`&X`usSuk`EmG9vcD&7@6M7;FLZjJ4&ivES`$ z1;=lg`8B)~(+m*JEGaT&)MgAn%zn{McQ}q8vN%yEuuy)5firD==WL=(zWSPJyh~?n zy)i|s(3RC?5fyPk2x|~2HZAiZq^fx#E_9Fq@g4cHI~Gi^TWd3zeL9-1}kQG!L>?pYn<4=Dx-9fXE)f_9+|oS2}{U9 zzz&C%;Fd8Vr}1Tkvc9qfxGz&?a(eBhhKudR)^=zPQ9$FJ7zwId)G=o#;3fA%)vp^B zOACvQh+*4JGccfM;Q0K^ zfOqNq*DoP6>Mxv)V^lih;hmty^|=nrx8PYt`I)?^B>bYJnZS0Xuj$k7l3Rm@E=nXz zLPsBOtL?#pQzx8xiY2ZtTL&h@YBiN3&wB+kNckCZM>x*ayssMMmhY7~2@3v*^rV_@%%#&`tkksySWI5x2SGT{w-)79d?R5)DW>y_qIfgAW&G$s| z*7W@T4CaIadFF?Y8Vo~``O-1v2C)-E6IKx)K%7DlKQ+%CJ@FBNRBTGa`vtkel1UdU?#u2fDl<%bQ7x3&+ zcno?SnbCF;<9VW&7eS2gX0>8UoANm!+K$#1DcS_^qOX+c7{jK$o~&J3K_;=sr{o=m zJCu`iotLBqsCBh(5=%er$+NYSYH6wbW%b`vm@!uo*UP506#M?>jMoW$fkgi0)Gn#EiiMlHtI z#W=ib!Douy1I@(i>JPNQkMIzAZ#S*UKEC9>iYxS}#yPa=maDE~qvv|+ za@Ci1cCrT(nO9b0Is_il0c0DP#z{+hqAn?A7M7o8v+D=+V zCF_8}Gi`59da72{(A_?gcW!ZM+*$jotxTrx(+pG>7KPGNB;q@oV4#I|rWN4?B-cCX zuMrQ8Q4HDi7%>A_xJS*t^Ss|4(Qtig7kE~ha`E~1Yhei7`-$VVgZ4U4?Wk^Y^b$Q{ z;GM#K?N>6EI4LTBMWdlln^#$d{rY3BT+Z!>l2MiA)%FO_$PU%|I__dUMWm*%p&0n090Vc!(1tT_6^B{!ScqrR;|c@a+p@L!6HIKS}2~{a0 z##BIuP*L>k3mTNJ3|uF4ul8$ce)An4*Oidb%dPI{Wog2Tq=hn0a~E2}^M!E>WB@^*$ch)o3YX<~<)dJe@`Bk6ezm?xmxnJa%}b`O9~gz2--V6a7?6nH4r9G8&y{HG>hCxql2O4* zUZ|LkjYE?|Gvn}x2mk5_)pZ<&XE)}rbZ!SCH+wY&OMSOC6{tUXk3OxV67=F!qW7=% zW0W+|zxUo0p|d#CduzUNmlEfD{#+FN%i|{^9nq3WXRFNLx<`wrV-?j!KNMxeRo}i; z9Y?}d?eF@ixf83dDEm5Tp#n!^@4}2=r<6>nlzscP1>;`0KGOvv8Dq0JVp|-yyDXmf zms{I8S0(t;bh>>h@;lo_qa3-~k} zI`NT|Y_hY__3gSo!8P6TdB_~y&*0Q3KjhvwBf^)G zGyGM9ySC(fkl(^{WRw#9~JI%UEHksY^A*ZcM|s?A8;wnLOlZqZKp0&W6}hFyG} z`h6a7y{s3}gfEuK?RUBe&Sgus(dAdPFW#0htuoxNY@YEdnvZ&>QS0h}E zK&f{5pYvQVdfGw zA-Q5$(Oqj^sNZt=$fw#e{Nb~H2O`^?2T&5X8fW?H3(B^IK1A;Q(F8qt>E>qqkJULo zU+`67Ng%e@5-j+PXs05KUfA?!o@lM;95qby2$nQh3Zl}uP-NiCuM~L(OCq}4%cs+2 zCXce~;Fg*?xKPTktr9Dye*ImFsj@tE^Q-yf?-66j@6M=NlJ?ibx^Mf>7s|bnv~74E z^Py!;UkJx5udzCKUSqDf&4Wby+()No7*5|p_wue@U+V0UqcJras zEtS;A;V#b?Sum4qFSAQ&&poY9i^Gu7A30YgMl}8Ey;VR-K|x44-skMW{@7d{N?GbV z#IV2(|3iIHtGRT?zTNXGTK^ep<=&*lZi|aOi+8CkW*DB}uJh=N@ey;at&tY9l|N+j z_mzs4wwIfD_}WRsxh!vr!BnIw!f&kgsp&I{Y(@qSdG8fx_^5*kN`we$@7H?Sy0)-N zBk!8Dcl_>E9|g=Pq6BBaH5a4sN`XOiuQSGxS6gjck<7)vCrmE9@}-Z>dM=s_k64{1 zru3ZAlAGHNLSjJ|&CyLn0gbp$RK=rRsjLoK1!Bkzk|NH+^L17Yl9Je~ie6$}Sszg` z-?oe~hKZY6CZ>BoO-0+B93(1D-H*|9f1dRIUl&)|aQ$juLF z*eU(>Wa8p3Sqo7u+qfk!9&O4Tz;^A{=tRB=tobi{aYe8V`{ zm#&zShS!{3zA7Nk@EkV-=czP1|9ul7>6=`H$oj%q9O$-ej>JG!z2=V z`fm^vXw^^?=`Ck$^s;KptwI@J+%aHJ;PsfF4f~JR|wmC|FPy zo5ZJ$KF)dV`TH|bO2L%5qXM5oii%5H@YXPoc$Iq0k|xvW@70dof3nvXd&mW?jJP|I znsGx4vcfxw_2ktf+efpS(eUJ2sEpLGfGyaSb0+E*#lVc`v;G3x)!4%q>6%EQg(aWx zJFS<#t@!#Gj+?Jo`7@NHkC^xnyX}DKJ*8#8@D!)H4!$qL!zA{sHXmoQlt}LBQZeHo zKA7fisiHT?ftu`=m5Q2XC+5`!+6mg{?H04vo`D^39)l}0S`J~h^$!}|a7_*EUb`1BvX5Vi7pmJxvR#tb>i1$4eMs#qrOvMGxUz$%tV!G*eVqkT)RzHOPxLP)|)Hj z!=jkK*gUZ!CSr8Ob!zC=gHB+q2LR@bA@(V6JDSGf|7ljc$q~fzvIkWNt*PIcvyeb_~mt6YfXJ zve+RSwG3;+r%K&e6L(VT6$7Z0>bBer)b_u)?DlG`@#-*J1UB%tMuQWx%09-@5Qyxm$p@g zn`gIPyw^#52gR#&F6?YNeg-@C;^nFC2*r!33gOf=S~Xu(99s}-=ey#dm+FFYO+HSy zBwn<+IAXEI&FEzIz|xmV`U@x5o|MFjSXr`O<|1-`9J>OuuJjkXa{g1Ji+3AY$;>Ii*srUx_N*0D>g42o|h5=)i^ z56kL45d0==FUxPgiL=@|I3?GN=|`RduL0xgXkIvS+91r5^}~ zDm@|Ch+M^W+;b|tGXc8cd^ShXU0}k}3=jC9MM!YE$2HG>ZC?CXN^L)j6#G2RJzqWW;->{D@G$uEzunMo{tS!(a1qR8Uf#HFBEe3R<6d;g*v zJjM%b5EM8b`xV6*U_LSCMRo3c5syH8465wAw|Gop=Echi!ecD&MfyA=C3od)xoHab zUR9?&1(O?2tyPyY1e9M`8TRU3W|=?BA19D@Ch(&cwq|Ltp|Vj@6sUexz>kW${9dGv zZ+$1ov*G)z2?xsOdbh2yT&W@@CPeUS#iK->&9^98VA!kag-r&+_(+dXYs!e6N0>dk zx?}+)@!r7;mQ7k;rXr4J*GL{yF&hduVD`5!`lzmF3-qxj3EX@uDHh{vK1&$i%i6z} zdgJSv?T(3&yIZd|;9}vWo@X*G?uQ+!5^&|xJOyKMSNL?$!RoxOB~wJP+`f;6wPw8K zdbyj%Zf|^66@T>}hOIzy`;8KHjhS%i^h*>hs#uKJ zGP;>$m}|Z^+6q^hlyHiSv$GnbjTj1Cj-M#%f89PEtSmC%R-PqB7^s$gfPc{e6@V=v zfx{w7wm9k7_g2xd>amZra7@#-KbOPe)C?*P6Pfv6jJ7NNqX$jkvylDT7vB(4`SuE0wIpXufZ;xwdWjW zg0LxQR!T65-bokM@-c1w#zq0zwWjUu{z+>@!_&KA_i}OjUKM{Ac@tkq zr1ABvhlRZP3MJVC_Fa7gqnb*yT(woBl=DW-Pv2eg!6j){`PAS1_zI0=?dTF)aq3M&5$#-WYtKtsl2PYNV;yCW`_?V+Y{-{LX(vEuBKinS7BI;k7N@n<^biZq z=m=I}Nu|2wOKbcs2BoK> z4i;VY=;huhk+_}>x=eY-C2omPjD5CIzGPg}+#Ye=c_$XCYWt{Gl{1sWwg<@WrF+VE zR5OaPSiJ*Q*gm)4tEzj|-bL`Woyl@gRGIf`?Pkpy-$i<6srk?-=F;zpgOxb+JVimO zP;DGPqgw{~nnE5sF31)cfsh+yR@S7r83A1^bM=l1nrGR#gsN(pc0A;3iAwQ2wHQMB zS{#IKbEwvD%tiTctPz49JWHYpF1%ptMv5U62Lh9bMmS6^cQE4lJUM!)L$iX%XSM1o zH8I*lRznfnd)Rz!=sH~yYtqY1%4wWzRu_Uh5#l9M+(PejLY|T7^RXF85iPpF)YawooiML@M#`(}pedlUv|p69KP&wN6qn4!zxugwCLEKqw; z3N#L5UCn{dFlkb{Rj4KuIKFe zw_s;4CakSoqnK#14e!(x91pj;Z=i}hCW2>m?pER19rEVcy(Fq8=h4kkMFWr*M$;2a z_OamUKDSo|>$baD7xG3TeJ_@jQCC;jcw4HN&fU84fxV#7@@9X>7j@D7XCraQgA)1G zB2i&sT+_4HQ&A(peR(xQiBT?1W4uP-0WEYE^m_KWdHUyjy9fi(l{Xi@jTlxG{x5=3tL>NS@7XRvN8J^dbDLVnv`kW|1A#Z$}af1PO`jd_Py zv#Ccrpw7l`Itzxw)$6P!Hq`H4M~a)7#gdY6AUw3(F*jR>l$yELGWUM`5(n{#eJ!rzuf#R*BfPJ>)$@}J)T`n3pIWdGE zsz#VDUa=g%Z<%)~aVIBW@7t@ea1IOZdBI?;rB|&aON3#li%Lc6ZzA#R770Ezz0}LM zHA&gVqZ;>kN7AJg>;q4PueNu^+*Nii_jkij>D9}!5=stdR#ov)4?Un~x~4>eh@)r!V9}QJ!XRdWWlZHx$M6C&83W0Hn_&1V-9lJ4Mj&CtHbq}9s-(E8SX?^er z=+q>^!Tsdva~;*aR#CV8#ZEPD@NS|&_|=Z|yY`)rCEfRuue&~f3RhT8By<|)Vo^$g zVGX>jtrdB`KfnLUxXlNTzH@tpS%v??LYhj#2ur_Z@%gPwZsBzT7l9Yum)@V%bNTl9)`+)O1xmEoFW`1+Kgi}@W*mpflsXDB z1GmU?k$x-5&$g$k~4qksh#3lrytFs!_*z?7-&vm8@@knM1U)*{f2*> zjoKznlfHl2BF_c=E(wnP0;mMbT0c2?$J={InM4p-s+nlmN6(IHdUH-@9h=b%@Z9j& zR?EB7Yg;nwO%h2eAtEn6c*Nv{WL++Ia?Yq#86J?kfj*c{Y zzxj)^7ZrozG_!`aLAPRr5-jdsT%0ub@>l2SF=XcWoV1FCCxJ<~D%qZa3dz0{O^l3_ z=U^@-v#_r#o!b~~F>KYy)h&Sw)o|l%@W(3McUU1QR-(yo)9rh;-jg(Kls@Vb!}wWv zi6S?M)GnDsHLz84BETu8Tju^mVLWG`M|M2BtzE9!yZ7tehV6xfp<&;1iGmtqE;3o6s$JCx zTxMU%G>^7Py*J z@p3UfLX*uB^U+OpWP1ogy>^RtZ}BwK$0L10p1f%y?MVz1i1V9fT=?YoMJv?V6zl#& z$xL;1m=nRG=K93FXgD6QDTCbT(!%}9-ijskfkMFz2BTV zWN_*6mR{sh9iI2U9|>h}Jh&_o^3dc(8Pv~%Id=MM-v@D}ibtfUl)l%C~qc0QD&kf1|(TkYCAOLZyj(6VtC&5{-t*QLc=K*$b|iX@Lp zTVJ8X%-HVJ&LU%z7Qi$;&yXwkp+2^Wu}i0uF^G}i$*6+A!H_VSbnZbRtnDg|4Au88 zmJB-WL9*niP#Z!bC8>+sBg|3OZ;yA<7&zkBTurTeBgVRt-hveeGl5_F1uFV> z@LYzy-FdiBOMCkh=5zWMXZL<2n@81q#WWacW)_jtzEG$F9X_`-VqkXhnP~cuiP47} zmow6tYYYlU6`$Al-+X>aa0a`yIl3ouC#(7)-yJ9UU`5$aluK7u*hI|QHE-@FvSC%Q zIlUV9tHHhzpxDtQYH~ZF>RSWVjJBUw|r`n~oWKkI5CN=UKyzRtwJ2eENOahV+o%nx<} zuRmTdxGq3XmPvtGyxG_uxAma|>wAJ(T6TuIqpa1LNZ?mL#iV*JbKeOr-qvB(7FZXF zd>ByXA$AVSZ{lrLGu~qh!%!(NA5}soZAsGPk%$W#^phA~B(vc|v1g*L*dxzMC^X*N zo5wm^h1nK+<4QRZ?4A14)Cd~EY0S9BY?fHXr{+}AA`fvnsMSAgI`K)=(ONCMvy=FK zAbT@E%B&KBjn{LFq@ARLW2wz1p%rr>`TBq})+8@yD=93rU1)8V1N=5%c7wNOFkmVC z%i#w@?9xw+joLHrPb-b`OYn%NQy116#Tw4^FiE1s%GBw%{rqoN!aLX9E6shL-Ua4^q zQy%EhT(N2uL6Y!qdd8R(;t?Qw4NV`f3kBwGnCS14JpVs@y;GAeT(E9gHdfiTZQHi( zs#U9O+qP}nwr$%s-t+A^vHPYw`ZE8(jLdvyj$xue+RkdO{|7kb9%`ebd^|+$`XIKd z_#HgXfwx00SQHP&CH1*f2mdHx-(q`5W`RNX>!g=|YOLQXidQzCJ=HMw(KfGpu*r&N zc6V-L{P!rB4%sd7-lIock|Q-Ya!`5~5$wyRl>wAi(LiR{UcY{mNqbOq)0ZVp)@+f8 zFT3UbsIVcpiHW7#C>0LzUs7rkp%0P{V~!fM6W6?L5Ui~4*0s^2rvUfRuQ_ff&1T<_ z?(*8>bxn$+8sKP2gtt`HFNw_^qO@pb(bXB6h7`L+ETNqT+{DBJ9U?1C9~^(P88AIy zs!nh*l<4POWF7?6e)rkdPfmY3Y5%uU*FMp;T_a`m&{`IT5DN7#b5mc@E25kAusX=A zx)J+pDKUZUp}WVlnNI!G$&&)RcJiM_0%TA>t@ZATP^bac?EZqOpj-lViAPs1D`qq; z$P|QvSQ6fk)XfoUq)n;0Y(L{2WJNx5p++5w=4Yj3MGS}nqo)if%Qyfo#uZ<g}k^s?%!banOpa39>Qzq|}W9DB)m5hm<;YkYUe zgKW?=oi2Z;iSXk<1LK<&Fpo&$9|wQ5-h0a-?u&`n*s?(?&)t?^W9a=P)~kb91G144 z!*7SEH;m`M^IMv2S9#&j=`o&-y4C`(RkWBl&KM?!;(KMW2wHhy2`v6KkCo_uL?ZIVi#6?0WS=Q0==|?%4V-k*&r2TQwF!dTM1)3u5fG{Fi`b@iwCt zPE~=#!pWzg;J!T-h#`}#+N=Dhde{?1T!%`;83tY$PhMX(Eg=gM8pc|wS%97!$k~;c zbu;0P3kIL9kB|t3Q~gi00(bwp|l(8ABQzqZU^f!r{8B2@%YP4`Hg2mA(p2tIbb&SMIKy zh(jc1$`;C3QA$OxpJHr(-Ia561)JA-wZ&gZvcZ96k`(RfGvc_Yg4=O21<&HjX_B=} zyRG!Di3KNV8v5i_g8B z^j@jZa#Y(YSjBd-HTR&b54IkE{f9%+*s;kf2wTBH^UNJfXFCV>gP8Plx4SUV+h+9q zIz3erm2(F>YsO$)6!ETTCSs7A_i>ebEYKk($f=#~W{r+z;{Voq6HG9S7?j~jGoBoJIxU5KRHk=*FSR)$CnP&B14|k4zz}UwxL?o`D zjh&W-H;Dd=pulO#Pp!JonpxQqzZ({a`kZtfp+#=Aa!5Wbyjmv%4s32t=G(gGwDsd& znM;q}QXbow553sX-*N5R=&NU($hM+zJl2fxnSet-hVlLpX9Mr_85hMX`)&F)IIpDI zYBQ%=wJDSv0_UvLgkNoOq`_aICXC@8L6(0pjloN7wZc(2U^SG4G6F2ley_RcX5(a;f_O+c+gQEW%B8FMQEWnea z6r0UdC$nEz`~{;blu6FG3_z}8Ew0~qFGPQys(-DyGZS6opc&Injtq-%3SXMq(RAA~ zk#sfU@0^6;;G+pxS_4nT`%W!$z9maUAhcX6@Sj4$D~fOc@EI%?<21^@hr7wZqs&gg zkAVh6>VGpCeSz56v6@}k2ysw65ow#4H+9B_W%=sCh7$U`I7pv69Z5q35Syqs-%eLX z%hoiK)pr(uhNZRi=Omu0fiv-XoV-JGl&C<&nOk7gbhBB56TUv?2OYh%!jS?C`-kzP zZM?;_{+Dij>CJ3SUUbz&Crdcfv_m#T&-t=RdO7zd%iB=4^twDpn8V;|5ggkS-zOo& z`tN@L9SJtwAE{#ClQDCFK4xw)b1v3EOoGaADyfOIi*gvC84)%W19gIF+kI?H6u-ghp?A_X%Rq=qm!5Ja6TRSQJCFLYhpazkoux;Vk`25}lsI(fpC6`wEn(H%|^1A?W`y zR}WfkLbWNX(Sl&@i>)}pe>uO9F_Lwc)${J-HR;Q}gRD{yMQHq*)#CzG9_>mqy!3RRH#vJ*m z;ZWh?tU4IUbQqGoKNzC-BQG+}bFY=)9rnqIQ% zu;J|nPpRp4@|pm4^rn=qN5?kkq`?&EEr|>D>xoiS%#@n(!mZGg-Ey?}X`7m=++nG9iUQ-pr@S@jaH4YvRz_#MY+@F9 zfl=QE8-5P2bTiIC+l0@W%Z zmR%Jz$e_tX3K`6xL#^)sACBPOkNad!zM+{LA#ex@*Gs?(OS| z;3(R;h?kTg zLYx`ONN+GVNXh(QO*)Ecq3oE2DkISF82>;5;NNWi9e!wlwV zx`>3=9HQwaZn0TU3wGEUC}i;6tx4%%dd4m~IwMUxs+$Po;g=X#x*)BtITMi8IU`ug zy*Kr}uHr$?g{QtbgTg%Un?5<|wLTTtz_FZ(r@+qy8s7Q1i$kzvQxe+xu_$BkGZ&*O z;;h9P;ggR8@7PfY&rFMAFn2d|(>CkN%MOAfP&EAD&7;>4+{m`GXdj;lU(X5*;=_?q zESMlljTb8R$@pXkVT;G~;~HNDs&kVk&qK)vhwdHl4}TV(ex#}kX{RejL)>}@c%r63u4bSarE2X2KDo;2Q_cx7>p1UJje z%FT&irv7~Bn?n3J&V$f%gnE!`Ou+dk;JL?PY`aS$S3+X-10*0G-cVZO8sYY2h}5}2 zdHx`46`8P|ze7rOVrGBnkJEMD2GHhBw=e*vC1sTpX+F$ZRH*DytvfFBwLqazcq8*X5`QQ6b_B{?V`ML?cTn?f*zid+YHVmpbN|dGtylEy_1G>5JKLMRGVDLD z@_3UuM8SU>sxZ9)gQF<8=yaLBfQ1E5>LNwNbzfmy0+95d^;zABXYhVPK5cjRpC{zvrkN2Futtlv>cZz8}M2hWrHp$A6pw5?6Vtpn} z!T5W>gd%NOE(IocYxeJ=g;>oZZFCc%*XvMdxuD_*-Au+jLZD!2Z<}!pv*|THf36ixb4>pvSqks@bD_%V3xyI!|Fr>AvI&YsZ)t5#|(04sVB0|xlYwr zWxjo!XP8_YAE9g;CRK&iHL4xz>csteykb?vg3`0Dkk7gi_-;9>ZtQZkc?x~Y5M@(3 zlxc(=3}V9&KLPLB8miv!y>iunrWN|2X0bloujk9DiBNE5)Dx*oZo6ji{EY2f1`Sxvix^8MHnR>^p{$g|0p4g@B`yJ zFn3i~b@vd7B`oNsa;Sv#+g|5>HDC|J3o!KQ+mzw&AiZx|hqmJ6%kxXMBd?#~+!kZh)X%zgVeW6wSlEp$! zR<}xE@J!%5l<0k&-&QcYBHvD*nm)dnS4Y3e%BS`N= z@MHgVmf=7ojzWGou?4B}+0>1HEiz1f2w7;FcHg7@ zXK|kX5E!iG}D{$+)aeV8yZSaJwc*}E_h=Q4L z9SWpFy=0InMg2q~Rgbq&dr^MXY1-tjbA}dI&Qfr^XtCX_o;2Q4XgDt7FcDvzowHJm zV2lW230(w8j3&f{Bva+;;~^rRdjL$I`2?EH<}-_K(vkOdDTCd+2242d)!Z_OGL9`q zsaSZZY?smG-g#-yBpCyyLb`^gf+>zY3aMWw zl|#~z9ABWmY%e!IEA5XcSzz1VM-s8m0-AARbj^|BK|cy#V|Ygcw#KsMM{X%0UUT1y zBX>00h$xRMBgKY)!1S;SINj+1Pe@=nKRP#sEMD9x?^v0@Ob)&xZ&TkiATl)4hkf71 zIzdBX@eL4s>m!5sFp<)vPum0GsXWE*>itj!l9%Du5}_$FYJA3r_%C>HE8+a;I$uZQ z0V>8&udnobmme;f5RLzgS31?xqz;cY`29e}ViJ#{iC@7*Ke)2z1GEo8@=oYhjP1a9sx z@|gv+hAR#qzQ6R}B)Zoh@<7W)+%t~6Im3o4HB=CC7t9Uzbi?f1EW;kwV8-{k3a5lgxEuDZKr_Vg@vxMmvj}RnbkL`&s0@zIGLGs`K zFdjRaBP5QgvSED9!xF<_8HU|4xf&KW0>WAI{vyS(_MFw81F=l^pouAAoFKa%GT#9)kr4+gel|oBretRUps)5dE)d$|P-R$%18}`y!8c z>KS;f403bBEl*6xW@KXx{H1~x#lz4bmVDMdY{uWMd#xgp3Ida`5Y%)=5rDz_TVnyy z$sCW)>jUo1Ges1S%`UAPLtXw`T%xjEnwy##5^ zJS>Fn2ubmZk&+`JU9o!h%RrV^Mich|aVwk6^p6X3=6yvg+may_51K!BcPJ|>qim|` zI7XNMW~GSYu*yN+d!g8XcOkY+IeXbhGsZ(MaI%KB-4kz{XlpWBh5SZu$HY(I#^K%qt3 zi0^)1AE2eV>2^<&x1hU5!*24L?m_g7RHJqzS0r0u$mu;IxMt!g?(`r`jd|R9 zZ$yM4dC${~9({}>h~$_47?jKcgxbNShgU?B*!}X2olE9zMC#-N_3~@!iLpEq`7j&7 zX!=w8X{0*E3n0r@Kbv-?A&@xVT~lZuU_Ip(>tp=`(LnL{pdYYwZrq^c>#DU^Y<>;52&6QlNp{P-cip8T<7jtZ?L2bL;I!EYw(EMVREEevdkaaSJO z%wv~vGvOyzBjoKJ1FcY}OqZW;f9ucu-g)MP%^Hjl)1jT(B~vRe-<;kJ%eg=Zlt&JdauZjCJt5Tkl=12a)?bjzAC!J*?G~LjWWK;k%fJi=x)&j@CPV`$kxLi z!I0d+W1+J`X&{lme@Dx__6(P;D5mAIjTRgf1^VamD>q}z3p(}V-V-WD8U%F7$F^&l z=_h^Lh1TS6ht{s1?8hmmV0yI8!U8|g-Ma=XmlM~R*Y$`d?x;7g&V;$Sj=mTys!mCZ z(YyMtj#yEC#Dyu75e$YOO7>o8nSJ&$=o^1#ali9CO!D>fcrzXEsGZ&230}Kr+>nbq z&6$~%7rJ-Tv3S1t;k>gy=-l`|!loNg+^ifr#6BIyyX!fhJl77*C7Wab+ug9SA1hev z3igc5rn9_6@mtu^6Qqajmvwrh~n}zIqc4Q9aJ)i-I>nTP94iQjSBT8 zi*@c>doF2n>*Drpq6YVIEDwS(k)P;#7Ym*%Md2eBYSXr&oG{0DtXvU_0YAASdE8u< zo4zNEX`y%T#X_GGQ7w0DZVfx>9qL~X%K4eCIe1oSB#;Z>98Y!qkUIQ254ice;U=Ib zer^a@2J7S_8u^>4^AQRDM+uZjDs-V~35@r|))5btdQ{;``5kU&udge(o-ZwCs$b6$ zzTBYo_(cS*e(X&u#M}40=Nc_JMYiSESYL}cvFLc_6Iryh@q$I)o`#VH8k?wh%vk*5 zgkV$M&+voa)vIsrv|_Fwn{#hKjhK|6;5K*Vt8Z-b$w3ft{Plw}hO~s7GgW*Zqx0&> z+s~8%N$(5zx$wg}_;@i#hk80RCEVzU2uWn^pReCPcgOe}%n!}LrcC)r_7(08u@!?N z>^Q3{^{G?`3SMc3VEv9mh(^5R-cKI0J+u?tDF%Es5cm*Q2yw>e#MKudrhqdq(^<}Bdn>@}&^|&9P%;OCfg`nk7k)@MIVQ3hJ zWNmp9!tPD#>qMUWJZ5h*z1CZ-8;-$ACMh@nUaBj4g>b zv-*b8P0Lj8COKmDz%DP>qd=t5Ek-E24FP+pC>=D(K-K+GT$>ys%^$j@Eih&9rzb z32oK02HMSrGUWiD7G)&h>_;aUk}?ZCzGNz8)jm%I_B{LBP`Hu=*e{ietU7B`8d-0h zQ#c7gj>i^}Wk|?N@#InowUsDP;gG@Q#dCUxefxjOxK3kNldgyzk#HH^^XE3{qa+=i zkFgm_hnKLYM9Ni`hPC|fEwS;mJ;bHuFHJ1IHb^JY2Qpi`>p@F*=sN_ii%f)ej{}`* zDJ&+CY=K}ptXRZ~ULQtQ=Qbac{=9u;Z@|7xJFsRtP0(&@?Y3t%WG`ffS}kDo^rbjf z4m*TDxW?s+`D=XscufvDq~AVKICWsTM zM&?>#iVel+ti*9HoZ-K-;{)68s__^efXc1!-YU7~*m`k=yUq0M&AIwZv|13?>m9JG z`zx+W_u77r+)k|i%fZHZzSTOH{k!uC2qy=&H>lGJQq=T~*RV6FZl$wO>t`-8$ zq)Xzn8i^V__!1{x%UG6Q@CHEu*Gg%A_bsJs!y&q&`!i8Q28Y^~$YVZU3j|@79fwh? zKpO3i)#d%8!9#&ae#p=h+~?;hLY;6$bm zP7-HncQz9bl-%>T1Ei9$#2up>t<4aj^Ap3@BD`n%3 z^h%*xzSDTl2j+N@F;JNJm#EtTK>NgNICL(kt_r{31S~^MLTPqi%a^U z0tZg64Z1ZbxN88b`UZpvYkGWsSto}C&lPeM;#`xX5vOg>@2V&>U7M$e-0vRfh?z$=TI*DW&ZHcOpBZuQdXU%LMk(W|=o-H|%IX%c&n6@KwyFxe7gc^k6CWkavzK^woUoqc@` zT!ZC-rNBk}WrT&bvi)}NTjdZtWu-E~Ca;F{#f`q4a*Lb}WSMf^zAoUnA1o~Ee-t+^ zAD#WL71;;EjFSO&nLVAyKB**zbv)MMU-x_}vFU2}2o)d8MJ~iSR2pv%GKT@QkEpZ* zT=gS=Tii+7jbUb^J09^y&}MK{26EICWNLb^&hL>-Ju@+g9AQ8KKBoHhwPzv{G?)_xA?25mV3XpRej@0Gy! zR#*I7ez4H9IJtAn3?Jv3LH%Za};sTWuXVA1H_-||DL$S zI4nr=ed*>wkSGG(LjJ|Su%G3J4)Lg^h1!;?$2`10(|ma%6rxMOZc9#>P}g+@0TReY z+R)K|r5rAr5%AQoL|AYMi2T2pton(~5yTVj@vQR6xtFz^iu(e+4IgyqN@I*PmK5?T zk6m0+w`o@F*)GzA_daxrC(1fsuw>yUL}Q}RyZ1q!NuC`By(|tCsRH_;f+&zqmXM2h zC=$03m`R(nw6R>5;0}tSEMlXky}CnLhmg15F_R*6d*;s@dH9ucOVoEF#6uGisu%S^ z8zo^!tv{* z3)WL9*DhH2^MeY7Fd&h(NIKEL`B6?q$har;EUI3$=~wJ3V;yy|Q8u>0zr-__|0G@5 zQp4P}t;9UGoYyoG618Wv^Zg^RSx7WEpJ`4T6qdM(?i`3zzV&`=#EF}nd9KrIfkHbG z94I1;Ej_|2vuL0lipkK6meaigYTl8CFqHmpT>D8s5=KKtlZ`J^?iGs^YxH!N9(F(y zHdJuc6b8@@IT;b^Xm;;Ju2{OGMOQJzB0-RM2aKy29+eHQ1X9FQn51X8HAGhRtKe(y zcTRJdNI?t}qpPwv=@zR{VJtG(KHOb7`7eR2EnsUZ7uDW89$I#u&kk701uQgw*L3fW zsO_~G|G~b{ah>46E}=uVuppj%$r22JD#IMS(7=;7(i^xzAW|T6dGG zLC74ph6=+X2?3oF^I4=TYKjBmi2D4Nt*zIHJtf~b@d9rBGt^hXW9GIfzPzJb0OK+ix%Wh)NnlXGoMfc57 zopvVL_+xGaXQeyd&f*v2a&I)P!#XG$6macfIcK$+@Vh5YRJ$p^lAb;{bB!}z$o4u z9|gOZ?v+(ghVwM%AIlseXiUwv{5SoZQUSMKlHlZ}@_M^~d4eo66~*bYZslHXg1|P5 zPOX=eKqTx(%kY3HH*8{vN?p-WoVNW*5Nodf;jp@i$wHfB>Pjcz!%}Ug4pSmqWN^Ci zGU*xDa%kXPTnf9GVJO)i2y`wDA=+gQ+2_*d(%-mSfgkHtURaG|9&VY=ba+&11_OALqdZBOCYE(w6d@}9FV1iW_e+5aR_2)Vr+CEm|u+Q2At_% zjfY1nD=5eh#4!$&Zwm1V^>c4%bRd=wCJBn?PfsB3-d>cH7S&RMc5aX0Dn8nm@hcw11bi$zZHvdJYgYqIj&KUZ zMGj8xUsyB-X$hb2;0%-wQX_j!3lxhEXP@cSEu~II{4Y2Lgmm^JhFFE@NY8C}?7F25tEG+<4;H z^bJwKg~mq1KddNsr z@$~^bQw0$99~A!f^zgAQbkHwT_qS@=PZ`7MyPesGhd=-&&M%J%1(HMK4zQ2~@Yyhr zMW|h^C0z3}0|TM0zVY|l==#lJu?h2I1XmK%qLN~B5&u9u;9{ia^mQH!fIf!)9Q(58 zSAzE72SS9!@J~qt?SCXvmV$J0kns9KT&;!j+oCY~S)hn7io$pTEVR@F6@>-O0Y>Pm z@uum1U3a%>BN1OIscmL2%T{n6|IK3z4>M=bE8MGy9CoZ{Bx z1aSv|`!RkfEcr?LpXP-~e>F(Y;Ne|&1Dy)Of|-j+%!d(L{sOct0O~T6Gqdsw!}yX< zcXU5)0w`WKJavGR4|{y={ytqRR6MfnPcTsSwxBN%tOQ1IU(>_@tf8wj&@VUu%c&74T?juGz;?P1%;*KG_Y3}QA2{iU zaW1fF@?k#;XmI*rQ3vhd+yrTf;cw3E}MM(LAZkaefXF&fB;kho%q@O z`iVwGaCv?*I^NfVVs5x^099w}5Bn{iW(AuXmxg?uJ)Z@fY)5PLGC7#k5;xi%*6jnJ#gv^%Ws;;wDCLZp@|%OAUlr+TG|IwFxNFE- zLooB197$)lRzEOD*neYvQ$$M*HX9Q`Z4q)`}?R+3%$Cfb8kL z*_Z!z;iS=}%UxH4HrTK4f=cz^epL=L@C`tMxB`b8jyl&fC3pOS5*#ekH+_P;Z^sDy zAvQxc2%{kqitQ}Ahjq@bj*L*Vih}f4mC_C%tdB<_ z`Hu^gFAz6P%k7r-tLeW{IR7lKlOMocbB>dyP+o~YKiPpCjMEZJlE*~n1A7ic=`fE{ zr#(6azX5v@m@I0bhne>^W!b{4y`v`~YJjnh=+#yLfWOfBC zNoFW~@;^Vf^yf_D4(0!K%TfLkH00c+M>S;iW5wUc_T_^5qtJDhVVY_#WQ&CTO>Q5M zyJkZM0I}APz!*}(yd&%YSHE{Wo}j>IY89a0X)lb@TcWm?e`jZ0B_VUnJsJn`bJbDl zwc3!cATxu+7T|~ujBhSMjtj6M-rRkiXHKwI)oVwhIHZ(59Q>(2T`>KS-^o?_>FK06 zkAcT(;4+7AvC(X$Fr~UG6Xf>u6t*-pv4g4RVKK0qx_1Uqw^>eO=Qb_jZyrUYe8aQO zWldzvh&z;17HCWjW9eTt;!|)A9LU9>I^kb9VoY?)aI0?~$PZP4CZ(5pH-Ael*O>NU zwdI8U39kRzD8El`-V@Iz!fG-R%PELzjk~G#K!?zQ{PHxHkM9xNxaEt>nCv|&r0aa> znvMBP`TzvwQ+x497*+?bF-rLUYv3C7hZtN0)H(tDUJsY%NE)oI{?QMkIVYF0uwFbV zv7qLkZIW79h=!9ha?+eqzmaFr>5S|5@Hm*toN69fcsaSLd>s`96!7NZ(0b;<=48VU zJvZB|Sgc0Pl%J7BochBJB!Uj|l+yWNVkZEE2uBo@gGC90{(ItrkOQ2O7CVcr17u9y881Fg_ zmQK|@av0jrJAVv*!BXxdJk6c&IJrYCX>t^;PvR?dnEWrm0j0ik&o z0ks*a>}Qj(O}fQ3ASVZuc~qcmW6kjCdicNx!3;H-I|t)cRVdlnYe4Kb)Y$~*rT*zS z=C`m*MdY-fSHK@7bno`;lzUauk5fa)0NawfxfbFfSbXtmU-30C%xDN=b@YD3u1L{#2c z)FhMI6VbgD)7_25j}|%Qf4=KC9efrpYC#6fV%&FD-t?ChUf1o8t4OGXL+uXAPZ4Uq zL$m*TlFfjs_jPHYO@s7)gJd16#eWm>rqFbCrEOihYbSwmF?f{DS!K(-;sE(M@WsH= z`Q+D|g#f<6eyJOtyObpIvo=PbhP{A*FhNI}BQ4}J+_36JtmwX~ zOU~!MfIWLVJjm4m(N+nt#=dg%<(jO}JuEmS5>Lz^v>oIHc(1qKSqX5)_8_l9OLwTq zDdaKnMP)=$E$}=Hx_4V~9Wl^(eynmn+hsmTWrd7a_bn!qJ#3^S?|^g_eqF7CQERV= z+X;hjGz?IiQbfV?PRH3S&^aC%-Eo42xgdfn>nGeTF~-4HUp}wu*_8+6dC4D)To`2- z-$_jWENFF&A}+|K(S~-0T@tAv^{-X!=M`z*o!L*3m*|(eiUgtJG!9>qN3{?+cN(mp#9X3Qd7{Z3`aDVM*h4-y)5|6smC~BOZogju81C4@>)-D8f$gLC(9u z{ITT;e~&*L*6M_-&;bU?qlGhj-_0_vRl=4wZa}yNZrn^5-8j<`_gB5fS;R90l*f#k ztTSU1M=8|HnwL0{-!Mv&8t7~YOe~8%hbc?htjLQYObw3KvTK6$!k#0qPUi3N%ImWJ+ z4QyAbaGB=9D;uXkXt;$}n@)q;L*RyKfc2e|;8+v@qzqSh&WHQa$p0V5dH)&VdMnsV7K3<<

-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 diff --git a/media/piecewise-constant.svg b/media/piecewise-constant.svg deleted file mode 100644 index e0e29c28a..000000000 --- a/media/piecewise-constant.svg +++ /dev/null @@ -1,368 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/plantmodel.pdf b/media/plantmodel.pdf index 9374f6700f221a3892809ce6237fb38ecc40f7ed..ce38960ee84430bc66e65b275291a4e6aaf0c197 100644 GIT binary patch literal 130345 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 z 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�Kqh&i8;Vb%FE_@mb2 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

i;6V}TfU4rD;dZF8Fb%ldZ8Wxj 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

TMgTkhmAm1R&Mi( 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

Pq7rbv)#}Qf9 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 diff --git a/media/plantmodel.svg b/media/plantmodel.svg deleted file mode 100644 index 75e3c7270..000000000 --- a/media/plantmodel.svg +++ /dev/null @@ -1,1655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/statemachine.pdf b/media/statemachine.pdf deleted file mode 100644 index 75323ef3d7737690d79e8b683e236a2d586b7006..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36276 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 - - - - - state1 - - state2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/statemachineplot.pdf b/media/statemachineplot.pdf deleted file mode 100644 index 84a3d88bb9e1d69d217dc4c1d8bd30fcf0544b19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213543 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 diff --git a/media/statemachineplot.svg b/media/statemachineplot.svg deleted file mode 100644 index 707c7ae0e..000000000 --- a/media/statemachineplot.svg +++ /dev/null @@ -1,344 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/media/subtype.pdf b/media/subtype.pdf index 09302139d26668c02db0c2686b8530d13fc3f996..ee7361c8a2611e8aa5c58b132356a914b2d7ae12 100644 GIT binary patch literal 87279 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 E0!|h#VE_OC literal 51247 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 diff --git a/media/subtype.svg b/media/subtype.svg deleted file mode 100644 index 2680c3cd4..000000000 --- a/media/subtype.svg +++ /dev/null @@ -1,509 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mls.bib b/mls.bib deleted file mode 100644 index ad1c0037d..000000000 --- a/mls.bib +++ /dev/null @@ -1,84 +0,0 @@ -@Article{Pantelides1988ConsistentInitialization, - author = {Pantelides, Constantinos C.}, - title = {The Consistent Initialization of Differential-Algebraic Systems}, - year = {1988}, - month = mar, - journal = {{SIAM} Journal on Scientific and Statistical Computing}, - volume = {9}, - number = {2}, - pages = {213–-231}, - url = {http://epubs.siam.org/doi/abs/10.1137/0909014}, -} - -@Article{BenvenisteEtAl2003SynchronousTwelveYearsLater, - author = {Benveniste, Albert and Caspi, Paul and Edwards, Stephen A. and Halbwachs, Nicolas and Le Guernic, Paul and Simone, Robert de}, - title = {The Synchronous Languages Twelve Years Later}, - year = {2003}, - journal = {Proceedings of the {IEEE}}, - volume = {91}, - number = {1}, - url = {https://doi.org/10.1109/JPROC.2002.805826}, -} - -@InProceedings{ColacoPouzet2003ClocksFirstClass, - author = {Colaço, Jean-Louis and Pouzet, Marc}, - title = {Clocks as First Class Abstract Types}, - year = {2003}, - month = oct, - booktitle = {Third International Workshop on Embedded Software, {EMSOFT} 2003}, - address = {Philadelphia, Pennsylvania, {USA}}, - url = {http://www.di.ens.fr/~pouzet/lucid-synchrone/papers/emsoft03.ps.gz}, -} - -@InProceedings{ElmqvistOtterCellier1995InlineIntegration, - author = {Elmqvist, Hilding and Otter, Martin and Cellier, Francois E.}, - title = {Inline Integration: A New Mixed Symbolic/Numeric Approach for Solving Differential-Algebraic Equation Systems}, - year = {1995}, - month = jun, - day = {5--8}, - booktitle = {Proceedings of {ESM}’95, European Simulation Multiconference}, - pages = {xxiii--xxxiv}, - address = {Prague, Czech Republic}, - url = {http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.127.3787\&rep=rep1\&type=pdf}, -} - -@InProceedings{ForgetEtAl2008MultiPeriodic, - author = {Forget, Julien and Boniol, Frédéric and Lesens, David and Pagetti, Claire}, - title = {A Multi-Periodic Synchronous Data-Flow Language}, - year = {2008}, - month = dec, - day = {3--5}, - booktitle = {11\textsuperscript{th} {IEEE} High Assurance Systems Engineering Symposium ({HASE}'08)}, - pages = {251--260}, - address = {Nanjing, China}, - url = {https://doi.org/10.1109/HASE.2008.47}, -} - -@Article{Harel1987Statecharts, - author = {Harel, David}, - organization = {Department of Applied Mathematics, The Weizmann Institute of Science, Rehovot, Israel}, - title = {Statecharts: A Visual Formalism for Complex Systems}, - journal = {Science of Computer Programming}, - year = {1987}, - volume = {8}, - pages = {231--274}, - url = {http://www.inf.ed.ac.uk/teaching/courses/seoc1/2005_2006/resources/statecharts.pdf}, -} - -@InProceedings{ThummelEtAl2005InverseModels, - author = {Thümmel, Michael and Looye, Gertjan and Kurze, Matthias and Otter, Martin and Bals, Johann}, - title = {Nonlinear Inverse Models for Control}, - year = {2005}, - month = mar, - day = {7--8}, - booktitle = {Proceedings of 4\textsuperscript{th} International Modelica Conference, ed. G. Schmitz}, - address = {Hamburg, Germany}, - url = {https://www.modelica.org/events/Conference2005/online_proceedings/Session3/Session3c3.pdf}, -} - -@Manual{Pouzet2006LucidSynchrone30, - author = {Pouzet, Marc}, - title = {Lucid Synchrone, Version 3.0, Tutorial and Reference Manual}, - year = {2006}, - url = {http://www.di.ens.fr/~pouzet/lucid-synchrone/}, -} diff --git a/mlsshared.sty b/mlsshared.sty deleted file mode 100644 index a7a25a81f..000000000 --- a/mlsshared.sty +++ /dev/null @@ -1,214 +0,0 @@ -% Package with preamble content to be shared by the main document and its figures. - -% Formatting for filenames, URIs, etc. -% For now, the content is wrapped in \mbox to avoid hyphenation to inject -% hyphens. A better solution could be to change the directory separator -% characters to also produce an \allowbreak{} following the directory separator. -\newcommand{\filename}[1]{\mbox{\textsf{#1}}} - -% Pick a tt font that meets all of the following requirements: -% - Not too wide (to reduce need for manual breaking of long lines) -% - Has boldface variant that is distinctively heavier than its medium weight variant. -% - Medium weight variant is heavy enough to not make non-black colors blend too much with the -% white background due to anti-aliasing and similar effects. -% Warning: Note that changing to a font with different width -- especially a wider one -- means -% that existing manual line breaks are potentially becoming out of place. -\usepackage{newtxtt} - -\usepackage{listings} -\usepackage{color} -\usepackage[table]{xcolor} - -\definecolor{keywordcolor1} {rgb}{0.00, 0.20, 0.47} -\definecolor{keywordcolor3} {rgb}{0.33, 0.24, 0.03} -\definecolor{commentcolor} {rgb}{0.07, 0.46, 0.00} - -% It would be nice to have comments set in normal variable-width font without any sort of -% column alignment by the listsings.sty package, just like the comments look in the LaTeXML build. -% Adding the following \commentfullflexible to the 'commentstyle' -% makes words look good, but the words are still aligned in mysterious ways. -%\let\commentfullflexible\lst@column@fullflexible - -% See https://github.com/modelica-tools/listings-modelica/blob/master/listings-modelica.cfg -% Note: Changed comment color from green to [rgb]{0,0.4,0} - since the other variant was too distracting -% And added pure,impure,stream as keywords -% Remove cross as red -% Note: have basicstyle=\upshape\small\ttfamily in all languages, -% except the dialect [short]modelica - which is used for inline listings. -% Apart from that change that dialect should be identical to modelica - -% The morekeywords=[3] part is a bit unclear. -% The current logic is that "operators" are marked specially, but not normal functions. -% -% Note that Integer is both a predefined type and a function; we cannot treat them differently. -% Another solution would be to remove this completely. -\lstdefinelanguage{modelica}{% Language for use with the lstlisting environment. - basicstyle=\upshape\ttfamily\smallifpdf, % Font size for displayed code listings. - alsoletter={}, -% otherkeywords={-, =, +, [, ], (, ), \{, \}, :, *, !},% - morekeywords=[1]{% Keywords not used to define code structure - der,connect,assert,terminate,break,return,% - false,true,and,not,or,% - final,each,% - flow,stream,% - input,output,% - discrete,parameter,constant,% - }, - morekeywords=[2]{% Keywords used to define code structure - annotation,block,class,connector,constrainedby,% - encapsulated,enumeration,else,elseif,elsewhen,end,% - expandable,extends,external,for,% - function,if,in,inner,initial,import,loop,model,operator,outer,% - package,partial,record,redeclare,replaceable,% - then,type,when,while,within,algorithm,equation,% - protected,public,pure,impure,% - },% - % Note: initial is in both variants - depending on context, use first variant - morekeywords=[3]{% Selected recognized names that are not actual keywords, including: - % 3.7.2 #derivative-and-special-purpose-operators-with-function-syntax - delay,cardinality,homotopy,semiLinear,inStream,actualStream,spatialDistribution,getInstanceName,% - terminal,noEvent,smooth,sample,pre,edge,change,reinit,% - % 3.7.3 #event-related-operators-with-function-syntax (except initial) - previous,hold,subSample,superSample,shiftSample,backSample,noClock,firstTick,interval,% - % 4.8 #predefined-types-and-classes - Real,Integer,Boolean,String,% - % Highlights from #built-in-array-functions - promote,ndims,size,% - % Assorted things from #state-machines -- what about all the other operators in this chapter? - transition,initialState,% - },% - sensitive=true, % just in case - comment=[l]{//}, % comment lines - morecomment=[s]{/*}{*/}, % comment blocs - morestring=[b]{'}, - morestring=[b]{"}, -}[keywords,comments,strings] - -\lstdefinelanguage[short]{modelica}[]{modelica}{% Language for use with the \lstinline command. - basicstyle=\upshape\ttfamily, % Font size for inline code snippets. -} - -% Special dialect of Modelica to use when there are URLs appearing outside string literals, to avoid the part -% starting with '//' being treated as comment. -\lstdefinelanguage[nocomment]{modelica}[short]{modelica}{% - commentstyle=\upshape\ttfamily, % Camouflage comments as workaround for not being able to remove rest-of-line comment recognition. -} - -% Note: within only a keyword in grammar -\lstdefinelanguage{grammar}{% - basicstyle=\upshape\ttfamily\smallifpdf, % size of fonts used for the code - identifierstyle=\itshape, - alsodigit={-}, - breaklines=true, - breakatwhitespace=true, - morekeywords=[1]{% - annotation,assert,block,break,class,connect,connector,constant,constrainedby,discrete,% - each,encapsulated,else,elseif,elsewhen,end,expandable,extends,external,final,flow,for,% - function,if,in,inner,initial,input,import,loop,model,operator,outer,% - output,package,parameter,partial,record,redeclare,replaceable,return,% - stream,terminate,then,type,when,while,algorithm,equation,% - protected,public,and,false,not,or,true,pure,impure,within,% - }, - % Instead of using color to highlight BNF syntactical constructs as below, the production rule names - % are set in italics, so that the syntactical constructs stand out by having upright shape. -% alsoletter={|,\{,\},[,],(,)}, -% morekeywords=[2]{|,\{,\},[,],(,)}, - morekeywords=[3]{% - letters,% - }, - morestring=[b]{"}, - stringstyle=\color{keywordcolor1}, % For the grammar, fixed strings and keywords are the same kind of token. -}[keywords,comments,strings] - -% Duplicate this definition here to avoid issue -\lstdefinelanguage{FORTRAN77}{% Define custom language to avoid collision with predefined [77]Fortran. - basicstyle=\upshape\ttfamily\smallifpdf, % size of fonts used for the code - morekeywords=[1]{% - ASSIGN,BACKSPACE,CALL,CHARACTER,% - CLOSE,COMMON,COMPLEX,CONTINUE,DATA,DIMENSION,DO,DOUBLE,% - ELSE,ELSEIF,END,ENDIF,ENDDO,ENTRY,EQUIVALENCE,EXTERNAL,% - FILE,FORMAT,FUNCTION,GO,TO,GOTO,IF,IMPLICIT,% - INQUIRE,INTEGER,INTRINSIC,LOGICAL,% - OPEN,PARAMETER,PAUSE,PRECISION,PRINT,PROGRAM,READ,REAL,% - RETURN,REWIND,STOP,SUBROUTINE,THEN,% - WRITE,SAVE}, - morekeywords=[2]{% - ACCESS,BLANK,BLOCK,DIRECT,EOF,ERR,EXIST,% - FMT,FORM,FORMATTED,IOSTAT,NAMED,NEXTREC,NUMBER,OPENED,% - REC,RECL,SEQUENTIAL,STATUS,TYPE,UNFORMATTED,UNIT}, - morekeywords=[3]{% - INT,DBLE,CMPLX,ICHAR,CHAR,AINT,ANINT,% left out real - NINT,ABS,MOD,SIGN,DIM,DPROD,MAX,MIN,AIMAG,CONJG,SQRT,EXP,LOG,% - LOG10,SIN,COS,TAN,ASIN,ACOS,ATAN,ATAN2,SINH,COSH,TANH,LGE,LLE,LLT,% - LEN,INDEX}, - morekeywords=[4]{AND,EQ,EQV,FALSE,GE,GT,OR,LE,LT,NE,NEQV,NOT,TRUE},% - sensitive=true, - morecomment=[f]*, - morecomment=[f]C, - morecomment=[f]c, - morestring=[d]", % not Fortran-77 standard, but allowed in Fortran-95 %% - morestring=[d]' -}[keywords,comments,strings] - -\lstdefinelanguage[MLS]{C}{% Define new dialect to avoid collision with predefined dialects of C. - basicstyle=\upshape\ttfamily\smallifpdf, % size of fonts used for the code - morekeywords=[1]{% - auto,break,case,char,const,continue,default,do,double,% - else,enum,extern,float,for,goto,if,int,long,register,return,% - short,signed,sizeof,static,struct,switch,typedef,union,unsigned,% - void,volatile,while}, - morekeywords=[3]{% - size_t}, - sensitive=true, - morecomment=[s]{/*}{*/}, - morecomment=[l]//, % nonstandard - morestring=[b]", - morestring=[b]', - moredelim=*[directive]\#, - moredirectives={% - define,elif,else,endif,error,if,ifdef,ifndef,line,% - include,pragma,undef,warning} -}[keywords,comments,strings,directives] - -\lstset{% - backgroundcolor=\color{white}, % choose the background color - mathescape=true, - breaklines=true, % automatic line breaking only at white-space - keepspaces, % don't remove space such as those after closing parenthesis - captionpos=b, % sets the caption-position to bottom - commentstyle=\color{commentcolor}\sffamily, % comment style - keywordstyle=\color{red}, % Unused keyword style in bright red to make it easy to detect and fix. - keywordstyle=[1]\color{keywordcolor1}, - keywordstyle=[2]\color{keywordcolor1}\bfseries, - keywordstyle=[3]\color{keywordcolor3}, - stringstyle=\color{black}, % string literal style - language=[short]modelica, % Language that will be used by default, in particluar by plain \lstinline. - showstringspaces=false, - frame=lrtb, - belowskip=0pt, - defaultdialect=[MLS]C, -} - -% Misc math -\newcommand{\ud}{\mathrm{d}} -\newcommand{\udfrac}[3][\@nil]{% - \def\tmp{#1}% - \ifx\tmp\@nnil - \frac{\ud#2}{\ud#3}% - \else - \frac{\ud^{#1}#2}{\ud#3^{#1}}% - \fi% -} -\newcommand{\pdfrac}[3][\@nil]{% - \def\tmp{#1}% - \ifx\tmp\@nnil - \frac{\partial#2}{\partial#3}% - \else - \frac{\partial^{#1}#2}{\partial#3^{#1}}% - \fi% -} -\newcommand{\abs}[1]{\left\lvert #1{} \right\rvert} - -% Text mode additions -\newcommand{\textgreatereq}{$\geq$} -\newcommand{\textlesseq}{$\leq$} diff --git a/preamble.tex b/preamble.tex index 97bcf2962..f853c493c 100644 --- a/preamble.tex +++ b/preamble.tex @@ -1,10 +1,7 @@ -% This suppresses warnings about most overfull hboxes. +% This suppresses warnings about most overfull hboxes. % Clearly it would be better to fix them, but if we anyway want to % change the layout that can wait \hfuzz=50pt - -\usepackage[english]{babel} - \usepackage{fancyhdr} % The general view was that parskip without indent was most readable, so use it @@ -17,6 +14,7 @@ % For non-floating figures: \usepackage{float} + % Prefer pdf for pdf % https://tex.stackexchange.com/questions/1072/which-graphics-formats-can-be-included-in-documents-processed-by-latex-or-pdflat \usepackage{ifpdf} @@ -40,26 +38,7 @@ \usepackage{graphicx} \graphicspath{{media/}{../media/}} % so that chapter files can also find the images -% Don't use subfig.sty due to this LaTeXML issue (fixed on master 2020-06-27): -% - https://github.com/brucemiller/LaTeXML/issues/1292 (marked as fixed as of commit 9f5c893b) -% Leaving commented-out code as a hint to anyone who considers using subfig. -%\usepackage{subfig} - -\RequirePackage[margin=1em, labelfont=bf, - singlelinecheck=true, font=sl, - compatibility=false% Unsupported feature that suppresses the incompatibility checks. - ]{caption} -\captionsetup[figure]{position=bottom} -\captionsetup[table]{position=top} -\ifpdf -\DeclareCaptionOption{parskip}[]{}% Unclear workaround for conflict between captions, subfig, and parskip. -\else -% The \DeclareCaptionOption leaves a ']' behind in the LaTeXML build, see: -% - https://github.com/brucemiller/LaTeXML/issues/1352 -% Since we are currently not using subfig, we work around this issue by simply removing the problematic -% \DeclareCaptionOption call. -\fi - +\usepackage{verbatim} % The fixltx2e that was used for textsubscript is no longer needed for pdf, but is needed by latexml \ifpdf \else @@ -79,101 +58,23 @@ \fi \setcounter{totalnumber}{1000} \raggedbottom - -% Load index before hyperref. -\ifpdf -\usepackage{index} % Not supported by LaTeXML. -\else -\usepackage{makeidx} % Poor man's alternative to index.sty. -\fi -\makeindex - -% For solving issue with see-also entries in index, see -% - https://tex.stackexchange.com/questions/231840/what-is-the-proper-use-of-several-seealso-in-the-same-index-entry-with-makeinde -\def\igobble#1 {} - -% Providing command that other authors seem to take for granted. -\newcommand*\seealso[2]{\emph{\alsoname} #1} - -\ifpdf -\usepackage[pdfusetitle]{hyperref} -\else -\usepackage[pdfusetitle,backref=page]{hyperref} % Need backref, since we can't use biblatex. -\fi -\hypersetup{pdfkeywords={Modelica, modeling, object-oriented, multi-domain}} +\usepackage{hyperref} % The bookmarks are used as table-of-contents in Acrobat % The default (magenta for urls and red for internal links) isn't nice -\hypersetup{bookmarksnumbered=true, hidelinks, urlcolor=blue, linkcolor=blue} - -% Commands for styling \index page references. -\newcommand{\hyperpageit}[1]{\textit{\hyperpage{#1}}}% Not the main entry for this index term. -\newcommand{\hyperpagebf}[1]{\textbf{\hyperpage{#1}}}% (Over?) emphasized entry for this index term. Use with caution! - -% Rudimentary fallback solution when \lstinline can't be used. For example, in the argument of \index. -\newcommand{\robustinline}[1]{\texttt{#1}} - -\ifpdf -\usepackage[ - style=authoryear, - backref=true, - maxnames=6 -]{biblatex} -\setlength\bibitemsep{0.5\baselineskip} -\setlength\bibhang{0pt} -\else -% Use BibTeX due to LaTeXML problems with biblatex. -\usepackage[round,authoryear]{natbib} -\bibliographystyle{plainnat} -% Define macro aliases with the names used by bibliatex: -\let\textcite\citet -\let\parencite\citep -\fi - +\hypersetup{bookmarksnumbered=true, colorlinks=true, urlcolor=blue, linkcolor=blue} +% Using longtable to have tables split across pages +% Most starting with \hline \endhead to avoid underfull vbox and not have first part duplicated on new pages +% +% But in some cases there are actual headings that are copied to next page. +% Note that this can often lead to overfull vbox +% See https://tex.stackexchange.com/questions/71096/underfull-vbox-in-each-longtable-can-it-be-fixed-or-must-it-be-ignored +\usepackage{longtable} \usepackage{multirow} % for multirow entries in tables - -% When producing PDF, the ttfamily looks better in size \small, but with LaTeXML this becomes too small, -% and the size is applied deep down on the HTML elements, making it hard to adjust using CSS. -% Thus, the problem has to be addressed already when a listings language's 'basicstyle' is defined. -% This needs to go before mlsshared.sty is loaded. -\ifpdf -\let\smallifpdf\small -\else -\let\smallifpdf\normalsize -\fi - -\ifpdf -% Don't load cleveref yet. -\else -% The LaTeXML 'listings' support in cleveref is broken (fixed on master 2020-12-29), so we need to load cleveref before -% listings (which is loaded inside mlsshared.sty), so that the broken support doesn't get loaded, see -% - https://github.com/brucemiller/LaTeXML/issues/1400 (marked as fixed as of commit 4c3d0018ec) -\usepackage[nameinlink,noabbrev]{cleveref} -\fi - -\usepackage{mlsshared} - -\ifpdf -% This is the preferred load order for listings and cleveref, so that cleveref is aware of listings, see above. -\usepackage[nameinlink,noabbrev]{cleveref} -\fi - -\def\autoref#1{\errmessage{You are not supposed to use \autoref; use \cref or \Cref instead.}} - -% Settings in addition to those in mlsshared.sty. -\lstset{% - xleftmargin=\fboxsep, - xrightmargin=-\fboxsep, -} - -% Convenience for adding a term to the index, formatted with \robustinline. -\newcommand{\indexinline}[1]{\index{#1@\robustinline{#1}}} - -% Similar to \indexinline, but specifically for adding annotation to the index. -% This makes it easy to change the presentation of annotations in the index. -\newcommand{\annotationindex}[1]{\index{#1@\robustinline{#1}}} -% Like \annotationindex, but also outputting the formatted name of the annotation. -\newcommand{\fmtannotationindex}[1]{\lstinline{#1}\annotationindex{#1}} - +\usepackage{listings} +\usepackage{color} +\usepackage[table]{xcolor} +%\def\doublelabel#1{\label{#1}\hypertarget{#1}{}} +\def\doublelabel#1{\label{#1}} \def\S0#1#2{\hypertarget{#2}\chapter{#1}\label{#2}} \def\S1#1#2{\hypertarget{#2}\section{#1}\label{#2}} \def\S2#1#2{\hypertarget{#2}\subsection{#1}\label{#2}} @@ -183,7 +84,6 @@ % Simple numbering of lists, should preferably use \usepackage{enumitem} % https://stackoverflow.com/questions/2007627/latex-how-can-i-create-nested-lists-which-look-this-1-1-1-1-1-1-1-2-1-2 -%\usepackage{enumitem} % Package not available for continuous integration builds. \renewcommand{\labelenumi}{\arabic{enumi}.} \renewcommand{\labelenumii}{\labelenumi\arabic{enumii}.} \renewcommand{\labelenumiii}{\labelenumii\arabic{enumiii}.} @@ -205,13 +105,13 @@ } % Example environment, as a special case of non-normative content. -\newenvironment{example*}[1][\unskip]{% -\begin{nonnormative*}Example #1: +\newenvironment{example*}[0]{% +\begin{nonnormative*}Example: }{% \end{nonnormative*} } -\newenvironment{example}[1][\unskip]{% -\begin{nonnormative}Example #1: +\newenvironment{example}[0]{% +\begin{nonnormative}Example: }{% \end{nonnormative} } @@ -221,161 +121,181 @@ % to an index/glossary. \newcommand{\firstuse}[1]{\emph{#1}} -% Like \firstuse, but when speaking of a term that hasn't been introduced. -\newcommand{\willintroduce}[1]{\emph{#1}} +% Formatting for filenames, URIs, etc. +% For now, the content is wrapped in \mbox to avoid hyphenation to inject +% hyphens. A better solution could be to change the directory separator +% characters to also produce an \allowbreak{} following the directory separator. +\newcommand{\filename}[1]{\mbox{\textsf{#1}}} % Formatting of table headings. \newcommand{\tablehead}[1]{\textit{#1}} -% Environment for definitions. -\usepackage{amsthm} -\newtheoremstyle{mlsdefinition} - {\topsep} % ABOVESPACE - {\topsep} % BELOWSPACE - {} % BODYFONT - {} % INDENT (empty value is the same as 0pt) - {\bfseries} % HEADFONT - {.} % HEADPUNCT - {.75em} % HEADSPACE - {#1~#2. \firstuse{#3}} % CUSTOM-HEAD-SPEC -\theoremstyle{mlsdefinition} -% In order to show where the definition ends, we put a \qed at the end. This can't be done using \newtheoremstyle, -% so instead we make the 'definition' environment a wrapper around the amsthm-base environment. -\makeatletter -\newtheorem{definition@inner}{Definition}[chapter] -\crefname{definition@inner}{definition}{definitions} -\Crefname{definition@inner}{Definition}{Definitions} -\newenvironment{definition}{\begin{definition@inner}}{\qed\end{definition@inner}} -\makeatother +\newcommand{\autonameref}[1]{\autoref{#1}~\emph{\nameref*{#1}}} \setcounter{secnumdepth}{5} % Note: Toc changed for appendex \setcounter{tocdepth}{1} - -% Warning: The way of adding \label inside the theoremstyle below is currently working at LaTeXML version 0.8.4, -% but was broken for a while on their master branch, see -% - https://github.com/brucemiller/LaTeXML/issues/1351 -% TODO: Remove this comment once it has been verified that this is working once we have upgraded from 0.8.4. -\newtheoremstyle{modelicadefinition} - {\topsep} % ABOVESPACE - {\topsep} % BELOWSPACE - {} % BODYFONT - {} % INDENT (empty value is the same as 0pt) - {\bfseries} % HEADFONT - {\\} % HEADPUNCT - {.75em} % HEADSPACE - {#1~#2 \texttt{#3}\label{modelica:#3}\index{#3@\robustinline{#3}}} % CUSTOM-HEAD-SPEC {#1~#2. \texttt{#3}} -\theoremstyle{modelicadefinition} -\newtheorem{operatordefinition}{Operator}[chapter] -\crefname{operatordefinition}{operator}{operators} -\Crefname{operatordefinition}{Operator}{Operators} -\newtheorem{functiondefinition}{Function}[chapter] -\crefname{functiondefinition}{function}{functions} -\Crefname{functiondefinition}{Function}{Functions} -\newtheorem{annotationdefinition}{Annotation}[chapter] -\crefname{annotationdefinition}{annotation}{annotations} -\Crefname{annotationdefinition}{Annotation}{Annotations} - -\newtheoremstyle{modelicadefinition*} - {\topsep} % ABOVESPACE - {\topsep} % BELOWSPACE - {} % BODYFONT - {} % INDENT (empty value is the same as 0pt) - {\bfseries} % HEADFONT - {\\} % HEADPUNCT - {.75em} % HEADSPACE - {#1~#2 \texttt{#3}} % CUSTOM-HEAD-SPEC {#1~#2. \texttt{#3}} -\theoremstyle{modelicadefinition*} -\newtheorem{operatordefinition*}[operatordefinition]{Operator} % Note: Not using \theoremstyle*, only difference is not adding \label. -\crefname{operatordefinition*}{operator}{operators} -\Crefname{operatordefinition*}{Operator}{Operators} -\newtheorem{functiondefinition*}[functiondefinition]{Function} -\crefname{functiondefinition*}{function}{functions} -\Crefname{functiondefinition*}{Function}{Functions} -\newtheorem{annotationdefinition*}{Annotation}[chapter] -\crefname{annotationdefinition*}{annotation}{annotations} -\Crefname{annotationdefinition*}{Annotation}{Annotations} - -\lstdefinelanguage[synopsis]{modelica}[]{modelica}{% Language for use inside the 'synopsis' environment. - basicstyle=\upshape\ttfamily, % Same size as \lstinline - frame=none, - aboveskip=0pt, - xleftmargin=2em +\definecolor{keywordcolor1}{rgb}{0,0,.4} +\definecolor{keywordcolor2}{rgb}{.90,0,0} + +% See https://github.com/modelica-tools/listings-modelica/blob/master/listings-modelica.cfg +% Note: Changed comment color from green to [rgb]{0,0.4,0} - since the other variant was too distracting +% And added pure,impure,stream as keywords +% Remove cross as red +% Note: have basicstyle=\upshape\small\ttfamily in all languages, +% except the dialect [short]modelica - which is used for inline listings. +% Apart from that change that dialect should be identical to modelica + +% The red keyword part is a bit unclear. +% The current logic is that "operators" are marked specially, but not normal functions. +% +% Note that Integer is both a predefined type and a function; we cannot treat them differently. +% Another solution would be to remove this completely. +\lstdefinelanguage{modelica}{% Language for use with the lstlisting environment. + basicstyle=\upshape\small\ttfamily, % Font size for displayed code listings. + alsoletter={...},% + %otherkeywords={-, =, +, [, ], (, ), \{, \}, :, *, !},% + morekeywords=[1]{},% blue Keywords + morekeywords=[2]{% blue + bold keywords + annotation,assert,block,break,class,connector,constant,constrainedby,discrete,% + each,encapsulated,else,elseif,elsewhen,end,exit,expandable,extends,external,final,flow,for,% + function,if,in,inner,initial,input,import,loop,model,nondiscrete,operator,outer,% + output,package,parameter,partial,record,redeclare,replaceable,return,% + size,stream,terminate,then,type,when,while,algorithm,equation,% + protected,public,and,false,not,or,true,pure,impure,transition,initialState},% + % Note: initial is in both variants - depending on context, use first variant + morekeywords=[3]{% red keywords - only special functions and classes: 3.7.2 #derivative-and-special-purpose-operators-with-function-syntax + % 3.7.3 #event-related-operators-with-function-syntax (except initial) and 4.8 #predefined-types-and-classes + connect,der,delay,cardinality,homotopy,semiLinear,inStream,actualStream,spatialDistribution,getInstanceName% + terminal,noEvent,smooth,sample,pre,edge,change,reinit,% + Real,Integer,Boolean,String},% + comment=[l]{//}, % comment lines + morecomment=[s]{/*}{*/}, % comment blocs + morestring=[b]{'}, % + morestring=[b]{"}, +}[keywords,comments,strings] + +\lstdefinelanguage[short]{modelica}[]{modelica}{% Language for use with the \lstinline command. + basicstyle=\upshape\ttfamily, % Font size for inline code snippets. } -\lstdefinelanguage[synopsis]{grammar}[]{grammar}{% Language for use inside the 'synopsis[grammar]' environment. - basicstyle=\upshape\ttfamily, % Same size as \lstinline - frame=none, - aboveskip=0pt, - xleftmargin=2em +% Note: within only a keyword in grammar +\lstdefinelanguage{grammar}{% + basicstyle=\upshape\small\ttfamily, % size of fonts used for the code + alsoletter={...}, + alsodigit={-}, + breaklines=true, + breakatwhitespace=true, + morekeywords=[2]{% + letters,annotation,assert,block,break,class,connector,constant,constrainedby,discrete,% + each,encapsulated,else,elseif,elsewhen,end,exit,expandable,extends,external,final,flow,for,% + function,if,in,inner,initial,input,import,loop,model,nondiscrete,operator,outer,% + output,package,parameter,partial,record,redeclare,replaceable,return,% + size,stream,terminate,then,type,when,while,algorithm,equation,% + protected,public,and,false,not,or,true,pure,impure,stream,transition,initialState,% + within}, + morekeywords=[1]{|} +}[keywords,comments,strings] + +\lstset{ % + backgroundcolor=\color{white}, % choose the background color + breaklines=true, % automatic line breaking only at whitespace + captionpos=b, % sets the caption-position to bottom + commentstyle=\color[rgb]{0,0.4,0}\sffamily, % comment style + keywordstyle=\color{blue}\ttfamily\bfseries, % keyword style + keywordstyle=[1]\color{keywordcolor1}, + keywordstyle=[2]\color{keywordcolor1}\bfseries, + keywordstyle=[3]\color{keywordcolor2}, + stringstyle=\color{black}, % string literal style + language=[short]modelica, % Language that will be used by default, in particluar by plain \lstinline. + showstringspaces=false, + frame=lrtb, % + xleftmargin=\fboxsep, % + xrightmargin=-\fboxsep, % } -\lstdefinelanguage[synopsis]{C}[]{C}{% Language for use inside the 'synopsis[C]' environment. - basicstyle=\upshape\ttfamily, % Same size as \lstinline - frame=none, - aboveskip=0pt, - xleftmargin=2em +% Duplicate this definition here to avoid issue - and name it "fortran77" to avoid problem in LatexML +\lstdefinelanguage{fortran77}{% + basicstyle=\upshape\small\ttfamily, % size of fonts used for the code + morekeywords={% + ASSIGN,BACKSPACE,CALL,CHARACTER,% + CLOSE,COMMON,COMPLEX,CONTINUE,DATA,DIMENSION,DO,DOUBLE,% + ELSE,ELSEIF,END,ENDIF,ENDDO,ENTRY,EQUIVALENCE,EXTERNAL,% + FILE,FORMAT,FUNCTION,GO,TO,GOTO,IF,IMPLICIT,% + INQUIRE,INTEGER,INTRINSIC,LOGICAL,% + OPEN,PARAMETER,PAUSE,PRECISION,PRINT,PROGRAM,READ,REAL,% + RETURN,REWIND,STOP,SUBROUTINE,THEN,% + WRITE,SAVE},% + morekeywords=[2]{% + ACCESS,BLANK,BLOCK,DIRECT,EOF,ERR,EXIST,% + FMT,FORM,FORMATTED,IOSTAT,NAMED,NEXTREC,NUMBER,OPENED,% + REC,RECL,SEQUENTIAL,STATUS,TYPE,UNFORMATTED,UNIT},% + morekeywords=[3]{% + INT,DBLE,CMPLX,ICHAR,CHAR,AINT,ANINT,% left out real + NINT,ABS,MOD,SIGN,DIM,DPROD,MAX,MIN,AIMAG,CONJG,SQRT,EXP,LOG,% + LOG10,SIN,COS,TAN,ASIN,ACOS,ATAN,ATAN2,SINH,COSH,TANH,LGE,LLE,LLT,% + LEN,INDEX},% + morekeywords=[4]{AND,EQ,EQV,FALSE,GE,GT,OR,LE,LT,NE,NEQV,NOT,TRUE},% + sensitive=f,%% not Fortran-77 standard, but allowed in Fortran-95 %% + morecomment=[f]*,% + morecomment=[f]C,% + morecomment=[f]c,% + morestring=[d]",%% not Fortran-77 standard, but allowed in Fortran-95 %% + morestring=[d]'% +}[keywords,comments,strings] + +\lstdefinelanguage{C}{% + basicstyle=\upshape\small\ttfamily, % size of fonts used for the code + morekeywords={% + auto,break,case,char,const,continue,default,do,double,% + else,enum,extern,float,for,goto,if,int,long,register,return,% + short,signed,sizeof,static,struct,switch,typedef,union,unsigned,% + void,volatile,while},% + sensitive,% + morecomment=[s]{/*}{*/},% + morecomment=[l]//,% nonstandard + morestring=[b]",% + morestring=[b]',% + moredelim=*[directive]\#,% + moredirectives={% + define,elif,else,endif,error,if,ifdef,ifndef,line,% + include,pragma,undef,warning}% +}[keywords,comments,strings,directives] + +% Note: \lstinline!...! used for inline Modelica using [short]modelica + +% Misc math +\makeatletter +\newcommand{\pdfrac}[3][\@nil]{% + \def\tmp{#1}% + \ifx\tmp\@nnil + \frac{\mathrm{d}#2}{\mathrm{d}#3}% + \else + \frac{\mathrm{d}^{#1}#2}{\mathrm{d}#3^{#1}}% + \fi% } +\makeatother -\newenvironment{synopsis}[1][modelica]{% -\lstset{language=[synopsis]#1}% -~\vspace{-\parskip}\par -}{% -} -\newenvironment{semantics}{% -\list{}{% -\setlength{\leftmargin}{1.5em}% -\setlength{\rightmargin}{1.5em}% -}\item[]% -}{% -\endlist -} +% Text mode additions +\newcommand{\textgreatereq}{$\geq$} +\newcommand{\textlesseq}{$\leq$} -% Change all \cref and \Cref variants below chapter to use "section" -\crefname{subsection}{section}{sections} -\Crefname{subsection}{Section}{Sections} -\crefname{subsubsection}{section}{sections} -\Crefname{subsubsection}{Section}{Sections} -\crefname{paragraph}{section}{sections} -\Crefname{paragraph}{Section}{Sections} -\crefname{subparagraph}{section}{sections} -\Crefname{subparagraph}{Section}{Sections} - -% We can't use cleveref.sty the way we want for equations until this LaTeXML has been fixed: -% - https://github.com/brucemiller/LaTeXML/issues/1306 -- fixed on 'master' -% In the meantime, we use \eqref to achieve the same result. -%\crefname{equation}{}{} -%\Crefname{equation}{}{} +% Change all autoref variants below chapter to use "section" +\def\subsectionautorefname{section} +\def\subsubsectionautorefname{section} +\def\paragraphautorefname{section} +\def\subparagraphautorefname{section} +\title{ \ifpdf -\newcommand{\crefnameref}[1]{\cref{#1}~\emph{\nameref*{#1}}} -\newcommand{\Crefnameref}[1]{\Cref{#1}~\emph{\nameref*{#1}}} -\else -% Don't use \nameref* while waiting for LaTeXML issue to get fixed: -% - https://github.com/brucemiller/LaTeXML/issues/1348 -% At the same time, there are also problems with the normal \nameref: -% - https://github.com/brucemiller/LaTeXML/issues/1350 -% Since the excessive output of \nameref only replaces the need for \cref for some labels, -% we can't rely on just \nameref, meaning we can't use it at all. -\let\crefnameref\cref -\let\Crefnameref\Cref +\begin{center} +\includegraphics[width=8cm]{Modelica_Language} +\end{center} +~\\[2\baselineskip] \fi - -% Make all description lists break the line after each key. -% henrikt-ma: Commenting out use of the enumitem package, see above. -%\setlist[description]{ -% style=nextline, -% labelwidth=0pt, -% leftmargin=15pt, -% itemindent=\dimexpr-5pt-\labelsep\relax, -%} - -\newenvironment{contributors}{% -\list{}{% -\setlength{\leftmargin}{1.5em}% -\setlength{\itemsep}{-\parskip}% -\addtolength{\itemsep}{2pt}% -}% -}{% -\endlist -} +Modelica\textsuperscript\textregistered - A Unified Object-Oriented Language for Systems +Modeling\\[2\baselineskip] +Language Specification\\[2\baselineskip] +Version 3.5-dev} +\date{\today} +\author{Modelica Association} diff --git a/styleguide.md b/styleguide.md deleted file mode 100644 index 877080d80..000000000 --- a/styleguide.md +++ /dev/null @@ -1,232 +0,0 @@ -# Modelica Specification style guide - -This is the style guide for the Modelica Specification document. - - -## Document format and tool chain - -The source format of the document is LaTeX, and the source is processed by both pdfLaTeX and LaTeXML. -It is good to be aware of the LaTeXML implications, but for most contributors and contributions it is considered sufficient to only check that the pdfLaTeX output looks good, the idea being that potential problems should be spotted in the pull request review process. - -The MSL-specific LaTeX macros and environments described in this style guide are defined in either of these two files: -- [preamble.tex](preamble.tex) – Preamble contents for the main document. -- [mlsshared.sty](mlsshared.sty) – Extracted parts of the styling to be shared with other documents that should follow the same style, such as many of the figures. - - -## Source code formatting - -### Trailing spaces and empty lines - -There shall be no trailing spaces, and each line (in particular, the last one in the file) shall be terminated by a newline. -There shall be no empty lines at the beginning or end of a file, and there shall never be more than two empty lines in a row. -Use one or two empty lines before sectioning commands such as `\section` or `\subsubsection`, except at the start of a file. -An empty line is recommended also after the non-paragraph sectioning commands. - -Be careful about adding empty lines, as they actually are significant in places such as before list environments (`itemize`, etc). -For example, if the text before a list acts as an introduction, it should be kept tight with the list: -``` -The following holds for slice operations: -\begin{itemize} -\item - … -``` - -### Hard line breaks within paragraphs - -The document is in ongoing transition to _one sentence per line_ source code formatting. -This means that any modified or new text should have each sentence alone on a single physical line in the source file. - -When a sentence doesn't fit in one screen line, one may take that as a reminder that long sentences can reduce readability of the specification document, and consider breaking the long sentence into shorter ones. -Just keep in mind that the purpose of doing this shall be to improve readability of the specification text, not improve readability of the _one sentence per line_ formatted source code. - -Once we have the physical line breaks in the correct places, the diffs of future changes will become clean and easy to grasp, and merge conflicts much more easily resolved. - -### Indentation - -When indenting the contents of a LaTeX environment, an indentation of 2 spaces is used. -It is recommended to not add indentation before `\item`: -``` -\begin{itemize} -\item - First are all inputs to the original function, and after all them we will in order append one derivative for each input containing reals. - These common inputs must have the same name, type, and declaration order for the function and its derivative. -\item - The outputs are constructed by starting with an empty list and then in order appending one derivative for each output containing reals. - The outputs must have the same type and declaration order for the function and its derivative. -\end{itemize} -``` - -Many environments are used without indenting the contents, including `nonnormative` and `example`: -``` -\begin{nonnormative} -This means that the most restrictive derivatives should be written first. -\end{nonnormative} -``` - -## Formatting of language terminology - -### Things with name/keyword in the language - -As a general rule, when a concept is directly related to a construct in the Modelica language with a certain name/keyword, then the language concept is referred to using a hyphenated combination of the language name/keyword in code style, with a qualifying natural language word written as normal text. -Examples: - -Appearance | LaTeX source | Comment ---- | --- -`connect`-equation | `\lstinline!connect!-equation` | -`if`-equation | `\lstinline!if!-equation` | -`if`-expression | `\lstinline!if!-expression` | -`when`-clause | `\lstinline!when!-clause` | A branch of a `when`-equation or `when`-statement -`import`-clause | `\lstinline!import!-clause` | -`for`-equation | `\lstinline!for!-equation` | -`for`-statement | `\lstinline!for!-statement` | -`for`-loop | `\lstinline!for!-loop` | A `for`-equation or `for`-statement -`start`-attribute | `\lstinline!start!-attribute` | - -Note that there's often an associated rule in the Modelica grammar, which should only be used in the text on the rare occasions when it is the actual grammar rule – not the entire language concept – that is being referenced: - -Appearance | LaTeX source ---- | --- -`if-equation` | `\lstinline[language=grammar]!if-equation!` - -Note: The hyphenation may sometimes appear grammatically incorrect, but the consistent use of hyphenation helps readability, and in some contexts the hyphen gives extra safety against reading the language name/keyword as part of the sentence structure. -For example, compare: -- If equations are possible to simplify if their condition can be evaluated during translation. -- `if`-equations are possible to simplify if their condition can be evaluated during translation. - -### Expressions - -Different constructs with _expression_ and _call_: - -Appearance | LaTeX source | Comment ---- | --- | --- -`if`-expression | `\lstinline!if!-expression` | Generic language concept -parameter-expression | `parameter-expression` | Expression with parameter variability -`Real` expression | `\lstinline!Real! expression` | Expression of type `Real` -array expression | `array expression` | Expression of array type -record expression | `record expression` | Expression of record type -`y` expression | `\lstinline!y! expression` | Expression for something named `y` -`convertElement` call | `\lstinline!convertElement! call` | A call expression with callee `convertElement` - -In particular, avoid other combinations of inline code and _expression_ than the variants above. -For other needs, try to find a formulation not based on _expression_ to avoid misinterpretations according to the variants above. -For example, instead of saying "… can be dependent on class variables using the `DynamicSelect` expression", just say "… can be dependent on class variables using `DynamicSelect`". - -Note: There is no need for hyphenation of "`convertElement` call" since we don't say "`Real` call" for a call expression of type `Real` (we have "`Real` expression" for this purpose). - -### The keywords themselves - -When referencing a keyword itself, hyphenation is not used, and when possible, a better describing word than _keyword_ is used: - -Appearance | LaTeX source | Comment ---- | --- | --- -the `input` prefix | `\lstinline!prefix! prefix` | For more prefixes, see `class-prefixes`, `base-prefix`, and `type-prefix` in the grammar. -the `final` modifier | `the \lstinline!final! modifier` | -the `each` keyword | `the \lstinline!each! keyword` | - -Depending on context, one can also swap the order, or drop the describing word completely: - -Appearance | LaTeX source ---- | --- -the keyword `each` | `the keyword \lstinline!each!` -declared as `final` | `declared as \lstinline!final!` - -### Named functions and operators - -When referencing a named function of operator, hyphenation is not used, and it is common to not combine with any describing word: - -Appearance | LaTeX source ---- | --- -the `smooth` operator | `the \lstinline!smooth! operator` -where `pre` is not explicitly used | `where \lstinline!pre! is not explicitly used` - -### Other things, special cases - -Incomplete list of various terminology with special formatting rules: - -Appearance | LaTeX source | Comment ---- | --- | --- -start value | `start value` | Value of the `start`-attribute (there could be exceptions!) -connection equation | `connection equation` | Equation generated from analysis of `connect`-equations -reduction expression | `reduction expression` | -base class | `base class` | Similarly: derived class -base-clock | `base-clock` | Similarly: sub-cock - -## Definitions - -New terminology is either introduced with a `definition` environment, or as part of the running text. -When part of the running text, the introduced terminology should be marked with `\firstuse` at the point of the definition. -As a general rule, `\firstuse` should appear in combination with `\index` for adding the term to the document index. -(The use of `\firstuse` instead of just `\emph` helps us both produce consistent formatting and makes it easier to spot cases where the additional use of `\index` has been forgotten. -The reason that `\firstuse` doesn't also do the job calling `\index` is that the form of the term presented to `\firstuse` isn't always in the base form expected in the document index, that there can be a need for special styling tricks in the `\index` argument, etc.) - -If the new terminology is used before being introduced, it should be marked with `\willintroduce` (instead of `\firstuse`) to alert the reader that this is not a term that is expected to be known yet by a first-time reader. - -## Miscellaneous - -### Use of `\emph` and italics - -To put emphasis on a word or small piece of text, use `\emph`. - -Italics is used via the semantic macros `\firstuse` and `\willintroduce` when new terminology is introduced in the running text instead of the bulkier `definition` environment. - -Refrain from using non-semantical font switching commands for producing italics (`\textit`, `\textsl`, `\itshape`). - -Note that the document is full of text set in italics, since this is used for both non-normative text and examples, through the `nonnormative` and `example` environments. - -### Use of boldface - -Non-semantical font switching commands for producing boldface (`\textbf`, `\bfseries`) may only be used for styling as part of higher level semantic constructs such as the _amsthm.sty_ `\newtheoremstyle` definitions. -For purposes of marking emphasis, see use of `\emph` instead. - -### Ordinals - -Ordinals are written with _th_ in normal font, possibly combined with a math styled expression for the number: -``` -Fixed ordinals: 1st, 2nd, 3rd. -Symbolic ordinals: $n$th, $(n+1)$th. -``` - -## Code listings - -### Modelica listings - -Modelica listings are written with indentation in steps of 2 spaces. - -A space is typically added on each side of a binary operator, and after comma. - -Code snippets may start with an indented line as long as there's some line in the listing with zero indentation, like this: -``` - Real x(start = 1.0, fixed = true); -equation - der(x) = -x; -``` - -Each line should fit within the width of the page. -Use hard line breaks and manual additional indentation of continued lines to meet this requirement. -A semicolon in a matrix should either be followed by a line break or by a space. - -### Grammar (extended BNF) listings - -Grammar listings use the `language=grammar`, and are written with indentation in steps of 3 spaces: -``` -\begin{lstlisting}[language=grammar] -stored-definition : - [ within [ name ] ";" ] - { [ final ] class-definition ";" } -\end{lstlisting} -``` - -When a grammar rule is mentioned in the text, the rule shall be formatted with the _grammar_ language: -``` -The node shall contain a \lstinline[language=grammar]!stored-definition! that… -``` - -## English natural language text - -This section gives guidelines for how the natural language text in English should be written. - -The text is written in American English. - -### Contractions - -Avoid contractions such as _isn't_ or _won't_; write _is not_ or _will/would not_ instead.

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